Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Icon 컴포넌트 추가, filled/line 아이콘 정의 #5

Merged
merged 12 commits into from
Jul 27, 2024
Merged

Conversation

cometj03
Copy link
Member

Summary

image

아이콘 정의와 Icon 컴포넌트를 추가했습니다.

Icon(HandyIcons.Filled.Add)
Icon(HandyIcons.Line.InfoCircle)

Icon 컴포넌트는 위와 같이 사용할 수 있고, HandyIcons.Filled.XXX, HandyIcons.Line.XXX와 같은 형식으로 아이콘 리소스를 참조할 수 있습니다.

  • Icon.kt
  • HandyIcons.kt
  • IconsPreview.kt

이 파일들만 확인하시면 됩니다.
앞으로 preview와 관련된 파일은 IconsPreview와 같이 앱 모듈에 모아두는 건 어떨까요?

Ref

@cometj03 cometj03 added the enhancement New feature or request label Jul 25, 2024
@cometj03 cometj03 self-assigned this Jul 25, 2024

private var _add: ImageVector? = null

public val HandyIcons.Filled.Add: ImageVector

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이거 저 밑에 있는 것처럼 어떻게 하신건가요?
moveTo랑 이것저것 있는거요

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

따로 추출한 방법이 있나요?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

https://www.composables.com/svgtocompose

이런 사이트가 있더라구요. 여기서 했습니당

}

@Composable
@NonRestartableComposable

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이건 언제 붙이는건가요? NonRestartableComposable?

Copy link
Member Author

@cometj03 cometj03 Jul 27, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

사실 material의 Icon에 해당 어노테이션이 있어서 그대로 따라한거긴 한데, 질문 주신 덕분에 좀 찾아봤어요

아직은 러프하게만 알아본거긴 하지만, Icon의 경우에는 리컴포지션 될 필요가 없기 때문에 (아이콘이 바뀌지 않는 한) 명시적으로 그 사실을 컴파일러에게 알려줘서 리컴포지션 관련 코드를 generate 하지 않도록 설정해준다고 이해할 수 있을 것 같네요.

잘못 이해했었네요. NonRestartableComposable이 컴포즈 컴파일러에게 명시적으로 리컴포지션되지 않도록 알려주는 것은 맞는데, Icon 컴포넌트 자체가 리컴포지션 될 필요가 없어서 그런 건 아니네요.

This may be desirable for small functions which just directly call another composable function and have very little machinery in them directly, and are unlikely to be invalidated themselves.

를 보면 (거의) 바로 다른 composable 함수를 호출할 때, 그러니까 본인이 직접 뷰를 그리는(invalidate) 게 아닐 때 사용하는 것이 적절하다라고 하네요. 루트가 되는 Icon 컴포넌트는 해당 어노테이션을 제거하는 게 맞을 것 같습니다

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

07de9f9 반영한 커밋입니다. 다시 보니까 머티리얼도 마지막에 호출되는 Icon 함수는 해당 어노테이션이 없더라구요.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

좋습니다!!!

object Line
}

inline fun handyIcon(

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

handyIcon, handyPath 각각의 역할이 무엇인가요?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이건 그냥 중복 제거하기 위한 유틸 함수예요

pathBuilder = pathBuilder
)

@PublishedApi

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

오 이건 처음보는건데 뭔가용

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

원래는 public inline function에서 non-public API는 참조하지 못하는데요, 왜냐하면 컴파일 할 때 non-public API의 변경사항을 반영하지 못할 수 있기 때문이에요(표현이 좀 애매한 것 같은데 두 번째 링크나 아래 문구 참고해주세요).

This imposes certain risks of binary incompatibility caused by changes in the module that declares an inline function in case the calling module is not re-compiled after the change.

아무튼 non-public API 중에서 internal로 명시된 API는 @PublishedApi 어노테이션을 추가해서 public인 것처럼 컴파일할 때 반영할 수 있다 이렇게 이해하면 될 것 같습니다.
물론 internal이니까 모듈 외부에서는 접근할 수 없는 건 동일하구요

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이런게 있었군요~!

@Gael-Android
Copy link

하하 파일이 많아서 로딩이 오래걸렸네요.

  • 앞으로 preview와 관련된 파일은 IconsPreview와 같이 앱 모듈에 모아두는 건 어떨까요? => 넵 좋습니다.

@cometj03 cometj03 merged commit e4e1825 into main Jul 27, 2024
@cometj03 cometj03 deleted the icons branch July 27, 2024 08:52
@kangyuri1114 kangyuri1114 mentioned this pull request Sep 23, 2024
5 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants