@@ -15,19 +15,24 @@ public partial class WrapperView : Canvas, IWrapperViewCanvas
15
15
Lazy < SkiaGraphicsView > _drawableCanvas ;
16
16
Lazy < SKClipperView > _clipperView ;
17
17
EvasObject ? _content ;
18
+ IShape ? _shape ;
18
19
19
20
public WrapperView ( EvasObject parent ) : base ( parent )
20
21
{
21
22
_drawableCanvas = new Lazy < SkiaGraphicsView > ( ( ) =>
22
23
{
23
- var view = new SkiaGraphicsView ( parent ) ;
24
+ var view = new SkiaGraphicsView ( parent )
25
+ {
26
+ IgnorePixelScaling = true
27
+ } ;
24
28
var _drawables = new WrapperViewDrawables ( ) ;
25
29
_drawables . Invalidated += ( s , e ) =>
26
30
{
27
31
view . Invalidate ( ) ;
28
32
} ;
29
33
view . Drawable = _drawables ;
30
34
view . Show ( ) ;
35
+ view . PassEvents = true ;
31
36
Children . Add ( view ) ;
32
37
view . Lower ( ) ;
33
38
Content ? . RaiseTop ( ) ;
@@ -50,9 +55,72 @@ public WrapperView(EvasObject parent) : base(parent)
50
55
LayoutUpdated += OnLayout ;
51
56
}
52
57
58
+ public void UpdateBackground ( Paint ? paint )
59
+ {
60
+ if ( paint == null )
61
+ {
62
+ Drawables . BackgroundDrawable = null ;
63
+ }
64
+ else
65
+ {
66
+ if ( Drawables . BackgroundDrawable == null )
67
+ {
68
+ Drawables . BackgroundDrawable = paint . ToDrawable ( GetBoundaryPath ( ) ) ;
69
+ }
70
+ else
71
+ {
72
+ ( Drawables . BackgroundDrawable as BackgroundDrawable ) ! . UpdatePaint ( paint ) ;
73
+ }
74
+ }
75
+ _drawableCanvas . Value . Invalidate ( ) ;
76
+ }
77
+
78
+ public void UpdateShape ( IShape ? shape )
79
+ {
80
+ _shape = shape ;
81
+ UpdateDrawableCanvas ( false ) ;
82
+ }
83
+
84
+ partial void ShadowChanged ( )
85
+ {
86
+ if ( Shadow == null )
87
+ {
88
+ Drawables . ShadowDrawable = null ;
89
+ return ;
90
+ }
91
+
92
+ if ( Drawables . ShadowDrawable == null )
93
+ {
94
+ Drawables . ShadowDrawable = new ShadowDrawable ( Shadow , GetBoundaryPath ( ) ) ;
95
+ _drawableCanvas . Value . SetClip ( null ) ;
96
+ }
97
+ UpdateDrawableCanvas ( true ) ;
98
+ }
99
+
53
100
partial void ClipChanged ( )
54
101
{
55
102
_clipperView . Value . Invalidate ( ) ;
103
+ UpdateDrawableCanvas ( false ) ;
104
+ }
105
+
106
+ void UpdateDrawableCanvas ( bool isShadowUpdated )
107
+ {
108
+ if ( isShadowUpdated )
109
+ {
110
+ UpdateDrawableCanvasGeometry ( ) ;
111
+ }
112
+ UpdateDrawables ( ) ;
113
+ _drawableCanvas . Value . Invalidate ( ) ;
114
+ }
115
+
116
+ void UpdateDrawables ( )
117
+ {
118
+ var path = GetBoundaryPath ( ) ;
119
+ if ( Shadow != null )
120
+ {
121
+ ( Drawables . ShadowDrawable as ShadowDrawable ) ? . UpdateShadow ( Shadow , path ) ;
122
+ }
123
+ ( Drawables . BackgroundDrawable as BackgroundDrawable ) ? . UpdatePath ( path ) ;
56
124
}
57
125
58
126
void OnClipPaint ( object ? sender , DrawClipEventArgs e )
@@ -75,10 +143,6 @@ void OnClipPaint(object? sender, DrawClipEventArgs e)
75
143
76
144
canvas . FillPath ( clipPath ) ;
77
145
Content ? . SetClipperCanvas ( _clipperView . Value ) ;
78
- if ( _drawableCanvas . IsValueCreated )
79
- {
80
- _drawableCanvas . Value . SetClipperCanvas ( _clipperView . Value ) ;
81
- }
82
146
}
83
147
84
148
void OnLayout ( object ? sender , LayoutEventArgs e )
@@ -90,7 +154,7 @@ void OnLayout(object? sender, LayoutEventArgs e)
90
154
91
155
if ( _drawableCanvas . IsValueCreated )
92
156
{
93
- _drawableCanvas . Value . Geometry = Geometry ;
157
+ UpdateDrawableCanvas ( true ) ;
94
158
}
95
159
96
160
if ( _clipperView . IsValueCreated )
@@ -120,15 +184,42 @@ public EvasObject? Content
120
184
}
121
185
}
122
186
}
187
+ }
123
188
189
+ public IWrapperViewDrawables Drawables => ( IWrapperViewDrawables ) _drawableCanvas . Value . Drawable ;
190
+
191
+ void UpdateDrawableCanvasGeometry ( )
192
+ {
193
+ if ( _drawableCanvas . IsValueCreated )
194
+ {
195
+ _drawableCanvas . Value . Geometry = Geometry . ExpandTo ( Shadow ) ;
196
+ }
124
197
}
125
198
126
- public IWrapperViewDrawables Drawables
199
+ PathF GetBoundaryPath ( )
127
200
{
128
- get
201
+ var drawableGeometry = _drawableCanvas . Value . Geometry ;
202
+ var left = Geometry . Left - drawableGeometry . Left ;
203
+ var top = Geometry . Top - drawableGeometry . Top ;
204
+ var width = Geometry . Width ;
205
+ var height = Geometry . Height ;
206
+ var bounds = new Tizen . UIExtensions . Common . Rect ( left , top , width , height ) . ToDP ( ) ;
207
+
208
+ if ( Clip != null )
209
+ {
210
+ var clipPath = Clip . PathForBounds ( bounds ) ;
211
+ clipPath . Move ( ( float ) bounds . Left , ( float ) bounds . Top ) ;
212
+ return clipPath ;
213
+ }
214
+
215
+ if ( _shape != null )
129
216
{
130
- return ( _drawableCanvas . Value . Drawable as IWrapperViewDrawables ) ! ;
217
+ return _shape . PathForBounds ( bounds ) ;
131
218
}
219
+
220
+ var path = new PathF ( ) ;
221
+ path . AppendRectangle ( bounds ) ;
222
+ return path ;
132
223
}
133
224
}
134
225
0 commit comments