From 6b672a11fa329250f10ea5587a8d48267aecf56c Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Mon, 16 Feb 2009 04:25:58 -0600 Subject: [PATCH] ui.gadgets.editors: rename min-width and max-width slots of field to min-cols and max-cols, re-use line-support code, more accurate dimension calculation that takes field border size into account --- basis/ui/gadgets/borders/borders-tests.factor | 4 ++-- basis/ui/gadgets/borders/borders.factor | 14 +++++++++---- basis/ui/gadgets/editors/editors.factor | 20 +++++++++++-------- basis/ui/tools/browser/browser.factor | 4 ++-- 4 files changed, 26 insertions(+), 16 deletions(-) diff --git a/basis/ui/gadgets/borders/borders-tests.factor b/basis/ui/gadgets/borders/borders-tests.factor index ea903b8c06..e9d7a53629 100644 --- a/basis/ui/gadgets/borders/borders-tests.factor +++ b/basis/ui/gadgets/borders/borders-tests.factor @@ -1,6 +1,6 @@ IN: ui.gadgets.borders.tests -USING: tools.test accessors namespaces kernel -ui.gadgets ui.gadgets.borders math.rectangles ; +USING: tools.test accessors namespaces kernel ui.gadgets +ui.gadgets.borders ui.gadgets.borders.private math.rectangles ; [ { 110 210 } ] [ { 100 200 } >>dim { 5 5 } pref-dim ] unit-test diff --git a/basis/ui/gadgets/borders/borders.factor b/basis/ui/gadgets/borders/borders.factor index 4a66c2836a..ae44163ea5 100644 --- a/basis/ui/gadgets/borders/borders.factor +++ b/basis/ui/gadgets/borders/borders.factor @@ -1,6 +1,6 @@ ! Copyright (C) 2005, 2009 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: accessors arrays ui.gadgets kernel math +USING: accessors arrays ui.gadgets kernel math fry namespaces vectors sequences math.vectors math.rectangles ; IN: ui.gadgets.borders @@ -11,7 +11,7 @@ TUPLE: border < gadget { min-dim initial: { 0 0 } } ; : new-border ( child class -- border ) - new-gadget swap add-gadget ; inline + new swap add-gadget ; inline : ( child gap -- border ) swap border new-border @@ -20,14 +20,18 @@ TUPLE: border < gadget : ( child gap -- border ) { 1 1 } >>fill ; +: border-pref-dim ( border child-dim -- pref-dim ) + '[ size>> 2 v*n _ v+ ] [ min-dim>> ] bi vmax ; + M: border pref-dim* - [ [ size>> 2 v*n ] [ gadget-child pref-dim ] bi v+ ] - [ min-dim>> ] bi vmax ; + dup gadget-child pref-dim border-pref-dim ; M: border baseline [ size>> second ] [ gadget-child baseline ] bi dup [ + ] [ nip ] if ; +> ] [ size>> 2 v*n ] bi v- ; @@ -47,6 +51,8 @@ M: border baseline : border-child-rect ( border -- rect ) dup border-dim [ border-loc ] keep ; +PRIVATE> + M: border layout* [ border-child-rect ] [ gadget-child ] bi set-rect-bounds ; diff --git a/basis/ui/gadgets/editors/editors.factor b/basis/ui/gadgets/editors/editors.factor index d7aa6056f8..76036c19fc 100755 --- a/basis/ui/gadgets/editors/editors.factor +++ b/basis/ui/gadgets/editors/editors.factor @@ -555,9 +555,11 @@ TUPLE: source-editor < multiline-editor ; '[ _ _ elt-string ] ; ! Fields wrap an editor -TUPLE: field < wrapper editor min-width max-width ; +TUPLE: field < border editor min-cols max-cols ; : field-theme ( gadget -- gadget ) + { 2 2 } >>size + { 1 0 } >>fill COLOR: gray >>boundary ; inline : ( gadget -- border ) @@ -566,16 +568,18 @@ TUPLE: field < wrapper editor min-width max-width ; field-theme ; : new-field ( class -- gadget ) - [ dup ] dip new-wrapper swap >>editor ; inline + [ ] dip new-border + dup gadget-child >>editor + field-theme ; inline -: column-width ( editor n -- width ) - [ editor>> font>> ] [ CHAR: \s ] bi* text-width ; +! For line-gadget-width +M: field font>> editor>> font>> ; M: field pref-dim* - [ call-next-method ] - [ dup min-width>> dup [ column-width 0 2array vmax ] [ 2drop ] if ] - [ dup max-width>> dup [ column-width 1/0. 2array vmin ] [ 2drop ] if ] - tri ; + dup + [ editor>> pref-dim ] keep + [ line-gadget-width ] [ drop second ] 2bi 2array + border-pref-dim ; TUPLE: model-field < field field-model ; diff --git a/basis/ui/tools/browser/browser.factor b/basis/ui/tools/browser/browser.factor index 5f134a930c..4c7a6773aa 100644 --- a/basis/ui/tools/browser/browser.factor +++ b/basis/ui/tools/browser/browser.factor @@ -25,8 +25,8 @@ TUPLE: browser-gadget < tool pane scroller search-field ; : ( browser -- field ) '[ _ search-browser ] - 10 >>min-width - 10 >>max-width ; + 10 >>min-cols + 10 >>max-cols ; : ( browser -- toolbar ) horizontal