Ethosa 3 yıl önce
ebeveyn
işleme
6ad0ddc8dc

+ 5 - 7
src/nodesnim/nodes/canvas.nim

@@ -200,7 +200,7 @@ method fill*(canvas: CanvasRef, color: ColorRef) {.base.} =
   ## Fills canvas.
   canvas.commands = @[DrawCommand(kind: FILL, x1: 0, y1: 0, color: color)]
 
-method resize*(self: CanvasRef, w, h: GLfloat) {.base.} =
+method resize*(self: CanvasRef, w, h: GLfloat, save_anchor: bool = false) {.base.} =
   ## Resizes canvas.
   ##
   ## Arguments:
@@ -208,12 +208,14 @@ method resize*(self: CanvasRef, w, h: GLfloat) {.base.} =
   ## - `h` is a new height.
   if w > self.rect_min_size.x:
     self.rect_size.x = w
-    self.size_anchor.x = 0.0
+    if not save_anchor:
+      self.size_anchor.x = 0.0
   else:
     self.rect_size.x = self.rect_min_size.x
   if h > self.rect_min_size.y:
     self.rect_size.y = h
-    self.size_anchor.y = 0.0
+    if not save_anchor:
+      self.size_anchor.y = 0.0
   else:
     self.rect_size.y = self.rect_min_size.y
 
@@ -223,7 +225,6 @@ method setAnchor*(self: CanvasRef, anchor: AnchorRef) {.base.} =
   ## Arguments:
   ## - `anchor` - AnchorRef object.
   self.anchor = anchor
-  self.calcPositionAnchor()
 
 method setAnchor*(self: CanvasRef, x1, y1, x2, y2: float) {.base.} =
   ## Changes node anchor.
@@ -232,12 +233,9 @@ method setAnchor*(self: CanvasRef, x1, y1, x2, y2: float) {.base.} =
   ## - `x1` and `y1` - anchor relative to the parent node.
   ## - `x2` and `y2` - anchor relative to this node.
   self.anchor = Anchor(x1, y1, x2, y2)
-  self.calcPositionAnchor()
 
 method setSizeAnchor*(self: CanvasRef, anchor: Vector2Ref) {.base.} =
   self.size_anchor = anchor
-  self.calcPositionAnchor()
 
 method setSizeAnchor*(self: CanvasRef, x, y: float) {.base.} =
   self.size_anchor = Vector2(x, y)
-  self.calcPositionAnchor()

+ 3 - 2
src/nodesnim/nodescontrol/box.nim

@@ -69,7 +69,7 @@ method duplicate*(self: BoxRef): BoxRef {.base.} =
   ## Duplicates Box.
   self.deepCopy()
 
-method resize*(self: BoxRef, w, h: GLfloat) =
+method resize*(self: BoxRef, w, h: GLfloat, save_anchor: bool = false) =
   ## Resizes Box node.
   ##
   ## Arguments:
@@ -82,7 +82,8 @@ method resize*(self: BoxRef, w, h: GLfloat) =
     size.y = h
   self.rect_size.x = size.x
   self.rect_size.y = size.y
-  self.size_anchor.clear()
+  if not save_anchor:
+    self.size_anchor.clear()
 
 method setChildAnchor*(self: BoxRef, anchor: AnchorRef) {.base.} =
   ## Changes child anchor.

+ 7 - 6
src/nodesnim/nodescontrol/control.nim

@@ -48,6 +48,8 @@ template controlpattern*: untyped =
   result.rect_min_size = Vector2()
   result.position = Vector2()
   result.global_position = Vector2()
+  result.anchor = Anchor(0, 0, 0, 0)
+  result.size_anchor = Vector2()
 
   result.on_mouse_enter = proc(self: ControlRef, x, y: float) = discard
   result.on_mouse_exit = proc(self: ControlRef, x, y: float) = discard
@@ -72,12 +74,11 @@ proc Control*(name: string = "Control"): ControlRef =
 method calcPositionAnchor*(self: ControlRef) =
   ## Calculates node position. This uses in the `scene.nim`.
   if self.parent != nil:
-    if not self.size_anchor.isNil():
-      if self.size_anchor.x > 0.0:
-        self.rect_size.x = self.parent.CanvasRef.rect_size.x * self.size_anchor.x
-      if self.size_anchor.y > 0.0:
-        self.rect_size.y = self.parent.CanvasRef.rect_size.y * self.size_anchor.y
-    if not self.anchor.isNil() and not self.anchor.isEmpty():
+    if self.size_anchor.x > 0.0:
+      self.rect_size.x = self.parent.CanvasRef.rect_size.x * self.size_anchor.x
+    if self.size_anchor.y > 0.0:
+      self.rect_size.y = self.parent.CanvasRef.rect_size.y * self.size_anchor.y
+    if not self.anchor.isEmpty():
       self.position.x = self.parent.CanvasRef.rect_size.x*self.anchor.x1 - self.rect_size.x*self.anchor.x2
       self.position.y = self.parent.CanvasRef.rect_size.y*self.anchor.y1 - self.rect_size.y*self.anchor.y2
 

+ 3 - 2
src/nodesnim/nodescontrol/grid_box.nim

@@ -105,7 +105,7 @@ method duplicate*(self: GridBoxRef): GridBoxRef {.base.} =
   ## Duplicates GridBox object and create a new GridBox.
   self.deepCopy()
 
-method resize*(self: GridBoxRef, w, h: GLfloat) =
+method resize*(self: GridBoxRef, w, h: GLfloat, save_anchor: bool = false) =
   ## Resizes GridBox.
   ##
   ## Arguments:
@@ -118,7 +118,8 @@ method resize*(self: GridBoxRef, w, h: GLfloat) =
     size.y = h
   self.rect_size.x = size.x
   self.rect_size.y = size.y
-  self.size_anchor.clear()
+  if not save_anchor:
+    self.size_anchor.clear()
 
 method setRow*(self: GridBoxRef, row: int) {.base.} =
   ## Changes gridBox row count.

+ 3 - 2
src/nodesnim/nodescontrol/hbox.nim

@@ -74,7 +74,7 @@ method duplicate*(self: HBoxRef): HBoxRef {.base.} =
   ## Duplicates HBox object and create a new HBox.
   self.deepCopy()
 
-method resize*(self: HBoxRef, w, h: GLfloat) =
+method resize*(self: HBoxRef, w, h: GLfloat, save_anchor: bool = false) =
   ## Resizes HBox, if `w` and `h` not less than child size.
   ##
   ## Arguments:
@@ -87,4 +87,5 @@ method resize*(self: HBoxRef, w, h: GLfloat) =
     size.y = h
   self.rect_size.x = size.x
   self.rect_size.y = size.y
-  self.size_anchor.clear()
+  if not save_anchor:
+    self.size_anchor.clear()

+ 1 - 1
src/nodesnim/nodescontrol/label.nim

@@ -81,7 +81,7 @@ method setText*(self: LabelRef, text: string, save_properties: bool = false) {.b
         st.chars[i].underline = self.text.chars[i].underline
   self.text = st
   self.rect_min_size = self.text.getTextSize()
-  self.resize(self.rect_size.x, self.rect_size.y)
+  self.resize(self.rect_size.x, self.rect_size.y, true)
   self.text.rendered = false
 
 method setTextAlign*(self: LabelRef, x1, y1, x2, y2: float) {.base.} =

+ 1 - 1
src/nodesnim/nodescontrol/scroll.nim

@@ -67,7 +67,7 @@ method duplicate*(self: ScrollRef): ScrollRef {.base.} =
   self.deepCopy()
 
 
-method resize*(canvas: ScrollRef, w, h: GLfloat) =
+method resize*(canvas: ScrollRef, w, h: GLfloat, save_anchor: bool = false) =
   ## Resizes scroll.
   ##
   ## Arguments:

+ 3 - 2
src/nodesnim/nodescontrol/vbox.nim

@@ -74,7 +74,7 @@ method duplicate*(self: VBoxRef): VBoxRef {.base.} =
   ## Duplicate VBox object and create a new VBox.
   self.deepCopy()
 
-method resize*(self: VBoxRef, w, h: GLfloat) =
+method resize*(self: VBoxRef, w, h: GLfloat, save_anchor: bool = false) =
   ## Resizes VBox, if available.
   ##
   ## Arguments:
@@ -87,4 +87,5 @@ method resize*(self: VBoxRef, w, h: GLfloat) =
     size.y = h
   self.rect_size.x = size.x
   self.rect_size.y = size.y
-  self.size_anchor.clear()
+  if not save_anchor:
+    self.size_anchor.clear()