What use-case are you targeting here?

I don't see a a clear need for having multiple styling mechanisms, and 
supporting such a mechanism would add unnecessary
complexity.

-- Noel Grandin

aappddeevv wrote:
> I think any step you take in this direction is good!
>
> However, what you propose can be accomplished in external code with a few
> static methods. It would be good to understand what pivot's intentions are
> around the evolution of the themeing/skin API and how styling features fit
> into that in a seamless way.
>
> Also, the use of the approach embeds another DSL (for combining styles) into
> an attribute's string values (which is not pluggable in the current pivot
> code base) and I would think very carefully about doing that. If you are
> going to make any changes, I would encourage making styling more pluggable
> and make the approach you outline one instantiation of that pluggable
> approach.
>
>
>
>
> -----Original Message-----
> From: Greg Brown [mailto:gkbr...@mac.com] 
> Sent: Wednesday, June 30, 2010 9:01 AM
> To: dev@pivot.apache.org
> Subject: Named styles
>
> Hi all,
>
> I have recently been giving some thought to how we might support a form of
> style propagation. This has come up a few times and is clearly a feature
> that developers would like the platform to provide.
>
> By design, Pivot does not currently support style inheritance. We decided up
> front that there is not enough commonality between component and container
> styles for such an inheritance mechanism to make sense. What does make
> sense, however, is the concept of "named styles". These are similar in
> concept to CSS classes - they would allow a caller to specify a set of
> styles by name that should be applied to a component. For example, all
> Labels associated with the "boldLabel" named style would be bold.
>
> Pivot currently supports a rudimentary form of named styles via the
> URL-based styles setter:
>
> <Label styles="@my_label_styles.json"/>
>
> There are a couple of downsides to this approach, though:
>
> - It requires designers to split their style definitions into many small
> files.
>
> - It only allows the designer to apply a single set of styles; style sets
> cannot be combined (e.g. "apply both my_styles1.json and my_styles2.json"),
> nor can they be overridden on a per-component basis by applying local styles
> (e.g. "apply my_styles.json and {foo:'bar'}").
>
> I have a proposed solution and I would like to hear your feedback on it. I
> suggest that we add a "namedStyles" property at the Container level. This
> property would be a read-only dictionary mapping style group names to maps
> of style properties:
>
> Container {
>       NamedStyleDictionary : Dictionary<String, Map<String, ?>>
> }
>
> These styles could be referred to by child components of the container. For
> example, the following would create a "boldLabel" style at the Window level
> and apply it to the window's content:
>
> <Window namedStyles="{boldLabel:{font:{bold:true}}}">
>       <Label styles="boldLabel"/>
> </Window>
>
> Named styles could be combined as well as augmented on a per-component basis
> by local styles:
>
> <Label styles="boldLabel, redLabel, {backgroundColor:'#00ff00'}"/>
>
> Additionally, nested container could override styles defined by an ancestor:
>
> <Window namedStyles="{myLabel:{color:'#ff0000'}}">
>       <BoxPane namedStyles="{myLabel:{color:'#0000ff'}}">
>               <!-- Label text will be blue -->
>               <Label styles="myLabel"/>
>       </BoxPane>
> </Window>
>
> Finally, named styles could be stored externally and loaded via URL or
> resource path:
>
> <Window namedStyles="@my_styles.json">
> ...
> </Window>
>
> <Window namedStyles="com/foo/my_styles.json">
> ...
> </Window>
>
> Overall, I think the approach works well. It addresses the major issues that
> have been raised and does so in a manner that is consistent with other
> aspects of BXML and WTK. There is only one aspect of the design that I am
> not 100% happy with - supporting a simple "namedStyles" attribute would only
> allow the developer to include a single named styles definition per
> container. In practice, this is probably sufficient, but it would be nice to
> support multiple style sheets if possible. My proposed solution to this is
> as follows:
>
> <Window>
>     <namedStyles buttons="@button_styles.json"
>         labels="{color:'#ff0000'}"/>
> ...
> </Window>
>
> This would be the equivalent of the following style sheet applied via the
> "namedStyles" attribute:
>
> {     buttons: {
>               // content of button_styles.json
>       },
>
>       labels: {
>               color: "#ff0000"
>       }
> }
>
> This syntax could be supported in addition to, or instead of, the attribute
> syntax. 
>
> Please let me know what you think of this possible approach.
>
> Thanks,
> Greg
>

Reply via email to