On Tue, Nov 27, 2012 at 11:25:15AM +0100, Olivier Fourdan wrote: > Hi, > > After review of the proposed on-screen help display window for the > Wacom plug-in in GNOME settings daemon (aka OSD), the GNOME design > team came back with some requirements that need an enhancement in > the layouts definitions. > > Basically, what's required is a caption indicator, i.e. a line that > goes from the button itself to its label so that there is a visual > link between the two. > > As I reckon all placing/drawing/rendering should come from the > layout, that means we need to amend the proposed definition to add > those captions to the layout data (given that the layouts can be > fairly complex, this needs to be done in the SVG rather than > computed). > > The following patch does this: > > - Adds the caption indicator definition > - Adds the caption indicators to the two existing layouts (namely > Cintiq 12WX and Intuos5 M) > - Modifies the check to very the presence of the caption indicators > - Improves the renderer example to show the trip/ring actions and > all the captions (Screenshots [1] and [2]) > > Cheers, > Olivier. > > [1] > http://people.redhat.com/ofourdan/libwacom/misc/Cintiq-12WX-layout-viewer.png > [2] > http://people.redhat.com/ofourdan/libwacom/misc/Intuos5-M-layout-viewer.png > >
> >From 920b8cdeaf6c7db904a5ba689f11fef431f155b9 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 caption indicators to layouts > > To match the buttons with their corresponding labels, the > layout SVG must also provide a caption indicator 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 so that incomplete > layouts would be detected. > > Improves the SVG layout display sample program to show > touch ring/touch strips labels and label indocators. > > Signed-off-by: Olivier Fourdan <ofour...@redhat.com> > --- > data/layouts/README | 55 ++++++++++++++ > data/layouts/cintiq-12wx.svg | 116 ++++++++++++++++++++++------- > data/layouts/intuos5-m.svg | 81 ++++++++++++++------ > test/tablet-svg-validity.c | 19 +++++ > tools/show-svg-image.c | 174 > +++++++++++++++++++++++++------------------ > 5 files changed, 323 insertions(+), 122 deletions(-) > > diff --git a/data/layouts/README b/data/layouts/README > index 37b644d..570de38 100644 > --- a/data/layouts/README > +++ b/data/layouts/README > @@ -71,6 +71,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" > > @@ -122,3 +123,57 @@ Second touch-strip: > > id="LabelRingDown" > class="Strip2Down Strip2 Label" > + > + - Caption indicators > + > +To match the buttons with their corresponding labels, the SVG must also > provide > +a caption indicator for each label in the form of a line that links each > button > +and its label. I'm honestly not sure if "indicator" is the right word here. Maybe some native English speakers can chime in here? Further confusing also by XKB using indicators for LEDs (Caps Lock, etc.) > + > +Each caption indicator follows the same naming convention as the labels, > using > +the special name "Indicator" in place of "Label", ie: > + > + id="IndicatorA" > + class="A Indicator" > + > +Touch-rings and touch-strips have 2 different labels and therefore 2 > indicators. > + > + id="IndicatorRingUp" > + class="RingUp Ring Indicator" > + > + and > + > + id="IndicatorRingDown" > + class="RingDown Ring Indicator" As Ping said, up/down on a ring is ambiguous. we use that terminology in the driver, but I do think we have the chance here to use CW/CCW instead. > + > +The second touch-ring button is identified by "Ring2" in place of "Ring": > + > + id="IndicatorRing2Up" > + class="Ring2Up Ring2 Indicator" > + > + and > + > + id="IndicatorRingDown" > + class="Ring2Down Ring2 Indicator" > + > +Touchstrips button follow the same naming scheme, using "Strip" and "Strip2" > +to name the first and second touch-strip. > + > + id="IndicatorStripUp" > + class="StripUp Strip Indicator" > + > + and > + > + id="IndicatorStripDown" > + class="StripDown Strip Indicator" > + > +Second touch-strip: > + > + id="IndicatorStrip2Up" > + class="Strip2Up Strip2 Indicator" > + > + and > + > + id="IndicatorRingDown" > + class="Strip2Down Strip2 Indicator" > + > diff --git a/data/layouts/cintiq-12wx.svg b/data/layouts/cintiq-12wx.svg > index 370283d..ef23c63 100644 > --- a/data/layouts/cintiq-12wx.svg > +++ b/data/layouts/cintiq-12wx.svg > @@ -3,32 +3,92 @@ > "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> > + 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="IndicatorA" class="A Indicator" d="M > 53 63 L 65 63 L 65 72 L 78 72" /> > + <text id="LabelA" class="A Label" > x="80" y="72" >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="IndicatorB" class="B Indicator" d="M > 53 81 L 65 81 L 65 87 L 78 87" /> > + <text id="LabelB" class="B Label" > x="80" y="87" >B</text> > + </g> > + <g> > + <rect id="ButtonC" class="C Button" > x="28" y="54" > + > rx=".5" ry=".5" width="11" height="35" /> > + <path id="IndicatorC" class="C Indicator" 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" >C</text> > + </g> > + <g> > + <rect id="ButtonD" class="D Button" > x="28" y="90" > + > rx=".5" ry=".5" width="23" height="11" /> > + <path id="IndicatorD" class="D Indicator" d="M > 53 96 L 65 96 L 65 102 L 78 102" /> > + <text id="LabelD" class="D Label" > x="80" y="102" >D</text> > + </g> > + <g> > + <rect id="ButtonE" class="E Button" > x="352" y="54" > + > rx=".5" ry=".5" width="11" height="17" /> > + <path id="IndicatorE" class="E Indicator" d="M > 350 63 L 338 63 L 338 72 L 324 72" /> > + <text id="LabelE" class="E Label" > x="322" y="72" >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="IndicatorF" class="F Indicator" d="M > 350 81 L 338 81 L 338 87 L 324 87" /> > + <text id="LabelF" class="F Label" > x="322" y="87" >F</text> > + </g> > + <g> > + <rect id="ButtonG" class="G Button" > x="364" y="54" > + > rx=".5" ry=".5" width="11" height="35" /> > + <path id="IndicatorG" class="G Indicator" 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" >G</text> > + </g> > + <g> > + <rect id="ButtonH" class="H Button" > x="352" y="90" > + > rx=".5" ry=".5" width="23" height="11" /> > + <path id="IndicatorH" class="H Indicator" d="M > 350 96 L 338 96 L 338 102 L 324 102" /> > + <text id="LabelH" class="H Label" > x="322" y="102" >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="IndicatorI" class="I Indicator" d="M > 53 48 L 65 48 L 65 57 L 78 57" /> > + <text id="LabelI" class="I Label" > x="80" y="57" >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="IndicatorJ" class="J Indicator" d="M > 350 48 L 338 48 L 338 57 L 324 57" /> > + <text id="LabelJ" class="J Label" > x="322" y="57" >J</text> > + </g> > + <g> > + <rect id="Strip" class="Strip TouchStrip" > x="10" y="41" > + > rx="1" ry="1" width="12" height="60" /> > + <path id="IndicatorStripUp" class="StripUp Strip Indicator" d="M > 16 39 L 16 27 L 78 27" /> > + <text id="LabelStripUp" class="StripUp Strip Label" > x="80" y="27" >Up</text> > + <path id="IndicatorStripDown" class="StripDown Strip Indicator" d="M > 16 103 L 16 117 L 78 117" /> > + <text id="LabelStripDown" class="StripDown Strip Label" > x="80" y="117" >Down</text> > + </g> > + <g> > + <rect id="Strip2" class="Strip2 TouchStrip" > x="382" y="41" > + > rx="1" ry="1" width="12" height="60" /> > + <path id="IndicatorStrip2Up" class="Strip2Up Strip2 Indicator" d="M > 388 39 L 388 27 L 325 27" /> > + <text id="LabelStrip2Up" class="Strip2Up Strip2 Label" > x="322" y="27" >Up</text> > + <path id="IndicatorStrip2Down" class="Strip2Down Strip2 Indicator" d="M > 388 103 L 388 117 L 325 117" /> > + <text id="LabelStrip2Down" class="Strip2Down Strip2 Label" > x="322" y="117" >Down</text> > + </g> > </svg> > diff --git a/data/layouts/intuos5-m.svg b/data/layouts/intuos5-m.svg > index 748959f..5783eb3 100644 > --- a/data/layouts/intuos5-m.svg > +++ b/data/layouts/intuos5-m.svg > @@ -3,27 +3,62 @@ > "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> > + 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="IndicatorB" class="B Indicator" > d="M 46 46 L 50 46" /> > + <text id="LabelB" class="B Label" > x="52" y="46" >A</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="IndicatorC" class="C Indicator" > d="M 46 60 L 50 60" /> > + <text id="LabelC" class="C Label" > x="52" y="60" >B</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="IndicatorD" class="D Indicator" > d="M 46 74 L 50 74" /> > + <text id="LabelD" class="D Label" > x="52" y="74" >C</text> > + </g> > + <g> > + <rect id="ButtonE" class="E Button" rx="2" > ry="2" x="24" y="82" width="20" height="12" /> > + <path id="IndicatorE" class="E Indicator" > d="M 46 88 L 50 88" /> > + <text id="LabelE" class="E Label" > x="52" y="88" >D</text> > + </g> > + <g> > + <rect id="ButtonF" class="F Button" rx="2" > ry="2" x="24" y="156" width="20" height="12" /> > + <path id="IndicatorF" class="F Indicator" > d="M 46 162 L 50 162" /> > + <text id="LabelF" class="F Label" > x="52" y="162" >E</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="IndicatorG" class="G Indicator" > d="M 46 176 L 50 176" /> > + <text id="LabelG" class="G Label" > x="52" y="176" >F</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="IndicatorH" class="H Indicator" > d="M 46 190 L 50 190" /> > + <text id="LabelH" class="H Label" > x="52" y="190" >G</text> > + </g> > + <g> > + <rect id="ButtonI" class="I Button" rx="2" > ry="2" x="24" y="198" width="20" height="12" /> > + <path id="IndicatorI" class="I Indicator" > d="M 46 206 L 50 206" /> > + <text id="LabelI" class="I Label" > x="52" y="206" >H</text> > + </g> > + <g> > + <circle id="Ring" class="Ring TouchRing" > cx="34" cy="125" r="19.5" /> > + <path id="IndicatorRingUp" class="RingUp Ring Indicator" > d="M 34 105 L 34 103 L 60 103" /> > + <text id="LabelRingUp" class="RingUp Ring Label" > x="62" y="103" >Up</text> > + <path id="IndicatorRingDown" class="RingDown Ring Indicator" > d="M 34 145 L 34 147 L 60 147" /> > + <text id="LabelRingDown" class="RingDown Ring Label" > x="62" y="147" >Down</text> > + </g> > + <g> > + <circle id="ButtonA" class="A ModeSwitch Button" > cx="34" cy="125" r="9.5" /> > + <path id="IndicatorA" class="A ModeSwitch Indicator" > d="M 56 125 L 60 125" /> > + <text id="LabelA" class="A ModeSwitch Label" > x="62" y="125" >I</text> > + </g> > </svg> > diff --git a/test/tablet-svg-validity.c b/test/tablet-svg-validity.c > index 0dca5a4..3987772 100644 > --- a/test/tablet-svg-validity.c > +++ b/test/tablet-svg-validity.c > @@ -157,6 +157,24 @@ 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 ("Indicator%sUp", id); > + node = verify_has_sub (cur, sub); > + g_assert (node != NULL); > + g_free (sub); > + > + class = g_strdup_printf ("%sUp %s Indicator", id, id); > + verify_has_class (node, class); > + g_free (class); > + > + sub = g_strdup_printf ("Indicator%sDown", id); > + node = verify_has_sub (cur, sub); > + g_assert (node != NULL); > + g_free (sub); > + > + class = g_strdup_printf ("%sDown %s Indicator", id, id); > + verify_has_class (node, class); > + g_free (class); > } > > static void > @@ -203,6 +221,7 @@ 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, "Indicator"); > } > > /* Touch rings */ > diff --git a/tools/show-svg-image.c b/tools/show-svg-image.c > index 01a7b13..d1efe33 100644 > --- a/tools/show-svg-image.c > +++ b/tools/show-svg-image.c > @@ -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" please keep these changes separate, the colour changes don't really relate to the new feature here. > > /* 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); > +} > + here too: patches like this are significantly easier to review if you split them up. first, a patch that moves things around but doesn't actually change anything, then the patch that introduces the new parameter. generally, patches that claim to not actually change anything are easier to review and test, since, well, they're not supposed to change anything :) > +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, "#LabelRingUp", "<span > foreground=\"" INACTIVE_COLOR "\" >Ring Up</span>", > WACOM_BUTTON_POSITION_LEFT); > + print_label (cairo_context, tablet, "#LabelRingDown", "<span > foreground=\"" INACTIVE_COLOR "\" >Ring Down</span>", > WACOM_BUTTON_POSITION_LEFT); > + } > + if (libwacom_has_ring2(tablet->device)) { > + print_label (cairo_context, tablet, "#LabelRing2Up", "<span > foreground=\"" INACTIVE_COLOR "\" >2nd Ring Up</span>", > WACOM_BUTTON_POSITION_RIGHT); > + print_label (cairo_context, tablet, "#LabelRing2Down", "<span > foreground=\"" INACTIVE_COLOR "\" >2nd Ring Down</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", > + " .Indicator {\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, > + " .Indicator {\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); > is this an unrelated change? Cheers, Peter > gtk_widget_show (tablet->widget); > > -- > 1.8.0 > ------------------------------------------------------------------------------ Keep yourself connected to Go Parallel: VERIFY Test and improve your parallel project with help from experts and peers. http://goparallel.sourceforge.net _______________________________________________ Linuxwacom-devel mailing list Linuxwacom-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel