]> gitweb.factorcode.org Git - factor.git/commitdiff
added norm, proj words for vectors, removed dot/proj for complex numbers, more UI...
authorSlava Pestov <slava@factorcode.org>
Thu, 30 Jun 2005 00:04:13 +0000 (00:04 +0000)
committerSlava Pestov <slava@factorcode.org>
Thu, 30 Jun 2005 00:04:13 +0000 (00:04 +0000)
16 files changed:
TODO.FACTOR.txt
contrib/algebra/infix.factor
examples/mandel.factor
library/math/complex.factor
library/math/matrices.factor
library/ui/borders.factor
library/ui/buttons.factor
library/ui/checkboxes.factor [deleted file]
library/ui/editors.factor
library/ui/ellipses.factor [deleted file]
library/ui/frames.factor
library/ui/gadgets.factor
library/ui/labels.factor
library/ui/lines.factor [deleted file]
library/ui/load.factor
library/ui/menus.factor

index dc81b720a594864d148c85314df1b1e325dbb73f..ad4bed95f0c899f9513a9f520235c95c4ec23226 100644 (file)
 + ui:\r
 \r
 - faster layout\r
-- tiled window manager\r
 - faster repaint\r
-- console with presentations\r
 - ui browser\r
 - auto-updating inspector, mirrors abstraction\r
 - mouse enter onto overlapping with interior, but not child, gadget\r
 - rollovers broken in inspector\r
 - menu dragging\r
 - fix up the min thumb size hack\r
-- frame gap\r
 \r
 + ffi:\r
 \r
index ef31b358af8f9d6d09b369a44bcca98c14a16bc3..15dcfbcbf7fa13657f103c0a35045e72b40f0009 100644 (file)
@@ -175,8 +175,8 @@ M: infix-word see
 : || ;
 
 ! Install arithmetic operators into words
-[ + - / * ^ and or xor mod +- min gcd max bitand polar> align shift /mod /i /f rect> bitor proj
-  bitxor dot rem || ] [
+[ + - / * ^ and or xor mod +- min gcd max bitand polar> align shift /mod /i /f rect> bitor
+  bitxor rem || ] [
     dup arith-2 set-word-prop
 ] each
 [ [[ = new= ]] [[ > new> ]] [[ < new< ]] [[ >= new>= ]] [[ <= new<= ]] ] [
index 6f893bbb6f7ad087bdd5e3e397a5388ce47e7060..065ae409392af95c68fdd560c1fd9069977f2ce9 100644 (file)
@@ -94,8 +94,6 @@ USE: test
         ] repeat
     ] make-vector nip ;
 
-: absq >rect swap sq swap sq + ; inline
-
 : iter ( c z nb-iter -- x )
     over absq 4 >= over 0 = or [
         nip nip
index 08edbfb05f709e6c5555e05ae11cf5a9097bda3a..170e439fb7d9e003b8f3ec70aa09e1cb0c336676 100644 (file)
@@ -46,14 +46,6 @@ M: number = ( n n -- ? ) number= ;
 
 : absq >rect swap sq swap sq + ;
 
-: dot ( #{ x1 x2 }# #{ y1 y2 }# -- x1*y1+x2*y2 )
-    over real over real * >r
-    swap imaginary swap imaginary * r> + ;
-
-: proj ( u v -- w )
-    #! Orthogonal projection of u onto v.
-    [ [ dot ] keep absq /f ] keep * ;
-
 IN: math-internals
 
 : 2>rect ( x y -- xr yr xi yi )
index bc0256935ea80a1414a28ebb6c9eefc15386d650..d9c451c221972bcf43f495ce3a0ada998e6802f1 100644 (file)
@@ -4,10 +4,12 @@ IN: matrices
 USING: errors generic kernel lists math namespaces sequences
 vectors ;
 
+! Vector operations
 : n*v ( n vec -- vec ) [ * ] map-with ;
 : v*n ( vec n -- vec ) swap n*v ;
+: n/v ( n vec -- vec ) [ / ] map-with ;
+: v/n ( vec n -- vec ) swap [ swap / ] map-with ;
 
-! Vector operations
 : v+ ( v v -- v ) [ + ] 2map ;
 : v- ( v v -- v ) [ - ] 2map ;
 : v* ( v v -- v ) [ * ] 2map ;
@@ -27,6 +29,13 @@ vectors ;
 ! : v. ( v v -- x ) 0 swap [ conjugate * + ] 2each ;
 : v. ( v v -- x ) v** sum ;
 
+: norm-sq ( v -- n ) 0 [ absq + ] reduce ;
+: norm ( v -- n ) norm-sq sqrt ;
+
+: proj ( u v -- w )
+    #! Orthogonal projection of u onto v.
+    [ [ v. ] keep norm-sq v/n ] keep n*v ;
+
 : cross-trace ( v1 v2 i1 i2 -- v1 v2 n )
     pick nth >r pick nth r> * ;
 
@@ -44,6 +53,7 @@ vectors ;
 ! Matrices
 ! The major dimension is the number of elements per row.
 TUPLE: matrix rows cols sequence ;
+
 : >matrix<
     [ matrix-rows ] keep
     [ matrix-cols ] keep
index 2898a4de3a740583a634c3649d353b9e8f9c8cf7..900e8473faf08c05fea9d2e876f72558da113094 100644 (file)
@@ -4,8 +4,6 @@ IN: gadgets
 USING: errors generic hashtables kernel lists math matrices
 namespaces sdl vectors ;
 
-! A border lays out its children on top of each other, all with
-! a 5-pixel padding.
 TUPLE: border size ;
 
 C: border ( child delegate size -- border )
@@ -13,29 +11,19 @@ C: border ( child delegate size -- border )
     [ set-delegate ] keep
     [ over [ add-gadget ] [ 2drop ] ifte ] keep ;
 
-: empty-border ( child -- border )
-    <empty-gadget> 5 <border> ;
-
 : line-border ( child -- border )
-    0 0 0 0 <etched-rect> <gadget> 5 <border> ;
-
-: filled-border ( child -- border )
-    <plain-gadget> 5 <border> ;
-
-: gadget-child gadget-children car ;
+    0 0 0 0 <etched-rect> <gadget> { 5 5 0 } <border> ;
 
-: layout-border-x/y ( border -- )
-    dup border-size dup rot gadget-child move-gadget ;
+: layout-border-loc ( border -- )
+    dup border-size swap gadget-child set-gadget-loc ;
 
-: layout-border-w/h ( border -- )
-    [ border-size 2 * ] keep
-    [ shape-w over - ] keep
-    [ shape-h rot - ] keep
-    gadget-child resize-gadget ;
+: layout-border-dim ( border -- )
+    dup shape-dim over border-size 2 v*n v-
+    swap gadget-child set-gadget-dim ;
 
 M: border pref-dim ( border -- dim )
-    [ border-size dup dup 3vector 2 v*n ] keep
+    [ border-size 2 v*n ] keep
     gadget-child pref-dim v+ ;
 
 M: border layout* ( border -- )
-    dup layout-border-x/y layout-border-w/h ;
+    dup layout-border-loc layout-border-dim ;
index 8d0e8ebdd64d2189027b09ccf1c5b9e87c77570d..ae0a3e72f128410ae3061e5e1910b26fc08bfc2e 100644 (file)
@@ -40,6 +40,3 @@ sequences io sequences styles ;
     dup [ button-update ] [ mouse-leave ] set-action
     dup [ button-update ] [ mouse-enter ] set-action
     [ drop ] [ drag 1 ] set-action ;
-
-: <button> ( label action -- button )
-    >r <label> line-border dup r> button-action button-gestures ;
diff --git a/library/ui/checkboxes.factor b/library/ui/checkboxes.factor
deleted file mode 100644 (file)
index 5c2b129..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-! Copyright (C) 2005 Slava Pestov.
-! See http://factor.sf.net/license.txt for BSD license.
-IN: gadgets
-USING: generic kernel lists math namespaces sdl sequences
-styles ;
-
-: check-size 8 ;
-
-: <check> ( -- cross )
-    0 0 check-size dup <line> <gadget>
-    >r check-size 0 check-size neg check-size <line> <gadget> r>
-    2list <stack> ;
-
-TUPLE: checkbox bevel selected? ;
-
-: init-checkbox-bevel ( bevel checkbox -- )
-    2dup set-checkbox-bevel add-gadget ;
-
-: update-checkbox ( checkbox -- )
-    #! Really, there should only be one child.
-    dup checkbox-bevel gadget-children [ unparent ] each
-    dup checkbox-selected? [
-        <check>
-    ] [
-        0 0 check-size dup <rectangle> <gadget>
-    ] ifte swap checkbox-bevel add-gadget ;
-
-: toggle-checkbox ( checkbox -- )
-    dup checkbox-selected? not over set-checkbox-selected?
-    update-checkbox ;
-
-: checkbox-update ( checkbox -- )
-    dup button-pressed? >r checkbox-bevel r>
-    reverse-video set-paint-prop ;
-
-: checkbox-actions ( checkbox -- )
-    dup [ toggle-checkbox ] [ action ] set-action
-    dup [ dup checkbox-update button-clicked ] [ button-up 1 ] set-action
-    dup [ checkbox-update ] [ button-down 1 ] set-action
-    dup [ checkbox-update ] [ mouse-leave ] set-action
-    [ checkbox-bevel button-update ] [ mouse-enter ] set-action ;
-
-C: checkbox ( label -- checkbox )
-    <line-shelf> over set-delegate
-    [ f line-border swap init-checkbox-bevel ] keep
-    [ >r <label> r> add-gadget ] keep
-    dup checkbox-actions
-    dup update-checkbox ;
index 5c33d0da88e982fc3192bfcc83a7d819c1101808..dd5762609f09a91448c95bf42e88e79c05c5c680 100644 (file)
@@ -1,8 +1,8 @@
 ! Copyright (C) 2005 Slava Pestov.
 ! See http://factor.sf.net/license.txt for BSD license.
 IN: gadgets
-USING: generic kernel line-editor lists math namespaces sdl
-sequences strings styles vectors ;
+USING: generic kernel line-editor lists math matrices namespaces
+sdl sequences strings styles vectors ;
 
 ! An editor gadget wraps a line editor object and passes
 ! gestures to the line editor.
@@ -89,7 +89,7 @@ M: editor user-input* ( ch editor -- ? )
     scroll>bottom  t ;
 
 M: editor pref-dim ( editor -- dim )
-    dup editor-text label-size >r 1 + r> 0 3vector ;
+    dup editor-text label-size { 1 0 0 } v+ ;
 
 M: editor layout* ( editor -- )
     dup editor-caret over caret-size rot resize-gadget
diff --git a/library/ui/ellipses.factor b/library/ui/ellipses.factor
deleted file mode 100644 (file)
index eed13c5..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-! Copyright (C) 2005 Slava Pestov.
-! See http://factor.sf.net/license.txt for BSD license.
-IN: gadgets
-USING: generic kernel lists math namespaces sdl styles ;
-
-! An ellipse.
-TUPLE: ellipse x y w h ;
-M: ellipse shape-x ellipse-x ;
-M: ellipse shape-y ellipse-y ;
-M: ellipse shape-w ellipse-w ;
-M: ellipse shape-h ellipse-h ;
-
-C: ellipse ( x y w h -- line )
-    #! We handle negative w/h for convenience.
-    >r fix-neg >r fix-neg r> r>
-    [ set-ellipse-h ] keep
-    [ set-ellipse-w ] keep
-    [ set-ellipse-y ] keep
-    [ set-ellipse-x ] keep ;
-
-M: ellipse move-shape ( x y line -- )
-    tuck set-ellipse-y set-ellipse-x ;
-
-M: ellipse resize-shape ( w h line -- )
-    tuck set-ellipse-h set-ellipse-w ;
-
-: ellipse>screen ( shape -- x y rx ry )
-    [ dup shape-x swap shape-w 2 /i + x get + ] keep
-    [ dup shape-y swap shape-h 2 /i + y get + ] keep
-    [ shape-w 2 /i ] keep
-    shape-h 2 /i ;
-
-M: ellipse inside? ( point ellipse -- ? )
-    ellipse>screen swap sq swap sq
-    2dup * >r >r >r
-    pick shape-y - sq
-    >r swap shape-x - sq r>
-    r> * r> rot * + r> <= ;
-
-M: ellipse draw-shape drop ;
-
-TUPLE: hollow-ellipse ;
-
-C: hollow-ellipse ( x y w h -- ellipse )
-    [ >r <ellipse> r> set-delegate ] keep ;
-
-M: hollow-ellipse draw-shape ( ellipse -- )
-    >r surface get r> ellipse>screen fg rgb
-    ellipseColor ;
-
-TUPLE: plain-ellipse ;
-
-C: plain-ellipse ( x y w h -- ellipse )
-    [ >r <ellipse> r> set-delegate ] keep ;
-
-M: plain-ellipse draw-shape ( ellipse -- )
-    >r surface get r> ellipse>screen bg rgb
-    filledEllipseColor ;
index bc12da66f6939199652d80bb7706a5c6c7c8d98e..47d1b5496e8d87ff5b63f4d214134915490395e9 100644 (file)
@@ -37,6 +37,8 @@ C: frame ( -- frame )
         dup frame-left , dup frame-center , frame-right ,
     ] make-list ;
 
+: pref-size pref-dim 3unseq drop ;
+
 : max-h pref-size nip height [ max ] change ;
 : max-w pref-size drop width [ max ] change ;
 
index 342faf3241c8e57e26d324081550968291614628..146b97ce8e8ffcd942c82d835710046e1bb7df50 100644 (file)
@@ -9,6 +9,8 @@ sequences vectors ;
 ! delegates to its shape.
 TUPLE: gadget paint gestures relayout? redraw? parent children ;
 
+: gadget-child gadget-children car ;
+
 C: gadget ( shape -- gadget )
     [ set-delegate ] keep
     [ <namespace> swap set-gadget-paint ] keep
@@ -77,8 +79,6 @@ GENERIC: pref-dim ( gadget -- dim )
 
 M: gadget pref-dim shape-dim ;
 
-: pref-size pref-dim 3unseq drop ;
-
 GENERIC: layout* ( gadget -- )
 
 : prefer ( gadget -- ) dup pref-dim swap set-gadget-dim ;
index 72b8d9088ed2d8f3c87b00cbef40a2cc430eefb5..feb0dc1d0bc2e0335935085e020f8346d5ebe0a0 100644 (file)
@@ -10,11 +10,11 @@ TUPLE: label text ;
 C: label ( text -- label )
     <empty-gadget> over set-delegate [ set-label-text ] keep ;
 
-: label-size ( gadget text -- w h )
-    >r gadget-font r> size-string ;
+: label-size ( gadget text -- dim )
+    >r gadget-font r> size-string 0 3vector ;
 
 M: label pref-dim ( label -- dim )
-    dup label-text label-size 0 3vector ;
+    dup label-text label-size ;
 
 M: label draw-shape ( label -- )
     [ dup gadget-font swap label-text ] keep
diff --git a/library/ui/lines.factor b/library/ui/lines.factor
deleted file mode 100644 (file)
index 01082d1..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-! Copyright (C) 2005 Slava Pestov.
-! See http://factor.sf.net/license.txt for BSD license.
-IN: gadgets
-USING: generic kernel lists math namespaces sdl styles ;
-
-! A line.
-TUPLE: line x y w h ;
-
-M: line shape-x dup line-x dup rot line-w + min ;
-M: line shape-y dup line-y dup rot line-h + min ;
-M: line shape-w line-w abs 1 + ;
-M: line shape-h line-h abs 1 + ;
-
-: line-pos ( line -- #{ x y }# )
-    dup line-x x get + swap line-y y get + rect> ;
-
-: line-dir ( line -- #{ w h }# ) dup line-w swap line-h rect> ;
-
-: move-line-x ( x line -- )
-    [ line-w dupd - max ] keep set-line-x ;
-
-: move-line-y ( y line -- )
-    [ line-h dupd - max ] keep set-line-y ;
-
-M: line move-shape ( x y line -- )
-    tuck move-line-y move-line-x ;
-
-: resize-line-w ( w line -- )
-    >r 1 - r>
-    dup line-w 0 >= [
-        set-line-w
-    ] [
-        2dup
-        [ [ line-w + ] keep line-x + ] keep set-line-x
-        >r neg r> set-line-w
-    ] ifte ;
-
-: resize-line-h ( w line -- )
-   >r 1 - r>
-    dup line-h 0 >= [
-        set-line-h
-    ] [
-        2dup
-        [ [ line-h + ] keep line-y + ] keep set-line-y
-        >r neg r> set-line-h
-    ] ifte ;
-
-M: line resize-shape ( w h line -- )
-    tuck resize-line-h resize-line-w ;
-
-: line>screen ( shape -- x1 y1 x2 y2 )
-    [ line-x x get + ] keep
-    [ line-y y get + ] keep
-    [ line-w pick + ] keep
-    line-h pick + ; 
-
-: line-inside? ( p d -- ? )
-    dupd proj - absq 4 < ;
-
-M: line inside? ( point line -- ? )
-    2dup inside-rect? [
-        [ line-pos - ] keep line-dir line-inside?
-    ] [
-        2drop f
-    ] ifte ;
-
-M: line draw-shape ( line -- )
-    >r surface get r>
-    line>screen
-    fg rgb
-    aalineColor ;
index 8b5dd8d54479b17e26cfa433ffc106598a143c26..89638b49321bb89a026fa8a2242690a632797538 100644 (file)
@@ -4,8 +4,6 @@ USING: kernel parser sequences io ;
     "/library/ui/shapes.factor"
     "/library/ui/points.factor"
     "/library/ui/rectangles.factor"
-    "/library/ui/lines.factor"
-    "/library/ui/ellipses.factor"
     "/library/ui/gadgets.factor"
     "/library/ui/hierarchy.factor"
     "/library/ui/paint.factor"
@@ -19,7 +17,6 @@ USING: kernel parser sequences io ;
     "/library/ui/world.factor"
     "/library/ui/labels.factor"
     "/library/ui/buttons.factor"
-    "/library/ui/checkboxes.factor"
     "/library/ui/line-editor.factor"
     "/library/ui/events.factor"
     "/library/ui/scrolling.factor"
index fb734e36b94b46eb0f2e5344946a29f79e8c0d56..4315a81a16aebc905140493929ba773053bcbe62 100644 (file)
@@ -16,7 +16,7 @@ USING: generic kernel lists math namespaces sequences ;
     show-glass ;
 
 : menu-item-border ( child -- border )
-    <plain-gadget> 1 <border> ;
+    <plain-gadget> { 1 1 0 } <border> ;
 
 : <menu-item> ( label quot -- gadget )
     >r <label> menu-item-border dup r> button-gestures ;