I have two ideas for enhancements for the skinning engine which
could solve the problem of fullscreening and the problem of
visualizing plugins. These two enhancements could be done in an almost
completely backwards compatible way.

The two enhancements I propose are the following:

    * Widget Grouping
    * Widget Templates

  I will now go into depth by what I mean by each of these features.

Widget Grouping:

  Widget Grouping in essence would just be a container for other
widgets declared in our XML Format. The idea of these groups is to
maintain these properties:

  * Pos: each widget in the group calculates their true position based
upon the group's position.
  * Resizing strategy/position: each widget in the group could pick a
strategy for where to wind up on a resize. this being one of: center,
hug top left, hug bottom left, hug bottom right, hug top right.

  If a skin has no groups it can stil be compatible with the rest of
the code. If it is truly necessary in the new code to have every
widget part of a group we could set a default group where all widgets
are that uses the strategy center. This would keep the entire skin in
the center without resizing or moving at all.


Widget Templates:

  The idea behind widget templates is to have a set of templates that
set the properties of a widget. This way instead of declaring a widget
in the skin in this form:

 <Knob>
  <Tooltip>Channel highpass filter</Tooltip>
  <NumberStates>41</NumberStates>
  <Path>knobl%1.png</Path>
  <DisabledPath>knobg%1.png</DisabledPath>
  <Pos>62,587</Pos>
  <Connection>
   <ConfigKey>[Channel1],filterHigh</ConfigKey>
  </Connection>
  <Connection>
   <ConfigKey>[Channel1],filterHighKill</ConfigKey>
   <OnOff>true</OnOff>
  </Connection>
 </Knob>

It could be declared as such:

 <Template>
  <Type>Knob</Type>
  <Name>EqKnob</Name>
  <NumberStates>41</NumberStates>
  <Path>knobl%1.png</Path>
  <DisabledPath>knobg%1.png</DisabledPath>
 </Template>

 <Knob>
  <Template>EqKnob</Template>
  <Tooltip>Channel highpass filter</Tooltip>
  <Pos>62,587</Pos>
  <Connection>
   <ConfigKey>[Channel1],filterHigh</ConfigKey>
  </Connection>
  <Connection>
   <ConfigKey>[Channel1],filterHighKill</ConfigKey>
   <OnOff>true</OnOff>
  </Connection>
 </Knob>

  The advantage of this form of doing things is not evident until you
declare all of the EQ knobs. We could also have templates which become
the default for each widget type in a skin. With defaults being set by
the skin, any new plugin can use those declarations to draw itself.

  There are details to work out, but hopefully I was able to get
across the base ideas behind these enhancements.

  In the long run we might want to switch engines to something else
like QSS or Declarative UI, but for the moment this makes the most
sense, especially since there are so many other important tasks ahead
of us for 1.9.

------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Mixxx-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

Reply via email to