From 2f025f58ae2b8796aed0f4beaf8b50e7b288a1f0 Mon Sep 17 00:00:00 2001
From: Slava Pestov <slava@slava-pestovs-macbook-pro.local>
Date: Tue, 25 Nov 2008 19:20:25 -0600
Subject: [PATCH] Frames had problems with resizing

---
 basis/ui/gadgets/frames/frames-tests.factor | 15 +++++++++++++-
 basis/ui/gadgets/frames/frames.factor       | 22 ++++++++++++---------
 2 files changed, 27 insertions(+), 10 deletions(-)

diff --git a/basis/ui/gadgets/frames/frames-tests.factor b/basis/ui/gadgets/frames/frames-tests.factor
index e38e97c76c..27d511e10a 100644
--- a/basis/ui/gadgets/frames/frames-tests.factor
+++ b/basis/ui/gadgets/frames/frames-tests.factor
@@ -1,4 +1,17 @@
+USING: accessors kernel namespaces tools.test ui.gadgets
+ui.gadgets.frames ui.gadgets.grids ui.gadgets.labels ;
 IN: ui.gadgets.frames.tests
-USING: ui.gadgets.frames ui.gadgets tools.test ;
 
 [ ] [ <frame> layout ] unit-test
+
+[ t ] [
+    <frame>
+        "Hello world" <label> @top grid-add
+        "Hello world" <label> @center grid-add
+        dup pref-dim "dim1" set
+        { 1000 1000 } >>dim
+        dup layout*
+        dup pref-dim "dim2" set
+        drop
+    "dim1" get "dim2" get =
+] unit-test
diff --git a/basis/ui/gadgets/frames/frames.factor b/basis/ui/gadgets/frames/frames.factor
index b5c3736896..ae4c7d929a 100644
--- a/basis/ui/gadgets/frames/frames.factor
+++ b/basis/ui/gadgets/frames/frames.factor
@@ -1,15 +1,17 @@
 ! Copyright (C) 2005, 2008 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: arrays generic kernel math namespaces sequences words
-splitting grouping math.vectors ui.gadgets.grids ui.gadgets
-math.geometry.rect ;
+USING: accessors arrays generic kernel math namespaces sequences
+words splitting grouping math.vectors ui.gadgets.grids
+ui.gadgets math.geometry.rect ;
 IN: ui.gadgets.frames
 
-! A frame arranges gadgets in a 3x3 grid, where the center
-! gadgets gets left-over space.
-TUPLE: frame < grid ;
+TUPLE: glue < gadget ;
 
-: <frame-grid> ( -- grid ) 9 [ <gadget> ] replicate 3 group ;
+M: glue pref-dim* drop { 0 0 } ;
+
+: <glue> ( -- glue ) glue new-gadget ;
+
+: <frame-grid> ( -- grid ) 9 [ <glue> ] replicate 3 group ;
 
 : @center 1 1 ; inline
 : @left 0 1 ; inline
@@ -22,13 +24,15 @@ TUPLE: frame < grid ;
 : @bottom-left 0 2 ; inline
 : @bottom-right 2 2 ; inline
 
+TUPLE: frame < grid ;
+
 : new-frame ( class -- frame )
     <frame-grid> swap new-grid ; inline
 
 : <frame> ( -- frame )
     frame new-frame ;
 
-: (fill-center) ( n vec -- )
+: (fill-center) ( dim vec -- )
     [ [ first ] [ third ] bi v+ [v-] ] keep set-second ;
 
 : fill-center ( dim horiz vert -- )
@@ -36,4 +40,4 @@ TUPLE: frame < grid ;
 
 M: frame layout*
     dup compute-grid
-    [ [ rect-dim ] 2dip fill-center ] [ grid-layout ] 3bi ;
+    [ [ dim>> ] 2dip fill-center ] [ grid-layout ] 3bi ;