XV-Display: introduce a new kind of docking panel for the play-control

While this is not strictly necessary for this experiment,
this is something we should try to establish early:

A »play control« should be handled as an independent UI element,
without tying it logically with some viewer (or timeline); the reason is
that such a play control needs a set of very well designed keyboard bindings,
and thus we will attempt use a focus concept to link to some active viewer
instead of creating one primary viewer, which gets the benefit of the
well accessible keybindings.

Basically we want to create an explicit association between
 - a timeline
 - some viewer
 - a play-control

Introducing a new kind of panel shows again that the `PanelManager`
needs a rework; everything there is way too much ''hard wired''

And the new panel with the play control needs an **Icon** — which is
a challenge in itself; my proposal here is to build on the film metaphor,
and combine the symbol of "Play / Pause" with an stylised film or tape player
(with the secondary idea that this icon also somewhat looks like a owl face)
This commit is contained in:
Fischlurch 2025-05-05 23:48:22 +02:00
parent ac5a2f371d
commit b0e8fa2ff6
10 changed files with 812 additions and 25 deletions

View file

@ -0,0 +1,517 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="150"
height="100"
id="icon"
sodipodi:version="0.32"
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
version="1.0"
sodipodi:docname="panel-play.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<title
id="doctitle">Icon: play control</title>
<defs
id="defsz">
<filter
inkscape:collect="always"
style="color-interpolation-filters:sRGB"
id="filter21"
x="-0.069065808"
y="-0.094578709"
width="1.1381316"
height="1.1891574">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="0.8775"
id="feGaussianBlur21" />
</filter>
<filter
inkscape:collect="always"
style="color-interpolation-filters:sRGB"
id="filter28"
x="-0.08906238"
y="-0.13716608"
width="1.1781248"
height="1.2743322">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="1.7338546"
id="feGaussianBlur28" />
</filter>
<filter
inkscape:collect="always"
style="color-interpolation-filters:sRGB"
id="filter1"
x="-0.078995671"
y="-0.10222452"
width="1.1579913"
height="1.204449">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="0.686925"
id="feGaussianBlur1" />
</filter>
<filter
inkscape:collect="always"
style="color-interpolation-filters:sRGB"
id="filter2"
x="-0.13502681"
y="-0.16314888"
width="1.2700536"
height="1.3262978">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="0.87631782"
id="feGaussianBlur2" />
</filter>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
gridtolerance="10000"
guidetolerance="10"
objecttolerance="10"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="5"
inkscape:cx="75"
inkscape:cy="40"
inkscape:document-units="px"
inkscape:current-layer="layerp"
showgrid="false"
inkscape:snap-nodes="true"
inkscape:snap-bbox="true"
inkscape:snap-global="true"
showguides="true"
inkscape:guide-bbox="true"
inkscape:window-width="1920"
inkscape:window-height="1061"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:showpageshadow="2"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1">
<inkscape:grid
type="xygrid"
id="pixelgrid"
visible="false"
enabled="true"
spacingx="0.5"
spacingy="0.5"
empspacing="2"
originx="0"
originy="0"
units="px" />
</sodipodi:namedview>
<metadata
id="metadead">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title>Icon: play control</dc:title>
<cc:license
rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
<dc:creator>
<cc:Agent>
<dc:title>Ichthyostega</dc:title>
</cc:Agent>
</dc:creator>
<dc:publisher>
<cc:Agent>
<dc:title>Lumiera.org</dc:title>
</cc:Agent>
</dc:publisher>
<dc:description>Icon to identify a play-control in the GUI
prepared for Lumiera build :: Icon rendering</dc:description>
<dc:identifier>icon:panel-play</dc:identifier>
<dc:date>2025</dc:date>
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/licenses/by-sa/4.0/">
<cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" />
<cc:requires
rdf:resource="http://creativecommons.org/ns#Notice" />
<cc:requires
rdf:resource="http://creativecommons.org/ns#Attribution" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
<cc:requires
rdf:resource="http://creativecommons.org/ns#ShareAlike" />
</cc:License>
</rdf:RDF>
</metadata>
<g
inkscape:groupmode="layer"
inkscape:label="artwork:panel-play"
id="aardvark"
style="display:inline">
<g
inkscape:groupmode="layer"
id="layerp"
inkscape:label="plate#1"
style="display:none"
sodipodi:insensitive="true">
<rect
id="bbox48"
x="8"
y="44"
width="48"
height="48"
style="fill:black;fill-opacity:0.5;stroke:#5a8fb2;stroke-width:0.1;stroke-opacity:1"
sodipodi:insensitive="true" />
<rect
id="bbox32"
x="60"
y="60"
width="32"
height="32"
style="fill:black;fill-opacity:0.5;stroke:#5a8fb2;stroke-width:0.1;stroke-opacity:1"
sodipodi:insensitive="true" />
<rect
id="bbox24"
x="96"
y="68"
width="24"
height="24"
style="fill:black;fill-opacity:0.5;stroke:#5a8fb2;stroke-width:0.1;stroke-opacity:1"
sodipodi:insensitive="true" />
<rect
id="bbox22"
x="97"
y="69"
width="22"
height="22"
style="fill:black;fill-opacity:0.5;stroke:#5a8fb2;stroke-width:0.1;stroke-opacity:1"
sodipodi:insensitive="true" />
<rect
id="bbox16"
x="124"
y="76"
width="16"
height="16"
style="fill:black;fill-opacity:0.5;stroke:#5a8fb2;stroke-width:0.1;stroke-opacity:1"
sodipodi:insensitive="true" />
</g>
<g
id="player48">
<g
id="shadow1"
style="display:inline;mix-blend-mode:normal;fill:#4d4d5a;fill-opacity:0.686957;filter:url(#filter28)"
transform="translate(0.55689404,1.6033577)">
<path
id="sh_f1"
style="display:inline"
d="m 43.920868,53.907033 a 11.68072,12 0 0 0 -11.68072,12 11.68072,12 0 0 0 11.68072,12 11.68072,12 0 0 0 11.680721,-12 11.68072,12 0 0 0 -11.680721,-12 z m 0,7.5 a 4.3802703,4.5 0 0 1 4.38027,4.5 4.3802703,4.5 0 0 1 -4.38027,4.5 4.3802703,4.5 0 0 1 -4.38027,-4.5 4.3802703,4.5 0 0 1 4.38027,-4.5 z m -23.361442,-7.5 a 11.68072,12 0 0 0 -11.6807199,12 11.68072,12 0 0 0 11.6807199,12 11.68072,12 0 0 0 11.680722,-12 11.68072,12 0 0 0 -11.680722,-12 z m 0,7.5 a 4.3802703,4.5 0 0 1 4.380271,4.5 4.3802703,4.5 0 0 1 -4.380271,4.5 4.3802703,4.5 0 0 1 -4.380269,-4.5 4.3802703,4.5 0 0 1 4.380269,-4.5 z" />
<path
id="sh_h1"
style="display:inline"
d="m 27.374586,76.244353 h 3 v 8 h -3 z m 5,-2e-6 8,4 -8,4 z" />
</g>
<g
id="film1"
style="display:inline;stroke:#6c5d6f;stroke-opacity:1">
<path
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#6c5d6f;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
d="M 15.519846,76.588962 26,81 h 2"
id="filmpath11"
sodipodi:nodetypes="ccc" />
<path
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#6c5d6f;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
d="m 39,81 h 2.5 l 8.677558,-5.30418"
id="filmpath12"
sodipodi:nodetypes="ccc" />
</g>
<g
id="spool11"
transform="translate(-22.970703,34)">
<path
id="film11"
style="color:black;font-variation-settings:normal;overflow:visible;opacity:1;vector-effect:none;fill:#6c5d6f;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none"
d="m 42.970703,20 a 12,12 0 0 0 -12,12 12,12 0 0 0 12,12 12,12 0 0 0 12,-12 12,12 0 0 0 -12,-12 z m 0,7.5 a 4.5,4.5 0 0 1 4.5,4.5 4.5,4.5 0 0 1 -4.5,4.5 4.5,4.5 0 0 1 -4.5,-4.5 4.5,4.5 0 0 1 4.5,-4.5 z" />
<circle
style="color:black;font-variation-settings:normal;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:black;stroke-width:0.999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none"
id="core11"
cx="42.970703"
cy="32"
r="4.5" />
</g>
<g
id="spool12"
transform="translate(1.029297,34)">
<path
id="film12"
style="color:black;font-variation-settings:normal;overflow:visible;opacity:1;vector-effect:none;fill:#6c5d6f;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none"
d="m 42.970703,20 a 12,12 0 0 0 -12,12 12,12 0 0 0 12,12 12,12 0 0 0 12,-12 12,12 0 0 0 -12,-12 z m 0,7.5 a 4.5,4.5 0 0 1 4.5,4.5 4.5,4.5 0 0 1 -4.5,4.5 4.5,4.5 0 0 1 -4.5,-4.5 4.5,4.5 0 0 1 4.5,-4.5 z" />
<circle
style="color:black;font-variation-settings:normal;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:black;stroke-width:0.999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none"
id="core12"
cx="42.970703"
cy="32"
r="4.5" />
</g>
<g
id="head1"
transform="translate(5.03,33)"
style="display:inline">
<path
style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.999999px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 26.97,44.0 8.24,4.14 -8.24,3.86 z"
id="play1"
sodipodi:nodetypes="cccc" />
<rect
style="color:black;font-variation-settings:normal;overflow:visible;opacity:1;vector-effect:none;fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none"
id="pause1"
width="3.3"
height="8"
x="21.97"
y="44"
ry="0" />
</g>
</g>
<g
id="player32">
<g
id="shadow2"
style="font-variation-settings:normal;opacity:1;mix-blend-mode:normal;vector-effect:none;fill:#4d4d5a;fill-opacity:0.686957;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;filter:url(#filter21);stop-color:black;stop-opacity:1"
transform="translate(0.95831709,1.0146887)">
<path
id="sh_f2"
style="display:inline;stroke-width:0.999995"
d="m 67.095397,66.394602 a 7.3772554,7.5 0 0 0 -7.377255,7.5 7.3772554,7.5 0 0 0 7.377255,7.5 7.3772554,7.5 0 0 0 7.377255,-7.5 7.3772554,7.5 0 0 0 -7.377255,-7.5 z m 0,4.6875 a 2.7664708,2.8125 0 0 1 2.766471,2.8125 2.7664708,2.8125 0 0 1 -2.766471,2.8125 2.7664708,2.8125 0 0 1 -2.766471,-2.8125 2.7664708,2.8125 0 0 1 2.766471,-2.8125 z m 15.738147,-4.6875 a 7.3772554,7.5 0 0 0 -7.377256,7.5 7.3772554,7.5 0 0 0 7.377256,7.5 7.3772554,7.5 0 0 0 7.377255,-7.5 7.3772554,7.5 0 0 0 -7.377255,-7.5 z m 0,4.6875 a 2.7664708,2.8125 0 0 1 2.766471,2.8125 2.7664708,2.8125 0 0 1 -2.766471,2.8125 2.7664708,2.8125 0 0 1 -2.766471,-2.8125 2.7664708,2.8125 0 0 1 2.766471,-2.8125 z" />
<path
id="sh_h2"
style="display:inline"
d="m 71.169115,80.66177 h 3.295818 v 8 h -3.295818 z m 5.000002,-2e-6 8.236654,4.13805 -8.236654,3.86195 z" />
</g>
<g
id="film2"
style="display:inline;stroke:#6c5d6f;stroke-opacity:1"
transform="translate(44.26571,4)">
<path
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#6c5d6f;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
d="M 18.034986,74.181114 24.73429,81 h 3"
id="filmpath21"
sodipodi:nodetypes="ccc" />
<path
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#6c5d6f;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
d="m 38.73429,81 h 1 l 5.39516,-7.755972"
id="filmpath22"
sodipodi:nodetypes="ccc" />
</g>
<g
id="spool21"
transform="matrix(0.625,0,0,0.625,40.643311,53.5)"
style="stroke-width:1.59999">
<path
id="film21"
style="color:black;font-variation-settings:normal;overflow:visible;opacity:1;vector-effect:none;fill:#6c5d6f;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.59999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none"
d="m 42.970703,20 a 12,12 0 0 0 -12,12 12,12 0 0 0 12,12 12,12 0 0 0 12,-12 12,12 0 0 0 -12,-12 z m 0,7.5 a 4.5,4.5 0 0 1 4.5,4.5 4.5,4.5 0 0 1 -4.5,4.5 4.5,4.5 0 0 1 -4.5,-4.5 4.5,4.5 0 0 1 4.5,-4.5 z" />
<circle
style="color:black;font-variation-settings:normal;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:black;stroke-width:1.59999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none"
id="core21"
cx="42.970703"
cy="32"
r="4.800005" />
</g>
<g
id="spool22"
transform="matrix(0.625,0,0,0.625,56.643314,53.5)"
style="stroke-width:1.59999">
<path
id="film22"
style="color:black;font-variation-settings:normal;overflow:visible;opacity:1;vector-effect:none;fill:#6c5d6f;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.59999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none"
d="m 42.970703,20 a 12,12 0 0 0 -12,12 12,12 0 0 0 12,12 12,12 0 0 0 12,-12 12,12 0 0 0 -12,-12 z m 0,7.5 a 4.5,4.5 0 0 1 4.5,4.5 4.5,4.5 0 0 1 -4.5,4.5 4.5,4.5 0 0 1 -4.5,-4.5 4.5,4.5 0 0 1 4.5,-4.5 z" />
<circle
style="color:black;font-variation-settings:normal;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:black;stroke-width:1.59999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none"
id="core22"
cx="42.970703"
cy="32"
r="4.800005" />
</g>
<g
id="head2">
<path
style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.999999px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 76,81 8.24,4.14 -8.24,3.86 z"
id="play2"
sodipodi:nodetypes="cccc" />
<rect
style="color:black;font-variation-settings:normal;overflow:visible;vector-effect:none;fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none"
id="pause2"
width="3.3"
height="8"
x="71"
y="81"
ry="0" />
</g>
</g>
<g
id="player22">
<g
id="shadow3"
style="opacity:1;mix-blend-mode:normal;fill:#4d4d5a;fill-opacity:0.686957;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter1);stop-color:black;stop-opacity:1"
transform="translate(0.84768657,0.28256219)">
<path
id="sh_f3"
style="display:inline;stroke-width:0.999999"
d="m 112.87836,74.017224 a 5.2174378,5.5 0 0 0 -5.21743,5.5 5.2174378,5.5 0 0 0 5.21743,5.5 5.2174378,5.5 0 0 0 5.21744,-5.5 5.2174378,5.5 0 0 0 -5.21744,-5.5 z m 0,3.4 a 1.9921126,2.1 0 0 1 1.99212,2.1 1.9921126,2.1 0 0 1 -1.99212,2.1 1.9921126,2.1 0 0 1 -1.99211,-2.1 1.9921126,2.1 0 0 1 1.99211,-2.1 z m -10.43487,-3.4 a 5.2174378,5.5 0 0 0 -5.217441,5.5 5.2174378,5.5 0 0 0 5.217441,5.5 5.2174378,5.5 0 0 0 5.21744,-5.5 5.2174378,5.5 0 0 0 -5.21744,-5.5 z m 0,3.4 a 1.9921126,2.1 0 0 1 1.99211,2.1 1.9921126,2.1 0 0 1 -1.99211,2.1 1.9921126,2.1 0 0 1 -1.99211,-2.1 1.9921126,2.1 0 0 1 1.99211,-2.1 z" />
<path
id="sh_h3"
style="display:inline"
d="m 107.7728,84.144666 5.16,3.18 -5.16,2.82 z m -3,0 h 2.16 v 6 h -2.16 z" />
</g>
<g
id="film3"
style="display:inline;stroke:#6c5d6f;stroke-opacity:1"
transform="translate(81.211899,7.9246864)">
<path
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#6c5d6f;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
d="m 17.35566,73.66163 5.432441,5.413684 h 1.5"
id="filmpath31"
sodipodi:nodetypes="ccc" />
<path
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#6c5d6f;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
d="m 30.788101,79.075314 c 0,0 0.371411,0.08901 0.568296,0 2.246177,-1.015505 3.708651,-3.792829 5.093206,-5.72838"
id="filmpath32"
sodipodi:nodetypes="csc" />
</g>
<g
id="spool31"
transform="matrix(0.625,0,0,0.625,77.5895,60.42469)"
style="display:inline;stroke-width:1.59999">
<path
id="film31"
style="color:black;font-variation-settings:normal;overflow:visible;opacity:1;vector-effect:none;fill:#6c5d6f;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.59999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none"
d="m 39.86,20.12 a 8.8,8.8 0 0 0 -8.8,8.8 8.8,8.8 0 0 0 8.8,8.8 8.8,8.8 0 0 0 8.8,-8.8 8.8,8.8 0 0 0 -8.8,-8.8 z m 0,5.5 a 3.3,3.3 0 0 1 3.3,3.3 3.3,3.3 0 0 1 -3.3,3.3 3.3,3.3 0 0 1 -3.3,-3.3 3.3,3.3 0 0 1 3.3,-3.3 z" />
<circle
style="color:black;font-variation-settings:normal;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:black;stroke-width:1.59999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none"
id="core31"
cx="39.906609"
cy="28.970312"
r="3.2498157" />
</g>
<g
id="spool32"
transform="matrix(0.625,0,0,0.625,88.5875,60.425004)"
style="display:inline;stroke-width:1.59999">
<path
id="film32"
style="color:black;font-variation-settings:normal;overflow:visible;opacity:1;vector-effect:none;fill:#6c5d6f;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.59999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none"
d="m 39.86,20.12 a 8.8,8.8 0 0 0 -8.8,8.8 8.8,8.8 0 0 0 8.8,8.8 8.8,8.8 0 0 0 8.8,-8.8 8.8,8.8 0 0 0 -8.8,-8.8 z m 0,5.5 a 3.3,3.3 0 0 1 3.3,3.3 3.3,3.3 0 0 1 -3.3,3.3 3.3,3.3 0 0 1 -3.3,-3.3 3.3,3.3 0 0 1 3.3,-3.3 z" />
<circle
style="color:black;font-variation-settings:normal;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:black;stroke-width:1.59999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none"
id="core32"
cx="39.906609"
cy="28.970312"
r="3.2498157" />
</g>
<g
id="head3">
<path
style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 108,84 5.16,3.18 L 108,90 Z"
id="play3"
sodipodi:nodetypes="cccc" />
<rect
style="color:black;font-variation-settings:normal;overflow:visible;vector-effect:none;fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none"
id="pause3"
width="2.16"
height="6"
x="105"
y="84"
ry="0" />
</g>
</g>
<g
id="player16">
<g
id="shadow4"
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#4d4d5a;fill-opacity:0.686957;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;filter:url(#filter2);stop-color:black;stop-opacity:1"
transform="translate(0,1.2374369)">
<path
id="sh_f4"
style="display:inline;stroke-width:0.999997"
d="m 135.92968,77.955062 a 4.1296023,3.8080361 0 0 0 -4.12961,3.808036 4.1296023,3.8080361 0 0 0 4.12961,3.808037 4.1296023,3.8080361 0 0 0 4.1296,-3.808037 4.1296023,3.8080361 0 0 0 -4.1296,-3.808036 z m 0,1.962259 a 2.0016424,1.8457774 0 0 1 2.00164,1.845777 2.0016424,1.8457774 0 0 1 -2.00164,1.845778 2.0016424,1.8457774 0 0 1 -2.00164,-1.845778 2.0016424,1.8457774 0 0 1 2.00164,-1.845777 z m -7.31669,-2.11458 a 4.1296023,3.8080361 0 0 0 -4.1296,3.808036 4.1296023,3.8080361 0 0 0 4.1296,3.808036 4.1296023,3.8080361 0 0 0 4.12961,-3.808036 4.1296023,3.8080361 0 0 0 -4.12961,-3.808036 z m 0,1.962259 a 2.0016424,1.8457774 0 0 1 2.00165,1.845777 2.0016424,1.8457774 0 0 1 -2.00165,1.845777 2.0016424,1.8457774 0 0 1 -2.00163,-1.845777 2.0016424,1.8457774 0 0 1 2.00163,-1.845777 z" />
<path
id="sh_h4"
style="display:inline;stroke-width:0.999999"
d="m 129.63291,85.646447 h 2.18121 v 5.047358 h -2.18121 z m 2.96371,0 4.93951,2.700337 -4.93951,2.347021 z" />
</g>
<g
id="film4">
<path
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#6c5d6f;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
d="m 124.9,83.48 3.05,5.51 h 1.5"
id="filmpath41"
sodipodi:nodetypes="ccc" />
<path
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#6c5d6f;stroke-width:1.1;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;stroke-dasharray:none"
d="m 135.82,89.04 c 0,0 0.62,0.08 1.04,-0.3 0.6,-0.55 1.34,-2.57 2.44,-5.59"
id="filmpath42"
sodipodi:nodetypes="csc" />
</g>
<g
id="spool41">
<path
id="film41"
style="color:black;font-variation-settings:normal;overflow:visible;vector-effect:none;fill:#6c5d6f;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none"
d="m 128.22,77.5 a 4.25,4.25 0 0 0 -4.25,4.25 4.25,4.25 0 0 0 4.25,4.25 4.25,4.25 0 0 0 4.25,-4.25 4.25,4.25 0 0 0 -4.25,-4.25 z m 0,2.19 a 2.06,2.06 0 0 1 2.06,2.06 2.06,2.06 0 0 1 -2.06,2.06 2.06,2.06 0 0 1 -2.06,-2.06 2.06,2.06 0 0 1 2.06,-2.06 z" />
<circle
style="color:black;font-variation-settings:normal;display:inline;overflow:visible;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:black;stroke-width:0.625;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="core41"
cx="128.25"
cy="81.75"
r="1.94" />
</g>
<g
id="spool42"
transform="translate(0,0.16948494)">
<path
id="film42"
style="color:black;font-variation-settings:normal;overflow:visible;vector-effect:none;fill:#6c5d6f;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none"
d="m 135.75,77.5 a 4.25,4.25 0 0 0 -4.25,4.25 4.25,4.25 0 0 0 4.25,4.25 4.25,4.25 0 0 0 4.25,-4.25 4.25,4.25 0 0 0 -4.25,-4.25 z m 0,2.19 a 2.06,2.06 0 0 1 2.06,2.06 2.06,2.06 0 0 1 -2.06,2.06 2.06,2.06 0 0 1 -2.06,-2.06 2.06,2.06 0 0 1 2.06,-2.06 z" />
<circle
style="color:black;font-variation-settings:normal;display:inline;overflow:visible;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:black;stroke-width:0.625;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="core42"
cx="135.8"
cy="81.75"
r="1.9400001" />
</g>
<g
id="head4">
<path
style="fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 132,86 5.0547,3.206326 L 132,92 Z"
id="play4"
sodipodi:nodetypes="cccc" />
<rect
style="color:black;font-variation-settings:normal;overflow:visible;vector-effect:none;fill:black;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none"
id="pause4"
width="2.2329035"
height="6"
x="128.97"
y="86"
ry="0" />
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 26 KiB

View file

@ -23,6 +23,8 @@
** As of 5/2017, it is not clear to what extent this might force us into additional
** "desktop integration" we do not need nor want (like automatically connecting to
** D-Bus). For that reason, we'll postpone this transition for the time being /////////////////////TICKET #1068
** @todo 5/2025 generally speaking, we use way too much registration relying on
** matching textual IDs; This is a "boilerplaty" approach, we can do better ///////////////////////TICKET #1405 : all this registration with matching IDs is way too much "boilerplaty"
**
** @see ui-manager.hpp
** @see gtk-lumiera.cpp
@ -147,6 +149,10 @@ namespace ctrl {
viewerPanelAction->signal_toggled().connect( [&]() { onMenu_view_viewer(); });
actionGroup->add(viewerPanelAction);
playPanelAction = ToggleAction::create("ViewPlay", StockID("panel_play"));
playPanelAction->signal_toggled().connect( [&]() { onMenu_view_play(); });
actionGroup->add(playPanelAction);
uiManager.insert_action_group(actionGroup);
@ -180,6 +186,7 @@ namespace ctrl {
<menuitem action='ViewInfoBox'/>
<menuitem action='ViewTimeline'/>
<menuitem action='ViewViewer'/>
<menuitem action='ViewPlay'/>
</menu>
<menu action='SequenceMenu'>
<menuitem action='SequenceAdd'/>
@ -250,6 +257,7 @@ namespace ctrl {
assetsPanelAction->set_active (currentWindow.assetsPanel->is_shown());
timelinePanelAction->set_active(currentWindow.timelinePanel->is_shown());
viewerPanelAction->set_active (currentWindow.viewerPanel->is_shown());
///////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1403 now we also have a playPanel
// is_updating_action_state = false;
*/
}
@ -340,6 +348,16 @@ namespace ctrl {
unimplemented ("view viewer");
}
void
onMenu_view_play()
{
///////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1403 added for sake of consistency : we have now also a palyer panel
/////////////////////////////////////////////////////////////////////////////////////TODO defunct since GTK-3 transition
//if(!is_updating_action_state)
// workspaceWindow.playPanel->show(viewerPanelAction->get_active()); //////global -> InteractionDirector
unimplemented ("view player");
}
// Temporary Junk
void
@ -358,6 +376,7 @@ namespace ctrl {
Glib::RefPtr<Gtk::ToggleAction> infoboxPanelAction;
Glib::RefPtr<Gtk::ToggleAction> timelinePanelAction;
Glib::RefPtr<Gtk::ToggleAction> viewerPanelAction;
Glib::RefPtr<Gtk::ToggleAction> playPanelAction;
private: /* ===== Internals ===== */

View file

@ -0,0 +1,57 @@
/*
PlayPanel - Dockable panel to hold the video display widgets and controls
Copyright (C)
2008, Joel Holdsworth <joel@airwebreathe.org.uk>
  **Lumiera** is free software; you can redistribute it and/or modify it
  under the terms of the GNU General Public License as published by the
  Free Software Foundation; either version 2 of the License, or (at your
  option) any later version. See the file COPYING for further details.
* *****************************************************************/
/** @file play-panel.cpp
** Implementation of a dockable panel for player control and timecode display
*/
#include "stage/gtk-base.hpp"
#include "stage/panel/play-panel.hpp"
#include "stage/workspace/workspace-window.hpp"
#include "stage/ui-bus.hpp" ///////////////////////////////////TODO why are we forced to include this after workspace-window.hpp ?? Ambiguity between std::ref and boost::reference_wrapper
#include "stage/display-service.hpp"
using namespace Gtk; ///////////////////////////////////////////////////////////////////////////////TICKET #1071 no wildcard includes please!
using namespace stage::widget; ///////////////////////////////////////////////////////////////////////////////TICKET #1071 no wildcard includes please!
using namespace stage::controller; ///////////////////////////////////////////////////////////////////////////////TICKET #1071 no wildcard includes please!
namespace stage {
namespace panel {
PlayPanel::PlayPanel (workspace::PanelManager& panelManager
,Gdl::DockItem& dockItem)
: Panel{panelManager, dockItem, getTitle(), getStockID()}
, display_{}
, demoPlayback_{[this](void * const buffer){ display_.pushFrame(buffer); }}
{
//----- Pack in the Widgets -----//
pack_start(display_, PACK_EXPAND_WIDGET);
}
const char*
PlayPanel::getTitle()
{
return _("Play");
}
const gchar*
PlayPanel::getStockID()
{
return "panel_play";
}
}}// namespace stage::panel

View file

@ -0,0 +1,47 @@
/*
VIEWER-PANEL.hpp - Dockable panel to hold the video display widgets and controls
Copyright (C)
2008, Joel Holdsworth <joel@airwebreathe.org.uk>
  **Lumiera** is free software; you can redistribute it and/or modify it
  under the terms of the GNU General Public License as published by the
  Free Software Foundation; either version 2 of the License, or (at your
  option) any later version. See the file COPYING for further details.
*/
/** @file play-panel.hpp
** Definition of a dockable panel for playback control //////////////////////////////////////////////TICKET #1097 : me can haz more play panelz? wanna chase teh rat
*/
#ifndef STAGE_PANEL_PLAY_PANEL_H
#define STAGE_PANEL_PLAY_PANEL_H
#include "stage/panel/panel.hpp"
#include "stage/widget/video-display-widget.hpp"
#include "stage/ctrl/demo-controller.hpp"
namespace stage {
namespace panel {
/**
* A panel to display the video output.
*/
class PlayPanel
: public Panel
{
widget::VideoDisplayWidget display_;
ctrl::DemoController demoPlayback_;
public:
PlayPanel (workspace::PanelManager&, Gdl::DockItem&);
static const char* getTitle();
static const gchar* getStockID();
};
}}// namespace stage::panel
#endif /*STAGE_PANEL_PLAY_PANEL_H*/

View file

@ -13,7 +13,7 @@
/** @file viewer-panel.cpp
** Implementation of a dockable panel to hold the video viewers
** Implementation of a dockable panel with a video display widget
*/
#include "stage/gtk-base.hpp"

View file

@ -12,7 +12,7 @@
*/
/** @file viewer-panel.hpp
** Definition of a dockable panel to hold the video viewers
** Definition of a dockable panel to hold a video viewer
*/

View file

@ -22,7 +22,8 @@
#include "stage/workspace/panel-manager.hpp"
#include "stage/panel/assets-panel.hpp"
#include "stage/panel/viewer-panel.hpp"
#include "stage/panel/play-panel.hpp" //////////////////////////////////////////////////////////TICKET #1097 : need multiple play controls
#include "stage/panel/viewer-panel.hpp" ///////////////////////////////////////////////////////////TICKET #1097 : need multiple viewers
#include "stage/panel/infobox-panel.hpp"
#include "stage/panel/timeline-panel.hpp"
@ -41,6 +42,7 @@ namespace workspace {
PanelManager::Panel<TimelinePanel>(),
PanelManager::Panel<InfoBoxPanel>(),
PanelManager::Panel<ViewerPanel>(),
PanelManager::Panel<PlayPanel>(),
PanelManager::Panel<AssetsPanel>()
};
@ -183,13 +185,13 @@ namespace workspace {
void
PanelManager::splitPanel (panel::Panel& panel, Gtk::Orientation split_direction)
PanelManager::splitPanel (panel::Panel& panel, Gtk::Orientation split_direction, panel::Panel* toAdd)
{
// Create the new panel
const int index = getPanelType(&panel);
panel::Panel *new_panel = createPanel_by_index(index);
if (not toAdd)
{// then duplicate the panel to split...
int index = getPanelType(&panel);
toAdd = createPanel_by_index(index);
}
// Dock the panel
Gdl::DockPlacement placement = Gdl::DOCK_NONE;
switch(split_direction)
@ -209,7 +211,7 @@ namespace workspace {
}
panel.getDockItem().dock(
new_panel->getDockItem(),placement);
toAdd->getDockItem(),placement);
}
@ -240,13 +242,15 @@ namespace workspace {
PanelManager::createPanels()
{
///////////////////////////////TICKET #1026 : code smell, use types directly instead
panel::Panel* assetsPanel = createPanel_by_name("AssetsPanel");
panel::Panel* viewerPanel = createPanel_by_name("InfoBoxPanel");
panel::Panel* playPanel = createPanel_by_name("PlayPanel");
panel::Panel* viewerPanel = createPanel_by_name("ViewerPanel");
panel::Panel* infoBoxPanel = createPanel_by_name("InfoBoxPanel");
panel::Panel* timelinePanel = createPanel_by_name("TimelinePanel");
dock_.add_item(assetsPanel->getDockItem(),Gdl::DOCK_LEFT);
dock_.add_item(viewerPanel->getDockItem(),Gdl::DOCK_LEFT);
dock_.add_item(timelinePanel->getDockItem(),Gdl::DOCK_BOTTOM);
dock_.add_item(viewerPanel->getDockItem(),Gdl::DOCK_RIGHT);
dock_.add_item(infoBoxPanel->getDockItem(),Gdl::DOCK_RIGHT);
splitPanel(*infoBoxPanel, ORIENTATION_VERTICAL, playPanel);
}

View file

@ -126,7 +126,7 @@ namespace workspace {
* @param panel The panel to split.
* @param split_direction The direction to split the panel in.
*/
void splitPanel (panel::Panel& panel, Gtk::Orientation split_direction);
void splitPanel (panel::Panel& panel, Gtk::Orientation split_direction, panel::Panel* toAdd =nullptr);
public:

View file

@ -190,10 +190,11 @@ namespace workspace {
*/
void
UiStyle::registerStockItems()
{
{ ////////////////////////////////////////////////////////////////////TICKET #1405 : all this registration with matching IDs is way too much "boilerplaty"
Glib::RefPtr<IconFactory> factory = Gtk::IconFactory::create();
addStockIconSet(factory, "panel-assets", "panel_assets", _("_Assets"));
addStockIconSet(factory, "panel-play", "panel_play", _("_Play"));
addStockIconSet(factory, "panel-viewer", "panel_viewer", _("_Viewer"));
addStockIconSet(factory, "panel-infobox", "panel_infobox", _("_InfoBox"));
addStockIconSet(factory, "panel-timeline", "panel_timeline",_("_Timeline"));
@ -246,7 +247,7 @@ namespace workspace {
// Add the icon set to the icon factory
const Gtk::StockID stock_id(id);
factory->add(stock_id, icon_set);
Gtk::Stock::add(Gtk::StockItem(stock_id, uLabel)); //////////////////////TICKET #1030 : use "icon names" instead of Gtk::StockItem
Gtk::Stock::add(Gtk::StockItem(stock_id, uLabel)); //////////////////////////////////////////TICKET #1030 : use "icon names" instead of Gtk::StockItem
return true;
}

View file

@ -129797,6 +129797,124 @@ StM_bind(Builder&lt;R1&gt; b1, Extension&lt;R1,R2&gt; extension)
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1746237886231" ID="ID_81175326" MODIFIED="1746237894236" TEXT="ein paar Buttons einbinden">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1746366500471" ID="ID_442660271" MODIFIED="1746366507224" TEXT="blo&#xdf; wo?">
<node CREATED="1746366514666" ID="ID_414805814" MODIFIED="1746366526915" TEXT="k&#xf6;nnte nat&#xfc;rlich eine Button-Bar in den Viewer h&#xe4;ngen"/>
<node CREATED="1746366527794" ID="ID_488665860" MODIFIED="1746366562250" TEXT="aber vertical Screen-Real-Estate ist bereits knapp">
<icon BUILTIN="messagebox_warning"/>
</node>
<node CREATED="1746366544285" ID="ID_148444359" MODIFIED="1746366557240" TEXT="k&#xf6;nnte die Button-Bar auch vertikal machen">
<icon BUILTIN="idea"/>
</node>
<node CREATED="1746366566357" ID="ID_669235936" MODIFIED="1746366588141" TEXT="geplant war aber ein Play-Control-Widget"/>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1746366589535" ID="ID_944511675" MODIFIED="1746366785144" TEXT="also ein neues Docking-Panel schaffen">
<icon BUILTIN="yes"/>
<node CREATED="1746366642490" ID="ID_997232477" MODIFIED="1746366650524" TEXT="bekommt in erster N&#xe4;herung die Buttons direkt"/>
<node CREATED="1746366651348" ID="ID_1947097226" MODIFIED="1746366715461" TEXT="soll sp&#xe4;ter mal auch den Timecode darstellen"/>
<node COLOR="#5b280f" CREATED="1746366631539" ID="ID_1644863113" MODIFIED="1746366893632" TEXT="PlayerPanel">
<icon BUILTIN="button_cancel"/>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1746366854412" ID="ID_329913152" MODIFIED="1746366899251" TEXT="PlayPanel">
<icon BUILTIN="forward"/>
</node>
<node CREATED="1746366860054" ID="ID_597519647" MODIFIED="1746366904498" TEXT="k&#xf6;nnte n&#xe4;mlich auch Richtung Navigator gehen">
<font NAME="SansSerif" SIZE="11"/>
</node>
</node>
<node CREATED="1746374503622" ID="ID_1680072042" MODIFIED="1746374522309" TEXT="grrr .... warum ist das so m&#xfc;hsam???">
<icon BUILTIN="smiley-angry"/>
<node CREATED="1746374525273" ID="ID_1538200585" MODIFIED="1746374534611" TEXT="mu&#xdf; &#xbb;Stock-ID&#xab; registrieren"/>
<node CREATED="1746374535343" ID="ID_406063817" MODIFIED="1746489702760" TEXT="brauche ein Icon">
<arrowlink COLOR="#67647f" DESTINATION="ID_1569870904" ENDARROW="Default" ENDINCLINATION="-1095;296;" ID="Arrow_ID_1632100831" STARTARROW="None" STARTINCLINATION="-1256;195;"/>
<node CREATED="1746374590955" ID="ID_175519777" MODIFIED="1746374594839" TEXT="woher nehmen?"/>
<node CREATED="1746374595458" ID="ID_1292478720" LINK="notably https://github.com/shimmerproject/elementary-xfce" MODIFIED="1746383116727" TEXT="am Besten gleich stehlen">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
mal bei den Standard-Icons vom XFCE-Desktop nachschauen
</p>
<p>
... die Starter-Konfig-Box durchscrollen
</p>
<p>
.... mal bei Tango nachschauen...
</p>
<p>
..... XFCE hat doch diesen sehr sauber-minimalistischen Icon-Satz von &#187;Elementary-OS&#171; &#252;bernommen (den man dort wegwerfen wollte)
</p>
</body>
</html></richcontent>
<node COLOR="#435e98" CREATED="1746489774498" ID="ID_1118210967" MODIFIED="1746489931429" TEXT="Idee: ein Laufwerk">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Ausgangspunkt sind verschiedene Icons f&#252;r Musik-Player, die eine stilisierte Compact-Kasette zeigen. Das bringt mich auf die Idee, auf die Steenbeck-Schneidemaschinen anzuspielen, mit den gro&#223;en Rollen, bzw. auf eine Magnetton-Maschine ... und dann k&#246;nnte man ein &#187;Playhead&#171; aus einem &#187;Play/Pause&#171;-Symbol erzeugen
</p>
</body>
</html>
</richcontent>
<font NAME="SansSerif" SIZE="8"/>
<icon BUILTIN="idea"/>
</node>
</node>
<node COLOR="#5b280f" CREATED="1746374605761" ID="ID_1626786868" MODIFIED="1746374633750" TEXT="Vorsicht: GPL-3+">
<icon BUILTIN="stop-sign"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#d90a15" CREATED="1746374883465" HGAP="30" ID="ID_335713990" MODIFIED="1746374915951" TEXT="wenns dumm l&#xe4;uft hat das &#xbb;Konsequenzen&#xab;">
<edge STYLE="sharp_linear"/>
<font NAME="SansSerif" SIZE="8"/>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#d90a15" CREATED="1746374883465" HGAP="30" ID="ID_294861733" MODIFIED="1746383199394" TEXT="Einbahnstra&#xdf;e CC-BY-SA &#x27f6; GPL-3 (nicht umgekehrt)">
<edge STYLE="sharp_linear"/>
<font NAME="SansSerif" SIZE="8"/>
</node>
</node>
<node CREATED="1746374734536" ID="ID_501174899" MODIFIED="1746490067343">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
Tja &#10233; dann gibt's blo&#223; <i>Inspiration</i>&#160;+ Arbeit
</p>
</body>
</html></richcontent>
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Ideen sind immer noch frei (sofern sie nicht patentiert sind) &#8212; nur der <i>konkrete gestalterische Ausruck</i>&#160;steht unter Copyright...
</p>
</body>
</html></richcontent>
<node COLOR="#632c48" CREATED="1746489632822" ID="ID_1733758969" MODIFIED="1746489674012" TEXT="ja es ist Arbeit">
<font NAME="SansSerif" SIZE="11"/>
<icon BUILTIN="ksmiletris"/>
</node>
<node COLOR="#632c48" CREATED="1746489638293" ID="ID_811033416" MODIFIED="1746489674012" TEXT="hab 5 Stunden gebraucht">
<font NAME="SansSerif" SIZE="11"/>
<icon BUILTIN="smiley-oh"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1746378431051" HGAP="29" ID="ID_1919752859" LINK="https://issues.lumiera.org/ticket/1405" MODIFIED="1746489711110" TEXT=" #1405 simplify UI ressource integration " VSHIFT="-30">
<icon BUILTIN="bell"/>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1746378455815" HGAP="25" ID="ID_366179176" LINK="https://issues.lumiera.org/ticket/566" MODIFIED="1746378493624" TEXT="+ neue Meta-Kategorie: #566 Code Base Organisation" VSHIFT="6"/>
</node>
</node>
<node COLOR="#338800" CREATED="1746488154956" ID="ID_116419305" MODIFIED="1746488255464" TEXT="Panel-Layout einrichten">
<icon BUILTIN="button_ok"/>
<node COLOR="#435e98" CREATED="1746488164339" ID="ID_278027101" MODIFIED="1746488236697" TEXT="mu&#xdf; hier explizit ein anderes Panel splitten">
<icon BUILTIN="yes"/>
<node CREATED="1746488238312" ID="ID_1496606411" MODIFIED="1746488245414" TEXT="m&#xf6;chte es rechts haben"/>
<node CREATED="1746488246255" ID="ID_1090098350" MODIFIED="1746488253027" TEXT="unter der InfoBox aber &#xfc;ber der Timeline"/>
</node>
<node COLOR="#338800" CREATED="1746488179556" ID="ID_373436185" MODIFIED="1746488229099" TEXT="PanelManager::splitPanel() erweitern...">
<icon BUILTIN="button_ok"/>
<node CREATED="1746488200828" ID="ID_548215294" MODIFIED="1746488213246" TEXT="so da&#xdf; man optional ein schon bestehendes Panel &#xfc;bergeben kann"/>
<node CREATED="1746488214025" ID="ID_307597163" MODIFIED="1746488224814" TEXT="denn sonst w&#xfc;rde lediglich das aktuell gedockte Pannel aufgedoppelt"/>
</node>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1746321719549" ID="ID_1181117478" MODIFIED="1746321726590" TEXT="Buttons mit controller verdrahten">
<icon BUILTIN="flag-yellow"/>
@ -154542,8 +154660,7 @@ std::cout &lt;&lt; tmpl.render({&quot;what&quot;, &quot;World&quot;}) &lt;&lt; s
es ging darum, an die unterliegenden X-Windows ranzukommen, um sie dann auf dem Bidschirm zu positionierenl
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
<node CREATED="1746313154700" ID="ID_1881885906" MODIFIED="1746313243780" TEXT="Wir haben entsprechenden Code in unserem XvDisplayer">
<richcontent TYPE="NOTE"><html>
@ -154575,8 +154692,7 @@ std::cout &lt;&lt; tmpl.render({&quot;what&quot;, &quot;World&quot;}) &lt;&lt; s
dieser Code ist anscheinend <i>nicht deprecated</i>
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<arrowlink COLOR="#627b8f" DESTINATION="ID_748124734" ENDARROW="Default" ENDINCLINATION="83;412;" ID="Arrow_ID_1511868825" STARTARROW="None" STARTINCLINATION="342;-494;"/>
<node CREATED="1746313308823" ID="ID_586730227" MODIFIED="1746313316638" TEXT="aber man findet dazu nichts in der Doku"/>
<node CREATED="1746313317267" ID="ID_580811889" MODIFIED="1746313423821" TEXT="das hei&#xdf;t, er geh&#xf6;rt zur Implementierung, nicht zum Interface">
@ -157720,8 +157836,9 @@ unsigned int ThreadIdAsInt = *static_cast&lt;unsigned int*&gt;(static_cast&lt;vo
<node CREATED="1538838573613" ID="ID_1610361741" MODIFIED="1557498707241" TEXT="Graphic">
<node CREATED="1538838576956" ID="ID_1174319279" MODIFIED="1665346614450" TEXT="SVG-Icons">
<linktarget COLOR="#668497" DESTINATION="ID_1174319279" ENDARROW="Default" ENDINCLINATION="-533;-310;" ID="Arrow_ID_1274211300" SOURCE="ID_465159869" STARTARROW="None" STARTINCLINATION="-2393;215;"/>
<node CREATED="1504201038435" ID="ID_1569870904" MODIFIED="1557498707241" TEXT="Anleitung">
<node CREATED="1504201038435" ID="ID_1569870904" MODIFIED="1746488128368" TEXT="Anleitung">
<linktarget COLOR="#8697d2" DESTINATION="ID_1569870904" ENDARROW="Default" ENDINCLINATION="-935;-133;" ID="Arrow_ID_421953450" SOURCE="ID_1898190659" STARTARROW="None" STARTINCLINATION="-861;94;"/>
<linktarget COLOR="#67647f" DESTINATION="ID_1569870904" ENDARROW="Default" ENDINCLINATION="-1095;296;" ID="Arrow_ID_1632100831" SOURCE="ID_406063817" STARTARROW="None" STARTINCLINATION="-1256;195;"/>
<node CREATED="1504201044122" ID="ID_612955500" MODIFIED="1557498707241" TEXT="SVG in data/icons/svg"/>
<node CREATED="1504201192870" ID="ID_823572488" MODIFIED="1576282357932" TEXT="Dokument-Gr&#xf6;&#xdf;e anscheinend egal">
<richcontent TYPE="NOTE"><html>
@ -157739,11 +157856,36 @@ unsigned int ThreadIdAsInt = *static_cast&lt;unsigned int*&gt;(static_cast&lt;vo
</body>
</html></richcontent>
</node>
<node CREATED="1504201055449" ID="ID_1652674635" MODIFIED="1557498707241" TEXT="braucht &apos;artwork:&apos;-Layer"/>
<node CREATED="1504201055449" ID="ID_1652674635" MODIFIED="1557498707241" TEXT="braucht &apos;artwork:&apos;-Layer">
<node CREATED="1746487790861" ID="ID_609916222" MODIFIED="1746487812558" TEXT="aus dem Namen hinter &apos;artwork:&apos; ergibt sich der gerenderte Icon-Name"/>
</node>
<node CREATED="1504201074566" ID="ID_1803123712" MODIFIED="1557498707241" TEXT="braucht Sub-Layer &apos;plate&apos;">
<node CREATED="1504201085348" ID="ID_971103885" MODIFIED="1557498707241" TEXT="dort bounding-boxes"/>
<node CREATED="1504201089491" ID="ID_1411697919" MODIFIED="1557498707241" TEXT="deren Gr&#xf6;&#xdf;e in PX ist die Icon-Gr&#xf6;&#xdf;e"/>
<node CREATED="1504201101314" ID="ID_813225733" MODIFIED="1557498707241" TEXT="brauche 16, 22, 32"/>
<node CREATED="1504201101314" ID="ID_813225733" MODIFIED="1557498707241" TEXT="brauche 16, 22, 32">
<node CREATED="1746487870329" HGAP="24" ID="ID_1328260940" MODIFIED="1746487888167" TEXT="man kann weitere Gr&#xf6;&#xdf;en rendern" VSHIFT="7">
<font NAME="SansSerif" SIZE="11"/>
</node>
</node>
</node>
<node CREATED="1746487901880" ID="ID_1458780963" MODIFIED="1746488115881" TEXT="Tips">
<icon BUILTIN="idea"/>
<node CREATED="1746487947608" ID="ID_951309875" MODIFIED="1746487952957" TEXT="__Icon_TEMPLATE als Startpunkt verwenden"/>
<node CREATED="1746487953628" ID="ID_151495585" MODIFIED="1746487974488" TEXT="Bitte den Autor und die LIzenz korrekt ausf&#xfc;llen (CC-BY-SA bevorzugt)"/>
<node CREATED="1746487993769" ID="ID_1785313960" MODIFIED="1746488037899" TEXT="Dokument ist so konfiguriert, da&#xdf; 1:1-Anzeige das Icon in Originalgr&#xf6;&#xdf;e zeigt">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Das ist essentiell; gute Icons zeichnen ist eine Kunst
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1746488049804" ID="ID_410833116" MODIFIED="1746488064098" TEXT="ggfs tempor&#xe4;r einen farbigen / dunklen HIntergrund dahinter legen"/>
<node CREATED="1746488065232" ID="ID_428636762" MODIFIED="1746488081816" TEXT="Icons m&#xfc;ssen sowohl auf hellem, alsauch auf dunklem HInterrund funktionieren"/>
<node CREATED="1746488082832" ID="ID_13749749" MODIFIED="1746488107790" TEXT="Schatteren bitte m&#xf6;gichst nur mit Transparenz + wei&#xdf; / schwarz"/>
</node>
</node>
</node>