Merge branch 'master' of git://factorcode.org/git/factor

db4
Daniel Ehrenberg 2009-03-10 23:21:19 -05:00
commit e97e1c8003
29 changed files with 122 additions and 83 deletions

View File

@ -132,6 +132,11 @@ SYMBOL: vocabs-quot
[ check-descriptions ] [ check-descriptions ]
} cleave ; } cleave ;
: check-class-description ( word element -- )
[ class? not ]
[ { $class-description } swap elements empty? not ] bi* and
[ "A word that is not a class has a $class-description" throw ] when ;
: all-word-help ( words -- seq ) : all-word-help ( words -- seq )
[ word-help ] filter ; [ word-help ] filter ;
@ -153,7 +158,8 @@ M: help-error error.
dup '[ dup '[
_ dup word-help _ dup word-help
[ check-values ] [ check-values ]
[ nip [ check-nulls ] [ check-see-also ] [ check-markup ] tri ] 2bi [ check-class-description ]
[ nip [ check-nulls ] [ check-see-also ] [ check-markup ] tri ] 2tri
] check-something ] check-something
] [ drop ] if ; ] [ drop ] if ;

View File

@ -108,11 +108,6 @@ M: bitmap-image load-image* ( path bitmap -- bitmap )
load-bitmap-data process-bitmap-data load-bitmap-data process-bitmap-data
fill-image-slots ; fill-image-slots ;
M: bitmap-image normalize-scan-line-order
dup dim>> '[
_ first 4 * <sliced-groups> reverse concat
] change-bitmap ;
MACRO: (nbits>bitmap) ( bits -- ) MACRO: (nbits>bitmap) ( bits -- )
[ -3 shift ] keep '[ [ -3 shift ] keep '[
bitmap-image new bitmap-image new
@ -121,6 +116,7 @@ MACRO: (nbits>bitmap) ( bits -- )
swap >>width swap >>width
swap array-copy [ >>bitmap ] [ >>color-index ] bi swap array-copy [ >>bitmap ] [ >>color-index ] bi
_ >>bit-count fill-image-slots _ >>bit-count fill-image-slots
t >>upside-down?
] ; ] ;
: bgr>bitmap ( array height width -- bitmap ) : bgr>bitmap ( array height width -- bitmap )

View File

@ -27,7 +27,7 @@ R16G16B16 R32G32B32 R16G16B16A16 R32G32B32A32 ;
{ R32G32B32A32 [ 16 ] } { R32G32B32A32 [ 16 ] }
} case ; } case ;
TUPLE: image dim component-order bitmap ; TUPLE: image dim component-order upside-down? bitmap ;
: <image> ( -- image ) image new ; inline : <image> ( -- image ) image new ; inline
@ -82,11 +82,16 @@ M: ARGB normalize-component-order*
M: ABGR normalize-component-order* M: ABGR normalize-component-order*
drop ARGB>RGBA 4 BGR>RGB ; drop ARGB>RGBA 4 BGR>RGB ;
GENERIC: normalize-scan-line-order ( image -- image ) : normalize-scan-line-order ( image -- image )
dup upside-down?>> [
M: image normalize-scan-line-order ; dup dim>> first 4 * '[
_ <groups> reverse concat
] change-bitmap
f >>upside-down?
] when ;
: normalize-image ( image -- image ) : normalize-image ( image -- image )
[ >byte-array ] change-bitmap [ >byte-array ] change-bitmap
normalize-component-order normalize-component-order
normalize-scan-line-order ; normalize-scan-line-order
RGBA >>component-order ;

View File

@ -503,7 +503,7 @@ ERROR: unknown-component-order ifd ;
: ifd>image ( ifd -- image ) : ifd>image ( ifd -- image )
{ {
[ [ image-width find-tag ] [ image-length find-tag ] bi 2array ] [ [ image-width find-tag ] [ image-length find-tag ] bi 2array ]
[ ifd-component-order ] [ ifd-component-order f ]
[ bitmap>> ] [ bitmap>> ]
} cleave tiff-image boa ; } cleave tiff-image boa ;

View File

@ -11,14 +11,16 @@ IN: opengl.textures
TUPLE: texture loc dim texture-coords texture display-list disposed ; TUPLE: texture loc dim texture-coords texture display-list disposed ;
<PRIVATE
GENERIC: component-order>format ( component-order -- format type ) GENERIC: component-order>format ( component-order -- format type )
M: RGB component-order>format drop GL_RGB GL_UNSIGNED_BYTE ;
M: BGR component-order>format drop GL_BGR GL_UNSIGNED_BYTE ;
M: RGBA component-order>format drop GL_RGBA GL_UNSIGNED_BYTE ; M: RGBA component-order>format drop GL_RGBA GL_UNSIGNED_BYTE ;
M: ARGB component-order>format drop GL_BGRA_EXT GL_UNSIGNED_INT_8_8_8_8_REV ; M: ARGB component-order>format drop GL_BGRA_EXT GL_UNSIGNED_INT_8_8_8_8_REV ;
M: BGRA component-order>format drop GL_BGRA_EXT GL_UNSIGNED_BYTE ; M: BGRA component-order>format drop GL_BGRA_EXT GL_UNSIGNED_BYTE ;
<PRIVATE
: repeat-last ( seq n -- seq' ) : repeat-last ( seq n -- seq' )
over peek pad-tail concat ; over peek pad-tail concat ;

View File

@ -0,0 +1,55 @@
IN: ui.gadgets.glass
USING: help.markup help.syntax ui.gadgets math.rectangles ;
HELP: show-glass
{ $values { "owner" gadget } { "child" gadget } { "visible-rect" rect } }
{ $description "Displays " { $snippet "child" } " in the glass layer of the window containing " { $snippet "owner" } "."
$nl
"The child's position is calculated with a heuristic:"
{ $list
"The child must fit inside the window"
{ "The child must not obscure " { $snippet "visible-rect" } ", which is a rectangle whose origin is relative to " { $snippet "owner" } }
{ "The child must otherwise be as close as possible to the edges of " { $snippet "visible-rect" } }
}
"For example, when displaying a menu, " { $snippet "visible-rect" } " is a single point at the mouse location, and when displaying a completion popup, " { $snippet "visible-rect" } " contains the bounds of the text element being completed."
} ;
HELP: hide-glass
{ $values { "child" gadget } }
{ $description "Hides a gadget displayed in a glass layer." } ;
HELP: hide-glass-hook
{ $values { "gadget" gadget } }
{ $description "Called when a gadget displayed in a glass layer is hidden. The gadget can perform cleanup tasks here." } ;
HELP: pass-to-popup
{ $values { "gesture" "a gesture" } { "owner" "the popup's owner" } { "?" "a boolean" } }
{ $description "Resends the gesture to the popup displayed by " { $snippet "owner" } ". The owner must have a " { $slot "popup" } " slot. Outputs " { $link f } " if the gesture was handled, " { $link t } " otherwise." } ;
HELP: show-popup
{ $values { "owner" gadget } { "popup" gadget } { "visible-rect" rect } }
{ $description "Displays " { $snippet "popup" } " in the glass layer of the window containing " { $snippet "owner" } " as a popup."
$nl
"This word differs from " { $link show-glass } " in two respects:"
{ $list
{ "The popup is stored in the owner's " { $slot "popup" } " slot; the owner can call " { $link pass-to-popup } " to pass keyboard gestures to the popup" }
{ "Pressing " { $snippet "ESC" } " with the popup visible will hide it" }
}
} ;
ARTICLE: "ui.gadgets.glass" "Glass layers"
"The " { $vocab-link "ui.gadgets.glass" } " vocabulary implements support for displaying gadgets in the glass layer of a window. The gadget can be positioned arbitrarily within the glass layer, and while it is visible, mouse clicks outside of the glass layer are intercepted to hide the glass layer. Multiple glass layers can be active at a time; they behave as if stacked on top of each other."
$nl
"This feature is used for completion popups and " { $link "ui.gadgets.menus" } " in the " { $link "ui-tools" } "."
$nl
"Displaying a gadget in a glass layer:"
{ $subsection show-glass }
"Hiding a gadget in a glass layer:"
{ $subsection hide-glass }
"Callback generic invoked on the gadget when its glass layer is hidden:"
{ $subsection hide-glass-hook }
"Popup gadgets add support for forwarding keyboard gestures from an owner gadget to the glass layer:"
{ $subsection show-popup }
{ $subsection pass-to-popup } ;
ABOUT: "ui.gadgets.glass"

View File

@ -71,7 +71,7 @@ popup H{
{ T{ key-down f f "ESC" } [ hide-glass ] } { T{ key-down f f "ESC" } [ hide-glass ] }
} set-gestures } set-gestures
: pass-to-popup ( gesture interactor -- ? ) : pass-to-popup ( gesture owner -- ? )
popup>> focusable-child resend-gesture ; popup>> focusable-child resend-gesture ;
: show-popup ( owner popup visible-rect -- ) : show-popup ( owner popup visible-rect -- )

View File

@ -16,7 +16,7 @@ HELP: show-commands-menu
{ $notes "Useful for right-click context menus." } ; { $notes "Useful for right-click context menus." } ;
ARTICLE: "ui.gadgets.menus" "Popup menus" ARTICLE: "ui.gadgets.menus" "Popup menus"
"The " { $vocab-link "ui.gadgets.menus" } " vocabulary implements popup menus." "The " { $vocab-link "ui.gadgets.menus" } " vocabulary displays popup menus in " { $link "ui.gadgets.glass" } "."
{ $subsection <commands-menu> } { $subsection <commands-menu> }
{ $subsection show-menu } { $subsection show-menu }
{ $subsection show-commands-menu } ; { $subsection show-commands-menu } ;

View File

@ -3,7 +3,7 @@ ui.gadgets ui.gadgets.worlds ui ;
IN: ui.gadgets.status-bar IN: ui.gadgets.status-bar
HELP: show-status HELP: show-status
{ $values { "string" string } { "gadget" gadget } } { $values { "string/f" string } { "gadget" gadget } }
{ $description "Displays a status message in the gadget's world." } { $description "Displays a status message in the gadget's world." }
{ $notes "The status message will only be visible if the window was opened with " { $link open-status-window } ", and not " { $link open-window } "." } ; { $notes "The status message will only be visible if the window was opened with " { $link open-status-window } ", and not " { $link open-window } "." } ;

View File

@ -41,4 +41,6 @@ M: gradient draw-interior
[ last-vertices>> gl-vertex-pointer ] [ last-vertices>> gl-vertex-pointer ]
[ last-colors>> gl-color-pointer ] [ last-colors>> gl-color-pointer ]
[ colors>> draw-gradient ] [ colors>> draw-gradient ]
} cleave ; } cleave ;
M: gradient pen-background 2drop transparent ;

View File

@ -1,6 +1,6 @@
! Copyright (C) 2009 Slava Pestov. ! Copyright (C) 2009 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: kernel accessors opengl ui.pens ui.pens.caching ; USING: kernel accessors opengl math colors ui.pens ui.pens.caching ;
IN: ui.pens.solid IN: ui.pens.solid
TUPLE: solid < caching-pen color interior-vertices boundary-vertices ; TUPLE: solid < caching-pen color interior-vertices boundary-vertices ;
@ -29,4 +29,4 @@ M: solid draw-boundary
(gl-rect) ; (gl-rect) ;
M: solid pen-background M: solid pen-background
nip color>> ; nip color>> dup alpha>> 1 number= [ drop transparent ] unless ;

View File

@ -171,6 +171,7 @@ ARTICLE: "ui-layouts" "Gadget hierarchy and layouts"
{ $subsection "ui-frame-layout" } { $subsection "ui-frame-layout" }
{ $subsection "ui-book-layout" } { $subsection "ui-book-layout" }
"Advanced topics:" "Advanced topics:"
{ $subsection "ui.gadgets.glass" }
{ $subsection "ui-null-layout" } { $subsection "ui-null-layout" }
{ $subsection "ui-incremental-layout" } { $subsection "ui-incremental-layout" }
{ $subsection "ui-layout-impl" } { $subsection "ui-layout-impl" }

View File

@ -1,30 +1,31 @@
! Copyright (C) 2008 Doug Coleman, Joe Groff. ! Copyright (C) 2008 Doug Coleman, Joe Groff.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: accessors arrays byte-arrays kernel math namespaces USING: accessors arrays byte-arrays kernel math namespaces
opengl.gl sequences math.vectors ui images.bitmap images.viewer opengl.gl sequences math.vectors ui images images.viewer
models ui.gadgets.worlds ui.gadgets fry alien.syntax ; models ui.gadgets.worlds ui.gadgets fry alien.syntax ;
IN: cap IN: cap
: screenshot-array ( world -- byte-array ) : screenshot-array ( world -- byte-array )
dim>> [ first 3 * 4 align ] [ second ] bi * <byte-array> ; dim>> [ first 4 * ] [ second ] bi * <byte-array> ;
: gl-screenshot ( gadget -- byte-array ) : gl-screenshot ( gadget -- byte-array )
[ [
GL_BACK glReadBuffer [
GL_PACK_ALIGNMENT 4 glPixelStorei GL_BACK glReadBuffer
0 0 GL_PACK_ALIGNMENT 4 glPixelStorei
] dip 0 0
[ dim>> first2 GL_BGR GL_UNSIGNED_BYTE ] ] dip
dim>> first2 GL_RGBA GL_UNSIGNED_BYTE
]
[ screenshot-array ] bi [ screenshot-array ] bi
[ glReadPixels ] keep ; [ glReadPixels ] keep ;
: screenshot ( window -- bitmap ) : screenshot ( window -- bitmap )
[ gl-screenshot ] [ <image> ] dip
[ dim>> first2 ] bi [ gl-screenshot >>bitmap ] [ dim>> >>dim ] bi
bgr>bitmap ; RGBA >>component-order
t >>upside-down?
: save-screenshot ( window path -- ) normalize-image ;
[ screenshot ] dip save-bitmap ;
: screenshot. ( window -- ) : screenshot. ( window -- )
[ screenshot <image-gadget> ] [ title>> ] bi open-window ; [ screenshot <image-gadget> ] [ title>> ] bi open-window ;

View File

@ -1,7 +1,7 @@
! Copyright (C) 2007 Doug Coleman. ! Copyright (C) 2007 Doug Coleman.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: accessors images images.loader io.pathnames kernel USING: accessors images images.loader io.pathnames kernel namespaces
namespaces opengl opengl.gl sequences strings ui ui.gadgets opengl opengl.gl opengl.textures sequences strings ui ui.gadgets
ui.gadgets.panes ui.render ; ui.gadgets.panes ui.render ;
IN: images.viewer IN: images.viewer
@ -12,8 +12,8 @@ M: image-gadget pref-dim*
: draw-image ( image -- ) : draw-image ( image -- )
0 0 glRasterPos2i 1.0 -1.0 glPixelZoom 0 0 glRasterPos2i 1.0 -1.0 glPixelZoom
[ dim>> first2 GL_RGBA GL_UNSIGNED_BYTE ] [ dim>> first2 ] [ component-order>> component-order>format ] [ bitmap>> ] tri
[ bitmap>> ] bi glDrawPixels ; glDrawPixels ;
M: image-gadget draw-gadget* ( gadget -- ) M: image-gadget draw-gadget* ( gadget -- )
image>> draw-image ; image>> draw-image ;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.6 KiB

BIN
extra/otug-talk/2bi.tiff Normal file

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.5 KiB

BIN
extra/otug-talk/2bi_at.tiff Normal file

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

BIN
extra/otug-talk/bi.tiff Normal file

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

BIN
extra/otug-talk/bi_at.tiff Normal file

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

View File

@ -1,41 +1,14 @@
! Copyright (C) 2008 Slava Pestov. ! Copyright (C) 2008 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: slides help.markup math arrays hashtables namespaces USING: slides help.markup math arrays hashtables namespaces sequences
sequences kernel sequences parser memoize io.encodings.binary kernel sequences parser memoize io.encodings.binary locals
locals kernel.private tools.vocabs.browser assocs quotations kernel.private tools.vocabs.browser assocs quotations tools.vocabs
tools.vocabs tools.annotations tools.crossref tools.annotations tools.crossref help.topics math.functions
help.topics math.functions compiler.tree.optimizer compiler.tree.optimizer compiler.cfg.optimizer fry ui.gadgets.panes
compiler.cfg.optimizer fry tetris tetris.game combinators generalizations multiline
ui.gadgets.panes tetris tetris.game combinators generalizations sequences.private ;
multiline sequences.private ;
IN: otug-talk IN: otug-talk
USING: cairo cairo.ffi cairo.gadgets accessors
io.backend ui.gadgets ;
TUPLE: png-gadget < cairo-gadget surface ;
: <png-gadget> ( file -- gadget )
png-gadget new-gadget
swap normalize-path
cairo_image_surface_create_from_png >>surface ; inline
M: png-gadget pref-dim* ( gadget -- )
surface>>
[ cairo_image_surface_get_width ]
[ cairo_image_surface_get_height ]
bi 2array ;
M: png-gadget render-cairo* ( gadget -- )
cr swap surface>> 0 0 cairo_set_source_surface
cr cairo_paint ;
M: png-gadget ungraft* ( gadget -- )
surface>> cairo_surface_destroy ;
: $bitmap ( element -- )
[ first <png-gadget> gadget. ] ($block) ;
: $tetris ( element -- ) : $tetris ( element -- )
drop [ <default-tetris> <tetris-gadget> gadget. ] ($block) ; drop [ <default-tetris> <tetris-gadget> gadget. ] ($block) ;
@ -105,11 +78,11 @@ CONSTANT: otug-slides
} }
{ $slide "Data flow combinators - cleave family" { $slide "Data flow combinators - cleave family"
{ { $link bi } ", " { $link tri } ", " { $link cleave } } { { $link bi } ", " { $link tri } ", " { $link cleave } }
{ $bitmap "resource:extra/otug-talk/bi.png" } { $image "resource:extra/otug-talk/bi.tiff" }
} }
{ $slide "Data flow combinators - cleave family" { $slide "Data flow combinators - cleave family"
{ { $link 2bi } ", " { $link 2tri } ", " { $link 2cleave } } { { $link 2bi } ", " { $link 2tri } ", " { $link 2cleave } }
{ $bitmap "resource:extra/otug-talk/2bi.png" } { $image "resource:extra/otug-talk/2bi.tiff" }
} }
{ $slide "Data flow combinators" { $slide "Data flow combinators"
"First, let's define a data type:" "First, let's define a data type:"
@ -128,19 +101,19 @@ CONSTANT: otug-slides
} }
{ $slide "Data flow combinators - spread family" { $slide "Data flow combinators - spread family"
{ { $link bi* } ", " { $link tri* } ", " { $link spread } } { { $link bi* } ", " { $link tri* } ", " { $link spread } }
{ $bitmap "resource:extra/otug-talk/bi_star.png" } { $image "resource:extra/otug-talk/bi_star.tiff" }
} }
{ $slide "Data flow combinators - spread family" { $slide "Data flow combinators - spread family"
{ { $link 2bi* } } { { $link 2bi* } }
{ $bitmap "resource:extra/otug-talk/2bi_star.png" } { $image "resource:extra/otug-talk/2bi_star.tiff" }
} }
{ $slide "Data flow combinators - apply family" { $slide "Data flow combinators - apply family"
{ { $link bi@ } ", " { $link tri@ } ", " { $link napply } } { { $link bi@ } ", " { $link tri@ } ", " { $link napply } }
{ $bitmap "resource:extra/otug-talk/bi_at.png" } { $image "resource:extra/otug-talk/bi_at.tiff" }
} }
{ $slide "Data flow combinators - apply family" { $slide "Data flow combinators - apply family"
{ { $link 2bi@ } } { { $link 2bi@ } }
{ $bitmap "resource:extra/otug-talk/2bi_at.png" } { $image "resource:extra/otug-talk/2bi_at.tiff" }
} }
{ $slide "Shuffle words" { $slide "Shuffle words"
"When data flow combinators are not enough" "When data flow combinators are not enough"

View File

@ -2,7 +2,7 @@
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: arrays hashtables help.markup help.stylesheet io USING: arrays hashtables help.markup help.stylesheet io
io.styles kernel math models namespaces sequences ui ui.gadgets io.styles kernel math models namespaces sequences ui ui.gadgets
ui.gadgets.books ui.gadgets.panes ui.gestures ui.pens.gradient ui.render ui.gadgets.books ui.gadgets.panes ui.gestures ui.pens.gradient
parser accessors colors ; parser accessors colors ;
IN: slides IN: slides
@ -98,6 +98,7 @@ TUPLE: slides < book ;
parse-definition strip-tease [ parsed ] each ; parsing parse-definition strip-tease [ parsed ] each ; parsing
\ slides H{ \ slides H{
{ T{ button-down } [ request-focus ] }
{ T{ key-down f f "DOWN" } [ next-page ] } { T{ key-down f f "DOWN" } [ next-page ] }
{ T{ key-down f f "UP" } [ prev-page ] } { T{ key-down f f "UP" } [ prev-page ] }
} set-gestures } set-gestures

View File

@ -35,7 +35,7 @@ IN: tetris.gl
: scale-board ( width height board -- ) : scale-board ( width height board -- )
[ width>> ] [ height>> ] bi swapd [ / ] dup 2bi* 1 glScalef ; [ width>> ] [ height>> ] bi swapd [ / ] dup 2bi* 1 glScalef ;
: (draw-tetris) ( width height tetris -- ) : draw-tetris ( width height tetris -- )
#! width and height are in pixels #! width and height are in pixels
GL_MODELVIEW [ GL_MODELVIEW [
{ {
@ -44,7 +44,4 @@ IN: tetris.gl
[ next-piece draw-next-piece ] [ next-piece draw-next-piece ]
[ current-piece draw-piece ] [ current-piece draw-piece ]
} cleave } cleave
] do-matrix ; ] do-matrix ;
: draw-tetris ( width height tetris -- )
origin get [ (draw-tetris) ] with-translation ;