wacom: Add support for three-button styli

Wacom has introduced its new "Pro Pen 3D" stylus which includes a third
button. This commit adds support for arbitrary three-button styli.

https://bugzilla.gnome.org/show_bug.cgi?id=790028
This commit is contained in:
Jason Gerecke 2017-10-10 07:57:49 -07:00 committed by Carlos Garnacho
parent 69e94483b7
commit 039f30a535
7 changed files with 343 additions and 6 deletions

View file

@ -160,7 +160,8 @@ button_changed_cb (GtkComboBox *combo, gpointer user_data)
GtkTreeIter iter;
GtkListStore *liststore;
gint mapping_b2,
mapping_b3;
mapping_b3,
mapping_b4;
if (!gtk_combo_box_get_active_iter (GTK_COMBO_BOX (WID ("combo-bottombutton")), &iter))
return;
@ -181,8 +182,20 @@ button_changed_cb (GtkComboBox *combo, gpointer user_data)
mapping_b3 = 0;
}
if (cc_wacom_tool_get_num_buttons (priv->stylus) > 2) {
if (!gtk_combo_box_get_active_iter (GTK_COMBO_BOX (WID ("combo-thirdbutton")), &iter))
return;
gtk_tree_model_get (GTK_TREE_MODEL (liststore), &iter,
BUTTONNUMBER_COLUMN, &mapping_b4,
-1);
} else {
mapping_b4 = 0;
}
g_settings_set_enum (priv->stylus_settings, "button-action", mapping_b2);
g_settings_set_enum (priv->stylus_settings, "secondary-button-action", mapping_b3);
g_settings_set_enum (priv->stylus_settings, "tertiary-button-action", mapping_b4);
}
static void
@ -299,6 +312,11 @@ cc_wacom_stylus_page_init (CcWacomStylusPage *self)
g_signal_connect (G_OBJECT (combo), "changed",
G_CALLBACK (button_changed_cb), self);
combo = GTK_COMBO_BOX (WID ("combo-thirdbutton"));
combobox_text_cellrenderer (combo, BUTTONNAME_COLUMN);
g_signal_connect (G_OBJECT (combo), "changed",
G_CALLBACK (button_changed_cb), self);
priv->nav = cc_wacom_nav_button_new ();
gtk_widget_set_halign (priv->nav, GTK_ALIGN_END);
gtk_widget_set_margin_start (priv->nav, 10);
@ -333,6 +351,10 @@ enum {
static void
remove_buttons (CcWacomStylusPagePrivate *priv, int n)
{
if (n < 3) {
gtk_widget_destroy (WID ("combo-thirdbutton"));
gtk_widget_destroy (WID ("label-third-button"));
}
if (n < 2) {
gtk_widget_destroy (WID ("combo-topbutton"));
gtk_widget_destroy (WID ("label-top-button"));
@ -445,6 +467,9 @@ cc_wacom_stylus_page_new (CcWacomTool *stylus)
update_stylus_ui (page, layout);
if (num_buttons >= 3)
set_button_mapping_from_gsettings (GTK_COMBO_BOX (WID ("combo-thirdbutton")),
priv->stylus_settings, "tertiary-button-action");
if (num_buttons >= 2)
set_button_mapping_from_gsettings (GTK_COMBO_BOX (WID ("combo-topbutton")),
priv->stylus_settings, "secondary-button-action");

View file

@ -253,9 +253,18 @@ get_icon_name_from_type (const WacomStylus *wstylus)
case WSTYLUS_CLASSIC:
return "wacom-stylus-classic";
default:
if (!libwacom_stylus_has_eraser (wstylus))
return "wacom-stylus-no-eraser";
return "wacom-stylus";
if (!libwacom_stylus_has_eraser (wstylus)) {
if (libwacom_stylus_get_num_buttons (wstylus) >= 3)
return "wacom-stylus-3btn-no-eraser";
else
return "wacom-stylus-no-eraser";
}
else {
if (libwacom_stylus_get_num_buttons (wstylus) >= 3)
return "wacom-stylus-3btn";
else
return "wacom-stylus";
}
}
}

View file

@ -45,6 +45,8 @@ common_sources = files(
resource_data = files(
'button-mapping.ui',
'gnome-wacom-properties.ui',
'wacom-stylus-3btn.svg',
'wacom-stylus-3btn-no-eraser.svg',
'wacom-stylus-airbrush.svg',
'wacom-stylus-art-pen.svg',
'wacom-stylus-classic.svg',

View file

@ -0,0 +1,132 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg86343"
version="1.1"
inkscape:version="0.91 r13725"
width="148"
height="192"
sodipodi:docname="wacom-stylus-3btn-no-eraser.svg">
<metadata
id="metadata86349">
<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 />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs86347" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="960"
inkscape:window-height="1014"
id="namedview86345"
showgrid="false"
inkscape:snap-nodes="false"
inkscape:snap-bbox="true"
inkscape:zoom="2.4748737"
inkscape:cx="176.8759"
inkscape:cy="81.687362"
inkscape:window-x="1920"
inkscape:window-y="27"
inkscape:window-maximized="0"
inkscape:current-layer="g10631"
borderlayer="true"
inkscape:showpageshadow="false">
<inkscape:grid
type="xygrid"
id="grid86802"
empspacing="5"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true" />
</sodipodi:namedview>
<g
style="display:inline"
transform="translate(592.43375,-287.62088)"
id="g10545">
<path
sodipodi:nodetypes="cscscccccccccccccscscc"
inkscape:connector-curvature="0"
id="rect10526"
transform="translate(-928.4063,-95.84375)"
d="m 344.125,384.88832 c -1.9944,0 -3.59375,1.59935 -3.59375,3.59375 L 340.53125,516 338,545.125 c -0.1873,2.15512 1.62589,3.92035 3.75,4.125 l 4.625,10.90625 1.53125,0 0,2.15625 3.61536,8.57242 1.18546,0.0214 0.44918,3.78119 0.33938,-3.7414 1.14797,-0.0687 3.76265,-8.53366 0,-2.1875 1.53125,0 4.65625,-10.96875 c 1.96694,-0.35188 3.54637,-2.02216 3.40625,-4.0625 L 365.53125,516 l 0,-127.51793 c 0,-1.9944 -1.59935,-3.59375 -3.59375,-3.59375 z"
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#d3d7cf;fill-opacity:1;fill-rule:nonzero;stroke:#babdb6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<rect
style="color:#000000;fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:#babdb6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect10541"
width="8.75"
height="22"
x="-579.65631"
y="385.90625"
rx="3.25"
ry="3.25" />
<rect
style="color:#000000;fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:#babdb6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect10543"
width="8.75"
height="12.25"
x="-579.65631"
y="410.90625"
rx="3.25"
ry="3.2500002" />
<rect
style="color:#000000;fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:#babdb6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect10544"
width="8.75"
height="8.75"
x="-579.65631"
y="429.15625"
rx="3.25"
ry="3.2500002" />
</g>
<g
style="opacity:0.2;display:inline"
id="g10631"
transform="translate(592.43375,-302.48416)">
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m -571.1563,413.06786 35.28033,0 0,-89.17947 82.46967,0"
id="path3342"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m -571.1563,430.06786 48.28033,0 0,-64.17947 69.46967,0"
id="path3344"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m -571.1563,448.31786 61.28033,0 0,-40.43396 56.46967,0"
id="path3344"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m -575.4063,492.06786 78.53033,0 0,-43.17947 43.46967,0"
id="path10629"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.5 KiB

View file

@ -0,0 +1,138 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg86343"
version="1.1"
inkscape:version="0.48.2 r9819"
width="148"
height="192"
sodipodi:docname="wacom-stylus-3btn.svg">
<metadata
id="metadata86349">
<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 />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs86347" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1280"
inkscape:window-height="742"
id="namedview86345"
showgrid="false"
inkscape:snap-nodes="false"
inkscape:snap-bbox="true"
inkscape:zoom="7"
inkscape:cx="93.888956"
inkscape:cy="186.10424"
inkscape:window-x="0"
inkscape:window-y="26"
inkscape:window-maximized="1"
inkscape:current-layer="svg86343"
borderlayer="true"
inkscape:showpageshadow="false">
<inkscape:grid
type="xygrid"
id="grid86802"
empspacing="5"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true" />
</sodipodi:namedview>
<g
style="display:inline"
transform="translate(592.43375,-287.62088)"
id="g10545">
<path
sodipodi:nodetypes="sscsscscccccccccccccscsscsss"
inkscape:connector-curvature="0"
id="rect10526"
transform="translate(-928.4063,-95.84375)"
d="m 349.69531,384.96463 c -2.3083,0 -3.2326,1.49535 -3.69531,4.51323 L 345.53125,396 344.125,396 c -1.9944,0 -3.59375,1.59935 -3.59375,3.59375 L 340.53125,516 338,545.125 c -0.1873,2.15512 1.62589,3.92035 3.75,4.125 l 4.625,10.90625 1.53125,0 0,2.15625 3.61536,8.57242 1.18546,0.0214 0.44918,3.78119 0.33938,-3.7414 1.14797,-0.0687 3.76265,-8.53366 0,-2.1875 1.53125,0 4.65625,-10.96875 c 1.96694,-0.35188 3.54637,-2.02216 3.40625,-4.0625 L 365.53125,516 l 0,-116.40625 c 0,-1.9944 -1.59935,-3.59375 -3.59375,-3.59375 l -1.40625,0 L 360,389.47786 c -0.23272,-2.85711 -1.26201,-4.51323 -3.69531,-4.51323 z"
style="color:#000000;fill:#d3d7cf;fill-opacity:1;fill-rule:nonzero;stroke:#babdb6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
<rect
style="color:#000000;fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:#babdb6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect10541"
width="8.75"
height="22"
x="-579.65631"
y="385.90625"
rx="3.25"
ry="3.25" />
<rect
style="color:#000000;fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:#babdb6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect10543"
width="8.75"
height="12.25"
x="-579.65631"
y="410.90625"
rx="3.25"
ry="3.2500002" />
<rect
style="color:#000000;fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:#babdb6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect10544"
width="8.75"
height="8.75"
x="-579.65631"
y="429.15625"
rx="3.25"
ry="3.2500002" />
</g>
<g
style="opacity:0.2;display:inline"
id="g10631"
transform="translate(592.43375,-302.48416)">
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m -568.1563,309.03125 32.25,0 0,14.85714 82.5,0"
id="path10556"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m -571.1563,413.06786 35.28033,0 0,-52.14286 82.46967,0"
id="path10552"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m -571.1563,430.06786 48.28033,0 0,-27.14286 69.46967,0"
id="path86913"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m -571.1563,448.31786 61.28033,0 0,-3.39286 56.46967,0"
id="path3344"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m -575.4063,492.06786 78.53033,0 0,-5.14286 43.46967,0"
id="path10629"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.9 KiB

View file

@ -290,6 +290,35 @@
<property name="top_attach">2</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label-third-button">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">end</property>
<property name="valign">center</property>
<property name="label" translatable="yes">Lowest Button</property>
<property name="justify">right</property>
<style>
<class name="dim-label"/>
</style>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">3</property>
</packing>
</child>
<child>
<object class="GtkComboBox" id="combo-thirdbutton">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">center</property>
<property name="model">liststore-buttons</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">3</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label-tip-feel">
<property name="visible">True</property>
@ -304,7 +333,7 @@
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">3</property>
<property name="top_attach">4</property>
</packing>
</child>
<child>
@ -360,7 +389,7 @@
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">3</property>
<property name="top_attach">4</property>
</packing>
</child>
</object>

View file

@ -6,6 +6,8 @@
<file preprocess="xml-stripblanks">button-mapping.ui</file>
<file>wacom-tablet.svg</file>
<file>wacom-stylus.svg</file>
<file>wacom-stylus-3btn-no-eraser.svg</file>
<file>wacom-stylus-3btn.svg</file>
<file>wacom-stylus-no-eraser.svg</file>
<file>wacom-stylus-airbrush.svg</file>
<file>wacom-stylus-inking.svg</file>