]> O.S.I.I.S - jp/crow.git/commitdiff
Debug contentSize for Stack when stack sizing policy changed. 13/head
authorjpbruyere <jp.bruyere@hotmail.com>
Mon, 1 Aug 2016 22:06:25 +0000 (00:06 +0200)
committerjpbruyere <jp.bruyere@hotmail.com>
Mon, 1 Aug 2016 22:06:25 +0000 (00:06 +0200)
modifié :         src/GraphicObjects/GraphicObject.cs
queue drawing without layouting when not required
modifié :         src/GraphicObjects/Label.cs

src/GraphicObjects/GraphicObject.cs
src/GraphicObjects/Label.cs

index d610398e23d36f0f57f092731807c170e1676e30..7a2e8ec54b30bf17686ce13a52b2a002e88247e4 100644 (file)
@@ -241,10 +241,22 @@ namespace Crow
                                        if (value < MinimumSize.Width || (value > MaximumSize.Width && MaximumSize.Width > 0))
                                                return;
                                }
-
+                               Measure lastWP = WidthPolicy;
                                _width = value;
                                NotifyValueChanged ("Width", _width);
-                               NotifyValueChanged ("WidthPolicy", WidthPolicy);
+                               if (WidthPolicy != lastWP) {
+                                       NotifyValueChanged ("WidthPolicy", WidthPolicy);
+                                       //contentSize in Stacks are only update on childLayoutChange, and the single stretched
+                                       //child of the stack is not counted in contentSize, so when changing size policy of a child
+                                       //we should adapt contentSize
+                                       //TODO:check case when child become stretched, and another stretched item already exists.
+                                       if (_parent is GenericStack) {//TODO:check if I should test Group instead
+                                               if (lastWP == Measure.Fit)
+                                                       (_parent as GenericStack).contentSize.Width -= this.LastSlots.Width;
+                                               else
+                                                       (_parent as GenericStack).contentSize.Width += this.LastSlots.Width;
+                                       }
+                               }
 
                                this.RegisterForLayouting (LayoutingType.Width);
                        }
@@ -259,10 +271,18 @@ namespace Crow
                                        if (value < MinimumSize.Height || (value > MaximumSize.Height && MaximumSize.Height > 0))
                                                return;
                                }
-
+                               Measure lastHP = HeightPolicy;
                                _height = value;
                                NotifyValueChanged ("Height", _height);
-                               NotifyValueChanged ("HeightPolicy", HeightPolicy);
+                               if (HeightPolicy != lastHP) {
+                                       NotifyValueChanged ("HeightPolicy", HeightPolicy);
+                                       if (_parent is GenericStack) {
+                                               if (lastHP == Measure.Fit)
+                                                       (_parent as GenericStack).contentSize.Height -= this.LastSlots.Height;
+                                               else
+                                                       (_parent as GenericStack).contentSize.Height += this.LastSlots.Height;
+                                       }
+                               }
 
                                this.RegisterForLayouting (LayoutingType.Height);
                        }
@@ -497,14 +517,16 @@ namespace Crow
                                        Interface.DefaultValuesLoader [Style] (this);
                                        return;
                                }
-                       }
-                       if (Interface.DefaultValuesLoader.ContainsKey (thisType.FullName)) {
-                               Interface.DefaultValuesLoader [thisType.FullName] (this);
-                               return;
-                       }
-                       if (Interface.DefaultValuesLoader.ContainsKey (thisType.Name)) {
-                               Interface.DefaultValuesLoader [thisType.Name] (this);
-                               return;
+                       } else {
+                               if (Interface.DefaultValuesLoader.ContainsKey (thisType.FullName)) {
+                                       Interface.DefaultValuesLoader [thisType.FullName] (this);
+                                       return;
+                               } else if (!Interface.Styling.ContainsKey (thisType.FullName)) {
+                                       if (Interface.DefaultValuesLoader.ContainsKey (thisType.Name)) {
+                                               Interface.DefaultValuesLoader [thisType.Name] (this);
+                                               return;
+                                       }
+                               }
                        }
 
                        List<Dictionary<string, object>> styling = new List<Dictionary<string, object>>();
@@ -582,7 +604,10 @@ namespace Crow
                                        }
                                }
                                if (styleIndex >= 0){
-                                       defaultValue = styling[styleIndex] [name];
+                                       if (pi.PropertyType.IsEnum)//maybe should be in parser..
+                                               defaultValue = Enum.Parse(pi.PropertyType, (string)styling[styleIndex] [name], true);
+                                       else
+                                               defaultValue = styling[styleIndex] [name];
                                }else {
                                        DefaultValueAttribute dv = (DefaultValueAttribute)pi.GetCustomAttribute (typeof (DefaultValueAttribute));
                                        if (dv == null)
@@ -685,8 +710,12 @@ namespace Crow
                        il.Emit(OpCodes.Ret);
                        #endregion
 
-                       Interface.DefaultValuesLoader[styleKey] = (Interface.loadDefaultInvoker)dm.CreateDelegate(typeof(Interface.loadDefaultInvoker));
-                       Interface.DefaultValuesLoader[styleKey] (this);
+                       try {
+                               Interface.DefaultValuesLoader[styleKey] = (Interface.loadDefaultInvoker)dm.CreateDelegate(typeof(Interface.loadDefaultInvoker));
+                               Interface.DefaultValuesLoader[styleKey] (this);
+                       } catch (Exception ex) {
+                               throw new Exception ("Error applying style <" + styleKey + ">:", ex);
+                       }
                }
 
                public virtual GraphicObject FindByName(string nameToFind){
@@ -723,7 +752,7 @@ namespace Crow
                        get { return layoutingTries; }
                        set { layoutingTries = value; }
                }
-               protected Size contentSize;
+               internal Size contentSize;
                /// <summary> return size of content + margins </summary>
                protected virtual int measureRawSize (LayoutingType lt) {
                        return lt == LayoutingType.Width ?
index a334323222b66557bb126c9ae1d063c95146420f..2f5798ee3d1984ca50738d1bdd11a629e9b30cb1 100644 (file)
@@ -101,7 +101,7 @@ namespace Crow
                                if (value == _textAlignment)
                                        return;
                                _textAlignment = value; 
-                               RegisterForGraphicUpdate ();
+                               RegisterForRedraw ();
                                NotifyValueChanged ("TextAlignment", _textAlignment);
                        }
         }