From c8da837e7c674ef9d0e0b1a36f6bf3561d78205f Mon Sep 17 00:00:00 2001 From: Eunki Hong Date: Fri, 18 Feb 2022 13:04:55 +0900 Subject: [PATCH 1/1] [NUI] Fix unmatched return values before LazyUpdate (#3937) 1. Call ImageView.UpdateImage() before get NaturalSize so we can guarantee that ResoureUrl properties updated 2. CropToMask value return true in default when we set AlphaMaskUrl. Signed-off-by: Eunki, Hong Co-authored-by: Eunki, Hong --- .../src/public/BaseComponents/ImageView.cs | 36 +++- src/Tizen.NUI/src/public/BaseComponents/View.cs | 4 +- .../src/public/BaseComponents/ViewInternal.cs | 6 +- .../Tizen.NUI.Devel.Tests/res/Image.png | Bin 0 -> 1260 bytes .../Tizen.NUI.Devel.Tests/res/star-mod.png | Bin 0 -> 5215 bytes .../Tizen.NUI.Devel.Tests/testcase/TSImageView.cs | 185 +++++++++++++++++++++ 6 files changed, 225 insertions(+), 6 deletions(-) create mode 100644 test/Tizen.NUI.Devel.Tests.Ubuntu/Tizen.NUI.Devel.Tests/res/Image.png create mode 100755 test/Tizen.NUI.Devel.Tests.Ubuntu/Tizen.NUI.Devel.Tests/res/star-mod.png create mode 100644 test/Tizen.NUI.Devel.Tests.Ubuntu/Tizen.NUI.Devel.Tests/testcase/TSImageView.cs diff --git a/src/Tizen.NUI/src/public/BaseComponents/ImageView.cs b/src/Tizen.NUI/src/public/BaseComponents/ImageView.cs index 255aaae..44ea173 100755 --- a/src/Tizen.NUI/src/public/BaseComponents/ImageView.cs +++ b/src/Tizen.NUI/src/public/BaseComponents/ImageView.cs @@ -637,6 +637,15 @@ namespace Tizen.NUI.BaseComponents { PropertyValue setValue = new PropertyValue(value ?? ""); UpdateImage(ImageVisualProperty.AlphaMaskURL, setValue); + // When we never set CropToMask property before, we should set default value as true. + using(PropertyValue cropToMask = _imagePropertyMap?.Find(ImageVisualProperty.CropToMask)) + { + if(cropToMask == null) + { + using PropertyValue setCropValue = new PropertyValue(true); + UpdateImage(ImageVisualProperty.CropToMask, setCropValue); + } + } setValue?.Dispose(); } } @@ -1227,7 +1236,8 @@ namespace Tizen.NUI.BaseComponents /// Lazy call to UpdateImage. /// Collect Properties need to be update, and set properties that starts the Processing. /// - private void UpdateImage(int key, PropertyValue value) + [EditorBrowsable(EditorBrowsableState.Never)] + protected void UpdateImage(int key, PropertyValue value) { // If we set ResourceUrl as empty, Unregist visual. if (key == ImageVisualProperty.URL && string.IsNullOrEmpty(_resourceUrl)) @@ -1281,7 +1291,6 @@ namespace Tizen.NUI.BaseComponents /// /// Callback function to Lazy UpdateImage. - /// Or, We can call UpdateImage() function directly if we need. /// private void UpdateImage(object source, EventArgs e) { @@ -1289,7 +1298,17 @@ namespace Tizen.NUI.BaseComponents _imagePropertyUpdateProcessAttachedFlag = false; } - private void UpdateImage() + /// + /// Update image-relative properties synchronously. + /// After call this API, All image properties updated. + /// + /// + /// Current version ImageView property update asynchronously. + /// If you want to guarantee that ImageView property setuped, + /// Please call this ImageView.UpdateImage() API. + /// + [EditorBrowsable(EditorBrowsableState.Never)] + protected void UpdateImage() { if(!_imagePropertyUpdatedFlag) return; @@ -1400,6 +1419,17 @@ namespace Tizen.NUI.BaseComponents setValue?.Dispose(); } + /// + /// GetNaturalSize() should be guaranteed that ResourceUrl property setuped. + /// So before get base.GetNaturalSize(), we should synchronous image properties + /// + internal override Vector3 GetNaturalSize() + { + // Sync as current properties + UpdateImage(); + return base.GetNaturalSize(); + } + private void OnResourceLoaded(IntPtr view) { ResourceLoadedEventArgs e = new ResourceLoadedEventArgs(); diff --git a/src/Tizen.NUI/src/public/BaseComponents/View.cs b/src/Tizen.NUI/src/public/BaseComponents/View.cs index d4e66d1..4c6d186 100755 --- a/src/Tizen.NUI/src/public/BaseComponents/View.cs +++ b/src/Tizen.NUI/src/public/BaseComponents/View.cs @@ -1292,7 +1292,7 @@ namespace Tizen.NUI.BaseComponents { get { - Vector3 ret = new Vector3(Interop.Actor.GetNaturalSize(SwigCPtr), true); + Vector3 ret = GetNaturalSize(); if (NDalicPINVOKE.SWIGPendingException.Pending) throw new InvalidOperationException("FATAL: get Exception", NDalicPINVOKE.SWIGPendingException.Retrieve()); return ret; } @@ -1309,7 +1309,7 @@ namespace Tizen.NUI.BaseComponents { get { - Vector3 temp = new Vector3(Interop.Actor.GetNaturalSize(SwigCPtr), true); + Vector3 temp = GetNaturalSize(); if (NDalicPINVOKE.SWIGPendingException.Pending) throw new InvalidOperationException("FATAL: get Exception", NDalicPINVOKE.SWIGPendingException.Retrieve()); Size2D sz = new Size2D((int)temp.Width, (int)temp.Height); diff --git a/src/Tizen.NUI/src/public/BaseComponents/ViewInternal.cs b/src/Tizen.NUI/src/public/BaseComponents/ViewInternal.cs index 29ca704..4a0fdb2 100755 --- a/src/Tizen.NUI/src/public/BaseComponents/ViewInternal.cs +++ b/src/Tizen.NUI/src/public/BaseComponents/ViewInternal.cs @@ -582,7 +582,11 @@ namespace Tizen.NUI.BaseComponents return ret; } - internal Vector3 GetNaturalSize() + /// + /// GetNaturalSize() function behaviour can be changed for each subclass of View. + /// So we make GetNaturalSize() function virtual, and make subclass can define it's owned logic + /// + internal virtual Vector3 GetNaturalSize() { Vector3 ret = new Vector3(Interop.Actor.GetNaturalSize(SwigCPtr), true); if (NDalicPINVOKE.SWIGPendingException.Pending) diff --git a/test/Tizen.NUI.Devel.Tests.Ubuntu/Tizen.NUI.Devel.Tests/res/Image.png b/test/Tizen.NUI.Devel.Tests.Ubuntu/Tizen.NUI.Devel.Tests/res/Image.png new file mode 100644 index 0000000000000000000000000000000000000000..33004647ad0155bc488e50132fc4cc3f529ee366 GIT binary patch literal 1260 zcmeAS@N?(olHy`uVBq!ia0vp^SAcjL2NRIg)G^cmQjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`ISV`@iy0XB4ude`@%$AjKsAk?E{-7;ac^(rmd&=3V0gGjoBLJOrdc^^ z-JZNcW=`uf&qvPWp~LL&eE<1=^vnC{ z`z{;XfBpAyYW+{AJnQ%K%NP9EXLm1ti|ymxXPN8YoHJxK^^Mocc++~@JL-Ap>C2C^ z>lV39UVr$9o2=TtpTE5SZ!y{z=-&DM>uuwGiRZiZ|8Babv+hsyA6@yaaYi$i-bmZ| z>_&c@#=fsxlgwYQJe_MMrpxYIm9J7&{xa&%mA~(Qi5>6Jm$Sa&l)W=+)@QTR{1bR< z+Rs*|?>+f^;zP6T-S6y9tJoYfdG0O~pZ#g!_S)Hx|1>{Ns+2wY(f@sk#lE*%r^_|f zPDxkI|F?VB#+;=8t1g~Aw^_t|+Um@UU%4LgJ^#4-Tv6nDiG8Agh$6>+8(fiIkQSY07@7JxW zYvAN#0lKjlT0i>=dWhda?LjV!M4V z&M`9FckVgI+PL2*X78}sR=Mh*!(86px28Z766D+Tyl2^MezHQ8NZ2N1SpHW-xRQ~vtmi{N$#&+K?^PHz9NyXoP885ZjSCOzU z?En0&*UZ%CMmJ`ZRJUz8`oQJ3yW6=UxjQ?mg5Igh)f>HC6tz*Rbouck+wI=2u{$1F zyWrK!lqXMKa_7xWTM?hMyZ_$WpwD~WO1|n%xvI>ZZkf4f&*hqz=gRayzS(^B%;_}; z>)taQ*=|`-GViVQ&5wVxpQ==L{c2vC_>gOE^wMXQw~enzpFHGVHcwUCJziGs&Hh_O z&mZ2l{cwC;-&4iEcaHw}*L5ZCOS{3bAOG6^G=B|vD|!FDk!jf9gtHH2b!{L2PCYl5 zweQRJy+?l3%|2^intuFsUfST!p9=Ty|7To!LPbLUYQ71ugktb?^>bP0l+XkK&s2fn literal 0 HcmV?d00001 diff --git a/test/Tizen.NUI.Devel.Tests.Ubuntu/Tizen.NUI.Devel.Tests/res/star-mod.png b/test/Tizen.NUI.Devel.Tests.Ubuntu/Tizen.NUI.Devel.Tests/res/star-mod.png new file mode 100755 index 0000000000000000000000000000000000000000..2e3212e66b52a0c4d584e62d3801839908f4cb6c GIT binary patch literal 5215 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 Z{{k