#UI_ENHANCEMENT
authorClaus Gittinger <cg@exept.de>
Fri, 09 Oct 2015 11:39:40 +0200
changeset 5475 f7082f92390c
parent 5473 5723b596e1cf
child 5476 bc85eb26e166
#UI_ENHANCEMENT class: VariablePanelController comment/format in: #buttonMotion:x:y: changed: #checkedHandleMovementX:y: #doResize changed to allow resizing up to zero size (avoid the ugly 1-pixel leftover of a small view)
VariablePanelController.st
--- a/VariablePanelController.st	Thu Oct 08 09:05:35 2015 +0200
+++ b/VariablePanelController.st	Fri Oct 09 11:39:40 2015 +0200
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
 "
  COPYRIGHT (c) 1995 by Claus Gittinger
               All Rights Reserved
@@ -11,6 +13,8 @@
 "
 "{ Package: 'stx:libwidg' }"
 
+"{ NameSpace: Smalltalk }"
+
 Controller subclass:#VariablePanelController
 	instanceVariableNames:'movedHandle prevPos clickPos saveCursor startResizing resizeMode
 		opaqueResizing'
@@ -57,7 +61,7 @@
     "mouse-button was moved while pressed;
      clear prev handleBar and draw handle bar at new position
     "
-    |nextPos layout entered hindex handle|
+    |nextPos layout entered handle|
 
     state == 0 ifTrue:[
         movedHandle notNil ifTrue:[
@@ -70,12 +74,6 @@
 
         handle := self detectHandleIndexAt:bx y:by.
         handle isNil ifTrue:[^ self].
-"/
-"/        hindex ~~ handle ifTrue:[
-"/            self pointerLeave:0.
-"/            handle := hindex.
-"/        ].
-"/        handle isNil ifTrue:[^ self].
 
         "check entering click button ...."
         layout  := view snapLayoutAt:handle.
@@ -109,7 +107,6 @@
     "RESIZING"
 
     "compute new position ...."
-
     nextPos := self checkedHandleMovementX:bx y:by.
 "/    nextPos = prevPos ifTrue:[
 "/        ^ self
@@ -344,8 +341,8 @@
 "/    movedHandle == (subViews size-1) ifTrue:[
 "/        max := max - barHeight + 2.
 "/    ] ifFalse:[
-        max := max - halfBarHeight + 1.
-        barHeight odd ifTrue:[ max := max - 1 ].
+        max := max - halfBarHeight "+ 1".
+        true "barHeight odd" ifTrue:[ max := max - 1 ].
 "/    ].
 
     movedHandle == (subViews size-1) ifTrue:[
@@ -415,7 +412,7 @@
     "perform the resize
     "
     |aboveView belowView aboveIndex belowIndex newRelPos subViews isVertical 
-     newCorner newOrigin halfBarHg|
+     newCorner newOrigin halfBarHg aboveInvisible belowInvisible|
 
     "undo the last invert"
     (resizeMode == #active and:[opaqueResizing not]) ifTrue:[
@@ -431,29 +428,41 @@
     subViews   := view subViews.
     aboveView  := subViews at:aboveIndex.
     belowView  := subViews at:belowIndex.
-    halfBarHg  := view barHeight + 1 // 2.
+    halfBarHg  := (view barHeight + 1) // 2.
+    aboveInvisible := belowInvisible := false.
 
-    isVertical ifFalse:[
+    isVertical ifTrue:[
         "X complains badly if you try to create/resize a view with a dimension <= 0
         "
-        prevPos - halfBarHg == aboveView left ifTrue:[prevPos := prevPos + 1].
+        prevPos - halfBarHg == aboveView top ifTrue:[
+            prevPos := prevPos + 1.
+            aboveInvisible := true.
+        ].
+
+        newRelPos := (prevPos / view height) asFloat.
+        newCorner := aboveView relativeCorner x @ newRelPos.
+        newOrigin := belowView relativeOrigin x @ newRelPos.
+    ] ifFalse:[
+        "X complains badly if you try to create/resize a view with a dimension <= 0
+        "
+        prevPos - halfBarHg == aboveView left ifTrue:[
+            prevPos := prevPos + 1.
+            aboveInvisible := true.
+        ].
 
         newRelPos := (prevPos / view width) asFloat.
         newCorner := newRelPos @ aboveView relativeCorner y.
         newOrigin := newRelPos @ belowView relativeOrigin y.
-    ] ifTrue:[
-        "X complains badly if you try to create/resize a view with a dimension <= 0
-        "
-        prevPos - halfBarHg == aboveView top ifTrue:[prevPos := prevPos + 1].
-
-        newRelPos := (prevPos / view height) asFloat.
-        newCorner := aboveView relativeCorner x @ newRelPos.
-        newOrigin := belowView relativeOrigin x @ newRelPos.
     ].
     view lockRedraw.
 
     aboveView relativeCorner:newCorner.
     belowView relativeOrigin:newOrigin.
+    aboveInvisible ifTrue:[
+        aboveView realized ifTrue:[ aboveView unmap ].
+    ] ifFalse:[
+        aboveView realized ifFalse:[ aboveView map ].
+    ].    
 
     prevPos > clickPos ifTrue:[ "above view grows"
         view resizeSubviewsFrom:aboveIndex to:belowIndex.
@@ -463,7 +472,7 @@
     view unlockRedraw.
 
     prevPos := isVertical ifTrue:[aboveView bottom] ifFalse:[aboveView right].
-    prevPos := prevPos + (view barHeight + 1 // 2).
+    prevPos := prevPos + halfBarHg.
 !
 
 doSnapPressedX:x y:y
@@ -555,7 +564,8 @@
 !VariablePanelController class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libwidg/VariablePanelController.st,v 1.41 2009-09-15 21:18:05 cg Exp $'
+    ^ '$Header$'
 
 
 ! !
+