[squeak-dev] Styles for Morphic
Igor Stasenko
siguctua at gmail.com
Sat Jan 16 03:13:57 UTC 2010
Hello guys,
thinking, how to easily define styles, based on simple selection rules,
i sketched the class, MorphStyle.
The principle how it works is simple:
- you creating a style, add adding actions to it
- you then applying style to morph or group of morphs.
Example:
| style |
style := MorphStyle new
submorphs
model: #Browser;
color: Color red.
style applyTo: World.
Let me describe in detail, what it does, when you applying it:
style applyTo: World.
Style initializing its current selection to be a collection with
single element - { World }.
Next thing, which it does is applying any actions , which we specified
during building the style,
namely:
'submorphs' - replacing the current selection by gathering all
submorphs of it, i.e.
selection before:
#( World )
selection after:
#( World's submorphs )
'model: #Browser' - filter the current selection and leave only those
entries, which respond to #model and model class name is #Browser
selection before:
#( world's submorphs )
selection after:
{ Browser SystemWindow#1. Browser SystemWindow#2. Browser
SystemWindow#3.Browser SystemWindow#4. }
'color: Color red'. - since there's no such method in MorphStyle, it
is trapped by DNU handler and
converted to a #sendMessage: action.
A #sendMessage: action sends a specified message to current selection, i.e.:
{ Browser SystemWindow#1. .... Browser SystemWindow#N. }
do: [:morph | message sendTo: morph ].
So, as result, if you doIt :
| style |
style := MorphStyle new
submorphs
model: #Browser;
color: Color red.
style applyTo: World.
all browser windows color will be changed to red color.
Some words about potential uses of this stuff.
- theming, (through defining own style sheets). In contrast to
existing implementation, we're free to define anything, which morph
understands ,
not just colors, border or fillstyle, but also, layout, fonts,
position etc etc.
- defining styles in various ways:
following snippet sets the 'browse' button color to red for all
browser windows and illustrating how one style could reuse another
one.
| browseButton buttonStyle browsers |
buttonStyle := MorphStyle new color: Color blue.
browseButton := MorphStyle new allSubmorphs; has: #label equalTo: 'browse'.
browsers := MorphStyle new model: #Browser.
browseButton style: buttonStyle. "browseButton reusing buttonStyle"
browsers style: browseButton. "browser style reusing browseButton style"
browsers applyTo: World submorphs.
It can be easily integrated with Morphic when using some global theme,
all we need is:
- add Morph>>applyThemeStyles
^ World currentTheme applyStylesTo: self
- send #applyStyles to morph, when its added to World.
Also, we could integrate it with toolbuilder which will allow us to define
morph layouts, fonts, colors & initial properties more flexibly than
currently are . Non-morphic builders could just ignore the #setStyles:
message.
Comments, suggestions , as always welcome.
--
Best regards,
Igor Stasenko AKA sig.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: MorphStyle.st
Type: application/octet-stream
Size: 4435 bytes
Desc: not available
Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20100116/9ff3357a/MorphStyle.obj
More information about the Squeak-dev
mailing list
|