On Thu, Nov 29, 2012 at 05:34:28PM +0100, Olivier Fourdan wrote: > Updated patch. > > Uses CW and CCW instead of Up and Down for touch rings, adds > (optional) arrows to show rotation on touch rings, renamed > "indicator" as "leader" as per previous reviews.
ack to the leader part of it, but the other comments still stand (change of colours, timeout change, splitting the API change for print_label into a separate patch) one more nitpick, but you don't have to address this one if you don't agree: > - markup = g_strdup_printf ("<span foreground=\"" > ACTIVE_COLOR "\" weight=\"bold\">Button %c</span>", button); make this g_strdup_printf("<span foreground=\"%s\" ...", ACTIVE_COLOR, button); nicer to read and we're already using printf here anyway. should probably go into a separate patch since you're just renaming here Cheers, Peter > From b877ff84ee108ce2115a40b4d7c8edfd47382b73 Mon Sep 17 00:00:00 2001 > From: Olivier Fourdan <ofour...@redhat.com> > Date: Tue, 27 Nov 2012 09:52:42 +0100 > Subject: [PATCH] data: Add leaders to layouts > > To match the buttons with their corresponding labels, the > layout SVG must also provide a leader line for each label > in the form of a line that links each button and its > label. > > Improves the layout SVG for the Cintiq 12WX and Intuos 5 M > by adding details and rounded buttons to match the look of > the real device. > > Buttons, labels and indicators are now grouped in the SVG > layout for better clarity of the SVG. > > Adds indicators to the SVG check test iprogram so that > incomplete layouts would be detected. > > Replace use of ambiguous "Up" and "Down" in ring > controls with "CW" (Clockwise) and "CCW" (Counter > Clockwise) which are more appropriate for circular > motion (note that "CCW" is used in place of "Up" > and "CW" in place of "Down"). > > Add possible use of "fake" buttons to materialize > the type of motion expected in touch strips/rings > (optional, not mandatory as not present on the > real device). > > Improves the SVG layout display sample program to show > touch ring/touch strips labels and label indicators. > > Signed-off-by: Olivier Fourdan <ofour...@redhat.com> > --- > data/layouts/README | 124 +++++++++++++++++++++++++++--- > data/layouts/cintiq-12wx.svg | 118 ++++++++++++++++++++++------- > data/layouts/intuos5-m.svg | 87 +++++++++++++++------ > test/tablet-svg-validity.c | 83 ++++++++++++++++++-- > tools/show-svg-image.c | 176 > +++++++++++++++++++++++++------------------ > 5 files changed, 448 insertions(+), 140 deletions(-) > > diff --git a/data/layouts/README b/data/layouts/README > index 37b644d..fda7814 100644 > --- a/data/layouts/README > +++ b/data/layouts/README > @@ -56,6 +56,56 @@ Touch rings use the following convention: > id="Strip2" > class="Strip2 TouchStrip" > > +Note: Additional "fake" buttons (ie actual controls not found on the real > +device) can be added to touch controls to help showing the type of action > +expected on the control, like for example circular motion on a touch ring > +or vertical motion on a touch strip. > + > +These controls can be named: > + > + - First touch ring, rotating clockwise: > + > + id="RingCW" > + class="RingCW Button" > + > + - First touch ring, rotating counter clockwise: > + > + id="RingCCW" > + class="RingCCW Button" > + > + - Second touch ring, rotating clockwise: > + > + id="Ring2CW" > + class="Ring2CW Button" > + > + - Second touch ring, rotating counter clockwise: > + > + id="Ring2CCW" > + class="Ring2CCW Button" > + > + - First touch strip, moving up: > + > + id="StripUp" > + class="StripUp Button" > + > + - First touch strip, moving down: > + > + id="StripDown" > + class="StripDown Button" > + > + - Second touch strip, moving up: > + > + id="Strip2Up" > + class="Strip2Up Button" > + > + - Second touch strip, moving down: > + > + id="Strip2Down" > + class="Strip2Down Button" > + > +The use of those "fake" buttons is left at the discretion of the designer > +and is not mandatory nor enforced. > + > * Labels > > The role of the labels in the SVG is to give applications an indication on > @@ -71,6 +121,7 @@ Each button's label ID in the SVG is made of the string > "Label" with ID of the > button to which it applies, between 'A' and 'Z'. > > Class includes both the button ID and the string "Label". > + > id="LabelA" > class="A Label" > > @@ -84,23 +135,23 @@ For the special case of mode-switch buttons, the class > also list "ModeSwitch": > Touch-rings and touch-strips generate Up and Down events, therefore 2 > different > labels are needed for each touch-ring/touch-strip control. > > - id="LabelRingUp" > - class="RingUp Ring Label" > + id="LabelRingCCW" > + class="RingCCW Ring Label" > > and > > - id="LabelRingDown" > - class="RingDown Ring Label" > + id="LabelRingCW" > + class="RingCW Ring Label" > > The second touch-ring button is identified by "Ring2" in place of "Ring": > > - id="LabelRing2Up" > - class="Ring2Up Ring2 Label" > + id="LabelRing2CCW" > + class="Ring2CCW Ring2 Label" > > and > > - id="LabelRingDown" > - class="Ring2Down Ring2 Label" > + id="LabelRingCW" > + class="Ring2CW Ring2 Label" > > Touchstrips button follow the same naming scheme, using "Strip" and "Strip2" > to name the first and second touch-strip. > @@ -120,5 +171,60 @@ Second touch-strip: > > and > > - id="LabelRingDown" > + id="LabelRingCW" > class="Strip2Down Strip2 Label" > + > + - Caption leader lines > + > +To match the buttons with their corresponding labels, the SVG must also > +provide a leader line for each label in the form of a line that links > +each button and its label. > + > +Each leader line follows the same naming convention as the labels, using > +the special name "Leader" in place of "Label", ie: > + > + id="LeaderA" > + class="A Leader" > + > +Touch-rings and touch-strips have 2 different labels and therefore 2 leader > +lines. > + > + id="LeaderRingCCW" > + class="RingCCW Ring Leader" > + > + and > + > + id="LeaderRingCW" > + class="RingCW Ring Leader" > + > +The second touch-ring button is identified by "Ring2" in place of "Ring": > + > + id="LeaderRing2CCW" > + class="Ring2CCW Ring2 Leader" > + > + and > + > + id="LeaderRingCW" > + class="Ring2CW Ring2 Leader" > + > +Touchstrips button follow the same naming scheme, using "Strip" and "Strip2" > +to name the first and second touch-strip. > + > + id="LeaderStripUp" > + class="StripUp Strip Leader" > + > + and > + > + id="LeaderStripDown" > + class="StripDown Strip Leader" > + > +Second touch-strip: > + > + id="LeaderStrip2Up" > + class="Strip2Up Strip2 Leader" > + > + and > + > + id="LeaderStrip2Down" > + class="Strip2Down Strip2 Leader" > + > diff --git a/data/layouts/cintiq-12wx.svg b/data/layouts/cintiq-12wx.svg > index 370283d..1095293 100644 > --- a/data/layouts/cintiq-12wx.svg > +++ b/data/layouts/cintiq-12wx.svg > @@ -2,33 +2,93 @@ > <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" > "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> > <svg xmlns="http://www.w3.org/2000/svg" version="1.1" > - > style="color:#000000;stroke:#bebebe;fill:#000000;stroke-linejoin:round;stroke-width:1;font-size:8" > - id="cintiq-12wx" > width="405" height="270" > > - <title id="title" > >Wacom Cintiq 12WX</title> > - <rect id="ButtonA" class="A Button" x="40" y="54" > width="11" height="17" /> > - <text id="LabelA" class="A Label" x="60" y="63" > >A</text> > - <rect id="ButtonB" class="B Button" x="40" y="72" > width="11" height="17" /> > - <text id="LabelB" class="B Label" x="60" y="81" > >B</text> > - <rect id="ButtonC" class="C Button" x="28" y="54" > width="11" height="35" /> > - <text id="LabelC" class="C Label" x="60" y="72" > >C</text> > - <rect id="ButtonD" class="D Button" x="28" y="90" > width="23" height="11" /> > - <text id="LabelD" class="D Label" x="60" y="96" > >D</text> > - <rect id="ButtonE" class="E Button" x="352" y="54" > width="11" height="17" /> > - <text id="LabelE" class="E Label" x="342" y="63" > >E</text> > - <rect id="ButtonF" class="F Button" x="352" y="72" > width="11" height="17" /> > - <text id="LabelF" class="F Label" x="342" y="81" > >F</text> > - <rect id="ButtonG" class="G Button" x="364" y="54" > width="11" height="35" /> > - <text id="LabelG" class="G Label" x="342" y="72" > >G</text> > - <rect id="ButtonH" class="H Button" x="352" y="90" > width="23" height="11" /> > - <text id="LabelH" class="H Label" x="342" y="96" > >H</text> > - <rect id="ButtonI" class="I Button" x="28" y="42" > width="23" height="11" /> > - <text id="LabelI" class="I Label" x="60" y="51" > >I</text> > - <rect id="ButtonJ" class="J Button" x="352" y="42" > width="23" height="11" /> > - <text id="LabelJ" class="J Label" x="342" y="51" > >J</text> > - <rect id="Strip" class="Strip TouchStrip" x="10" y="41" > width="12" height="60" /> > - <text id="LabelStripUp" class="StripUp Strip Label" x="16" y="30" > >Up</text> > - <text id="LabelStripDown" class="StripDown Strip Label" x="16" > y="110" >Down</text> > - <rect id="Strip2" class="Strip2 TouchStrip" x="382" y="41" > width="12" height="60" /> > - <text id="LabelStrip2Up" class="Strip2Up Strip2 Label" x="388" y="30" > >Up</text> > - <text id="LabelStrip2Down" class="Strip2Down Strip2 Label" x="388" > y="110" >Down</text> > + > style="color:#000000;stroke:#7f7f7f;fill:#none;stroke-width:.25;font-size:8" > + id="cintiq-12wx" > width="405" height="270" > > + <title id="title" > >Wacom Cintiq 12WX</title> > + <g> > + <rect id="ButtonA" class="A Button" rx=".5" ry=".5" x="40" > y="54" width="11" height="17" /> > + <path id="LeaderA" class="A Leader" d="M 53 > 63 L 65 63 L 65 72 L 78 72" /> > + <text id="LabelA" class="A Label" x="80" > y="72" style="text-anchor:start;" >A</text> > + </g> > + <g> > + <rect id="ButtonB" class="B Button" rx=".5" ry=".5" x="40" > y="72" width="11" height="17" /> > + <circle id="DotB1" cx="45.5" > cy="77.5" r=".5" /> > + <circle id="DotB2" cx="45.5" > cy="80.5" r=".5" /> > + <circle id="DotB3" cx="45.5" > cy="83.5" r=".5" /> > + <path id="LeaderB" class="B Leader" d="M 53 > 81 L 65 81 L 65 87 L 78 87" /> > + <text id="LabelB" class="B Label" x="80" > y="87" style="text-anchor:start;" >B</text> > + </g> > + <g> > + <rect id="ButtonC" class="C Button" x="28" > y="54" > + rx=".5" > ry=".5" width="11" height="35" /> > + <path id="LeaderC" class="C Leader" d="M 26 > 72 L 25 72 L 25 35 L 65 35 L 65 42 L 78 42" /> > + <text id="LabelC" class="C Label" x="80" > y="42" style="text-anchor:start;" >C</text> > + </g> > + <g> > + <rect id="ButtonD" class="D Button" x="28" > y="90" > + rx=".5" > ry=".5" width="23" height="11" /> > + <path id="LeaderD" class="D Leader" d="M 53 > 96 L 65 96 L 65 102 L 78 102" /> > + <text id="LabelD" class="D Label" x="80" > y="102" style="text-anchor:start;" >D</text> > + </g> > + <g> > + <rect id="ButtonE" class="E Button" x="352" > y="54" > + rx=".5" > ry=".5" width="11" height="17" /> > + <path id="LeaderE" class="E Leader" d="M 350 > 63 L 338 63 L 338 72 L 324 72" /> > + <text id="LabelE" class="E Label" x="322" > y="72" style="text-anchor:end;" >E</text> > + </g> > + <g> > + <rect id="ButtonF" class="F Button" x="352" > y="72" > + rx=".5" > ry=".5" width="11" height="17" /> > + <circle id="DotF1" cx="357.5" > cy="77.5" r=".5" /> > + <circle id="DotF2" cx="357.5" > cy="80.5" r=".5" /> > + <circle id="DotF3" cx="357.5" > cy="83.5" r=".5" /> > + <path id="LeaderF" class="F Leader" d="M 350 > 81 L 338 81 L 338 87 L 324 87" /> > + <text id="LabelF" class="F Label" x="322" > y="87" style="text-anchor:end;" >F</text> > + </g> > + <g> > + <rect id="ButtonG" class="G Button" x="364" > y="54" > + rx=".5" > ry=".5" width="11" height="35" /> > + <path id="LeaderG" class="G Leader" d="M 377 > 72 L 378 72 L 378 35 L 338 35 L 338 42 L 324 42" /> > + <text id="LabelG" class="G Label" x="322" > y="42" style="text-anchor:end;" >G</text> > + </g> > + <g> > + <rect id="ButtonH" class="H Button" x="352" > y="90" > + rx=".5" > ry=".5" width="23" height="11" /> > + <path id="LeaderH" class="H Leader" d="M 350 > 96 L 338 96 L 338 102 L 324 102" /> > + <text id="LabelH" class="H Label" x="322" > y="102" style="text-anchor:end;" >H</text> > + </g> > + <g> > + <rect id="ButtonI" class="I Button" x="28" > y="42" > + rx=".5" > ry=".5" width="23" height="11" /> > + <circle id="DotI1" cx="36.5" > cy="47.5" r=".5" /> > + <circle id="DotI2" cx="39.5" > cy="47.5" r=".5" /> > + <circle id="DotI3" cx="42.5" > cy="47.5" r=".5" /> > + <path id="LeaderI" class="I Leader" d="M 53 > 48 L 65 48 L 65 57 L 78 57" /> > + <text id="LabelI" class="I Label" x="80" > y="57" style="text-anchor:start;" >I</text> > + </g> > + <g> > + <rect id="ButtonJ" class="J Button" x="352" > y="42" > + rx=".5" > ry=".5" width="23" height="11" /> > + <circle id="DotJ1" cx="360.5" > cy="47.5" r=".5" /> > + <circle id="DotJ2" cx="363.5" > cy="47.5" r=".5" /> > + <circle id="DotJ3" cx="366.5" > cy="47.5" r=".5" /> > + <path id="LeaderJ" class="J Leader" d="M 350 > 48 L 338 48 L 338 57 L 324 57" /> > + <text id="LabelJ" class="J Label" x="322" > y="57" style="text-anchor:end;" >J</text> > + </g> > + <g> > + <rect id="Strip" class="Strip TouchStrip" x="10" > y="41" > + rx="1" > ry="1" width="12" height="60" /> > + <path id="LeaderStripUp" class="StripUp Strip Leader" d="M 16 > 39 L 16 27 L 78 27" /> > + <text id="LabelStripUp" class="StripUp Strip Label" x="80" > y="27" style="text-anchor:start;" >Up</text> > + <path id="LeaderStripDown" class="StripDown Strip Leader" d="M 16 > 103 L 16 117 L 78 117" /> > + <text id="LabelStripDown" class="StripDown Strip Label" x="80" > y="117" style="text-anchor:start;" >Down</text> > + </g> > + <g> > + <rect id="Strip2" class="Strip2 TouchStrip" x="382" > y="41" > + rx="1" > ry="1" width="12" height="60" /> > + <path id="LeaderStrip2Up" class="Strip2Up Strip2 Leader" d="M 388 > 39 L 388 27 L 325 27" /> > + <text id="LabelStrip2Up" class="Strip2Up Strip2 Label" x="322" > y="27" style="text-anchor:end;" >Up</text> > + <path id="LeaderStrip2Down" class="Strip2Down Strip2 Leader" d="M 388 > 103 L 388 117 L 325 117" /> > + <text id="LabelStrip2Down" class="Strip2Down Strip2 Label" x="322" > y="117" style="text-anchor:end;" >Down</text> > + </g> > </svg> > diff --git a/data/layouts/intuos5-m.svg b/data/layouts/intuos5-m.svg > index 748959f..edb9f42 100644 > --- a/data/layouts/intuos5-m.svg > +++ b/data/layouts/intuos5-m.svg > @@ -2,28 +2,67 @@ > <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" > "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> > <svg xmlns="http://www.w3.org/2000/svg" version="1.1" > - > style="color:#000000;stroke:#bebebe;fill:#f0f0f0;stroke-linejoin:round;stroke-width:1;font-size:8" > - id="intuos5-m" > width="380" height="250"> > - <title id="title" > >Wacom Intuos5 M Touch</title> > - <rect id="ButtonB" class="B Button" x="24" y="40" > width="20" height="12" /> > - <text id="LabelB" class="B Label" x="50" y="46" > >A</text> > - <rect id="ButtonC" class="C Button" x="24" y="54" > width="20" height="12" /> > - <text id="LabelC" class="C Label" x="50" y="60" > >B</text> > - <rect id="ButtonD" class="D Button" x="24" y="68" > width="20" height="12" /> > - <text id="LabelD" class="D Label" x="50" y="74" > >C</text> > - <rect id="ButtonE" class="E Button" x="24" y="82" > width="20" height="12" /> > - <text id="LabelE" class="E Label" x="50" y="88" > >D</text> > - <rect id="ButtonF" class="F Button" x="24" y="156" > width="20" height="12" /> > - <text id="LabelF" class="F Label" x="50" y="162" > >E</text> > - <rect id="ButtonG" class="G Button" x="24" y="170" > width="20" height="12" /> > - <text id="LabelG" class="G Label" x="50" y="176" > >F</text> > - <rect id="ButtonH" class="H Button" x="24" y="184" > width="20" height="12" /> > - <text id="LabelH" class="H Label" x="50" y="190" > >G</text> > - <rect id="ButtonI" class="I Button" x="24" y="198" > width="20" height="12" /> > - <text id="LabelI" class="I Label" x="50" y="206" > >H</text> > - <circle id="Ring" class="Ring TouchRing" cx="34" cy="125" > r="19.5" /> > - <text id="LabelRingUp" class="RingUp Ring Label" x="60" y="105" > >Up</text> > - <text id="LabelRingDown" class="RingDown Ring Label" x="60" y="145" > >Down</text> > - <circle id="ButtonA" class="A ModeSwitch Button" cx="34" cy="125" > r="9.5" /> > - <text id="LabelA" class="A ModeSwitch Label" x="60" y="125" > >I</text> > + > style="color:#000000;stroke:#7f7f7f;fill:none;stroke-width:.25;font-size:8" > + id="intuos5-m" > width="380" height="250" > > + <title id="title" > >Wacom Intuos5 M Touch</title> > + <g> > + <rect id="ButtonB" class="B Button" rx="2" ry="2" x="24" > y="40" width="20" height="12" /> > + <path id="LeaderB" class="B Leader" d="M 46 46 L > 50 46" /> > + <text id="LabelB" class="B Label" x="52" > y="46" style="text-anchor:start;" >B</text> > + </g> > + <g> > + <rect id="ButtonC" class="C Button" rx="2" ry="2" x="24" > y="54" width="20" height="12" /> > + <rect id="DotC1" rx="1" ry="1" x="30" > y="59.5" width="8" height="1" /> > + <path id="LeaderC" class="C Leader" d="M 46 60 L > 50 60" /> > + <text id="LabelC" class="C Label" x="52" > y="60" style="text-anchor:start;" >C</text> > + </g> > + <g> > + <rect id="ButtonD" class="D Button" rx="2" ry="2" x="24" > y="68" width="20" height="12" /> > + <circle id="DotD1" cx="34" > cy="74" r=".75" /> > + <path id="LeaderD" class="D Leader" d="M 46 74 L > 50 74" /> > + <text id="LabelD" class="D Label" x="52" > y="74" style="text-anchor:start;" >D</text> > + </g> > + <g> > + <rect id="ButtonE" class="E Button" rx="2" ry="2" x="24" > y="82" width="20" height="12" /> > + <path id="LeaderE" class="E Leader" d="M 46 88 L > 50 88" /> > + <text id="LabelE" class="E Label" x="52" > y="88" style="text-anchor:start;" >E</text> > + </g> > + <g> > + <rect id="ButtonF" class="F Button" rx="2" ry="2" x="24" > y="156" width="20" height="12" /> > + <path id="LeaderF" class="F Leader" d="M 46 162 > L 50 162" /> > + <text id="LabelF" class="F Label" x="52" > y="162" style="text-anchor:start;" >F</text> > + </g> > + <g> > + <rect id="ButtonG" class="G Button" rx="2" ry="2" x="24" > y="170" width="20" height="12" /> > + <circle id="DotG1" cx="34" > cy="176" r=".75" /> > + <path id="LeaderG" class="G Leader" d="M 46 176 > L 50 176" /> > + <text id="LabelG" class="G Label" x="52" > y="176" style="text-anchor:start;" >G</text> > + </g> > + <g> > + <rect id="ButtonH" class="H Button" rx="2" ry="2" x="24" > y="184" width="20" height="12" /> > + <rect id="DotH1" rx="1" ry="1" x="30" > y="189.5" width="8" height="1" /> > + <path id="LeaderH" class="H Leader" d="M 46 190 > L 50 190" /> > + <text id="LabelH" class="H Label" x="52" > y="190" style="text-anchor:start;" >H</text> > + </g> > + <g> > + <rect id="ButtonI" class="I Button" rx="2" ry="2" x="24" > y="198" width="20" height="12" /> > + <path id="LeaderI" class="I Leader" d="M 46 206 > L 50 206" /> > + <text id="LabelI" class="I Label" x="52" > y="206" style="text-anchor:start;" >I</text> > + </g> > + <g> > + <circle id="Ring" class="Ring TouchRing" cx="34" > cy="125" r="19.5" /> > + <path id="LeaderRingCCW" class="RingCCW Ring Leader" d="M 34 105 > L 34 103 L 60 103" /> > + <text id="LabelRingCCW" class="RingCCW Ring Label" x="62" > y="103" style="text-anchor:start;" >CCW</text> > + <path id="RingCCW" class="RingCCW Button" > + d="M 31 111 l 3 -1.5 l 0 1 a 7.5 7.5 0 0 1 5 1.5 a > 6.5 6.5 0 0 0 -5 -0.5 l 0 1 z" /> > + <path id="LeaderRingCW" class="RingCW Ring Leader" d="M 34 145 > L 34 147 L 60 147" /> > + <text id="LabelRingCW" class="RingCW Ring Label" x="62" > y="147" style="text-anchor:start;" >CW</text> > + <path id="RingCW" class="RingCW Button" > + d="M 31 139 l 3 -1.5 l 0 1 a 7.5 7.5 0 0 0 5 -1 > a 6.5 6.5 0 0 1 -5 2 l 0 1 z" /> > + </g> > + <g> > + <circle id="ButtonA" class="A ModeSwitch Button" cx="34" > cy="125" r="9.5" /> > + <path id="LeaderA" class="A ModeSwitch Leader" d="M 56 125 > L 60 125" /> > + <text id="LabelA" class="A ModeSwitch Label" x="62" > y="125" style="text-anchor:start;" >A</text> > + </g> > </svg> > diff --git a/test/tablet-svg-validity.c b/test/tablet-svg-validity.c > index 0dca5a4..04cbc0f 100644 > --- a/test/tablet-svg-validity.c > +++ b/test/tablet-svg-validity.c > @@ -1,5 +1,5 @@ > /* > - * Copyright ?? 2012 Red Hat, Inc. > + * Copyright ?? 2012 Red Hat, Inc. > * > * Permission to use, copy, modify, distribute, and sell this software > * and its documentation for any purpose is hereby granted without > @@ -127,7 +127,7 @@ check_button (xmlNodePtr cur, WacomDevice *device, char > button, gchar *type) > } > > static void > -check_touch (xmlNodePtr cur, gchar *id, gchar *type) > +check_touchstrip (xmlNodePtr cur, gchar *id, gchar *type) > { > char *sub; > char *class; > @@ -157,6 +157,76 @@ check_touch (xmlNodePtr cur, gchar *id, gchar *type) > class = g_strdup_printf ("%sDown %s Label", id, id); > verify_has_class (node, class); > g_free (class); > + > + sub = g_strdup_printf ("Leader%sUp", id); > + node = verify_has_sub (cur, sub); > + g_assert (node != NULL); > + g_free (sub); > + > + class = g_strdup_printf ("%sUp %s Leader", id, id); > + verify_has_class (node, class); > + g_free (class); > + > + sub = g_strdup_printf ("Leader%sDown", id); > + node = verify_has_sub (cur, sub); > + g_assert (node != NULL); > + g_free (sub); > + > + class = g_strdup_printf ("%sDown %s Leader", id, id); > + verify_has_class (node, class); > + g_free (class); > +} > + > + > +static void > +check_touchring (xmlNodePtr cur, gchar *id, gchar *type) > +{ > + char *sub; > + char *class; > + xmlNodePtr node; > + > + node = verify_has_sub (cur, id); > + g_assert (node != NULL); > + > + class = g_strdup_printf ("%s %s", id, type); > + verify_has_class (node, class); > + g_free (class); > + > + sub = g_strdup_printf ("Label%sCCW", id); > + node = verify_has_sub (cur, sub); > + g_assert (node != NULL); > + g_free (sub); > + > + class = g_strdup_printf ("%sCCW %s Label", id, id); > + verify_has_class (node, class); > + g_free (class); > + > + sub = g_strdup_printf ("Label%sCW", id); > + node = verify_has_sub (cur, sub); > + g_assert (node != NULL); > + g_free (sub); > + > + class = g_strdup_printf ("%sCW %s Label", id, id); > + verify_has_class (node, class); > + g_free (class); > + > + sub = g_strdup_printf ("Leader%sCCW", id); > + node = verify_has_sub (cur, sub); > + g_assert (node != NULL); > + g_free (sub); > + > + class = g_strdup_printf ("%sCCW %s Leader", id, id); > + verify_has_class (node, class); > + g_free (class); > + > + sub = g_strdup_printf ("Leader%sCW", id); > + node = verify_has_sub (cur, sub); > + g_assert (node != NULL); > + g_free (sub); > + > + class = g_strdup_printf ("%sCW %s Leader", id, id); > + verify_has_class (node, class); > + g_free (class); > } > > static void > @@ -203,18 +273,19 @@ verify_tablet_layout (WacomDeviceDatabase *db, > WacomDevice *device) > for (button = 'A'; button < 'A' + num_buttons; button++) { > check_button (cur, device, button, "Button"); > check_button (cur, device, button, "Label"); > + check_button (cur, device, button, "Leader"); > } > > /* Touch rings */ > if (libwacom_has_ring(device)) > - check_touch (cur, "Ring", "TouchRing"); > + check_touchring (cur, "Ring", "TouchRing"); > if (libwacom_has_ring2(device)) > - check_touch (cur, "Ring2", "TouchRing"); > + check_touchring (cur, "Ring2", "TouchRing"); > /* Touch strips */ > if (libwacom_get_num_strips(device) > 0) > - check_touch (cur, "Strip", "TouchStrip"); > + check_touchstrip (cur, "Strip", "TouchStrip"); > if (libwacom_get_num_strips(device) > 1) > - check_touch (cur, "Strip2", "TouchStrip"); > + check_touchstrip (cur, "Strip2", "TouchStrip"); > > xmlFreeDoc(doc); > > diff --git a/tools/show-svg-image.c b/tools/show-svg-image.c > index 01a7b13..427b5ce 100644 > --- a/tools/show-svg-image.c > +++ b/tools/show-svg-image.c > @@ -1,5 +1,5 @@ > /* > - * Copyright ?? 2012 Red Hat, Inc. > + * Copyright ?? 2012 Red Hat, Inc. > * > * Permission to use, copy, modify, distribute, and sell this software > * and its documentation for any purpose is hereby granted without > @@ -37,10 +37,10 @@ > #include "libwacom.h" > > > -#define INACTIVE_COLOR "#2d2d2d" > -#define ACTIVE_COLOR "#ffffff" > -#define STROKE_COLOR "#b4b4b4" > -#define DARK_COLOR "#141414" > +#define INACTIVE_COLOR "#ededed" > +#define ACTIVE_COLOR "#729fcf" > +#define STROKE_COLOR "#000000" > +#define DARK_COLOR "#535353" > #define BACK_COLOR "#000000" > > /* Convenient struct to store our stuff around */ > @@ -100,76 +100,96 @@ get_sub_location (cairo_t *cairo_context, RsvgHandle > *handle, const char *sub, d > } > > static void > -print_button_labels (cairo_t *cairo_context, Tablet *tablet) > +print_label (cairo_t *cairo_context, Tablet *tablet, const char *sub, const > char *markup, WacomButtonFlags flags) > { > - char button; > - GtkWidget *widget; > - GtkAllocation allocation; > + GtkWidget *widget; > + GtkAllocation allocation; > + GtkStyle *style; > + PangoContext *pango_context; > + PangoLayout *pango_layout; > + PangoRectangle pango_rect; > + double label_x, label_y; > + int x, y; > + > + if (!get_sub_location (cairo_context, tablet->handle, sub, &label_x, > &label_y, NULL, NULL)) > + return; > > widget = GTK_WIDGET(tablet->widget); > gtk_widget_get_allocation(widget, &allocation); > + style = gtk_widget_get_style (widget); > + pango_context = gtk_widget_get_pango_context (widget); > + pango_layout = pango_layout_new (pango_context); > + > + pango_layout_set_markup (pango_layout, markup, -1); > + pango_layout_get_pixel_extents (pango_layout, NULL, &pango_rect); > + > + if (flags & WACOM_BUTTON_POSITION_LEFT) { > + pango_layout_set_alignment (pango_layout, PANGO_ALIGN_LEFT); > + x = (int) label_x + pango_rect.x; > + y = (int) label_y + pango_rect.y - pango_rect.height / 2; > + } else if (flags & WACOM_BUTTON_POSITION_RIGHT) { > + pango_layout_set_alignment (pango_layout, PANGO_ALIGN_RIGHT); > + x = (int) label_x + pango_rect.x - pango_rect.width; > + y = (int) label_y + pango_rect.y - pango_rect.height / 2; > + } else { > + pango_layout_set_alignment (pango_layout, PANGO_ALIGN_CENTER); > + x = (int) label_x + pango_rect.x - pango_rect.width / 2; > + y = (int) label_y + pango_rect.y; > + } > + > + gtk_paint_layout (style, > + gtk_widget_get_window (widget), > + 0, > + TRUE, > + &allocation, > + widget, > + NULL, > + x, > + y, > + pango_layout); > + > + g_object_unref (pango_layout); > +} > + > +static void > +print_button_labels (cairo_t *cairo_context, Tablet *tablet) > +{ > + char button; > > for (button = 'A'; button < 'A' + tablet->num_buttons; button++) { > WacomButtonFlags flags; > - GtkStyle *style; > - PangoContext *pango_context; > - PangoLayout *pango_layout; > - PangoRectangle pango_rect; > - double label_x, label_y; > - int x, y; > gchar *sub; > - gchar *markup; > + gchar *label; > > flags = libwacom_get_button_flag(tablet->device, button); > sub = g_strdup_printf ("#Label%c", button); > - if (!get_sub_location (cairo_context, tablet->handle, sub, > &label_x, &label_y, NULL, NULL)) { > - g_warning ("Failed to retrieve %s position", sub); > - goto next; > - } > - > - /* Write the label */ > - style = gtk_widget_get_style (widget); > - pango_context = gtk_widget_get_pango_context (widget); > - pango_layout = pango_layout_new (pango_context); > if (button == tablet->active_button) > - markup = g_strdup_printf ("<span foreground=\"" > ACTIVE_COLOR "\" weight=\"bold\">Button %c</span>", button); > + label = g_strdup_printf ("<span foreground=\"" > ACTIVE_COLOR "\" >Button %c</span>", button); > else > - markup = g_strdup_printf ("<span foreground=\"" > INACTIVE_COLOR "\" weight=\"bold\">Button %c</span>", button); > - pango_layout_set_markup (pango_layout, markup, -1); > - g_free (markup); > - > - pango_layout_get_pixel_extents (pango_layout, NULL, > &pango_rect); > - > - if (flags & WACOM_BUTTON_POSITION_LEFT) { > - pango_layout_set_alignment (pango_layout, > PANGO_ALIGN_LEFT); > - x = (int) label_x; > - y = (int) label_y + pango_rect.height / 2; > - } else if (flags & WACOM_BUTTON_POSITION_RIGHT) { > - pango_layout_set_alignment (pango_layout, > PANGO_ALIGN_RIGHT); > - x = (int) label_x - pango_rect.width; > - y = (int) label_y + pango_rect.height / 2; > - > - } else { > - pango_layout_set_alignment (pango_layout, > PANGO_ALIGN_CENTER); > - x = (int) label_x - pango_rect.width / 2; > - y = (int) label_y; > - } > - > - gtk_paint_layout (style, > - gtk_widget_get_window (widget), > - 0, > - TRUE, > - &allocation, > - widget, > - NULL, > - x, > - y, > - pango_layout); > - > - g_object_unref (pango_layout); > -next: > + label = g_strdup_printf ("<span foreground=\"" > INACTIVE_COLOR "\" >Button %c</span>", button); > + print_label (cairo_context, tablet, sub, label, flags); > + g_free (label); > g_free (sub); > } > + > + /* Touch rings */ > + if (libwacom_has_ring(tablet->device)) { > + print_label (cairo_context, tablet, "#LabelRingCCW", "<span > foreground=\"" INACTIVE_COLOR "\" >Ring Counter Clockwise</span>", > WACOM_BUTTON_POSITION_LEFT); > + print_label (cairo_context, tablet, "#LabelRingCW", "<span > foreground=\"" INACTIVE_COLOR "\" >Ring Clockwise</span>", > WACOM_BUTTON_POSITION_LEFT); > + } > + if (libwacom_has_ring2(tablet->device)) { > + print_label (cairo_context, tablet, "#LabelRing2CCW", "<span > foreground=\"" INACTIVE_COLOR "\" >2nd Ring Counter Clockwise</span>", > WACOM_BUTTON_POSITION_RIGHT); > + print_label (cairo_context, tablet, "#LabelRing2CW", "<span > foreground=\"" INACTIVE_COLOR "\" >2nd Ring Clockwise</span>", > WACOM_BUTTON_POSITION_RIGHT); > + } > + /* Touch strips */ > + if (libwacom_get_num_strips(tablet->device) > 0) { > + print_label (cairo_context, tablet, "#LabelStripUp", "<span > foreground=\"" INACTIVE_COLOR "\" >Strip Up</span>", > WACOM_BUTTON_POSITION_LEFT); > + print_label (cairo_context, tablet, "#LabelStripDown", "<span > foreground=\"" INACTIVE_COLOR "\" >Strip Down</span>", > WACOM_BUTTON_POSITION_LEFT); > + } > + if (libwacom_get_num_strips(tablet->device) > 1) { > + print_label (cairo_context, tablet, "#LabelStrip2Up", "<span > foreground=\"" INACTIVE_COLOR "\" >2nd Strip Up</span>", > WACOM_BUTTON_POSITION_RIGHT); > + print_label (cairo_context, tablet, "#LabelStrip2Down", "<span > foreground=\"" INACTIVE_COLOR "\" >2nd Strip Down</span>", > WACOM_BUTTON_POSITION_RIGHT); > + } > } > > static void > @@ -192,10 +212,16 @@ update_tablet (Tablet *tablet) > " > xmlns:xi=\"http://www.w3.org/2001/XInclude\"\n" > " width=\"", width, "\"\n" > " height=\"", height, "\">\n" > - " <style type=\"text/css\">\n" > - " * {\n" > - " stroke: ", STROKE_COLOR," !important;\n" > - " fill: ", INACTIVE_COLOR," !important;\n" > + " <style type=\"text/css\">\n", > + " .Leader {\n" > + " stroke-width: .5 !important;\n" > + " stroke: ", INACTIVE_COLOR, ";\n" > + " fill: none !important;\n" > + " }\n", > + " .Button {\n" > + " stroke-width: 0.25;\n" > + " stroke: ", INACTIVE_COLOR, ";\n" > + " fill: ", INACTIVE_COLOR, ";\n" > " }\n", > NULL); > g_free (width); > @@ -206,25 +232,31 @@ update_tablet (Tablet *tablet) > if (button == tablet->active_button) { > data = g_strconcat (data, > " .", class, " {\n" > - " stroke: ", STROKE_COLOR," > !important;\n" > - " fill: ", button == > tablet->active_button ? ACTIVE_COLOR : INACTIVE_COLOR, " !important;\n" > + " stroke: ", ACTIVE_COLOR, " > !important;\n" > + " fill: ", ACTIVE_COLOR, " > !important;\n" > " }\n", > NULL); > } > } > > - /* Hide the existing labels */ > data = g_strconcat (data, > + " .Leader {\n" > + " fill: none !important;\n" > + " }\n", > " .Label {\n" > - " stroke: none !important;\n" > - " fill: ", BACK_COLOR, " !important;\n" > + " stroke: none !important;\n" > + " stroke-width: 0.1 !important;\n" > + " opacity: .0 !important;\n" > + " font-size: .1 !important;\n" > + " fill: ", BACK_COLOR, " !important;\n" > " }\n", > " .TouchStrip,.TouchRing {\n" > + " stroke-width: 0.1 !important;\n" > " stroke: ", INACTIVE_COLOR," !important;\n" > - " fill: ", DARK_COLOR, " !important;\n" > + " fill: ", DARK_COLOR, " !important;\n" > " }\n", > " </style>\n" > - " <xi:include href=\"", > libwacom_get_layout_filename (tablet->device), "\"/>\n" > + " <xi:include href=\"", > libwacom_get_layout_filename (tablet->device), "\"/>\n" > "</svg>", > NULL); > > @@ -371,7 +403,7 @@ main (int argc, char **argv) > > g_signal_connect (tablet->widget, "expose-event", > G_CALLBACK(on_expose_cb), tablet); > g_signal_connect (tablet->widget, "delete-event", > G_CALLBACK(on_delete_cb), tablet); > - tablet->timeout = g_timeout_add(500 /* ms */, (GSourceFunc) > on_timer_cb, tablet); > + tablet->timeout = g_timeout_add(750 /* ms */, (GSourceFunc) > on_timer_cb, tablet); > > gtk_widget_show (tablet->widget); > > -- > 1.8.0 > ------------------------------------------------------------------------------ Keep yourself connected to Go Parallel: TUNE You got it built. Now make it sing. Tune shows you how. http://goparallel.sourceforge.net _______________________________________________ Linuxwacom-devel mailing list Linuxwacom-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel