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

[NUI] Notify background change with magic keyword #6496

Open
wants to merge 1 commit into
base: DevelNUI
Choose a base branch
from

Conversation

rabbitfor
Copy link
Collaborator

Description of Change

NUI 외부 라이브러리에서 백그라운드를 토큰 형식으로 지원하기 위해 아래와 같은 기능을 추가했습니다.

설명

백그라운드를 토큰으로 지원하려면 백그라운드 변경에 대한 노티를 받을 수 있어야 함.
View는 bindable object를 상속하는 구조로 PropertySet 이벤트를 제공하고 있어 토큰 구현에 사용할 수 있음.

그런데 백그라운드는 서로 다른 프로퍼티간 상호 수정이 일어나는 구조임.

  • BackgroundColor
  • BackgroundImage
  • Background
  • ClearBackground()

이런 구조에서, 기존에 제공하던 PropertySet 이벤트는 아래의 이유로 사용하기 어려움이 있음

  • BackgroundColor가 설정된 경우 BackgroundImage가 리셋되지만 BackgroundImage가 변경되었다는 노티를 받을 수 없음
  • Clear의 경우엔 백그라운드 속성이 리셋됨에도 불구하고 변경 노티를 받을 수 없음

이를 해결하기 위해 _background라는 매직 키워드를 사용하여 백그라운드가 어떤 식으로든지 변경되었다는 노티 줄 수 있도록 조치하여 internal 구현에서 활용할 수 있게 함

API Changes

  • ACR:

@@ -944,6 +944,7 @@ public Color BackgroundColor
SetInternalBackgroundColorProperty(this, null, value);
}
NotifyPropertyChanged();
NotifyPropertyChanged("_background");
Copy link
Contributor

Choose a reason for hiding this comment

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

직접 말씀드리긴 했지만,
NotifyPropertyChanged가 중복으로 호출되는 형태가 추후에 다른 사람이 이 코드를 봤을 때 어떤 목적이나 역할인지 이해하기 다소 난해한 부분이 있을 것 같습니다. 주석 등으로 왜 이런 코드가 추가 되었는지 기록을 남겨두는 편이 좋을 것 같습니다.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

네 수정했습니다~

Copy link
Contributor

@dongsug-song dongsug-song left a comment

Choose a reason for hiding this comment

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

looks good to me

Copy link
Contributor

@everLEEst everLEEst left a comment

Choose a reason for hiding this comment

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

Looks good to me.

// NOTE
// Notify background modifications caused by one of BackgroundColor, BackgroundImage, Background and ClearBackground()
// By using reserved keyword "_background", user may get notified all background modifications.
NotifyPropertyChanged("_background");
Copy link
Contributor

Choose a reason for hiding this comment

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

Just my curiosity :
Normally, when we add the string here for PropertyChanged, we use the Pascal case. like "Background".
Is there any reason for using snake_case like this with an underscore?
Probably, is it to have different usage from general 'Background'?

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

View has Background property (PropertyMap type) and it's using pascal case Background keyword!
To distinguish from it I decided to add prefix "_" which can have private meaning. (it looks like snake case but it's just prefix. For example, _somePrivateFieldName)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants