From 8d9846837d7495be3aa3e27782bccb21b67f8a49 Mon Sep 17 00:00:00 2001 From: Ichthyostega Date: Thu, 16 Mar 2023 01:16:37 +0100 Subject: [PATCH] Timeline: document use of custom CSS rules The drawing code extracts style information from some "virtual" widgets, which serve as logical placeholder for the actual nested structure of tracks. For sake of demonstration, I used rather obvious colours and also all kinds of margin and padding; a screenshot was added with annotations to indicate where some specific style settings are utilised from the drawing code --- doc/devel/draw/TimelineCSS.svg | 393 ++++++++++++++++++++++++ doc/devel/images/TimelineCSS.png | 1 + doc/technical/code/c++11.txt | 4 +- doc/technical/code/codingGuidelines.txt | 2 +- doc/technical/library/DiffFramework.txt | 16 +- doc/technical/stage/style/Timeline.txt | 59 +++- wiki/draw/TimelineCSS.png | Bin 0 -> 101449 bytes wiki/renderengine.html | 74 ++++- wiki/thinkPad.ichthyo.mm | 110 ++++++- 9 files changed, 617 insertions(+), 42 deletions(-) create mode 100644 doc/devel/draw/TimelineCSS.svg create mode 120000 doc/devel/images/TimelineCSS.png create mode 100644 wiki/draw/TimelineCSS.png diff --git a/doc/devel/draw/TimelineCSS.svg b/doc/devel/draw/TimelineCSS.svg new file mode 100644 index 000000000..599bd3eda --- /dev/null +++ b/doc/devel/draw/TimelineCSS.svg @@ -0,0 +1,393 @@ + + + + + Timeline CSS rules + + + + + + + + + + image/svg+xml + + Timeline CSS rules + 15.Mar.2023 + + + Ichthyostega + + + + + + Lumiera.org + + + Demonstration of CSS rules used for Timeline canvas custom drawing + + + + + + + + + + + + + + + + Borders shifted to demonstrate drawing of drop shadows + + + + + Note: clipping due to shadow beyond margin + + + + box-shadow inset (DeepSkyBlue) + + + + box-shadow (ForestGreen) + + + + opening slope (next nesting level) + + + + margin-top: 2ex + + + + border: 3px outset DarkGoldenRod; + + + + padding-top: 10px + + + + combined closing slopeclass .track-slope--deep2+ border settings from fork.timeline__fork + + + + box-shadow5px 3px 6px 4px Sienna(note 6px blurring) + + + + fork.timeline__fork frame.timeline__ruler + + + + fork.timeline__fork + + + diff --git a/doc/devel/images/TimelineCSS.png b/doc/devel/images/TimelineCSS.png new file mode 120000 index 000000000..5b3c8b3d7 --- /dev/null +++ b/doc/devel/images/TimelineCSS.png @@ -0,0 +1 @@ +../draw/rendered/TimelineCSS.png \ No newline at end of file diff --git a/doc/technical/code/c++11.txt b/doc/technical/code/c++11.txt index 43b440119..dc2c92918 100644 --- a/doc/technical/code/c++11.txt +++ b/doc/technical/code/c++11.txt @@ -189,7 +189,7 @@ construction objects, when _it is important to avoid spurious copying,_ it is be helper function do the actual ctor invocation. WARNING: One insidious point to note is the rule that _explicitly defining a destructor_ will automatically - _suppress an otherwise automatically defined, implicit move constructor._ Move ctors really behave + _suppress an otherwise automatically defined, implicit move constructor._ In this respect, move constructors behave different than implicitly defined copy constructors; this was an often criticised, unfortunate design decision for C++. So the common advice is to observe the »**rule of five**«: ``whenever you define one of them, then define all of them''.footnote:[And it is sufficient to use `=default` @@ -315,7 +315,7 @@ impose some challenging effort to retrofit existing structures. to what we've done for C++11 to use our iterators and pipelines with the new standard ``for each'' loops. - *Modules* do not solve any real problems for the code base in its current shape. A migration to modules is - mostly a rather mechanical task, while requiring a fairly good understanding of the ``dark corners'' in the + a rather mechanical task largely, while requiring a fairly good understanding of the ``dark corners'' in the code base, like e.g. the size and build time for test code. Such a transition will also raise again the topic of the buildsystem. Unfortunately, what we've built on top of Scons with a little bit of python scripting is much cleaner and high-level than most ``mainstream'' usage of other common build systems out there.footnote:[ diff --git a/doc/technical/code/codingGuidelines.txt b/doc/technical/code/codingGuidelines.txt index e85d495d3..de52b8d95 100644 --- a/doc/technical/code/codingGuidelines.txt +++ b/doc/technical/code/codingGuidelines.txt @@ -104,7 +104,7 @@ General Code Arrangement and Layout - the includes for our own dependencies shall be given relative to source-root (or test root). Don't use relative includes for headers located in the same directory, or -- worse still -- in the parent directory. - sometimes, the actual translation units will combine several facilities for technical reasons.footnote:[to - elaborate, there can be ``headers'', which are in fact only be intended for inclusion at one or two distinct + elaborate, there can be ``headers'', which are in fact only intended for inclusion at one or two distinct places. This should be mentioned in the file-level comment, but generally is an acceptable practice, and better then lumping everything into a 1000 lines header. As a guideline, if you expect a rather technical concern not to be of much interest for most readers of a header, then better extract it into diff --git a/doc/technical/library/DiffFramework.txt b/doc/technical/library/DiffFramework.txt index 29618afc4..ec6cb0817 100644 --- a/doc/technical/library/DiffFramework.txt +++ b/doc/technical/library/DiffFramework.txt @@ -306,9 +306,9 @@ mutation. Some typical ``degenerated'' patterns of spelling out a diff are as fo position or the identity of the element. -representation of objects +Representation of objects ~~~~~~~~~~~~~~~~~~~~~~~~~ -While we are talking about _structured data,_ in fact the entities we are about to handle are *objects*, understood in +While we are talking about _structured data,_ in fact the entities we are about to handle are *objects*, conceived in the standard flavour of object orientation, where an object is the instance of a type and offers a contract. Incidentally, this is not the original, ``pure'' meaning of object orientation, but the one that became prolific to bring our daily practice closer to the inherent structuring of modern human organisation. And in dealing with this kind of object, we @@ -323,23 +323,23 @@ and if not, we'll get what we deserve.footnote:[This gives rise to a tricky disc and the costs incurred by that happening. We should not treat this topic in isolation; we should recall that loose coupling was chosen to avoid far more serious problems caused by tight coupling, and especially the deteriorating and poisoning effect on architecture and the further dire consequences of a global fixed common -data model -- which become prdominant when used in a large, not homogeneous system. +data model -- which prevail when used in large, not heterogenous systems. And _when a system indeed is not homogeneous,_ we better try to make each part open-closed, open for change but closed against extension. This is especially true in the case of the UI.] object representation protocol ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -A diff is created to tell some partner about our data, and the »protocol to describe an object« is as follows +A diff is created to tell some partner about our data, and the »protocol to describe an object« is defined as follows... -- the ID is the object's identity and is once given, right at start, and never changed -- we spell out any metadata (esp. a type information) first, followed by all attributes, +- the ID is the object's identity and is given once, right at start, and never changed +- we spell out any metadata first (esp. type information), followed by all attributes, and then followed by contents of the object's scope (children). -- attributes are to be given in a way not in contradiction to the more stringent semantics +- attributes are to be given such as not to counter the more stringent semantics of an object field or property * never attempt to re-order or delete such attributes, since their presence is fixed in the class definition - * when a field is mandatory _by its nature,_ it shall be required in construction, and the corresponding data + * when a field is mandatory _by its nature,_ it shall be required at construction, and the corresponding data is to be given with the `ins` verb causing the constructor call * on the other hand, the data for an optional field, when present, shall be spelled out by `ins` verb after construction, with the first _population diff._ diff --git a/doc/technical/stage/style/Timeline.txt b/doc/technical/stage/style/Timeline.txt index 4f35b0395..88f772a26 100644 --- a/doc/technical/stage/style/Timeline.txt +++ b/doc/technical/stage/style/Timeline.txt @@ -50,19 +50,19 @@ This leads to the following structure of selectors to attach the actual styling track fork:: attach rules to the selector `.timeline__page > .timeline__body fork.timeline__fork` + - - the `border top` and `border bottom` rules will be used to _draw the nested inset._ + - the `border-top` and `border-bottom` rules will be used to _draw the nested inset._ - a `margin` at top will add additional space between consecutive tracks - while the `padding` will be used within the track content area -- + of course only in vertical direction, since the horizontal extension is ruled by the time position of elements within the track - please also note that `background` stylings apply to the _content area_ and not the track space at a whole. - - especially a `box shadow` will be drawn when filling the background of the content area -- however, + - especially a `box-shadow` will be drawn when filling the background of the content area -- however, only an `inset` makes sense here, since a regular (outer) box shadow will be obscured and covered up by consecutive drawing actions... track ruler:: use a **`frame`** element and attach rules to the selector `fork.timeline__fork frame.timeline__ruler` + - - again the `border top` and `border bottom` settings will delimit the ruler form the other track content + - again the `border` `top` and `bottom` settings will delimit the ruler form the other track content - while `margin` and `padding` apply as usual outside and within the border - here the `box shadow` will be drawn with the background and aligned with the frame -- and again, only an `inset` really makes sense, while a regular (outer) box shadow must be @@ -85,18 +85,53 @@ header:: fork head:: Located within the PatchbayWidget resides a nested structure of fork head controls - each such TrackHeadWidget is derived from Gtk::Grid and marked with class `.fork__head` - - the first row in the grid holds a Track Header label and menu,an ElementBoxWidget with class `.elementbox` - - the second row corresponds to the _content area_ of the track itself, - and hold the controls for this track's scope, i.e. the track _together with all nested sub-tracks._ - - in the second cell in this row resides the HeadControlArea with class `.fork__control` + - the first row in the grid holds a Track Header label and menu, an ElementBoxWidget with class `.elementbox` + - the second row corresponds to the _content area_ of the track itself + - in the second cell in this row resides the HeadControlArea with class `.fork__control` -- which + houses the controls for this track's scope, i.e. the track _together with all nested sub-tracks._ - next comes a padding row to help synchronising track head and track body display - Additional sub-Tracks are added as additional lines to the grid, and each such line will hold a nested TrackHeadWidget in the second cell; this also implies that this - nested sub-Track head can again hold deeper nested sub-Tracks.... - - The first column to the left side, starting from the second row will be increased accordingly to indicate + nested sub-Track head can again hold deeper nested sub-Tracks recursively.... + - The first column to the left side, starting from the second row, will be increased accordingly to indicate the nested fork structure, rendered as a nested set of »stave brackets« with class `.fork__bracket` -[red]##TODO 10/2022:## - - [red]##give an example what our custom drawing code actually extracts and uses## - - [red]##also document a resulting selector for an actual Clip element in a concrete timeline## +Demonstration of CSS for custom drawing +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +The example below demonstrates how CSS rules are picked up and used for custom drawing of the fork structure +onto the Timeline body canvas. For sake of demonstration, the drawing code was manipulated slightly, by shifting +borders to reveal the box shadow effect, and to show canvas content beyond the timeline end. + +Lumiera used the »light theme complement« stylesheet for this demonstration -- thus most of the styles are derived +from the custom desktop theme. A few additional class definitions were added for styling of the timeline body display, +using rather distinct colours and excessive padding and margins to emphasise their effect on the drawing routine + +[source,css] +-------------------------------------------------------------------------- + .timeline__page > .timeline__body fork.timeline__fork { + margin: 2ex; + padding: 10px; + border-style: inset; + border-color: IndianRed; + background-color: Lime; + box-shadow: inset 2px 2px 5px 1px DeepSkyBlue, + 5px 5px 2px 1px ForestGreen; +} + fork.timeline__fork frame.timeline__ruler { + margin: 1ex; + padding: 5px; + border: 3px outset DarkGoldenRod; + background-color: SandyBrown; + box-shadow: inset 2px 2px 5px 1px RosyBrown, + 5px 3px 6px 4px Sienna; +} +-------------------------------------------------------------------------- + +image:{imgd}/TimelineCSS.png["Demonstration of CSS for custom drawing"] + + +[red]##TODO 3/2023:## + + - [red]##should also document the selector for an actual Clip element in a concrete timeline## + diff --git a/wiki/draw/TimelineCSS.png b/wiki/draw/TimelineCSS.png new file mode 100644 index 0000000000000000000000000000000000000000..5728fb71b4ac0d8dab90550285d5aa96c6de15ae GIT binary patch literal 101449 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 z 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 RBLe|H;$Njj%7t|O{}%wmq3r+w literal 0 HcmV?d00001 diff --git a/wiki/renderengine.html b/wiki/renderengine.html index d24794ea1..f6bd1dfa6 100644 --- a/wiki/renderengine.html +++ b/wiki/renderengine.html @@ -3629,7 +3629,7 @@ In accordance with the Lumiera application architecture in general, the UI is no

A specially configured LumieraPlugin, which actually contains or loads the complete code of the (GTK)GUI, and additionally is linked dynamically against the application core lib. During the [[UI startup process|GuiStart]], loading of this Plugin is triggered from {{{main()}}}. Actually this causes spawning of the GTK event thread and execution of the GTK main loop.
 
-
+
The presentation of the track body area relies on the [[Gtk::Layout "canvas widget"|GtkLayoutWidget]], thus allowing for a mixture of custom drawing with embedded custom Gtk widgets. The actual drawing routine is activated in response to the {{{on_draw}}} signal -- and invoking the inherited handler function will initiate the standard drawing for the embedded child widgets. This partitions the additional, specific drawing activities into a pre-widget drawing phase to prepare the background and framework structure of the track area, and a post-widget drawing phase to show all kinds of overlays, markers cursors and similar UI indicators. A nested structure of {{{TrackBody}}} objects serves as organisational device to structure these custom drawing activities in accordance with the nested structure of the track fork.
 
 !Building a nested 3D structure
@@ -3658,23 +3658,23 @@ Once the fundamental decision towards a 3D structure is taken, there still is so
 * shading can indicate a //slope// up or down.
 An immediate consequence to draw from this observation is that ~CSS3 effects are only of limited use for this purpose. They are more helpful to highlight compact and local structures, like a menu button, or some element or handle on the clips. We can (and likely will) use CSS shading for the [[track overview rulers|TrackRuler]] though. We possibly could use a slight inset box shadow within the actual track content area. However, it is rather pointless to use a box shadow to paint the nested track scope insets -- we rather need to rely on gradients and direct colour shading for that purpose.
 
-Another consequence  is that we do not need to apply an overall "stacked boxes" approach -- there is not much to gain from doing so (and we would do a lot of unnecessary filling operations, most of which will actually be clipped away). For that reason, we define our ''track profile'' to represent a vertical //top-down drawing sweep.// Non the less, the actual colours and shades can be defined completely through CSS rules. To achieve this, we apply some tricks
+Another consequence  is that we do not need to apply an overall "stacked boxes" approach -- there is not much to gain from doing so (and we would do a lot of unnecessary filling operations, most of which will actually be clipped away). For that reason, we define our ''track profile'' to represent a vertical //top-down drawing sweep.// Non the less, the actual colours and shades can be defined completely through [[CSS rules|GuiTimelineStyle]]. To achieve this, we apply some tricks
 * we define //virtual widgets,// which are only used to match against selectors and pick up the attached CSS styles
 ** the virtual element {{{fork}}} represents "a timeline track"
 ** and a virtual {{{frame}}} element nested therein represents "a ruler on top of a timeline track"
-* this leads to the following selectors to attach the actual styling rules
+* this leads to the following selectors to attach the &rarr; [[actual styling rules|GuiTimelineStyle]]
 *;track fork
 *:attach rules to the selector {{{.timeline__page > .timeline__body fork.timeline__fork}}}
-*:* the {{{border top}}} and {{{border bottom}}} rules will be used to //draw the nested inset.//
+*:* the {{{border-top}}} and {{{border-bottom}}} rules will be used to //draw the nested inset.//
 *:* a {{{margin}}} at top will add additional space between consecutive tracks
 *:* while the {{{padding}}} will be used within the track content area -- <br/> of course only in vertical direction, since the horizontal extension is ruled by the time position of elements within the track
 *:* please note that {{{background}}} stylings apply to the //content area// and not the track space at a whole.
-*:* especially a {{{box shadow}}} will be drawn when filling the background of the content area -- however, only an {{{inset}}} makes sense here,<br/>since a regular (outer) box shadow will be covered by consecutive drawing actions...
+*:* especially a {{{box-shadow}}} will be drawn when filling the background of the content area -- however, only an {{{inset}}} makes sense here,<br/>since a regular (outer) box shadow will be covered by consecutive drawing actions...
 *;track ruler
 *:attach rules to the selector{{{fork.timeline__fork frame.timeline__ruler}}}
-*:* again the {{{border top}}} and {{{border bottom}}} settings will delimit the ruler form the other track content
+*:* again the {{{border}}} ({{{top}}} and {{{bottom}}}) settings will delimit the ruler form the other track content
 *:* while {{{margin}}} and {{{padding}}} apply as usual outside and within the border
-*:* here the {{{box shadow}}} will be drawn with the background and aligned with the frame -- and again, only an {{{inset}}} really makes sense,<br/>while a regular (outer) box shadow must be small enough to stick within the limits of the {{{margin}}}
+*:* here the {{{box-shadow}}} will be drawn with the background and aligned with the frame -- and again, only an {{{inset}}} really makes sense,<br/>while a regular (outer) box shadow must be small enough to stick within the limits of the {{{margin}}}
 *;slopes
 *:we use several classes to define the effect of consecutive nested frames forming a common slope; however,
 *:we perform this combination effect only with a limit of 5 steps depth. Only closing (upward) slopes can be combined.
@@ -3701,7 +3701,57 @@ Now, since we build our UI on the notion of mapping session contents via a messa
 
 In any case, this is an advanced topic, and nowhere near trivial. It seems reasonable to reject opening duplicate timeline presentations as a first step, and then address this topic way later, when we've gained sufficient knowledge regarding all the subtleties of timeline presentation and editing.
-
+
+
In parts, the Lumiera Timeline UI will be implemented by custom drawing onto a //Canvas Control,// using libCairo for the actual drawing operations. Beyond the challenge of coordinating an elaborated and nested layout, a special twist arises from the ability for custom styling, present in most contemporary desktop environments -- without special precautions, our custom drawing runs danger of creating a visual style separate and in contradiction to the common style set by the chosen desktop theme. This challenge can be resolved, at least in part, by tapping into the existing CSS definitions, to retrieve the necessary settings and adapt them to our special needs.
+
+To this end, a hierarchy of virtual placeholder widgets is used by the »~StyleManager« in {{{stage::workspace::UiStyle::prepareStyleContext()}}} -- these will represent the structures actually created by custom drawing, and allow to retrieve any CSS definitions applicable at that point in the style class hierarchy.
+As outlined in the [[explanation of the actual drawing code|GuiTimelineDraw]], this virtual style hierarchy is comprised of several selectors...
+* the virtual element {{{fork}}} represents "a timeline track"
+** the selector {{{.timeline__page > .timeline__body fork.timeline__fork}}} will pick up definitions
+*** to define the //appearance of the nested inset// based on {{{border}}} settings ({{{top}}} and {{{bottom}}})
+*** a {{{margin}}} at top will add additional space between consecutive tracks
+*** while the {{{padding}}} in vertical direction will be used within the track content area
+*** please note that {{{background}}} stylings apply to the //content area// and not the track space at a whole.
+*** especially a {{{box-shadow}}} will be drawn when filling the background of the content area -- however, only an {{{inset}}} makes sense here,<br/>since a regular (outer) box shadow will be covered by consecutive drawing actions...
+* a virtual {{{frame}}} element nested within the {{{fork}}} represents "a ruler on top of a timeline track"
+** here the selector{{{fork.timeline__fork frame.timeline__ruler}}} will pick up appropriate definitions
+*** again the {{{border-top}}} and {{{border-bottom}}} settings will delimit the ruler form the other track content
+*** while {{{margin}}} and {{{padding}}} apply as usual outside and within the border
+*** here the {{{box-shadow}}} will be drawn with the background and aligned with the frame -- and again, only an {{{inset}}} really makes sense,<br/>while a regular (outer) {{{box-shadow}}} must be small enough to stick within the limits of the {{{margin}}}
+* Slopes connecting nested sub-Tracks will be governed by styles...
+** we use class {{{.track-slope--deep1}}} for a simple slope (inset by one nested level)
+** class {{{.track-slope--deep2}}} for two consecutive nested steps combined.
+** likewise class {{{.track-slope--deep3}}} for three and class {{{.track-slope--deep4}}} for four combined slopes
+** finally, class {{{.track-slope--verydeep}}} is used for five and more combined upward (closing) slopes
+
+!Demonstration of CSS for custom drawing
+The example below demonstrates how CSS rules are picked up and used for custom drawing of the fork structure on the Timeline body canvas.
+For sake of demonstration, the drawing code was slightly manipulated, so to shift borders and show canvas content beyond the timeline end.
+
+Lumiera used the »light theme complement« stylesheet -- thus most of the styles are drawn from the desktop theme.
+A few additional class definitions were added for styling of the timeline body display
+{{{
+  .timeline__page > .timeline__body fork.timeline__fork {
+    margin: 2ex;
+    padding: 10px;
+    border-style: inset;
+    border-color: IndianRed;
+    background-color: Lime;
+    box-shadow: inset 2px 2px 5px 1px DeepSkyBlue,
+                      5px 5px 2px 1px ForestGreen;
+}
+  fork.timeline__fork frame.timeline__ruler {
+    margin: 1ex;
+    padding: 5px;
+    border: 3px outset DarkGoldenRod;
+    background-color: SandyBrown;
+    box-shadow: inset 2px 2px 5px 1px RosyBrown,
+                      5px 3px 6px 4px Sienna;
+}
+}}}
+[>img[Demonstration of CSS for custom drawing|draw/TimelineCSS.png]]
+
+
Within the Lumieara GUI, the [[Timeline]] structure(s) from the HighLevelModel are arranged and presented according to the following principles and conventions.
 Several timeline views may be present at the same time -- and there is not necessarily a relation between them, since »a Timeline« is the top-level concept within the [[Session]]. Obviously, there can also be several //views// based on the same »Timeline« model element, and in this latter case, these //coupled views// behave according to a linked common state. An entity »Timeline« as represented through the GUI, emerges from the combination of several model elements
 * a root level [[Binding|BindingMO]] acts as framework
@@ -3742,7 +3792,11 @@ The dockable ''timeline pannel'' holds onto the existing {{{TimelineWidget}}} in
 In case the UI starts with no session present in the core, an //empty timeline placeholder// will be displayed, which provides UI for creating a new session...
 
 !!!The Canvas
-At least the track body area of the timeline display needs to be implemented in parts by //custom drawing// onto a [[»Canvas widget«|GtkLayoutWidget]] -- meaning that we have both to coordinate explicit graphic operations using the »Cairo« library, and child widgets attached at explicit positions on top of this canvas. These nested widgets in turn need to know about the calibration of the canvas in terms of time and pixels, to be able to adjust their display to fit into the established metric. As the first implementation attempt for the timeline highlighted, at this point there is a lurking danger to slide into the usage of one central „God class“ -- in this case a //Layout Manager// -- which has to actuate and coordinate any related interplay by „pulling the strings“ like a puppeteer. To forego that threat, we introduce yet another abstraction: a [[»Canvas Interface«|GuiCanvasInterface]] to support attachment of widgets and handle the translation of logical (time based) coordinates into pixel values.
+At least the track body area of the timeline display needs to be implemented in parts by //custom drawing// onto a [[»Canvas widget«|GtkLayoutWidget]] -- meaning that we have both to coordinate explicit graphic operations using the »Cairo« library, and child widgets attached at explicit positions on top of this canvas. These nested widgets in turn need to know about the calibration of the canvas in terms of time and pixels, to be able to adjust their display to fit into the established metric. As the first implementation attempt for the timeline highlighted, at this point there is a lurking danger to slide into the usage of one central „God class“ -- in this case a //Layout Manager// -- which has to actuate and coordinate any related interplay by „pulling the strings“ like a puppeteer. To forego that contraption, we introduce yet another abstraction: a [[»Canvas Interface«|GuiCanvasInterface]] to support attachment of widgets and handle the translation of logical (time based) coordinates into pixel values.
+
+Another difficulty arises from the ability for custom styling, present in most contemporary desktop environments -- which is typically implemented within the UI toolkit, thereby more or less relying on a fixed set of standard widgets known in advance to the designer. Once we start implementing the visual representation based on custom drawing code, we are bound to define colours and other drawing properties, and while doing so, we are in danger of creating our own visual style separate and in contradiction to the common style set by the chosen desktop theme. This challenge can be resolved, at least in part, by tapping into the existing CSS definitions, to retrieve the necessary settings and adapt them to our special needs. A way to accomplish this, is to build a virtual hierarchy of placeholder widgets -- these will represent the structures actually created by custom drawing, while retrieving any CSS definitions applicable at that point in the style class hierarchy.
+&rarr; see details of [[styling the Timeline|GuiTimelineStyle]]
+
 
 !!!Placements
 As indicated in the drawing above, pretty much every UI element exposes a button to //edit its placement.// &rarr; GuiPlacementDisplay
@@ -9452,7 +9506,7 @@ The actual presentation of ruler elements is a fusion of parametrisation, track
 ** the ruler of an //expanded fork// (a track with nested child tracks) will typically give a summary of effective content, but can also be hidden, or feature other content
 ** the ruler of an //expanded leaf track// (no child tracks) will typically be hidden, but can likewise be configured to show specific data
-
+
//Graphical representation of the nested Track scopes as part of the TrackHead display.//
 The design (and the name) of this graphical display is inspired by musical notation, where it is customary to indicate with a bracket the grouping of stems (or staves) forming an ensemble, while a brace typically groups the staves to be played on a single instrument, e.g. a grand piano or organ.
 
diff --git a/wiki/thinkPad.ichthyo.mm b/wiki/thinkPad.ichthyo.mm
index bf5fa45e4..d6a4e2c67 100644
--- a/wiki/thinkPad.ichthyo.mm
+++ b/wiki/thinkPad.ichthyo.mm
@@ -6160,6 +6160,49 @@
 
 
 
+
+
+  
+    
+  
+  
+    

+ Style-Scheme for Lumiera +

+ +
+ + + + + + + + + + +

+ #1168 : find a way to manage style of +

+

+               custom extended UI elements +

+ +
+ + + + + +
+
+ + + + + + +
@@ -6171,9 +6214,6 @@ - - - @@ -31143,7 +31183,7 @@ - + @@ -31245,9 +31285,21 @@ - + - + + + + + + + +

+ ...es kommt halt nix Spezifisches aus dem Model, aber es gäbe auch bisher gar keine entsprechenden Diff-Bindings und Model-Properties im GUI +

+ +
+
@@ -31903,7 +31955,7 @@
- + @@ -32454,7 +32506,7 @@ - + @@ -32469,6 +32521,7 @@ + @@ -32881,6 +32934,7 @@ + @@ -33689,6 +33743,23 @@ + + + + + + + + + +

+ TiddlyWiki + doc/technical/stage/style/Timeline.txt +

+ + +
+
+
@@ -46486,7 +46557,7 @@ - + @@ -46497,6 +46568,20 @@

+ +
+ + + + + + +

+ per Trace-Meldung überprüft: calibrateExtension() ist so programmiert, daß es die bestehende Metrik erhält, sondern das ZoomWindow entsprechend verkleinert. Der Code verwendet bisher nur default-Werte für die Timeline ⟹ die Metrik bleibt auf 25px/sec stehen, und damit wird die Gesamtlänge stets mindestens 575px sein; Ausnahme: wenn das Fenster ohnehin größer ist... +

+ +
+
@@ -47053,6 +47138,7 @@
+ @@ -47123,6 +47209,12 @@
+ + + + + +