0.79:\r
\r
-- sig11 on first startup\r
-- fix initial font metrics being incorrect\r
- swap @{ and { syntax\r
- get stuff in examples dir running in the ui\r
- [ ... is annoying\r
] "" make ;
: hex-color, ( triplet -- )
- [ >hex 2 CHAR: 0 pad-left % ] each ;
+ [ 255 * >fixnum >hex 2 CHAR: 0 pad-left % ] each ;
: fg-css, ( color -- )
"color: #" % hex-color, "; " % ;
IN: sequences
+: first2 ( { x y } -- x y )
+ 1 swap bounds-check nip first2-unsafe ; inline
+
+: first3 ( { x y z } -- x y z )
+ 2 swap bounds-check nip first3-unsafe ; inline
+
+: first4 ( { x y z w } -- x y z w )
+ 3 swap bounds-check nip first4-unsafe ; inline
+
M: object like drop ;
M: object empty? ( seq -- ? ) length 0 = ;
: ?push ( elt seq/f -- seq )
[ 1 <vector> ] unless* [ push ] keep ;
-: first2 ( { x y } -- x y )
- dup first swap second ; inline
-
-: first3 ( { x y z } -- x y z )
- dup first over second rot third ; inline
-
: bounds-check? ( n seq -- ? )
over 0 >= [ length < ] [ 2drop f ] if ;
M: integer length ;
M: integer nth drop ;
M: integer nth-unsafe drop ;
+
+: first2-unsafe [ 0 swap nth-unsafe ] keep 1 swap nth-unsafe ; inline
+: first3-unsafe [ first2-unsafe ] keep 2 swap nth-unsafe ; inline
+: first4-unsafe [ first3-unsafe ] keep 3 swap nth-unsafe ; inline
0 -rot [ char-width + ] each-with ;
: draw-string ( open-font string -- )
- GL_MODELVIEW [
- GL_TEXTURE_BIT [
- [ char-sprite sprite-dlist glCallList ] each-with
- ] save-attribs
- ] do-matrix ;
+ GL_TEXTURE_2D glEnable
+ 0 -rot [
+ char-sprite [ sprite-width + ] keep
+ sprite-dlist glCallList
+ ] each-with neg 0 0 glTranslatef
+ GL_TEXTURE_2D glDisable ;
\r
: <underline> ( -- gadget )\r
<gadget>\r
- << gradient f @{ @{ 64 64 64 }@ @{ 255 255 255 }@ }@ >>\r
+ << gradient f @{ @{ 0.25 0.25 0.25 1.0 }@ @{ 1.0 1.0 1.0 1.0 }@ }@ >>\r
over set-gadget-interior\r
@{ 0 10 0 }@ over set-gadget-dim\r
@{ 1 0 0 }@ over set-gadget-orientation ;\r
}@ cond ;\r
\r
: example-theme\r
- << solid f @{ 204 204 255 }@ >> swap set-gadget-interior ;\r
+ << solid f @{ 0.8 0.8 1.0 1.0 }@ >> swap set-gadget-interior ;\r
\r
M: general-list tutorial-line\r
car <input-button> dup example-theme ;\r
\r
: page-theme\r
- << gradient f @{ @{ 204 204 255 }@ @{ 255 204 255 }@ }@ >>\r
+ << gradient f @{ @{ 0.8 0.8 1.0 1.0 }@ @{ 1.0 0.8 1.0 1.0 }@ }@ >>\r
swap set-gadget-interior ;\r
\r
: <page> ( list -- gadget )\r
IN: opengl
USING: alien errors kernel math namespaces opengl sdl sequences ;
+: gl-color ( { r g b a } -- ) first4 glColor4d ; inline
+
: init-gl ( -- )
0.0 0.0 0.0 0.0 glClearColor
- 1.0 0.0 0.0 glColor3d
+ @{ 1.0 0.0 0.0 0.0 }@ gl-color
GL_COLOR_BUFFER_BIT glClear
GL_PROJECTION glMatrixMode
glLoadIdentity
0 0 width get height get glViewport
0 width get height get 0 gluOrtho2D
GL_SMOOTH glShadeModel
- GL_TEXTURE_2D glEnable
GL_BLEND glEnable
GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA glBlendFunc
- GL_SCISSOR_TEST glEnable ;
+ GL_SCISSOR_TEST glEnable
+ GL_MODELVIEW glMatrixMode ;
: gl-flags
SDL_OPENGL
init-surface ;
: with-gl-screen ( quot -- )
- >r 0 gl-flags r> with-screen ;
+ >r 0 gl-flags r> with-screen ; inline
: gl-error ( -- )
glGetError dup 0 = [ drop ] [ gluErrorString throw ] if ;
: do-matrix ( mode quot -- )
swap glMatrixMode glPushMatrix call glPopMatrix ; inline
-: gl-color ( { r g b } -- )
- dup first 255 /f over second 255 /f rot third 255 /f
- glColor3d ;
-
-: gl-vertex first3 glVertex3d ;
+: gl-vertex first3 glVertex3d ; inline
-: top-left drop 0 0 glTexCoord2d @{ 0 0 0 }@ gl-vertex ;
+: top-left drop 0 0 glTexCoord2d @{ 0 0 0 }@ gl-vertex ; inline
-: top-right 1 0 glTexCoord2d @{ 1 0 0 }@ v* gl-vertex ;
+: top-right 1 0 glTexCoord2d @{ 1 0 0 }@ v* gl-vertex ; inline
-: bottom-left 0 1 glTexCoord2d @{ 0 1 0 }@ v* gl-vertex ;
+: bottom-left 0 1 glTexCoord2d @{ 0 1 0 }@ v* gl-vertex ; inline
-: bottom-right 1 1 glTexCoord2d gl-vertex ;
+: bottom-right 1 1 glTexCoord2d gl-vertex ; inline
: four-sides ( dim -- )
dup top-left dup top-right dup bottom-right bottom-left ;
GL_TEXTURE_2D GL_TEXTURE_WRAP_S GL_CLAMP glTexParameterf
GL_TEXTURE_2D GL_TEXTURE_WRAP_T GL_CLAMP glTexParameterf ;
+: gl-translate ( { x y z } -- ) first3 glTranslatef ;
+
: make-sprite-dlist ( sprite -- id )
GL_MODELVIEW [
GL_COMPILE [
- GL_MODELVIEW [
- dup sprite-loc first3 glTranslatef
- GL_TEXTURE_2D over sprite-texture glBindTexture
- init-texture
- dup sprite-dim2 gl-fill-rect
- ] do-matrix
- sprite-width 0 0 glTranslatef
+ dup sprite-loc gl-translate
+ GL_TEXTURE_2D over sprite-texture glBindTexture
+ init-texture
+ dup sprite-dim2 gl-fill-rect
+ dup sprite-dim @{ 1 0 0 }@ v*
+ swap sprite-loc v- gl-translate
] make-dlist
] do-matrix ;
! See http://factor.sf.net/license.txt for BSD license.
IN: styles
-! Colors are RGB triples.
-: black @{ 0 0 0 }@ ;
-: dark-gray @{ 64 64 64 }@ ;
-: gray @{ 128 128 128 }@ ;
-: light-gray @{ 192 192 192 }@ ;
-: white @{ 255 255 255 }@ ;
-: red @{ 255 0 0 }@ ;
-: green @{ 0 255 0 }@ ;
-: blue @{ 0 0 255 }@ ;
+! Colors are RGBA quadruples
+: black @{ 0.0 0.0 0.0 1.0 }@ ;
+: dark-gray @{ 0.25 0.25 0.25 1.0 }@ ;
+: gray @{ 0.5 0.5 0.5 1.0 }@ ;
+: light-gray @{ 0.75 0.75 0.75 1.0 }@ ;
+: white @{ 1.0 1.0 1.0 1.0 }@ ;
+: red @{ 1.0 0.0 0.0 1.0 }@ ;
+: green @{ 0.0 1.0 0.0 1.0 }@ ;
+: blue @{ 0.0 0.0 1.0 1.0 }@ ;
SYMBOL: foreground ! Used for text and outline shapes.
SYMBOL: background ! Used for filled shapes.
DEFER: draw-gadget
: (draw-gadget) ( gadget -- )
- dup dup gadget-interior draw-interior
- dup dup gadget-boundary draw-boundary
- draw-gadget* ;
+ dup rect-loc translate [
+ gl-translate
+ dup dup gadget-interior draw-interior
+ dup dup gadget-boundary draw-boundary
+ draw-gadget*
+ ] keep vneg gl-translate ;
: do-clip ( gadget -- )
>absolute clip [ rect-intersect dup ] change
dup rect-loc swap rect-dim gl-set-clip ;
-: with-translation ( gadget quot -- | quot: gadget -- )
- #! Note: origin variable is still changed after quot returns
- GL_MODELVIEW [
- >r dup rect-loc translate first3 glTranslated
- r> call
- ] do-matrix ; inline
-
: draw-gadget ( gadget -- )
clip get over inside? [
[
dup do-clip
- dup [ (draw-gadget) ] with-translation
+ dup (draw-gadget)
dup visible-children [ draw-gadget ] each
] with-scope
] when drop ;
IN: gadgets-theme
USING: arrays gadgets kernel sequences styles ;
-: solid-black << solid f @{ 0 0 0 }@ >> ;
+: solid-black << solid f @{ 0.0 0.0 0.0 1.0 }@ >> ;
-: solid-white << solid f @{ 255 255 255 }@ >> ;
+: solid-white << solid f @{ 1.0 1.0 1.0 1.0 }@ >> ;
: solid-interior solid-white swap set-gadget-interior ;
: plain-gradient
<< gradient f @{
- @{ 240 240 240 }@
- @{ 212 212 212 }@
- @{ 212 212 212 }@
- @{ 160 160 160 }@
+ @{ 0.94 0.94 0.94 1.0 }@
+ @{ 0.83 0.83 0.83 1.0 }@
+ @{ 0.83 0.83 0.83 1.0 }@
+ @{ 0.62 0.62 0.62 1.0 }@
}@ >> ;
: rollover-gradient
<< gradient f @{
- @{ 255 255 255 }@
- @{ 232 232 232 }@
- @{ 232 232 232 }@
- @{ 192 192 192 }@
+ @{ 1.0 1.0 1.0 1.0 }@
+ @{ 0.9 0.9 0.9 1.0 }@
+ @{ 0.9 0.9 0.9 1.0 }@
+ @{ 0.75 0.75 0.75 1.0 }@
}@ >> ;
: pressed-gradient
<< gradient f @{
- @{ 192 192 192 }@
- @{ 232 232 232 }@
- @{ 232 232 232 }@
- @{ 255 255 255 }@
+ @{ 0.75 0.75 0.75 1.0 }@
+ @{ 0.9 0.9 0.9 1.0 }@
+ @{ 0.9 0.9 0.9 1.0 }@
+ @{ 1.0 1.0 1.0 1.0 }@
}@ >> ;
: faint-boundary
- << solid f @{ 160 160 160 }@ >> swap set-gadget-boundary ;
+ << solid f @{ 0.62 0.62 0.62 1.0 }@ >> swap set-gadget-boundary ;
: bevel-button-theme ( gadget -- )
plain-gradient rollover-gradient pressed-gradient
: roll-button-theme ( button -- )
f solid-black solid-black <button-paint> over set-gadget-boundary
- f f << solid f @{ 236 230 232 }@ >> <button-paint> swap set-gadget-interior ;
+ f f << solid f @{ 0.92 0.9 0.9 1.0 }@ >> <button-paint> swap set-gadget-interior ;
: caret-theme ( caret -- )
- << solid f @{ 255 0 0 }@ >> swap set-gadget-interior ;
+ << solid f @{ 1.0 0.0 0.0 1.0 }@ >> swap set-gadget-interior ;
: elevator-theme ( elevator -- )
<< gradient f @{
- @{ 96 96 96 }@
- @{ 112 112 112 }@
- @{ 128 128 128 }@
+ @{ 0.37 0.37 0.37 1.0 }@
+ @{ 0.43 0.43 0.43 1.0 }@
+ @{ 0.5 0.5 0.5 1.0 }@
}@ >> swap set-gadget-interior ;
: reverse-video-theme ( gadget -- )
solid-black swap set-gadget-interior ;
: display-title-theme
- << solid f @{ 216 232 255 }@ >> swap set-gadget-interior ;
+ << solid f @{ 0.84 0.9 1.0 1.0 }@ >> swap set-gadget-interior ;
: menu-theme ( menu -- )
dup solid-boundary
- << gradient f @{ @{ 216 216 216 }@ @{ 255 255 255 }@ }@ >>
- swap set-gadget-interior ;
+ << solid f @{ 0.9 0.9 0.9 0.9 }@ >> swap set-gadget-interior ;
: label-theme ( label -- )
- @{ 0 0 0 }@ over set-label-color
+ @{ 0.0 0.0 0.0 1.0 }@ over set-label-color
@{ "Monospaced" plain 12 }@ swap set-label-font ;
: editor-theme ( editor -- )
- @{ 0 0 0 }@ over set-label-color
+ @{ 0.0 0.0 0.0 1.0 }@ over set-label-color
@{ "Monospaced" bold 12 }@ swap set-label-font ;
world get solid-interior
@{ 800 600 0 }@ world get set-gadget-dim
<hand> hand set
- listener-application
first-time off
] when
] bind ;
: check-running
- world get [
- world-running?
- [ "The UI is already running" throw ] when
- ] when* ;
+ world get world-running?
+ [ "The UI is already running" throw ] when ;
IN: shells
#! dimensions.
[
init-world check-running
- world get rect-dim first2 0 gl-flags [ run-world ] with-screen
+ world get rect-dim first2
+ [ listener-application run-world ] with-gl-screen
] with-freetype ;
: world-step ( -- )
world get world-invalid >r layout-world r>
- [ update-hand draw-world ] when ;
+ [ update-hand USE: test [ draw-world ] time ] when ;
: next-event ( -- event ? ) <event> dup SDL_PollEvent ;