Le 9/8/16 à 21:15, Tudor Girba a écrit :
Hi,

We would definitely benefit from a Palette.

One interesting concepts in Bloc2 is that the concrete values are injected in 
the widget, instead of having the widget ask for it.
This is bit similar to settings.
A component should have its settings as variables and values get pushed inside instead of asking a
a large facade like systempreferences.

  This is quite powerful because it enables a CSS mechanism (or another one), 
but we also have to see how it works with the requirement of changing these 
values dynamically. This will certainly be a next step after the core is stable.

Cheers,
Doru


On Aug 9, 2016, at 3:03 PM, stepharo <steph...@free.fr> wrote:

Hi doru

I think that this is particularly true (having a themer per widget) when the 
themer is more a skinner (it changes behavior of the widgets), else we could 
have addressed the problem with a solution close to setting. Two years ago I 
played with theming and widgets hierarchy and I came to the same conclusion 
(that your blog entries).
Do you know how they do it in JavaFX?
I agree also that we should extract the Palette.
Now I'm really curious to see the CSS of Glenn in Bloc2.
Stef

Le 4/8/16 à 12:52, Tudor Girba a écrit :
Hi Esteban,

Sorry for the delayed response.

There are two parts in your mail:
1. the decomposition of theme to have one themer per widget
2. a centralized catalog of values

I certainly agree with 2. In fact, when I refactored the theme colors a long 
time ago, I introduced a rudimentary reuse mechanism on the class side of the 
Theme class. So, now, we should extract those separately.

About 1., I have a different opinion. The hierarchy you mention already exists 
in the Theme class as well, only it is hidden, and it is very hard to see what 
each methods impacts.

Here is how I reached this conclusion. Take a look at this picture I produced 
before we started with Brick (the one from Morphic). The gray circles are 
methods in UITheme, and the red circles are typical Morphs (like TextMorph, 
ListMorph). The gray lines show self calls inside the UITheme, and the red 
lines shod calls from the morph to the UITheme methods. What you see here is a 
very strong clustering of the methods around the widgets, and this indicates 
that having a theme object per widget is appropriate.


<Mail Attachment.png>


A further constrain is that we want to be able to change the appearance of a 
widget on an instance basis (that is, overriding the default theme setting), 
and having a per-widget themer object, we can achieve that as well.

A similar design appears in Bloc as well, and I think it is actually more 
scalable then the current UITheme, provided that you indeed have a way to 
either centralize the definitions of colors (and other properties), or inject 
those properties from the outside.

All in all, let’s go ahead and extract the palette :).

Cheers,
Doru


On Aug 1, 2016, at 11:13 AM, Esteban Lorenzano <esteba...@gmail.com> wrote:

Hi,

For one of my side-projects, I made a new theme for Pharo (still no name, I was 
planing to call it “Dark Metal” or something like that. Is a variation on the 
Dark Theme but “our” dark theme is more brown and this one is more blue (see 
attached)… I wanted to publish it to push it but then I arrived to an 
unexpected problem: For Spotter and GTTools in general, theming is not done 
following current theming approach. Instead, they made a full hierarchy of 
objects.

IMO this is plain bad. I understand the attempt to decouple, but now that means 
if I want to create a new theme, I need to create my theme object with colors I 
want and then also I need to create an undetermined number of classes (at least 
one for each tool, but there is also a hierarchy of things there)… anyway, this 
DOES NOT scale. Because each tool will have to have a “theme class” for each 
existing theme…
How themes (skins, bah) work in all word is to have a color palette and then 
tools takes them (they can “play” a bit with this palette, but need to always 
respect the palette).

Then, I will commit a SLICE modifying the “themer” classes to take colors from 
the current theme (instead of have them hardcoded).
But of course, how theme work now is not good because they mix “theme” (how 
they display) and “skin” (color palette). I will also extract the palette to 
where should have always been (some kind of a style sheet object)… who also 
should have been editable in settings so people can tweak their configuration.

I didn’t wanted to touch this before, because this will supposedly change with 
brick, but honestly this will not be ready for Pharo 6 and this is annoying 
(also, I want to publish my theme and I do not want to add overrides all around 
:P)

cheers,
Esteban


<Screen Shot 2016-08-01 at 11.00.15.png>
--
www.tudorgirba.com
www.feenk.com

"Innovation comes in the least expected form.
That is, if it is expected, it already happened."

--
www.tudorgirba.com
www.feenk.com

"To lead is not to demand things, it is to make them happen."








Reply via email to