Applied ui-tweaks patchset.

- prettyprinter now does syntax highlighting of Factor code
- added a prettyprinter.stylesheet vocab
- text shadow character style for formatted streams
- text shadow for labels
- toolbar buttons display keyboard shortcut in status bar rather than in the button title
- changed some colors in help.stylesheet to match the colors in Factor's scrollbars and border-buttons
- changed status bar color to match the dark blue in Factor's scrollbars
- added some internal padding to the browser gadget to give the article content some breathing room

NOTE: I removed the "pane" slot from browser-gadget. The slot was never used (at least in my image), and now that the browser-gadget's help-pane is wrapped by a "border" gadget, the slot name would be misleading.
db4
Keith Lazuka 2009-09-08 12:43:47 -04:00
parent 9f9b6bca01
commit 3fb75247b2
15 changed files with 142 additions and 62 deletions

View File

@ -9,7 +9,8 @@ size
bold? bold?
italic? italic?
{ foreground initial: COLOR: black } { foreground initial: COLOR: black }
{ background initial: COLOR: white } ; { background initial: COLOR: white }
shadow ;
: <font> ( -- font ) : <font> ( -- font )
font new ; inline font new ; inline
@ -37,6 +38,7 @@ italic?
[ [ italic?>> ] either? >>italic? ] [ [ italic?>> ] either? >>italic? ]
[ [ foreground>> ] either? >>foreground ] [ [ foreground>> ] either? >>foreground ]
[ [ background>> ] either? >>background ] [ [ background>> ] either? >>background ]
[ [ shadow>> ] either? >>shadow ]
} 2cleave } 2cleave
] when* ; ] when* ;
@ -56,7 +58,7 @@ italic?
12 >>size ; 12 >>size ;
: strip-font-colors ( font -- font' ) : strip-font-colors ( font -- font' )
clone f >>background f >>foreground ; clone f >>background f >>foreground f >>shadow ;
TUPLE: metrics width ascent descent height leading cap-height x-height ; TUPLE: metrics width ascent descent height leading cap-height x-height ;

View File

@ -87,7 +87,7 @@ ALIAS: $slot $snippet
: ($code) ( presentation quot -- ) : ($code) ( presentation quot -- )
[ [
snippet-style get [ code-char-style get [
last-element off last-element off
[ ($code-style) ] dip with-nesting [ ($code-style) ] dip with-nesting
] with-style ] with-style
@ -307,7 +307,7 @@ M: f ($instance)
: ($see) ( word quot -- ) : ($see) ( word quot -- )
[ [
snippet-style get [ code-char-style get [
code-style get swap with-nesting code-style get swap with-nesting
] with-style ] with-style
] ($block) ; inline ] ($block) ; inline

View File

@ -17,7 +17,7 @@ H{
SYMBOL: link-style SYMBOL: link-style
H{ H{
{ foreground COLOR: dark-blue } { foreground COLOR: DodgerBlue4 }
{ font-style bold } { font-style bold }
} link-style set-global } link-style set-global
@ -33,12 +33,14 @@ H{
{ font-size 18 } { font-size 18 }
{ font-style bold } { font-style bold }
{ wrap-margin 500 } { wrap-margin 500 }
{ page-color COLOR: light-gray } { foreground T{ rgba f 0.216 0.243 0.282 1.0 } }
{ shadow COLOR: white }
{ page-color T{ rgba f 0.94 0.94 0.91 1.0 } }
{ border-width 5 } { border-width 5 }
} title-style set-global } title-style set-global
SYMBOL: help-path-style SYMBOL: help-path-style
H{ { font-size 10 } } help-path-style set-global H{ { font-size 10 } { shadow f } } help-path-style set-global
SYMBOL: heading-style SYMBOL: heading-style
H{ H{
@ -58,12 +60,18 @@ SYMBOL: snippet-style
H{ H{
{ font-name "monospace" } { font-name "monospace" }
{ font-size 12 } { font-size 12 }
{ foreground COLOR: navy-blue } { foreground COLOR: DarkOrange4 }
} snippet-style set-global } snippet-style set-global
SYMBOL: code-char-style
H{
{ font-name "monospace" }
{ font-size 12 }
} code-char-style set-global
SYMBOL: code-style SYMBOL: code-style
H{ H{
{ page-color COLOR: gray80 } { page-color T{ rgba f 0.94 0.94 0.91 1.0 } }
{ border-width 5 } { border-width 5 }
{ wrap-margin f } { wrap-margin f }
} code-style set-global } code-style set-global
@ -101,7 +109,7 @@ H{
SYMBOL: table-style SYMBOL: table-style
H{ H{
{ table-gap { 5 5 } } { table-gap { 5 5 } }
{ table-border COLOR: light-gray } { table-border T{ rgba f 0.94 0.94 0.91 1.0 } }
} table-style set-global } table-style set-global
SYMBOL: list-style SYMBOL: list-style

View File

@ -121,6 +121,7 @@ ARTICLE: "character-styles" "Character styles"
"Character styles for " { $link stream-format } " and " { $link with-style } ":" "Character styles for " { $link stream-format } " and " { $link with-style } ":"
{ $subsection foreground } { $subsection foreground }
{ $subsection background } { $subsection background }
{ $subsection shadow }
{ $subsection font-name } { $subsection font-name }
{ $subsection font-size } { $subsection font-size }
{ $subsection font-style } { $subsection font-style }
@ -205,6 +206,18 @@ HELP: background
} }
} ; } ;
HELP: shadow
{ $description "Character style. An instance of " { $link color } ". See " { $link "colors" } "." }
{ $examples
{ $code
"\"Hello world\\n\""
"H{ { background COLOR: gray }"
" { shadow COLOR: white }"
" { font-size 72 }"
"} format"
}
} ;
HELP: font-name HELP: font-name
{ $description "Character style. Font family named by a string." } { $description "Character style. Font family named by a string." }
{ $examples { $examples

View File

@ -116,6 +116,7 @@ SYMBOL: bold-italic
! Character styles ! Character styles
SYMBOL: foreground SYMBOL: foreground
SYMBOL: background SYMBOL: background
SYMBOL: shadow
SYMBOL: font-name SYMBOL: font-name
SYMBOL: font-size SYMBOL: font-size
SYMBOL: font-style SYMBOL: font-style

View File

@ -1,11 +1,12 @@
! Copyright (C) 2003, 2009 Slava Pestov. ! Copyright (C) 2003, 2009 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: accessors arrays byte-arrays byte-vectors continuations USING: accessors arrays assocs byte-arrays byte-vectors classes
generic hashtables assocs kernel math namespaces make sequences classes.tuple classes.tuple.private colors colors.constants
strings sbufs vectors words prettyprint.config prettyprint.custom combinators continuations effects generic hashtables io
prettyprint.sections quotations io io.pathnames io.styles math.parser io.pathnames io.styles kernel make math math.order math.parser
effects classes.tuple math.order classes.tuple.private classes namespaces prettyprint.config prettyprint.custom
combinators colors ; prettyprint.sections prettyprint.stylesheet quotations sbufs
sequences strings vectors words words.symbol ;
IN: prettyprint.backend IN: prettyprint.backend
M: effect pprint* effect>string "(" ")" surround text ; M: effect pprint* effect>string "(" ")" surround text ;
@ -20,17 +21,6 @@ M: effect pprint* effect>string "(" ")" surround text ;
?effect-height 0 < [ end-group ] when ; ?effect-height 0 < [ end-group ] when ;
! Atoms ! Atoms
: word-style ( word -- style )
dup "word-style" word-prop >hashtable [
[
[ presented set ]
[
[ parsing-word? ] [ delimiter? ] [ t eq? ] tri or or
[ bold font-style set ] when
] bi
] bind
] keep ;
: word-name* ( word -- str ) : word-name* ( word -- str )
name>> "( no name )" or ; name>> "( no name )" or ;
@ -59,6 +49,9 @@ M: real pprint* number>string text ;
M: f pprint* drop \ f pprint-word ; M: f pprint* drop \ f pprint-word ;
: pprint-effect ( effect -- )
[ effect>string ] [ effect-style ] bi styled-text ;
! Strings ! Strings
: ch>ascii-escape ( ch -- str ) : ch>ascii-escape ( ch -- str )
H{ H{
@ -82,12 +75,6 @@ M: f pprint* drop \ f pprint-word ;
] when ] when
] when ; ] when ;
: string-style ( obj -- hash )
[
presented set
T{ rgba f 0.3 0.3 0.3 1.0 } foreground set
] H{ } make-assoc ;
: unparse-string ( str prefix suffix -- str ) : unparse-string ( str prefix suffix -- str )
[ [ % do-string-limit [ unparse-ch ] each ] dip % ] "" make ; [ [ % do-string-limit [ unparse-ch ] each ] dip % ] "" make ;

View File

@ -0,0 +1,34 @@
! Copyright (C) 2009 Your name.
! See http://factorcode.org/license.txt for BSD license.
USING: colors.constants hashtables io.styles kernel namespaces
words words.symbol ;
IN: prettyprint.stylesheet
: word-style ( word -- style )
dup "word-style" word-prop >hashtable [
[
[ presented set ] [
[ parsing-word? ] [ delimiter? ] [ symbol? ] tri
or or [ COLOR: DarkSlateGray ] [ COLOR: black ] if
foreground set
] bi
] bind
] keep ;
: string-style ( obj -- style )
[
presented set
COLOR: LightSalmon4 foreground set
] H{ } make-assoc ;
: vocab-style ( vocab -- style )
[
presented set
COLOR: cornsilk4 foreground set
] H{ } make-assoc ;
: effect-style ( effect -- style )
[
presented set
COLOR: DarkGreen foreground set
] H{ } make-assoc ;

View File

@ -39,7 +39,7 @@ M: word print-stack-effect? drop t ;
: stack-effect. ( word -- ) : stack-effect. ( word -- )
[ print-stack-effect? ] [ stack-effect ] bi and [ print-stack-effect? ] [ stack-effect ] bi and
[ effect>string comment. ] when* ; [ pprint-effect ] when* ;
<PRIVATE <PRIVATE

View File

@ -7,7 +7,9 @@ HELP: button
$nl $nl
"A button's appearance can vary depending on the state of the mouse button if the " { $snippet "interior" } " or " { $snippet "boundary" } " slots are set to instances of " { $link button-pen } "." "A button's appearance can vary depending on the state of the mouse button if the " { $snippet "interior" } " or " { $snippet "boundary" } " slots are set to instances of " { $link button-pen } "."
$nl $nl
"A button can be selected, which is distinct from being pressed. This state is held in the " { $snippet "selected?" } " slot, and is used by " { $link checkbox } " instances to render themselves when they're checked." } ; "A button can be selected, which is distinct from being pressed. This state is held in the " { $snippet "selected?" } " slot, and is used by " { $link checkbox } " instances to render themselves when they're checked."
$nl
"A button can optionally display a message in the window's status bar whenever the mouse cursor hovers over the button. To enable this behavior, just set a string to the button's " { $snippet "tooltip" } " slot." } ;
HELP: <button> HELP: <button>
{ $values { "label" gadget } { "quot" { $quotation "( button -- )" } } { "button" "a new " { $link button } } } { $values { "label" gadget } { "quot" { $quotation "( button -- )" } } { "button" "a new " { $link button } } }

View File

@ -10,7 +10,7 @@ combinators.smart ;
FROM: models => change-model ; FROM: models => change-model ;
IN: ui.gadgets.buttons IN: ui.gadgets.buttons
TUPLE: button < border pressed? selected? quot ; TUPLE: button < border pressed? selected? quot tooltip ;
<PRIVATE <PRIVATE
@ -35,6 +35,12 @@ PRIVATE>
>>pressed? >>pressed?
relayout-1 ; relayout-1 ;
: button-enter ( button -- )
dup dup tooltip>> [ swap show-status ] [ drop ] if* button-update ;
: button-leave ( button -- )
dup "" swap show-status button-update ;
: button-clicked ( button -- ) : button-clicked ( button -- )
dup button-update dup button-update
dup button-rollover? dup button-rollover?
@ -43,8 +49,8 @@ PRIVATE>
button H{ button H{
{ T{ button-up } [ button-clicked ] } { T{ button-up } [ button-clicked ] }
{ T{ button-down } [ button-update ] } { T{ button-down } [ button-update ] }
{ mouse-leave [ button-update ] } { mouse-leave [ button-leave ] }
{ mouse-enter [ button-update ] } { mouse-enter [ button-enter ] }
} set-gestures } set-gestures
: new-button ( label quot class -- button ) : new-button ( label quot class -- button )
@ -132,11 +138,14 @@ CONSTANT: button-clicked-background
} }
: <border-button-pen> ( -- pen ) : <border-button-pen> ( -- pen )
"button" button-background COLOR: black <border-button-state-pen> dup "button" button-background button-clicked-background
"button-clicked" button-clicked-background COLOR: white <border-button-state-pen> dup dup <border-button-state-pen> dup
"button-clicked" button-clicked-background COLOR: white
<border-button-state-pen> dup dup
<button-pen> ; <button-pen> ;
: border-button-theme ( gadget -- gadget ) : border-button-theme ( gadget -- gadget )
dup children>> first font>> t >>bold? drop
horizontal >>orientation horizontal >>orientation
<border-button-pen> >>interior <border-button-pen> >>interior
dup dup interior>> pen-pref-dim >>min-dim dup dup interior>> pen-pref-dim >>min-dim
@ -235,9 +244,12 @@ PRIVATE>
: command-button-quot ( target command -- quot ) : command-button-quot ( target command -- quot )
'[ _ _ invoke-command ] ; '[ _ _ invoke-command ] ;
: gesture>tooltip ( gesture -- str )
[ gesture>string "Shortcut: " prepend ] [ "Shortcut Unassigned" ] if* ;
: <command-button> ( target gesture command -- button ) : <command-button> ( target gesture command -- button )
[ command-string swap ] keep command-button-quot swapd [ command-name swap ] keep command-button-quot
'[ drop @ ] <border-button> ; '[ drop @ ] <border-button> swap gesture>tooltip >>tooltip ;
: <toolbar> ( target -- toolbar ) : <toolbar> ( target -- toolbar )
<shelf> <shelf>

View File

@ -4,7 +4,7 @@ USING: accessors arrays hashtables io kernel math math.functions
namespaces make opengl sequences strings splitting ui.gadgets namespaces make opengl sequences strings splitting ui.gadgets
ui.gadgets.tracks ui.gadgets.packs fonts ui.render ui.pens.solid ui.gadgets.tracks ui.gadgets.packs fonts ui.render ui.pens.solid
ui.baseline-alignment ui.text colors colors.constants models ui.baseline-alignment ui.text colors colors.constants models
combinators ; combinators opengl.gl ;
IN: ui.gadgets.labels IN: ui.gadgets.labels
! A label gadget draws a string. ! A label gadget draws a string.
@ -65,14 +65,25 @@ M: label baseline
M: label cap-height M: label cap-height
label-metrics cap-height>> round ; label-metrics cap-height>> round ;
M: label draw-gadget* : draw-text* ( font text fg bg -- )
>label< [ rot ] dip
[ [ font-with-background ] when* swap
background get [ font-with-background ] when* [ font-with-foreground ] when* swap
foreground get [ font-with-foreground ] when*
] dip
draw-text ; draw-text ;
: draw-shadowed-text ( font text -- )
[
{ 0 1 } [ over shadow>> background get draw-text* ]
with-translation
] [ foreground get transparent draw-text* ] 2bi ;
: draw-normal-text ( font text -- )
foreground get background get draw-text* ;
M: label draw-gadget*
>label< over shadow>>
[ draw-shadowed-text ] [ draw-normal-text ] if ;
M: label gadget-text* string>> % ; M: label gadget-text* string>> % ;
TUPLE: label-control < label ; TUPLE: label-control < label ;

View File

@ -11,7 +11,7 @@ ui.gadgets.menus ui.clipboards ui.gestures ui.traverse ui.render
ui.text ui.gadgets.presentations ui.gadgets.grids ui.gadgets.tracks ui.text ui.gadgets.presentations ui.gadgets.grids ui.gadgets.tracks
ui.gadgets.icons ui.gadgets.grid-lines ui.baseline-alignment ui.gadgets.icons ui.gadgets.grid-lines ui.baseline-alignment
colors io.styles ; colors io.styles ;
FROM: io.styles => foreground background ; FROM: io.styles => foreground background shadow ;
IN: ui.gadgets.panes IN: ui.gadgets.panes
TUPLE: pane < track TUPLE: pane < track
@ -199,11 +199,12 @@ MEMO: specified-font ( assoc -- font )
[ font-size swap at >>size ] [ font-size swap at >>size ]
[ foreground swap at >>foreground ] [ foreground swap at >>foreground ]
[ background swap at >>background ] [ background swap at >>background ]
[ shadow swap at >>shadow ]
} cleave } cleave
derive-font ; derive-font ;
: apply-font-style ( style gadget -- style gadget ) : apply-font-style ( style gadget -- style gadget )
{ font-name font-style font-size foreground background } { font-name font-style font-size foreground background shadow }
pick extract-keys specified-font >>font ; pick extract-keys specified-font >>font ;
: apply-style ( style gadget key quot -- style gadget ) : apply-style ( style gadget key quot -- style gadget )

View File

@ -1,13 +1,23 @@
! Copyright (C) 2007, 2008 Slava Pestov. ! Copyright (C) 2007, 2008 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: accessors models models.delay models.arrow USING: accessors calendar colors colors.constants fonts kernel
sequences ui.gadgets.labels ui.gadgets.tracks models models.arrow models.delay sequences summary ui
ui.gadgets.worlds ui.gadgets ui ui.private kernel calendar summary ; ui.gadgets ui.gadgets.labels ui.gadgets.tracks
ui.gadgets.worlds ui.pens.solid ui.private ;
IN: ui.gadgets.status-bar IN: ui.gadgets.status-bar
: status-bar-font ( -- font )
sans-serif-font clone
T{ rgba f 0.216 0.243 0.282 1.0 } >>background
COLOR: white >>foreground ;
: status-bar-theme ( label -- label )
status-bar-font >>font
T{ rgba f 0.216 0.243 0.282 1.0 } <solid> >>interior ;
: <status-bar> ( model -- gadget ) : <status-bar> ( model -- gadget )
1/10 seconds <delay> [ "" like ] <arrow> <label-control> 1/10 seconds <delay> [ "" like ] <arrow> <label-control>
reverse-video-theme status-bar-theme
t >>root? ; t >>root? ;
: open-status-window ( gadget title/attributes -- ) : open-status-window ( gadget title/attributes -- )

View File

@ -11,7 +11,7 @@ ui.gadgets.viewports ui.tools.common ui.tools.browser.popups
ui.tools.browser.history ; ui.tools.browser.history ;
IN: ui.tools.browser IN: ui.tools.browser
TUPLE: browser-gadget < tool history pane scroller search-field popup ; TUPLE: browser-gadget < tool history scroller search-field popup ;
{ 650 400 } browser-gadget set-tool-dim { 650 400 } browser-gadget set-tool-dim
@ -59,9 +59,8 @@ M: browser-gadget set-history-value
dup <history> >>history dup <history> >>history
dup <search-field> >>search-field dup <search-field> >>search-field
dup <browser-toolbar> { 3 3 } <border> { 1 0 } >>fill f track-add dup <browser-toolbar> { 3 3 } <border> { 1 0 } >>fill f track-add
dup <help-pane> >>pane dup dup <help-pane> { 10 0 } <border> { 1 1 } >>fill
dup pane>> <scroller> >>scroller <scroller> >>scroller scroller>> 1 track-add ;
dup scroller>> 1 track-add ;
M: browser-gadget graft* M: browser-gadget graft*
[ add-definition-observer ] [ call-next-method ] bi ; [ add-definition-observer ] [ call-next-method ] bi ;

View File

@ -2,11 +2,11 @@
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: accessors kernel sorting sequences vocabs io io.styles arrays assocs USING: accessors kernel sorting sequences vocabs io io.styles arrays assocs
namespaces sets parser colors prettyprint.backend prettyprint.sections namespaces sets parser colors prettyprint.backend prettyprint.sections
vocabs.parser make fry math.order ; prettyprint.stylesheet vocabs.parser make fry math.order ;
IN: vocabs.prettyprint IN: vocabs.prettyprint
: pprint-vocab ( vocab -- ) : pprint-vocab ( vocab -- )
[ vocab-name ] [ vocab ] bi present-text ; [ vocab-name ] [ vocab vocab-style ] bi styled-text ;
: pprint-in ( vocab -- ) : pprint-in ( vocab -- )
[ \ IN: pprint-word pprint-vocab ] with-pprint ; [ \ IN: pprint-word pprint-vocab ] with-pprint ;
@ -85,7 +85,7 @@ PRIVATE>
"To avoid doing this in the future, add the following forms" print "To avoid doing this in the future, add the following forms" print
"at the top of the source file:" print nl "at the top of the source file:" print nl
] with-style ] with-style
{ { page-color T{ rgba f 0.8 0.8 0.8 1.0 } } } { { page-color T{ rgba f 0.94 0.94 0.91 1.0 } } }
[ manifest get pprint-manifest ] with-nesting [ manifest get pprint-manifest ] with-nesting
nl nl nl nl
] print-use-hook set-global ] print-use-hook set-global