2 * Copyright(c) 2019 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 using Tizen.NUI.BaseComponents;
22 /// A class encapsulating the transform map of the visual.
24 /// <since_tizen> 3 </since_tizen>
25 public class VisualMap
30 /// <since_tizen> 3 </since_tizen>
31 protected PropertyMap _outputVisualMap = null;
34 /// The shader of the visual.
36 /// <since_tizen> 3 </since_tizen>
37 protected PropertyMap _shader = null;
38 //private PropertyMap _transform = null;
41 /// The premultipliedAlpha of the visual.
43 /// <since_tizen> 3 </since_tizen>
44 protected bool? _premultipliedAlpha = null;
47 /// The mixColor of the Visual.
49 /// <since_tizen> 3 </since_tizen>
50 protected Color _mixColor = null;
53 /// The opacity of the visual.
55 /// <since_tizen> 3 </since_tizen>
56 protected float? _opacity = null;
59 /// The FittingMode of the visual.
61 /// <since_tizen> 5 </since_tizen>
62 protected VisualFittingModeType? _visualFittingMode = null;
65 /// The map for visual.
67 /// <since_tizen> 3 </since_tizen>
68 protected PropertyMap _commonlyUsedMap = null;
70 private Vector2 _visualSize = null;
71 private Vector2 _visualOffset = null;
72 private Vector2 _visualOffsetPolicy = null;
73 private Vector2 _visualSizePolicy = null;
74 private Visual.AlignType? _visualOrigin = null;
75 private Visual.AlignType? _visualAnchorPoint = null;
77 private PropertyMap _visualTransformMap = null;
79 private int? _depthIndex = null;
84 /// <since_tizen> 3 </since_tizen>
90 /// Gets or sets the size of the visual.<br />
91 /// It can be either relative (percentage of the parent)
92 /// or absolute (in world units).<br />
95 /// <since_tizen> 3 </since_tizen>
100 return _visualSize ?? (new Size2D(1, 1));
105 if (_visualSizePolicy == null)
107 _visualSizePolicy = new Vector2(1.0f, 1.0f);
114 /// Gets or sets the offset of the visual.<br />
115 /// It can be either relative (percentage of the parent)
116 /// or absolute (in world units).<br />
119 /// <since_tizen> 3 </since_tizen>
120 public Vector2 Position
124 return _visualOffset ?? (new Vector2(0.0f, 0.0f));
128 _visualOffset = value;
129 if (_visualOffsetPolicy == null)
131 _visualOffsetPolicy = new Vector2(1.0f, 1.0f);
138 /// Gets or sets the relative size of the visual<br />
139 /// (percentage [0.0f to 1.0f] of the control).<br />
142 /// <since_tizen> 3 </since_tizen>
143 public RelativeVector2 RelativeSize
147 return _visualSize ?? (new RelativeVector2(1.0f, 1.0f));
152 _visualSizePolicy = new Vector2(0.0f, 0.0f);
158 /// Gets or sets the relative offset of the visual<br />
159 /// (percentage [0.0f to 1.0f] of the control).<br />
162 /// <since_tizen> 3 </since_tizen>
163 public RelativeVector2 RelativePosition
167 return _visualOffset ?? (new RelativeVector2(0.0f, 0.0f));
171 _visualOffset = value;
172 _visualOffsetPolicy = new Vector2(0.0f, 0.0f);
178 /// Gets or sets whether the x and y offset values are relative<br />
179 /// (percentage [0.0f to 1.0f] of the control) or absolute (in world units).<br />
180 /// By default, both the x and the y offset are relative.<br />
183 /// <since_tizen> 3 </since_tizen>
184 public VisualTransformPolicyType PositionPolicy
188 if (_visualOffsetPolicy != null && _visualOffsetPolicy.X == 1.0f
189 && _visualOffsetPolicy.Y == 1.0f)
191 return VisualTransformPolicyType.Absolute;
193 return VisualTransformPolicyType.Relative;
199 case VisualTransformPolicyType.Relative:
200 _visualOffsetPolicy = new Vector2(0.0f, 0.0f);
202 case VisualTransformPolicyType.Absolute:
203 _visualOffsetPolicy = new Vector2(1.0f, 1.0f);
206 _visualOffsetPolicy = new Vector2(0.0f, 0.0f);
214 /// Gets or sets whether the x offset values are relative<br />
215 /// (percentage [0.0f to 1.0f] of the control) or absolute (in world units).<br />
216 /// By default, the x offset is relative.<br />
219 /// <since_tizen> 3 </since_tizen>
220 public VisualTransformPolicyType PositionPolicyX
224 if (_visualOffsetPolicy != null && _visualOffsetPolicy.X == 1.0f)
226 return VisualTransformPolicyType.Absolute;
228 return VisualTransformPolicyType.Relative;
232 if (_visualOffsetPolicy == null)
234 _visualOffsetPolicy = new Vector2(0.0f, 0.0f);
239 case VisualTransformPolicyType.Relative:
240 _visualOffsetPolicy.X = 0.0f;
242 case VisualTransformPolicyType.Absolute:
243 _visualOffsetPolicy.X = 1.0f;
246 _visualOffsetPolicy.X = 0.0f;
255 /// Gets or sets whether the y offset values are relative<br />
256 /// (percentage [0.0f to 1.0f] of the control) or absolute (in world units).<br />
257 /// By default, the y offset is relative.<br />
260 /// <since_tizen> 3 </since_tizen>
261 public VisualTransformPolicyType PositionPolicyY
265 if (_visualOffsetPolicy != null && _visualOffsetPolicy.Y == 1.0f)
267 return VisualTransformPolicyType.Absolute;
269 return VisualTransformPolicyType.Relative;
273 if (_visualOffsetPolicy == null)
275 _visualOffsetPolicy = new Vector2(0.0f, 0.0f);
280 case VisualTransformPolicyType.Relative:
281 _visualOffsetPolicy.Y = 0.0f;
283 case VisualTransformPolicyType.Absolute:
284 _visualOffsetPolicy.Y = 1.0f;
287 _visualOffsetPolicy.Y = 0.0f;
295 /// Gets or sets whether the size values of the width or the height are relative<br />
296 /// (percentage [0.0f to 1.0f] of the control) or absolute (in world units).<br />
297 /// By default, offsets of both the width and the height are relative to the control's size.<br />
300 /// <since_tizen> 3 </since_tizen>
301 public VisualTransformPolicyType SizePolicy
305 if (_visualSizePolicy != null && _visualSizePolicy.X == 1.0f
306 && _visualSizePolicy.Y == 1.0f)
308 return VisualTransformPolicyType.Absolute;
310 return VisualTransformPolicyType.Relative;
316 case VisualTransformPolicyType.Relative:
317 _visualSizePolicy = new Vector2(0.0f, 0.0f);
319 case VisualTransformPolicyType.Absolute:
320 _visualSizePolicy = new Vector2(1.0f, 1.0f);
323 _visualSizePolicy = new Vector2(0.0f, 0.0f);
331 /// Gets or sets whether size values of the width are relative.<br />
332 /// (percentage [0.0f to 1.0f] of the control) or absolute (in world units).<br />
333 /// By default, the value of the width is relative to the control's width.<br />
336 /// <since_tizen> 3 </since_tizen>
337 public VisualTransformPolicyType SizePolicyWidth
341 if (_visualSizePolicy != null && _visualSizePolicy.Width == 1.0f)
343 return VisualTransformPolicyType.Absolute;
345 return VisualTransformPolicyType.Relative;
349 if (_visualSizePolicy == null)
351 _visualSizePolicy = new Vector2(0.0f, 0.0f);
356 case VisualTransformPolicyType.Relative:
357 _visualSizePolicy.Width = 0.0f;
359 case VisualTransformPolicyType.Absolute:
360 _visualSizePolicy.Width = 1.0f;
363 _visualSizePolicy.Width = 0.0f;
371 /// Gets or sets whether size values of the height are relative<br />
372 /// (percentage [0.0f to 1.0f] of the control) or absolute (in world units).<br />
373 /// By default, the height value is relative to the control's height.<br />
376 /// <since_tizen> 3 </since_tizen>
377 public VisualTransformPolicyType SizePolicyHeight
381 if (_visualSizePolicy != null && _visualSizePolicy.Height == 1.0f)
383 return VisualTransformPolicyType.Absolute;
385 return VisualTransformPolicyType.Relative;
389 if (_visualSizePolicy == null)
391 _visualSizePolicy = new Vector2(0.0f, 0.0f);
396 case VisualTransformPolicyType.Relative:
397 _visualSizePolicy.Height = 0.0f;
399 case VisualTransformPolicyType.Absolute:
400 _visualSizePolicy.Height = 1.0f;
403 _visualSizePolicy.Height = 0.0f;
411 /// Gets or sets the origin of the visual within its control area.<br />
412 /// By default, the origin is center.<br />
415 /// <since_tizen> 3 </since_tizen>
416 public Visual.AlignType Origin
420 return _visualOrigin ?? (Visual.AlignType.Center);
424 _visualOrigin = value;
430 /// Gets or sets the anchor point of the visual.<br />
431 /// By default, the anchor point is center.<br />
434 /// <since_tizen> 3 </since_tizen>
435 public Visual.AlignType AnchorPoint
439 return _visualAnchorPoint ?? (Visual.AlignType.Center);
443 _visualAnchorPoint = value;
449 /// Gets or sets the depth index of the visual.<br />
450 /// By default, the depth index is 0.<br />
453 /// <since_tizen> 3 </since_tizen>
454 public int DepthIndex
458 return _depthIndex ?? (0);
467 /// Gets the transform map used by the visual.
469 /// <since_tizen> 3 </since_tizen>
470 public PropertyMap OutputTransformMap
474 ComposingTransformMap();
475 return _visualTransformMap;
480 /// Gets the property map to create the visual.
482 /// <since_tizen> 3 </since_tizen>
483 public PropertyMap OutputVisualMap
487 ComposingPropertyMap();
488 return _outputVisualMap;
494 /// The shader to use in the visual.
496 /// <since_tizen> 3 </since_tizen>
497 public PropertyMap Shader
511 /// Enables or disables the premultiplied alpha. <br />
512 /// The premultiplied alpha is false by default unless this behavior is modified by the derived visual type.
514 /// <since_tizen> 3 </since_tizen>
515 public bool PremultipliedAlpha
519 return _premultipliedAlpha ?? (false);
523 _premultipliedAlpha = value;
529 /// Mix color is a blend color for any visual.
531 /// <since_tizen> 3 </since_tizen>
532 public Color MixColor
546 /// Opacity is the alpha component of the mix color discussed above.
548 /// <since_tizen> 3 </since_tizen>
553 return _opacity ?? (1.0f);
563 /// The fitting mode of the visual.
564 /// The default is defined by the type of visual (if it is suitable to be stretched or not).
566 /// <since_tizen> 5 </since_tizen>
567 public VisualFittingModeType VisualFittingMode
571 if (_visualFittingMode == null)
573 if (this is AnimatedImageVisual ||
574 this is MeshVisual ||
575 this is PrimitiveVisual ||
578 return VisualFittingModeType.FitKeepAspectRatio;
582 return VisualFittingModeType.Fill;
587 return (VisualFittingModeType)_visualFittingMode;
592 _visualFittingMode = value;
603 internal int VisualIndex
609 internal VisualView Parent
615 internal void UpdateVisual()
619 NUILog.Debug("UpdateVisual()! VisualIndex=" + VisualIndex);
620 Parent.UpdateVisual(VisualIndex, Name, this);
624 NUILog.Debug("VisualIndex was not set");
629 /// Compose the out visual map.
631 /// <since_tizen> 3 </since_tizen>
632 protected virtual void ComposingPropertyMap()
634 if (null == _outputVisualMap)
636 _outputVisualMap = new PropertyMap();
639 if (_shader != null) { _outputVisualMap.Add(Visual.Property.Shader, new PropertyValue(_shader)); }
640 if (_premultipliedAlpha != null) { _outputVisualMap.Add(Visual.Property.PremultipliedAlpha, new PropertyValue((bool)_premultipliedAlpha)); }
641 if (_mixColor != null) { _outputVisualMap.Add(Visual.Property.MixColor, new PropertyValue(_mixColor)); }
642 if (_opacity != null) { _outputVisualMap.Add(Visual.Property.Opacity, new PropertyValue((float)_opacity)); }
643 if (_visualFittingMode != null) { _outputVisualMap.Add(Visual.Property.VisualFittingMode, new PropertyValue((int)_visualFittingMode)); }
646 private void ComposingTransformMap()
648 _visualTransformMap = new PropertyMap();
649 if (_visualSize != null) { _visualTransformMap.Add((int)VisualTransformPropertyType.Size, new PropertyValue(_visualSize)); }
650 if (_visualOffset != null) { _visualTransformMap.Add((int)VisualTransformPropertyType.Offset, new PropertyValue(_visualOffset)); }
651 if (_visualOffsetPolicy != null) { _visualTransformMap.Add((int)VisualTransformPropertyType.OffsetPolicy, new PropertyValue(_visualOffsetPolicy)); }
652 if (_visualSizePolicy != null) { _visualTransformMap.Add((int)VisualTransformPropertyType.SizePolicy, new PropertyValue(_visualSizePolicy)); }
653 if (_visualOrigin != null) { _visualTransformMap.Add((int)VisualTransformPropertyType.Origin, new PropertyValue((int)_visualOrigin)); }
654 if (_visualAnchorPoint != null) { _visualTransformMap.Add((int)VisualTransformPropertyType.AnchorPoint, new PropertyValue((int)_visualAnchorPoint)); }