Compare commits
372 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
549a6c47b8 | ||
|
|
400451efe1 | ||
|
|
2ee88948f3 | ||
|
|
ace60f76da | ||
|
|
451af331b9 | ||
|
|
b87a770970 | ||
|
|
e59ef319b0 | ||
|
|
8a1487f6f4 | ||
|
|
44d36d2bf0 | ||
|
|
635865efa5 | ||
|
|
38949013f7 | ||
|
|
e1879818b4 | ||
|
|
9b2614109f | ||
|
|
abe99fec6a | ||
|
|
21936db58b | ||
|
|
74f01f3de4 | ||
|
|
53ba4d975d | ||
|
|
97306ddd5a | ||
|
|
16e052d846 | ||
|
|
1586913fc7 | ||
|
|
cf9a3e48b7 | ||
|
|
ec835e2e82 | ||
|
|
b86211204c | ||
|
|
1d6995be72 | ||
|
|
536576fe8b | ||
|
|
b514f49b08 | ||
|
|
46a466ffe1 | ||
|
|
15f1667fa4 | ||
|
|
284c13b2fe | ||
|
|
e9bb4f98ae | ||
|
|
45b8d792cc | ||
|
|
b93dfcfda4 | ||
|
|
3ffdc8daa0 | ||
|
|
e38bc7a760 | ||
|
|
2dca516afa | ||
|
|
b489ac871d | ||
|
|
50fb898138 | ||
|
|
c676fcefb1 | ||
|
|
bb4dd2aae0 | ||
|
|
9b11340e91 | ||
|
|
3cd5a1f986 | ||
|
|
874d7eccb8 | ||
|
|
44c4b901e2 | ||
|
|
2371960a1d | ||
|
|
874aa8e63e | ||
|
|
1225f421c0 | ||
|
|
5f0f5d2843 | ||
|
|
1d464767e1 | ||
|
|
9551dddbb8 | ||
|
|
563c274705 | ||
|
|
71ed64a843 | ||
|
|
efb3efc828 | ||
|
|
982e6cc7fe | ||
|
|
44dc754e31 | ||
|
|
18887e4c86 | ||
|
|
46d5fae2e5 | ||
|
|
4b31945e1d | ||
|
|
7e685f5196 | ||
|
|
050db150f6 | ||
|
|
a3de0e1ff7 | ||
|
|
acc0066f08 | ||
|
|
eb9f98e58d | ||
|
|
6d996bf1aa | ||
|
|
34fbfe105c | ||
|
|
dfeac1bcbc | ||
|
|
3d345570eb | ||
|
|
6000688c30 | ||
|
|
9b409822c3 | ||
|
|
363eab80f0 | ||
|
|
66fc7b545e | ||
|
|
bb4b673df8 | ||
|
|
e104eca02c | ||
|
|
01c362eadc | ||
|
|
fff3589a20 | ||
|
|
a4e1e1690d | ||
|
|
38dce69838 | ||
|
|
23ff4e753d | ||
|
|
f24cb6dc66 | ||
|
|
b738136154 | ||
|
|
447931d779 | ||
|
|
920b71d94c | ||
|
|
a786aaf390 | ||
|
|
d395db1a11 | ||
|
|
ad0b7e53d9 | ||
|
|
0ed621db8f | ||
|
|
5ae473dcd1 | ||
|
|
ac384137bd | ||
|
|
e43cf7ab08 | ||
|
|
acb65a1bc8 | ||
|
|
e5f4b49e36 | ||
|
|
31d0fa00d9 | ||
|
|
d28f330d43 | ||
|
|
a29adaf913 | ||
|
|
ea3e68cf7d | ||
|
|
158594ec20 | ||
|
|
6e51849ae5 | ||
|
|
29731aa578 | ||
|
|
4d0ef4f2c1 | ||
|
|
e7d03448cc | ||
|
|
2725a55770 | ||
|
|
e5be1a70eb | ||
|
|
26493aceaf | ||
|
|
c4f5bd5218 | ||
|
|
7c65b0b4a9 | ||
|
|
d81c68d94f | ||
|
|
a5a2ea1a70 | ||
|
|
507d10378a | ||
|
|
08f3f7daf2 | ||
|
|
9b848084fd | ||
|
|
e1ebf7ad1b | ||
|
|
38f46a9be8 | ||
|
|
d07b7582db | ||
|
|
af194a22f0 | ||
|
|
d8c7050f6f | ||
|
|
30e834b18b | ||
|
|
49770a22e7 | ||
|
|
de8cba13cf | ||
|
|
1fab318dd3 | ||
|
|
e2190964c2 | ||
|
|
8eddf99823 | ||
|
|
9fede0e68d | ||
|
|
1e62916e75 | ||
|
|
447c69f034 | ||
|
|
fc0ab95087 | ||
|
|
7fe4d6f097 | ||
|
|
fa57b417e9 | ||
|
|
1aec9c0f54 | ||
|
|
d1918a063c | ||
|
|
770dd62b1d | ||
|
|
b474e76ac2 | ||
|
|
6fa6e18408 | ||
|
|
8ee19efee9 | ||
|
|
45282e7bd9 | ||
|
|
54b04ffff8 | ||
|
|
1243d5bb13 | ||
|
|
627fc5054f | ||
|
|
a0830a8aaa | ||
|
|
02cbfc23b7 | ||
|
|
3da2630158 | ||
|
|
e02d0724a3 | ||
|
|
920fb3917f | ||
|
|
f36b2dbce9 | ||
|
|
ef7e6f6db5 | ||
|
|
3459fab8ec | ||
|
|
8063385d03 | ||
|
|
3dabcaa3a0 | ||
|
|
6c182b8e9b | ||
|
|
ae805a3568 | ||
|
|
d0001b8e0e | ||
|
|
cbcdc4b724 | ||
|
|
3bc3da967c | ||
|
|
b50ffef327 | ||
|
|
ec223eb2e6 | ||
|
|
573d3d399e | ||
|
|
0f5beb619e | ||
|
|
89aff23c11 | ||
|
|
fd27957b57 | ||
|
|
554ee88c86 | ||
|
|
868d71a08b | ||
|
|
9b3c33a2fe | ||
|
|
109cc69da9 | ||
|
|
113bd4859e | ||
|
|
2a2b7487d4 | ||
|
|
2b4022dcbf | ||
|
|
7555cf1607 | ||
|
|
9c75a7cc7e | ||
|
|
0337ae41ab | ||
|
|
ff39e67615 | ||
|
|
7ba5563eeb | ||
|
|
968b9383d3 | ||
|
|
be6c381751 | ||
|
|
27a0db37d8 | ||
|
|
5858816b53 | ||
|
|
a1376180b4 | ||
|
|
75d1400206 | ||
|
|
78475a6d15 | ||
|
|
63f93111fb | ||
|
|
1ea21ed6ce | ||
|
|
18a8fb9651 | ||
|
|
2e836a40d3 | ||
|
|
c09872e589 | ||
|
|
575b7bce98 | ||
|
|
3e04abde30 | ||
|
|
790c5e90bd | ||
|
|
85a358e07c | ||
|
|
3af0544421 | ||
|
|
f69b4d53f6 | ||
|
|
cb4be02a56 | ||
|
|
bacdab2596 | ||
|
|
ec7bb2f63a | ||
|
|
74a5551a8d | ||
|
|
3e0c803a37 | ||
|
|
55682c3a5d | ||
|
|
ae9e287b8d | ||
|
|
03c264cec1 | ||
|
|
410e01de61 | ||
|
|
d167dfd83b | ||
|
|
9b7d8f5f24 | ||
|
|
366fbc3fda | ||
|
|
f1d20f1f35 | ||
|
|
558f59b52c | ||
|
|
1a3ef63519 | ||
|
|
17380baae9 | ||
|
|
314c3e2f78 | ||
|
|
6ba5cc3319 | ||
|
|
1148d172b5 | ||
|
|
a930cdad87 | ||
|
|
b951d83a64 | ||
|
|
f56df6b1d0 | ||
|
|
1e35b2ace6 | ||
|
|
e75c20a249 | ||
|
|
c63ffdd3ef | ||
|
|
40658c6d0e | ||
|
|
251efd3b40 | ||
|
|
94320099b0 | ||
|
|
f592cabcd7 | ||
|
|
a58096fade | ||
|
|
b140bc2827 | ||
|
|
aeaa69b9e1 | ||
|
|
a535897ae7 | ||
|
|
1074a2b2e6 | ||
|
|
51c1be3806 | ||
|
|
b9e647ccb8 | ||
|
|
e063aa3d2a | ||
|
|
9a74e30c64 | ||
|
|
f26de4bb29 | ||
|
|
e9008eeaba | ||
|
|
d5dc8eccd6 | ||
|
|
13736d0ced | ||
|
|
a926afe8de | ||
|
|
af78dc4ec2 | ||
|
|
1c85d77d56 | ||
|
|
c8929b50fa | ||
|
|
e58e79cb8d | ||
|
|
049e12b2eb | ||
|
|
5c71f9552d | ||
|
|
c3be9e1af1 | ||
|
|
186d626c40 | ||
|
|
dfc433cb74 | ||
|
|
ab2dae47af | ||
|
|
ec442b960d | ||
|
|
670720b40f | ||
|
|
0787e35964 | ||
|
|
9f4df9582c | ||
|
|
d282590746 | ||
|
|
9e5047976b | ||
|
|
d69a2ec5ba | ||
|
|
4bfd5d9a13 | ||
|
|
091e651831 | ||
|
|
d52c2c0320 | ||
|
|
cd71ce67b1 | ||
|
|
43f501907e | ||
|
|
d26d5b83f1 | ||
|
|
c401414310 | ||
|
|
c34fe85780 | ||
|
|
a19a79d33a | ||
|
|
8edf6e7609 | ||
|
|
835a694c4b | ||
|
|
a47492e62c | ||
|
|
186a1deda8 | ||
|
|
132212652f | ||
|
|
5a40d93a30 | ||
|
|
f62940c1e5 | ||
|
|
0f808ed387 | ||
|
|
d8edf2d9e4 | ||
|
|
6827f5ed81 | ||
|
|
f3208b499b | ||
|
|
94e0842a06 | ||
|
|
e0de98ba01 | ||
|
|
1adb147f6d | ||
|
|
b1c4bba3b2 | ||
|
|
cdbdcd23e6 | ||
|
|
23d1290b22 | ||
|
|
5edcdfba5b | ||
|
|
6d105a002c | ||
|
|
3b1a41f154 | ||
|
|
0153efbf9c | ||
|
|
db34ab5255 | ||
|
|
52e10d029f | ||
|
|
1c94ef5c56 | ||
|
|
5efd83fc41 | ||
|
|
33966989db | ||
|
|
c56c76e07d | ||
|
|
8440a36f92 | ||
|
|
3e31b45db0 | ||
|
|
548a40dba6 | ||
|
|
c437882e96 | ||
|
|
4a61dc413b | ||
|
|
59df7defdb | ||
|
|
77fa6a1e65 | ||
|
|
0f8031c201 | ||
|
|
5842dccc2a | ||
|
|
0c5b1998a5 | ||
|
|
f52ebd0dba | ||
|
|
1857378a76 | ||
|
|
d2600583bb | ||
|
|
e2a4684f83 | ||
|
|
ed39cf3dee | ||
|
|
c4d3b1e606 | ||
|
|
be1fb30751 | ||
|
|
a2b3c32124 | ||
|
|
26e7237010 | ||
|
|
26a6215122 | ||
|
|
376adfdf2a | ||
|
|
d990e3f027 | ||
|
|
2473f66cb3 | ||
|
|
8e9bf7b48a | ||
|
|
7edae05b37 | ||
|
|
909749fc00 | ||
|
|
15b4b4a3ca | ||
|
|
cad05f1256 | ||
|
|
703e1f6f0d | ||
|
|
19451f9df7 | ||
|
|
3314b41202 | ||
|
|
f636fd8f53 | ||
|
|
77847f570c | ||
|
|
afaf3fa83d | ||
|
|
4c7f644599 | ||
|
|
692f7f008a | ||
|
|
0a62c3dfa8 | ||
|
|
7cd2cfed44 | ||
|
|
c31e11d385 | ||
|
|
efe6021e76 | ||
|
|
8d67389042 | ||
|
|
4037587f74 | ||
|
|
94daeb1444 | ||
|
|
937b30c415 | ||
|
|
6f0242f05b | ||
|
|
921837fd0f | ||
|
|
d06cdcc53c | ||
|
|
5828355426 | ||
|
|
50dc321b7b | ||
|
|
43f033db80 | ||
|
|
623c53f1e4 | ||
|
|
39762718b9 | ||
|
|
ae3804f7b4 | ||
|
|
0dd08dfb84 | ||
|
|
bb23f68d53 | ||
|
|
83345a17d2 | ||
|
|
b9f6554767 | ||
|
|
7eadd20879 | ||
|
|
3844a60837 | ||
|
|
6cdf8a901a | ||
|
|
c868c43179 | ||
|
|
01ca2a6de7 | ||
|
|
d64af72f74 | ||
|
|
c2fe745813 | ||
|
|
ddefbf95a3 | ||
|
|
a2b651985e | ||
|
|
788c261ce9 | ||
|
|
35070cc17e | ||
|
|
79be057e91 | ||
|
|
aa8f506dd0 | ||
|
|
c6486b1960 | ||
|
|
2f8e3a1610 | ||
|
|
432d32bedc | ||
|
|
8cb2d21ff5 | ||
|
|
1103c208a8 | ||
|
|
7e59f0f974 | ||
|
|
c647d6df99 | ||
|
|
97a927bb7d | ||
|
|
7c650aeeca | ||
|
|
3fd7cd0137 | ||
|
|
7e97936f0e | ||
|
|
643a4a89f4 | ||
|
|
cfd93cf332 | ||
|
|
340e5b7d86 | ||
|
|
be624fe943 | ||
|
|
cb102e115c | ||
|
|
952eb1cf0e | ||
|
|
709ffa37b2 | ||
|
|
f4f206f3e5 |
303
DBusInterface.md
@@ -1,303 +0,0 @@
|
||||
The ratbagd DBus-Interface
|
||||
--------------------------
|
||||
|
||||
Note: **the DBus interface is subject to change**
|
||||
|
||||
Interfaces:
|
||||
- org.freedesktop.ratbag1.Manager
|
||||
- org.freedesktop.ratbag1.Device
|
||||
- org.freedesktop.ratbag1.Profile
|
||||
- org.freedesktop.ratbag1.Resolution
|
||||
- org.freedesktop.ratbag1.Button
|
||||
- org.freedesktop.ratbag1.Led
|
||||
|
||||
For a list of dbus types as used below, see https://dbus.freedesktop.org/doc/dbus-specification.html
|
||||
|
||||
Properties marked as 'constant' do not change for the lifetime of the
|
||||
object. Properties marked as 'mutable' may change, and a
|
||||
`org.freedesktop.DBus.Properties.PropertyChanged` signal is sent for those
|
||||
unless otherwise specified.
|
||||
|
||||
org.freedesktop.ratbag1.Manager
|
||||
===============================
|
||||
|
||||
The **org.freedesktop.ratbag1.Manager** interface is the entry point to
|
||||
interact with ratbagd.
|
||||
|
||||
### Properties:
|
||||
|
||||
#### `Devices`
|
||||
- type `ao`, read-only, mutable
|
||||
|
||||
Provides the object paths of all current devices, see **org.freedesktop.ratbag1.Device**
|
||||
|
||||
#### `Themes`
|
||||
- type `as`, read-only, constant
|
||||
|
||||
Provides the list of available theme names. This list is guaranteed to have
|
||||
one theme available ('default'). Other themes are implementation defined.
|
||||
A theme listed here is only a guarantee that the theme is known to libratbag
|
||||
and that SVGs *may* exist, it is not a guarantee that the SVG for any
|
||||
specific device exists. In other words, a device may not have an SVG for a
|
||||
specific theme.
|
||||
|
||||
This list is static for the lifetime of ratbagd.
|
||||
|
||||
org.freedesktop.ratbag1.Device
|
||||
==============================
|
||||
|
||||
The **org.freedesktop.ratbag1.Device** interface describes a single device
|
||||
known to ratbagd.
|
||||
|
||||
### Properties:
|
||||
|
||||
#### `Id`
|
||||
- type: `s`, read-only, constant
|
||||
|
||||
An ID describing this device. This ID should not be used for presentation to
|
||||
the user.
|
||||
|
||||
#### `Description`
|
||||
- type: `s`, read-only, constant
|
||||
|
||||
The device's name, suitable for presentation to the user.
|
||||
|
||||
#### `Capabilities`
|
||||
- type: `au`, read-only, constant
|
||||
|
||||
The capabilities supported by this device. see `enum
|
||||
ratbag_device_capability` in libratbag.h for the list of permissible
|
||||
capabilities.
|
||||
|
||||
|
||||
#### `Svg`
|
||||
- type: `s`, read-only, constant
|
||||
|
||||
The device's SVG file name, without path.
|
||||
|
||||
#### `Profiles`
|
||||
- type: `ao`, read-only, mutable
|
||||
|
||||
This property is mutable if the device supports adding and removing
|
||||
profiles.
|
||||
|
||||
Provides the list of profile paths for all profiles on this device, see
|
||||
**org.freedesktop.ratbag1.Profile**.
|
||||
|
||||
### Methods:
|
||||
|
||||
#### `Commit() → ()`
|
||||
|
||||
Commits the changes to the device. Changes to the device are batched; they
|
||||
are not written to the hardware until `Commit()` is invoked.
|
||||
|
||||
#### `GetSvg(s) → (s)`
|
||||
|
||||
Returns the full path to the SVG for the given theme or an empty string if
|
||||
none is available. The theme must be one of
|
||||
**org.freedesktop.ratbag1.Manager.Themes**. The theme 'default' is
|
||||
guaranteed to be available. ratbagd may return the path to a file that
|
||||
doesn't exist. This is the case if the device has SVGs available but not for
|
||||
the given theme.
|
||||
|
||||
org.freedesktop.ratbag1.Profile
|
||||
===============================
|
||||
|
||||
### Properties:
|
||||
|
||||
#### `Index`
|
||||
- type: `u`, read-only, constant
|
||||
|
||||
The index of this profile
|
||||
|
||||
#### `Enabled`
|
||||
- type: `b`, read-write, mutable
|
||||
|
||||
True if this is the profile is enabled, false otherwise.
|
||||
|
||||
Note that a disabled profile might not have correct bindings, so it's
|
||||
a good thing to rebind everything before calling `Commit()` on the
|
||||
**org.freedesktop.ratbag1.Device**.
|
||||
|
||||
#### `Resolutions`
|
||||
- type: `ao`, read-only, mutable
|
||||
|
||||
This property is mutable if the device supports adding and removing
|
||||
resolutions.
|
||||
|
||||
Provides the object paths of all resolutions in this profile, see
|
||||
**org.freedesktop.ratbag1.Resolution**
|
||||
|
||||
#### `Buttons`
|
||||
- type: `ao`, read-only, constant
|
||||
|
||||
Provides the object paths of all buttons in this profile, see
|
||||
**org.freedesktop.ratbag1.Button**
|
||||
|
||||
#### `Leds`
|
||||
- type: `ao`, read-only, constant
|
||||
|
||||
Provides the object paths of all LEDs in this profile, see
|
||||
**org.freedesktop.ratbag1.Led**
|
||||
|
||||
### `IsActive`
|
||||
- type: `b`, read-only, mutable
|
||||
|
||||
True if this is the currently active profile, false otherwise.
|
||||
|
||||
Profiles can only be set to active, but never to not active - at least one
|
||||
profile must be active at all times. This property is read-only, use the
|
||||
`SetActive()` method to activate a profile.
|
||||
|
||||
### Methods:
|
||||
|
||||
#### `SetActive() → ()`
|
||||
Set this profile to be the active profile
|
||||
|
||||
org.freedesktop.ratbag1.Resolution
|
||||
==================================
|
||||
|
||||
### Properties:
|
||||
#### `Index`
|
||||
- type: `u`, read-only, constant
|
||||
|
||||
Index of the resolution
|
||||
#### `Capabilities`
|
||||
- type: `au`, read-only, constant
|
||||
|
||||
Array of uints with the capabilities enum from libratbag
|
||||
|
||||
#### `IsActive`
|
||||
- type: `b`, read-only, mutable
|
||||
|
||||
True if this is the currently active resolution, false otherwise.
|
||||
|
||||
Resolutions can only be set to active, but never to not active - at least
|
||||
one resoultion must be active at all times. This property is read-only, use the
|
||||
`SetActive()` method to set a resolution as the active resolution.
|
||||
|
||||
#### `IsDefault`
|
||||
- type: `b`, read-only, mutable
|
||||
|
||||
True if this is the currently default resolution, false otherwise. If the
|
||||
device does not have the default resolution capability, this property is
|
||||
always false.
|
||||
|
||||
Resolutions can only be set to default, but never to not default - at least
|
||||
one resolution must be default at all times. This property is read-only, use the
|
||||
`SetDefault()` method to set a resolution as the default resolution.
|
||||
|
||||
#### `Resolution`
|
||||
- type: `uu`, read-write, mutable
|
||||
|
||||
uint for the x and y resolution assigned to this entry, respectively
|
||||
|
||||
#### `ReportRate`
|
||||
- type: `u`, read-write, mutable
|
||||
|
||||
uint for the report rate in Hz assigned to this entry
|
||||
|
||||
#### `Maximum`
|
||||
- type: `u`, read-only, constant
|
||||
|
||||
uint for the maximum possible resolution
|
||||
#### `Minimum`
|
||||
- type: `u`, read-only, constant
|
||||
|
||||
uint for the minimum possible resolution
|
||||
|
||||
### Methods:
|
||||
|
||||
#### `SetDefault() → () `
|
||||
|
||||
Set this resolution to be the default
|
||||
#### `SetActive() → () `
|
||||
|
||||
Set this resolution to be the active one
|
||||
|
||||
org.freedesktop.ratbag1.Button
|
||||
==============================
|
||||
|
||||
### Properties:
|
||||
#### `Index`
|
||||
- type: `u`, read-only, constant
|
||||
|
||||
Index of the button
|
||||
#### `Type`
|
||||
- type: `u`, read-only, constant
|
||||
|
||||
Enum describing the button physical type. This type is unrelated to the
|
||||
logical button mapping and serves to easily identify the button on the
|
||||
device.
|
||||
#### `ButtonMapping`
|
||||
- type: `u`, read-write, mutable
|
||||
|
||||
uint of the current button mapping (if mapping to button)
|
||||
#### `SpecialMapping`
|
||||
- type: `u`, read-write, mutable
|
||||
|
||||
Enum describing the current special mapping (if mapped to special)
|
||||
#### `KeyMapping`
|
||||
- type: `au`, read-write, mutable
|
||||
|
||||
Array of uints, first entry is the keycode, other entries, if any, are
|
||||
modifiers (if mapped to key)
|
||||
#### `Macro`
|
||||
-type: `a(uu)`, read-write, mutable
|
||||
|
||||
Array of (type, keycode), where type may be one of
|
||||
`RATBAG_MACRO_EVENT_KEY_PRESSED` or `RATBAG_MACRO_EVENT_KEY_RELEASED`.
|
||||
#### `ActionType`
|
||||
- type: `u`, read-only, mutable
|
||||
|
||||
An enum describing the action type of the button, see
|
||||
ratbag\_button\_get\_action\_type for the list of enums.
|
||||
This decides which *Mapping* property has a value.
|
||||
#### `ActionTypes`
|
||||
- type: `au`, read-only, constant
|
||||
Array of enum ratbag\_button\_action\_type, possible values for ActionType
|
||||
on the current device
|
||||
|
||||
### Methods:
|
||||
#### `Disable() → ()`
|
||||
Disable this button
|
||||
|
||||
org.freedesktop.ratbag1.Led
|
||||
===========================
|
||||
|
||||
### Properties:
|
||||
#### `Index`
|
||||
- type: `u`, read-only, constant
|
||||
|
||||
Index of the LED
|
||||
|
||||
#### `Mode`
|
||||
- type: `u`, read-write, mutable
|
||||
|
||||
uint mapping to the mode enum from libratbag
|
||||
|
||||
#### `Type`
|
||||
- type: `u`, read-only, mutable
|
||||
|
||||
enum describing the LED type
|
||||
|
||||
#### `Color`
|
||||
- type: `(uuu)`, read-write, mutable
|
||||
uint triplet (RGB) of the LED's color
|
||||
|
||||
#### `EffectRate`
|
||||
- type: `u`, read-write, mutable
|
||||
|
||||
The effect rate in Hz, possible values are in the range 100 - 20000
|
||||
|
||||
#### `Brightness`
|
||||
- type: `u`, read-write, mutable
|
||||
|
||||
The brightness of the LED, possible values are in the range 0 - 255
|
||||
|
||||
For easier debugging, objects paths are constructed from the device. e.g.
|
||||
`/org/freedesktop/ratbag/button/event5/p0/b10` is the button interface for
|
||||
button 10 on profile 0 on event5. The naming is subject to change. Do not
|
||||
rely on a constructed object path in your application.
|
||||
|
||||
|
||||
55
README.md
@@ -6,7 +6,17 @@ way to access the various features exposed by these mice and abstracts away
|
||||
hardware-specific and kernel-specific quirks.
|
||||
|
||||
libratbag exports the devices over a DBus daemon called **ratbagd**, see the
|
||||
[ratbagd DBus Interface description](DBusInterface.md).
|
||||
[ratbagd DBus Interface description](https://libratbag.github.io/).
|
||||
Users interact through a GUI like
|
||||
[Piper](https://github.com/libratbag/piper/). For developers, the
|
||||
`ratbagctl` tool is the prime tool for debugging.
|
||||
|
||||
Installing libratbag from system packages
|
||||
-----------------------------------------
|
||||
|
||||
libratbag is packaged for some distributions, you can use your system's
|
||||
package manager to install it. See [the
|
||||
wiki](https://github.com/libratbag/libratbag/wiki/Installation) for details.
|
||||
|
||||
Compiling libratbag
|
||||
-------------------
|
||||
@@ -17,7 +27,11 @@ libratbag and initialize the build:
|
||||
|
||||
git clone https://github.com/libratbag/libratbag.git
|
||||
cd libratbag
|
||||
meson builddir --prefix=/usr/
|
||||
meson builddir
|
||||
|
||||
This will inititialize libratbag so that it installs under `/usr/local`,
|
||||
i.e. it will not overwrite the system installation. For more information,
|
||||
see [the wiki](https://github.com/libratbag/libratbag/wiki/Installation).
|
||||
|
||||
And to build or re-build after code-changes, run:
|
||||
|
||||
@@ -27,9 +41,9 @@ And to build or re-build after code-changes, run:
|
||||
Note: `builddir` is the build output directory and can be changed to any
|
||||
other directory name. To set configure-time options, use e.g.
|
||||
|
||||
mesonconf builddir -Denable-documentation=false
|
||||
meson configure builddir -Denable-documentation=false
|
||||
|
||||
Run `mesonconf builddir` to list the options.
|
||||
Run `meson configure builddir` to list the options.
|
||||
|
||||
Running ratbagd as DBus-activated systemd service
|
||||
-------------------------------------------------
|
||||
@@ -80,33 +94,16 @@ library in the future, if other projects require it.
|
||||
Adding Devices to libratbag
|
||||
---------------------------
|
||||
|
||||
As of commit 3605bede4 libratbag now uses a hwdb entry to match the device
|
||||
with the drivers. To access a device through libratbag, the udev property
|
||||
RATBAG_DRIVER must be set for a device's event node. Check with
|
||||
libratbag relies on a device database to match a device with the drivers.
|
||||
See the data/devices/ directory for the set of known devices. These files
|
||||
are usually installed into $prefix/$datadir (e.g. /usr/share/libratbag/).
|
||||
|
||||
sudo udevadm info /sys/class/input/eventX | grep RATBAG_DRIVER
|
||||
To add a new device to libratbag, simply drop a new device file into that
|
||||
directory and restart ratbagd. See the data/devices/device.example file for
|
||||
guidance on what information must be set.
|
||||
|
||||
If your device is not yet assigned the property, it is not in the hwdb. It
|
||||
may however be supported by one of our existing drivers. Try enabling it by
|
||||
adding the device vendor-id/product-id to the hwdb file in
|
||||
`hwdb/70-libratbag-mouse.hwdb`. For example, for a HID++ 1.0 device, edit
|
||||
the 70-libratbag-mouse.hwdb file and add an entry with `RATBAG_DRIVER=hidpp10`.
|
||||
For the other drivers, look for the id of the driver in driver-{drivername}.c
|
||||
file and do the same.
|
||||
|
||||
Once your device is added to the hwdb, install libratbag and trigger a hwdb
|
||||
update:
|
||||
|
||||
sudo udevadm hwdb --update
|
||||
sudo udevadm control --reload
|
||||
|
||||
Then unplug/replug your mouse. `RATBAG_DRIVER` should appear in the udev
|
||||
properties of your device with the value you previously set. If the property
|
||||
is not assigned, the hwdb entry does not correctly match your device or the
|
||||
installed udev rules/hwdb entries are not picked up by udev.
|
||||
|
||||
If the device doesn't work, you'll have to start reverse-engineering the
|
||||
device-specific protocol. Good luck :)
|
||||
If the device doesn't work after adding the device file, you'll have to
|
||||
start reverse-engineering the device-specific protocol. Good luck :)
|
||||
|
||||
Source
|
||||
------
|
||||
|
||||
143
circle.yml
@@ -1,12 +1,15 @@
|
||||
# vim: set expandtab shiftwidth=2 tabstop=8:
|
||||
libratbag_references:
|
||||
default_settings: &default_settings
|
||||
working_directory: ~/libratbag
|
||||
environment:
|
||||
LANG: C.UTF-8
|
||||
build_default: &build_default
|
||||
name: Build
|
||||
command: |
|
||||
rm -rf build
|
||||
meson build ${MESON_PARAMS}
|
||||
mesonconf build
|
||||
meson configure build
|
||||
ninja -v -C build ${NINJA_ARGS}
|
||||
environment:
|
||||
MESON_PARAMS: --prefix=/usr
|
||||
@@ -16,10 +19,23 @@ libratbag_references:
|
||||
name: Build and test
|
||||
environment:
|
||||
NINJA_ARGS: test
|
||||
build_with_docs: &build_with_docs
|
||||
run:
|
||||
<<: *build_default
|
||||
name: Build with documentation
|
||||
environment:
|
||||
MESON_PARAMS: -Ddocumentation=true
|
||||
install: &install
|
||||
run:
|
||||
name: Installing
|
||||
command: ninja -C build install
|
||||
check_install: &check_install
|
||||
run:
|
||||
name: Checking installation
|
||||
command: |
|
||||
PREFIX=/usr/local/
|
||||
diff -u <(cd data/devices; ls *.device) <(cd $PREFIX/share/libratbag/devices; ls *.device)
|
||||
diff -u <(cd data/gnome; ls *.svg) <(cd $PREFIX/share/libratbag/gnome; ls *.svg)
|
||||
check_uninstall: &check_uninstall
|
||||
run:
|
||||
name: Checking if any files are left after uninstall
|
||||
@@ -52,21 +68,40 @@ libratbag_references:
|
||||
mkdir /run/dbus
|
||||
/usr/bin/dbus-daemon --system --fork
|
||||
|
||||
fedora_prep_cache: &fedora_prep_cache
|
||||
<<: *default_settings
|
||||
steps:
|
||||
- run:
|
||||
name: Initializing Fedora dnf cache
|
||||
command: dnf install -y --downloadonly libsolv tree git gcc gcc-c++ meson check-devel libudev-devel libevdev-devel valgrind python3-gobject python3-evdev glib2-devel python3-lxml
|
||||
- persist_to_workspace:
|
||||
root: /var/cache/
|
||||
paths:
|
||||
- dnf/*
|
||||
|
||||
fedora_fetch_cache: &fedora_fetch_cache
|
||||
attach_workspace:
|
||||
at: /var/cache/
|
||||
|
||||
fedora_install: &fedora_install
|
||||
run:
|
||||
name: Install prerequisites
|
||||
command: dnf install -y tree git gcc gcc-c++ meson check-devel libudev-devel libevdev-devel doxygen graphviz valgrind python3-gobject python3-evdev
|
||||
command: |
|
||||
echo keepcache=1 >> /etc/dnf/dnf.conf
|
||||
dnf upgrade -y libsolv
|
||||
dnf install -y tree git gcc gcc-c++ meson check-devel libudev-devel libevdev-devel valgrind python3-gobject python3-evdev glib2-devel python3-lxml python3-devel swig
|
||||
|
||||
|
||||
fedora_settings: &fedora_settings
|
||||
<<: *default_settings
|
||||
steps:
|
||||
- *fedora_fetch_cache
|
||||
- *fedora_install
|
||||
- checkout
|
||||
- *start_dbus
|
||||
- *build_and_test
|
||||
- *install
|
||||
- *check_install
|
||||
- *check_uninstall
|
||||
- *export_logs
|
||||
|
||||
@@ -81,11 +116,12 @@ ubuntu_settings: &ubuntu_settings
|
||||
apt-get install -y software-properties-common
|
||||
add-apt-repository universe
|
||||
apt-get update
|
||||
apt-get install -y tree git gcc g++ pkg-config meson check libudev-dev libevdev-dev libsystemd-dev doxygen graphviz valgrind python3-gi python3-evdev
|
||||
apt-get install -y tree git gcc g++ pkg-config meson check libudev-dev libevdev-dev libsystemd-dev valgrind python3-gi python3-evdev libglib2.0-dev python3-lxml python3-dev swig systemd
|
||||
- checkout
|
||||
- *start_dbus
|
||||
- *build_and_test
|
||||
- *install
|
||||
- *check_install
|
||||
- *check_uninstall
|
||||
- *export_logs
|
||||
|
||||
@@ -93,17 +129,73 @@ ubuntu_settings: &ubuntu_settings
|
||||
scan_build_run: &scan_build_run
|
||||
<<: *default_settings
|
||||
steps:
|
||||
- *fedora_fetch_cache
|
||||
- *fedora_install
|
||||
- run:
|
||||
name: Install clang and find
|
||||
command: dnf install -y clang-analyzer findutils
|
||||
command: dnf install -y clang-analyzer findutils python3-beautifulsoup4
|
||||
- checkout
|
||||
- *ninja_scan_build
|
||||
- *export_logs
|
||||
- run:
|
||||
name: Check scan-build results
|
||||
command: test ! -d ~/libratbag/build/meson-logs/scanbuild || test $(find ~/libratbag/build/meson-logs/scanbuild -maxdepth 0 ! -empty -exec echo "not empty" \; | wc -l) -eq 0 || (echo "Check scan-build results" && false)
|
||||
command: python3 ~/libratbag/tools/check_scan_build.py ~/libratbag/build/meson-logs/scanbuild
|
||||
|
||||
doc_build: &doc_build
|
||||
<<: *default_settings
|
||||
steps:
|
||||
- *fedora_fetch_cache
|
||||
- *fedora_install
|
||||
- run:
|
||||
name: Install documentation build-deps
|
||||
command: dnf install -y python3-sphinx python3-sphinx_rtd_theme doxygen libxslt
|
||||
- checkout
|
||||
- *build_with_docs
|
||||
- *export_logs
|
||||
- store_artifacts:
|
||||
path: ~/libratbag/build/doc/html
|
||||
- persist_to_workspace:
|
||||
root: build
|
||||
paths:
|
||||
- doc/html/*
|
||||
|
||||
docs_deploy: &docs_deploy
|
||||
<<: *default_settings
|
||||
steps:
|
||||
- *fedora_fetch_cache
|
||||
- run:
|
||||
name: Install prerequisites
|
||||
command: dnf install -y git tree
|
||||
- checkout
|
||||
- attach_workspace:
|
||||
at: build
|
||||
- run:
|
||||
name: Setup the deploy SSH key
|
||||
command: |
|
||||
ssh-add -L | tail -n1 > ~/.ssh/deploy.pub
|
||||
cat <<EOF > ~/.ssh/config
|
||||
Host github.com
|
||||
IdentityFile /root/.ssh/deploy.pub
|
||||
IdentitiesOnly yes
|
||||
EOF
|
||||
- run:
|
||||
name: Clone doc repository
|
||||
command: |
|
||||
cd ~
|
||||
git clone ssh://git@github.com/${CIRCLE_PROJECT_REPONAME}/${CIRCLE_PROJECT_REPONAME}.github.io
|
||||
- run:
|
||||
name: Copy the doc, commit and push
|
||||
command: |
|
||||
set +e
|
||||
cd ~/${CIRCLE_PROJECT_REPONAME}.github.io
|
||||
\cp -r ~/${CIRCLE_PROJECT_REPONAME}/build/doc/html/* .
|
||||
if ! git diff-index --quiet HEAD --; then
|
||||
git config --global user.email "libratbag@librabtag.github.io"
|
||||
git config --global user.name "The libratbag crew"
|
||||
git add .
|
||||
git commit -m "update docs from ${CIRCLE_SHA1}"
|
||||
git push
|
||||
fi
|
||||
|
||||
version: 2
|
||||
jobs:
|
||||
@@ -111,18 +203,30 @@ jobs:
|
||||
<<: *fedora_settings
|
||||
docker:
|
||||
- image: fedora:rawhide
|
||||
fedora_cache:
|
||||
<<: *fedora_prep_cache
|
||||
docker:
|
||||
- image: fedora:28
|
||||
fedora_latest:
|
||||
<<: *fedora_settings
|
||||
docker:
|
||||
- image: fedora:latest
|
||||
ubuntu_17_04:
|
||||
- image: fedora:28
|
||||
ubuntu_17_10:
|
||||
<<: *ubuntu_settings
|
||||
docker:
|
||||
- image: ubuntu:zesty
|
||||
- image: ubuntu:artful
|
||||
doc_build:
|
||||
<<: *doc_build
|
||||
docker:
|
||||
- image: fedora:28
|
||||
scan_build:
|
||||
<<: *scan_build_run
|
||||
docker:
|
||||
- image: fedora:latest
|
||||
- image: fedora:28
|
||||
doc_deploy:
|
||||
<<: *docs_deploy
|
||||
docker:
|
||||
- image: fedora:28
|
||||
|
||||
|
||||
workflows:
|
||||
@@ -130,6 +234,21 @@ workflows:
|
||||
compile_and_test:
|
||||
jobs:
|
||||
# - fedora_rawhide
|
||||
- scan_build
|
||||
- ubuntu_17_04
|
||||
- fedora_latest
|
||||
- fedora_cache
|
||||
- scan_build:
|
||||
requires:
|
||||
- fedora_cache
|
||||
- ubuntu_17_10
|
||||
- fedora_latest:
|
||||
requires:
|
||||
- fedora_cache
|
||||
- doc_build:
|
||||
requires:
|
||||
- fedora_cache
|
||||
- doc_deploy:
|
||||
requires:
|
||||
- fedora_cache
|
||||
- doc_build
|
||||
filters:
|
||||
branches:
|
||||
only: master
|
||||
|
||||
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
243
data/devices/data-parse-test.py
Executable file
@@ -0,0 +1,243 @@
|
||||
#!/usr/bin/env python3
|
||||
# vim: set expandtab shiftwidth=4 tabstop=4:
|
||||
#
|
||||
# Copyright © 2017 Red Hat, Inc.
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice (including the next
|
||||
# paragraph) shall be included in all copies or substantial portions of the
|
||||
# Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
# DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
# Device data verification script
|
||||
#
|
||||
|
||||
import argparse
|
||||
import os
|
||||
import configparser
|
||||
|
||||
# Set on commandline with --svg-dir
|
||||
svg_dirs = []
|
||||
|
||||
def assertIn(element, l):
|
||||
if element not in l:
|
||||
raise AssertionError('{} must be in {}'.format(element, l))
|
||||
|
||||
|
||||
def assertNotIn(element, l):
|
||||
if element in l:
|
||||
raise AssertionError('{} must not be in {}'.format(element, l))
|
||||
|
||||
|
||||
def check_svg_str(string):
|
||||
assert(string.endswith('.svg'))
|
||||
|
||||
svg_file_found = False
|
||||
for svg_dir in svg_dirs:
|
||||
files = os.listdir(svg_dir)
|
||||
if string in files:
|
||||
svg_file_found = True
|
||||
break
|
||||
assert(svg_file_found)
|
||||
|
||||
|
||||
def check_match_str(string):
|
||||
bustypes = ['usb', 'bluetooth']
|
||||
|
||||
matches = string.split(';')
|
||||
for match in matches:
|
||||
if not match: # empty string if trailing ;
|
||||
continue
|
||||
|
||||
parts = match.split(':')
|
||||
assert(len(parts) == 3)
|
||||
assertIn(parts[0], bustypes)
|
||||
vid = parts[1]
|
||||
assert(vid == '{:04x}'.format(int(vid, 16)))
|
||||
pid = parts[2]
|
||||
assert(pid == '{:04x}'.format(int(pid, 16)))
|
||||
|
||||
|
||||
def check_ledtypes_str(string):
|
||||
permitted_types = ['logo', 'side', 'battery', 'dpi']
|
||||
|
||||
types = string.split(';')
|
||||
for t in types:
|
||||
if not t: # emtpy string if trailing ;
|
||||
continue
|
||||
|
||||
assertIn(t, permitted_types)
|
||||
|
||||
|
||||
def check_section_device(section):
|
||||
required_keys = ['Name', 'Driver', 'DeviceMatch']
|
||||
permitted_keys = required_keys + ['Svg', 'LedTypes']
|
||||
|
||||
for key in section.keys():
|
||||
assertIn(key, permitted_keys)
|
||||
|
||||
for r in required_keys:
|
||||
assertIn(r, section)
|
||||
|
||||
try:
|
||||
check_svg_str(section['Svg'])
|
||||
except KeyError:
|
||||
pass
|
||||
|
||||
try:
|
||||
check_ledtypes_str(section['LedTypes'])
|
||||
except KeyError:
|
||||
pass
|
||||
|
||||
check_match_str(section['DeviceMatch'])
|
||||
|
||||
|
||||
def check_dpi_range_str(string):
|
||||
import re
|
||||
|
||||
m = re.search('^([0-9]+):([0-9]+)@([0-9\.]+)$', string)
|
||||
assert(m is not None)
|
||||
min = int(m.group(1))
|
||||
max = int(m.group(2))
|
||||
steps = float(m.group(3))
|
||||
|
||||
assert(min >= 0 and min <= 400)
|
||||
assert(max >= 2000 and max <= 12000)
|
||||
assert(steps > 0 and steps <= 100)
|
||||
|
||||
if int(steps) == steps:
|
||||
steps = int(steps)
|
||||
|
||||
assert(string == '{}:{}@{}'.format(min, max, steps))
|
||||
|
||||
|
||||
def check_dpi_list_str(string):
|
||||
entries = string.split(';')
|
||||
# Remove possible empty last entry if trailing with a ;
|
||||
if not entries[len(entries) - 1]:
|
||||
entries = entries[:-1]
|
||||
|
||||
for idx, entry in enumerate(entries):
|
||||
dpi = int(entry)
|
||||
assert(dpi >= 0 and dpi <= 12000)
|
||||
if idx > 0:
|
||||
prev = entries[idx - 1]
|
||||
prev_dpi = int(prev)
|
||||
assert(dpi > prev_dpi)
|
||||
|
||||
|
||||
def check_profile_type_str(string):
|
||||
types = ['G9', 'G500', 'G700']
|
||||
assertIn(string, types)
|
||||
|
||||
|
||||
def check_section_hidpp10(section):
|
||||
permitted = ['Profiles', 'ProfileType', 'DpiRange', 'DpiList', 'DeviceIndex', 'Leds']
|
||||
for key in section.keys():
|
||||
assertIn(key, permitted)
|
||||
|
||||
try:
|
||||
nprofiles = int(section['Profiles'])
|
||||
# 10 is arbitrarily chosen
|
||||
assert(nprofiles > 0 and nprofiles < 10)
|
||||
except KeyError:
|
||||
pass
|
||||
|
||||
try:
|
||||
index = int(section['DeviceIndex'])
|
||||
# 10 is arbitrarily chosen
|
||||
assert(index > 0 and index < 10)
|
||||
except KeyError:
|
||||
pass
|
||||
|
||||
try:
|
||||
check_dpi_range_str(section['DpiRange'])
|
||||
assertNotIn('DpiList', section.keys())
|
||||
except KeyError:
|
||||
pass
|
||||
|
||||
try:
|
||||
check_dpi_list_str(section['DpiList'])
|
||||
assertNotIn('DpiRange', section.keys())
|
||||
except KeyError:
|
||||
pass
|
||||
|
||||
try:
|
||||
check_profile_type_str(section['ProfileType'])
|
||||
except KeyError:
|
||||
pass
|
||||
|
||||
try:
|
||||
leds = int(section['Leds'])
|
||||
# 10 is arbitrarily chosen
|
||||
assert(leds > 0 and leds < 10)
|
||||
except KeyError:
|
||||
pass
|
||||
|
||||
|
||||
def check_section_hidpp20(section):
|
||||
permitted = ['DeviceIndex']
|
||||
for key in section.keys():
|
||||
assertIn(key, permitted)
|
||||
|
||||
try:
|
||||
index = int(section['DeviceIndex'])
|
||||
# 10 is arbitrarily chosen
|
||||
assert(index > 0 and index < 10)
|
||||
except KeyError:
|
||||
pass
|
||||
|
||||
|
||||
def check_section_driver(driver, section):
|
||||
if driver == 'hidpp10':
|
||||
check_section_hidpp10(section)
|
||||
elif driver == 'hidpp20':
|
||||
check_section_hidpp20(section)
|
||||
else:
|
||||
assert('Unsupported driver section {}'.format(driver))
|
||||
|
||||
|
||||
def parse_data_file(path):
|
||||
print('Parsing file {}'.format(path))
|
||||
data = configparser.ConfigParser(strict=True)
|
||||
# Don't convert to lowercase
|
||||
data.optionxform = lambda option: option
|
||||
data.read(path)
|
||||
|
||||
assertIn('Device', data.sections())
|
||||
check_section_device(data['Device'])
|
||||
|
||||
driver = data['Device']['Driver']
|
||||
driver_section = 'Driver/{}'.format(driver)
|
||||
|
||||
permitted_sections = ['Device', driver_section]
|
||||
for s in data.sections():
|
||||
assertIn(s, permitted_sections)
|
||||
|
||||
if data.has_section(driver_section):
|
||||
check_section_driver(driver, data[driver_section])
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser(description="Device data-file checker")
|
||||
parser.add_argument('file', nargs='+')
|
||||
parser.add_argument('--svg-dir', metavar='dir', action='append',
|
||||
type=str,
|
||||
help='Directory to check for SVG files (may be given multiple times)')
|
||||
args = parser.parse_args()
|
||||
svg_dirs = args.svg_dir
|
||||
for path in args.file:
|
||||
parse_data_file(path)
|
||||
57
data/devices/device.example
Normal file
@@ -0,0 +1,57 @@
|
||||
# Example description file for a libratbag device
|
||||
#
|
||||
# Make sure the file has a recognizable name with a '.device' suffix
|
||||
|
||||
[Device]
|
||||
# The kernel name of the device. This name is not used by libratbag, it is
|
||||
# used by debugging tools.
|
||||
Name=Logitech Example Device
|
||||
|
||||
# DeviceMatch is a triplet of bus:vid:pid, where bus is 'usb' or bluetooth'
|
||||
# and pid/vid are lowercase 4-digit hexadecimal numbers with preceding
|
||||
# zeroes.
|
||||
DeviceMatch=usb:12ab:00f2
|
||||
|
||||
# The file name of the SVG file representing this device
|
||||
Svg=logitech-example.svg
|
||||
|
||||
# The libratbag driver backend
|
||||
Driver=hidpp10
|
||||
|
||||
# The types of the LEDs, in the indexed order they appear in, separated by a
|
||||
# semicolon.
|
||||
# Allowed values: logo, side, battery, dpi
|
||||
LedTypes=logo;side
|
||||
|
||||
# Only one group of driver-specific properties is permitted and it must be
|
||||
# [Driver/<drivername>]. It is a bug do have any other [Driver/foo] group in
|
||||
# a device file, but this example file lists all.
|
||||
|
||||
[Driver/hidpp10]
|
||||
# The number of profiles, must be greater than 0
|
||||
Profiles=1
|
||||
|
||||
# The type of the profile
|
||||
ProfileType=G9
|
||||
|
||||
# The range of available resolutions in the form min:max@step
|
||||
# Mutually exclusive with DpiList
|
||||
DpiRange=50:5700@50
|
||||
|
||||
# The list of available resolutions, separated by semicolons.
|
||||
# Mutually exclusive with DpiRange
|
||||
# Where possible, DpiRange should be preferred
|
||||
DpiList=50;200;400;800
|
||||
|
||||
# The HID++ 1.0 device index
|
||||
# Should be unset unless required
|
||||
# DeviceIndex=1
|
||||
|
||||
# The number of LEDs
|
||||
Leds=1
|
||||
|
||||
|
||||
[Driver/hidpp20]
|
||||
# The HID++ 2.0 device index
|
||||
# Should be unset unless required
|
||||
# DeviceIndex=1
|
||||
5
data/devices/etekcity-scroll-alpha.device
Normal file
@@ -0,0 +1,5 @@
|
||||
[Device]
|
||||
Name=Etekcity Scroll Alpha
|
||||
DeviceMatch=usb:1ea7:4011
|
||||
Driver=etekcity
|
||||
Svg=etekcity.svg
|
||||
5
data/devices/gskill-MX-780.device
Normal file
@@ -0,0 +1,5 @@
|
||||
# G.Skill MX-780
|
||||
[Device]
|
||||
Name=G.Skill MX-780
|
||||
DeviceMatch=usb:28da:3101
|
||||
Driver=gskill
|
||||
5
data/devices/logitech-M325.device
Normal file
@@ -0,0 +1,5 @@
|
||||
# Logitech M325 over unifying
|
||||
[Device]
|
||||
Name=Logitech M325
|
||||
DeviceMatch=usb:046d:400a
|
||||
Driver=hidpp20
|
||||
5
data/devices/logitech-M570.device
Normal file
@@ -0,0 +1,5 @@
|
||||
# Logitech M570
|
||||
[Device]
|
||||
Name=Logitech M570
|
||||
DeviceMatch=usb:046d:1028
|
||||
Driver=hidpp10
|
||||
5
data/devices/logitech-M705.device
Normal file
@@ -0,0 +1,5 @@
|
||||
# Logitech M705
|
||||
[Device]
|
||||
Name=Logitech M705
|
||||
DeviceMatch=usb:046d:101b
|
||||
Driver=hidpp10
|
||||
5
data/devices/logitech-MX-Anywhere2.device
Normal file
@@ -0,0 +1,5 @@
|
||||
[Device]
|
||||
Name=Logitech MX Anywhere 2
|
||||
DeviceMatch=usb:046d:404a;bluetooth:046d:b013
|
||||
Driver=hidpp20
|
||||
Svg=logitech-mx-anywhere2.svg
|
||||
5
data/devices/logitech-MX-Anywhere2S.device
Normal file
@@ -0,0 +1,5 @@
|
||||
[Device]
|
||||
Name=Logitech MX Anywhere 2S
|
||||
DeviceMatch=usb:046d:406a
|
||||
Driver=hidpp20
|
||||
Svg=logitech-mx-anywhere2.svg
|
||||
6
data/devices/logitech-MX-Master-2S.device
Normal file
@@ -0,0 +1,6 @@
|
||||
# Logitech MX Master 2S
|
||||
[Device]
|
||||
Name=Logitech MX Master 2S
|
||||
DeviceMatch=bluetooth:046d:b019;usb:046d:4069
|
||||
Driver=hidpp20
|
||||
Svg=logitech-mx-master-2s.svg
|
||||
6
data/devices/logitech-MX-Master.device
Normal file
@@ -0,0 +1,6 @@
|
||||
# Logitech MX Master
|
||||
[Device]
|
||||
Name=Logitech MX Master
|
||||
DeviceMatch=usb:046d:4041;bluetooth:046d:b012;usb:046d:4060
|
||||
Driver=hidpp20
|
||||
Svg=logitech-mx-master.svg
|
||||
5
data/devices/logitech-T650.device
Normal file
@@ -0,0 +1,5 @@
|
||||
# Logitech T650 over unifying
|
||||
[Device]
|
||||
Name=Logitech T650
|
||||
DeviceMatch=usb:046d:4101
|
||||
Driver=hidpp20
|
||||
5
data/devices/logitech-Wireless-Touchpad.device
Normal file
@@ -0,0 +1,5 @@
|
||||
# Logitech Wireless Touchpad (Unifying)
|
||||
[Device]
|
||||
Name=Logitech Wireless Touchpad
|
||||
DeviceMatch=usb:046d:4011
|
||||
Driver=hidpp20
|
||||
9
data/devices/logitech-g-pro-wireless.device
Normal file
@@ -0,0 +1,9 @@
|
||||
[Device]
|
||||
Name=Logitech G Pro Wireless
|
||||
DeviceMatch=usb:046d:c539;usb:046d:c088
|
||||
Svg=logitech-g-pro-wireless.svg
|
||||
LedTypes=logo;battery;dpi;
|
||||
Driver=hidpp20
|
||||
|
||||
[Driver/hidpp20]
|
||||
DeviceIndex=1
|
||||
6
data/devices/logitech-g-pro.device
Normal file
@@ -0,0 +1,6 @@
|
||||
[Device]
|
||||
Name=Logitech Gaming Mouse G Pro
|
||||
DeviceMatch=usb:046d:c085
|
||||
Svg=logitech-g-pro.svg
|
||||
Driver=hidpp20
|
||||
LedTypes=logo;side
|
||||
7
data/devices/logitech-g102-g203.device
Normal file
@@ -0,0 +1,7 @@
|
||||
# G102 and G203 (USB)
|
||||
[Device]
|
||||
Name=Logitech Gaming Mouse G102/G103
|
||||
DeviceMatch=usb:046d:c084
|
||||
Svg=logitech-g102-g203.svg
|
||||
Driver=hidpp20
|
||||
LedTypes=logo;side;
|
||||
6
data/devices/logitech-g300.device
Normal file
@@ -0,0 +1,6 @@
|
||||
# WARNING: this file was automatically converted and has not yet been vetted
|
||||
[Device]
|
||||
Name=Logitech G300
|
||||
DeviceMatch=usb:046d:c246
|
||||
Driver=logitech_g300
|
||||
Svg=logitech-g300.svg
|
||||
7
data/devices/logitech-g302.device
Normal file
@@ -0,0 +1,7 @@
|
||||
# G302 over USB
|
||||
[Device]
|
||||
Name=Logitech Gaming Mouse G302
|
||||
DeviceMatch=usb:046d:c07f
|
||||
Svg=logitech-g303.svg
|
||||
Driver=hidpp20
|
||||
LedTypes=logo;side;
|
||||
7
data/devices/logitech-g303.device
Normal file
@@ -0,0 +1,7 @@
|
||||
# G303 over USB
|
||||
[Device]
|
||||
Name=Logitech Gaming Mouse G303
|
||||
DeviceMatch=usb:046d:c080
|
||||
Svg=logitech-g303.svg
|
||||
Driver=hidpp20
|
||||
LedTypes=logo;side;
|
||||
6
data/devices/logitech-g402.device
Executable file
@@ -0,0 +1,6 @@
|
||||
# Logitech G402 Gaming Mouse USB
|
||||
[Device]
|
||||
Name=Logitech G402 Gaming Mouse
|
||||
DeviceMatch=usb:046d:c07e
|
||||
Driver=hidpp20
|
||||
Svg=logitech-g402.svg
|
||||
6
data/devices/logitech-g403.device
Normal file
@@ -0,0 +1,6 @@
|
||||
# Logitech G403
|
||||
[Device]
|
||||
Name=Logitech G403
|
||||
DeviceMatch=usb:046d:c082;usb:046d:c083
|
||||
Driver=hidpp20
|
||||
Svg=logitech-g403.svg
|
||||
9
data/devices/logitech-g5-2007.device
Normal file
@@ -0,0 +1,9 @@
|
||||
# Name=Logitech G5 2007
|
||||
[Device]
|
||||
Name=Logitech G5
|
||||
DeviceMatch=usb:046d:c049
|
||||
Driver=hidpp10
|
||||
|
||||
[Driver/hidpp10]
|
||||
DpiList=400;800;1600;2000
|
||||
Profiles=1
|
||||
7
data/devices/logitech-g5.device
Normal file
@@ -0,0 +1,7 @@
|
||||
[Device]
|
||||
Name=G5
|
||||
DeviceMatch=usb:046d:c041
|
||||
Driver=hidpp10
|
||||
|
||||
[Driver/hidpp10]
|
||||
DpiList=400;800;1600;2000
|
||||
10
data/devices/logitech-g500.device
Normal file
@@ -0,0 +1,10 @@
|
||||
[Device]
|
||||
Name=Logitech G500
|
||||
DeviceMatch=usb:046d:c068
|
||||
Driver=hidpp10
|
||||
Svg=logitech-g500.svg
|
||||
|
||||
[Driver/hidpp10]
|
||||
DpiRange=0:5700@23.53
|
||||
ProfileType=G500
|
||||
Profiles=1
|
||||
10
data/devices/logitech-g500s.device
Normal file
@@ -0,0 +1,10 @@
|
||||
[Device]
|
||||
Name=Logitech G500s
|
||||
DeviceMatch=usb:046d:c24e
|
||||
Driver=hidpp10
|
||||
Svg=logitech-g500s.svg
|
||||
|
||||
[Driver/hidpp10]
|
||||
DpiRange=0:8200@50
|
||||
ProfileType=G500
|
||||
Profiles=1
|
||||
6
data/devices/logitech-g502-HERO-over-USB.device
Normal file
@@ -0,0 +1,6 @@
|
||||
# Logitech G502 HERO over USB
|
||||
[Device]
|
||||
Name=Logitech G502 HERO
|
||||
DeviceMatch=usb:046d:c08b
|
||||
Driver=hidpp20
|
||||
Svg=logitech-g502.svg
|
||||
6
data/devices/logitech-g502-Proteus-Core-over-USB.device
Normal file
@@ -0,0 +1,6 @@
|
||||
# Logitech G502 Proteus Core over USB
|
||||
[Device]
|
||||
Name=Logitech G502 Proteus Core
|
||||
DeviceMatch=usb:046d:c07d
|
||||
Driver=hidpp20
|
||||
Svg=logitech-g502.svg
|
||||
@@ -0,0 +1,6 @@
|
||||
# Logitech G502 Proteus Spectrum over USB
|
||||
[Device]
|
||||
Name=Logitech G502 Proteus Spectrum
|
||||
DeviceMatch=usb:046d:c332
|
||||
Driver=hidpp20
|
||||
Svg=logitech-g502.svg
|
||||
6
data/devices/logitech-g600.device
Normal file
@@ -0,0 +1,6 @@
|
||||
# WARNING: this file was automatically converted and has not yet been vetted
|
||||
[Device]
|
||||
Name=Logitech G600
|
||||
DeviceMatch=usb:046d:c24a
|
||||
Driver=logitech_g600
|
||||
Svg=logitech-g600.svg
|
||||
8
data/devices/logitech-g602.device
Normal file
@@ -0,0 +1,8 @@
|
||||
# Logitech G602 over wireless USB
|
||||
[Device]
|
||||
Name=Logitech G602
|
||||
DeviceMatch=usb:046d:c537
|
||||
Driver=hidpp20
|
||||
|
||||
[Driver/hidpp20]
|
||||
DeviceIndex=1
|
||||
9
data/devices/logitech-g7.device
Normal file
@@ -0,0 +1,9 @@
|
||||
# Logitech G7
|
||||
# http://support.logitech.com/en_us/product/g7-laser-cordless-mouse/specs
|
||||
[Device]
|
||||
Name=Logitech G7
|
||||
DeviceMatch=usb:046d:c51a
|
||||
Driver=hidpp10
|
||||
|
||||
[Driver/hidpp10]
|
||||
Profiles=1
|
||||
12
data/devices/logitech-g700-wireless.device
Normal file
@@ -0,0 +1,12 @@
|
||||
# Logitech G700 over wireless USB
|
||||
# http://support.logitech.com/en_us/product/wireless-gaming-mouse-g700/specs
|
||||
[Device]
|
||||
Name=Logitech G700
|
||||
DeviceMatch=usb:046d:c531
|
||||
Driver=hidpp10
|
||||
|
||||
[Driver/hidpp10]
|
||||
DpiRange=0:5700@23.53
|
||||
ProfileType=G700
|
||||
DeviceIndex=1
|
||||
Profiles=5
|
||||
12
data/devices/logitech-g700.device
Normal file
@@ -0,0 +1,12 @@
|
||||
# Logitech G700 over USB
|
||||
# http://support.logitech.com/en_us/product/wireless-gaming-mouse-g700/specs
|
||||
[Device]
|
||||
Name=Logitech G700
|
||||
DeviceMatch=usb:046d:c06b
|
||||
Driver=hidpp10
|
||||
Svg=logitech-g700.svg
|
||||
|
||||
[Driver/hidpp10]
|
||||
DpiRange=0:5700@23.53
|
||||
ProfileType=G700
|
||||
Profiles=5
|
||||
13
data/devices/logitech-g700s-wireless.device
Normal file
@@ -0,0 +1,13 @@
|
||||
# Logitech G700s over wireless USB
|
||||
# http://support.logitech.com/en_us/product/g700s-rechargable-wireless-gaming-mouse/specs
|
||||
[Device]
|
||||
Name=Logitech G700s
|
||||
DeviceMatch=usb:046d:c531
|
||||
Driver=hidpp10
|
||||
Svg=logitech-g700.svg
|
||||
|
||||
[Driver/hidpp10]
|
||||
DpiRange=0:8200@50
|
||||
ProfileType=G700
|
||||
DeviceIndex=1
|
||||
Profiles=5
|
||||
12
data/devices/logitech-g700s.device
Normal file
@@ -0,0 +1,12 @@
|
||||
# Logitech G700s over USB
|
||||
# http://support.logitech.com/en_us/product/g700s-rechargable-wireless-gaming-mouse/specs
|
||||
[Device]
|
||||
Name=Logitech G700s
|
||||
DeviceMatch=usb:046d:c07c
|
||||
Driver=hidpp10
|
||||
Svg=logitech-g700.svg
|
||||
|
||||
[Driver/hidpp10]
|
||||
DpiRange=0:8200@50
|
||||
ProfileType=G700
|
||||
Profiles=5
|
||||
6
data/devices/logitech-g703.device
Normal file
@@ -0,0 +1,6 @@
|
||||
[Device]
|
||||
Name=Logitech G703
|
||||
DeviceMatch=usb:046d:c087
|
||||
Driver=hidpp20
|
||||
Svg=logitech-g703.svg
|
||||
|
||||
14
data/devices/logitech-g9.device
Normal file
@@ -0,0 +1,14 @@
|
||||
# Logitech G9
|
||||
# http://support.logitech.com/en_us/product/g9-laser-mouse/specs
|
||||
[Device]
|
||||
Name=Logitech G9
|
||||
DeviceMatch=usb:046d:c048
|
||||
LedTypes=dpi
|
||||
Driver=hidpp10
|
||||
Svg=logitech-g9.svg
|
||||
|
||||
[Driver/hidpp10]
|
||||
DpiList=200;400;600;800;1000;1200;1400;1600;1800;2000;2200;2400;2600;2800;3000;3200
|
||||
ProfileType=G9
|
||||
Profiles=5
|
||||
Leds=1
|
||||
9
data/devices/logitech-g900-wireless.device
Normal file
@@ -0,0 +1,9 @@
|
||||
# Logitech G900, G903 and G403 over wireless USB
|
||||
[Device]
|
||||
Name=Logitech G900, G903, G403
|
||||
DeviceMatch=usb:046d:c539
|
||||
Driver=hidpp20
|
||||
Svg=logitech-g900.svg
|
||||
|
||||
[Driver/hidpp20]
|
||||
DeviceIndex=1
|
||||
6
data/devices/logitech-g900.device
Normal file
@@ -0,0 +1,6 @@
|
||||
# Logitech G900 over USB
|
||||
[Device]
|
||||
Name=Logitech G900
|
||||
DeviceMatch=usb:046d:c081
|
||||
Driver=hidpp20
|
||||
Svg=logitech-g900.svg
|
||||
6
data/devices/logitech-g903.device
Normal file
@@ -0,0 +1,6 @@
|
||||
# Logitech G903 over USB
|
||||
[Device]
|
||||
Name=Logitech G903
|
||||
DeviceMatch=usb:046d:c086
|
||||
Driver=hidpp20
|
||||
Svg=logitech-g900.svg
|
||||
11
data/devices/logitech-g9x-[Call-of-Duty-MW3-Edition].device
Normal file
@@ -0,0 +1,11 @@
|
||||
# Logitech G9x [Call of Duty MW3 Edition]
|
||||
# http://support.logitech.com/en_us/product/laser-mouse-g9x/specs
|
||||
[Device]
|
||||
Name=Logitech G9x [Call of Duty MW3 Edition]
|
||||
DeviceMatch=usb:046d:c249
|
||||
Driver=hidpp10
|
||||
|
||||
[Driver/hidpp10]
|
||||
DpiRange=0:5700@23.53
|
||||
ProfileType=G500
|
||||
Profiles=5
|
||||
11
data/devices/logitech-g9x-[Original].device
Normal file
@@ -0,0 +1,11 @@
|
||||
# Logitech G9x [Original]
|
||||
# http://support.logitech.com/en_us/product/g9x-laser-mouse/specs
|
||||
[Device]
|
||||
Name=G9x [Original]
|
||||
DeviceMatch=usb:046d:c066
|
||||
Driver=hidpp10
|
||||
|
||||
[Driver/hidpp10]
|
||||
DpiRange=0:5700@23.53
|
||||
ProfileType=G500
|
||||
Profiles=5
|
||||
9
data/devices/logitech-gpowerplay-wireless.device
Normal file
@@ -0,0 +1,9 @@
|
||||
# Logitech G PowerPlay mouse pad + wireless USB receiver.
|
||||
[Device]
|
||||
Name=Logitech G PowerPlay mouse pad.
|
||||
DeviceMatch=usb:046d:c53a
|
||||
Driver=hidpp20
|
||||
Svg=logitech-g900.svg
|
||||
|
||||
[Driver/hidpp20]
|
||||
DeviceIndex=1
|
||||
5
data/devices/roccat-kone-xtd.device
Normal file
@@ -0,0 +1,5 @@
|
||||
[Device]
|
||||
Name=Roccat Kone XTD
|
||||
DeviceMatch=usb:1e7d:2e22
|
||||
Driver=roccat
|
||||
Svg=roccat-kone-xtd.svg
|
||||
12
data/devices/steelseries-kinzu-v2.device
Normal file
@@ -0,0 +1,12 @@
|
||||
[Device]
|
||||
Name=SteelSeries Kinzu V2
|
||||
DeviceMatch=usb:1038:1378
|
||||
Driver=steelseries
|
||||
Svg=steelseries-kinzu-v2.svg
|
||||
|
||||
[Driver/steelseries]
|
||||
DeviceVersion=1
|
||||
Buttons=3
|
||||
Leds=0
|
||||
DpiList=400;800;1600;3200
|
||||
MacroLength=0
|
||||
12
data/devices/steelseries-rival-310.device
Normal file
@@ -0,0 +1,12 @@
|
||||
[Device]
|
||||
Name=SteelSeries Rival 310
|
||||
DeviceMatch=usb:1038:1720
|
||||
Driver=steelseries
|
||||
Svg=steelseries-rival310.svg
|
||||
|
||||
[Driver/steelseries]
|
||||
DeviceVersion=2
|
||||
Buttons=6
|
||||
Leds=2
|
||||
DpiRange=100:12000@100
|
||||
MacroLength=1
|
||||
12
data/devices/steelseries-rival-600.device
Normal file
@@ -0,0 +1,12 @@
|
||||
[Device]
|
||||
Name=SteelSeries Rival 600
|
||||
DeviceMatch=usb:1038:1724
|
||||
Driver=steelseries
|
||||
Svg=steelseries-rival600.svg
|
||||
|
||||
[Driver/steelseries]
|
||||
DeviceVersion=3
|
||||
Buttons=7
|
||||
Leds=8
|
||||
DpiRange=100:12000@100
|
||||
MacroLength=1
|
||||
12
data/devices/steelseries-rival.device
Normal file
@@ -0,0 +1,12 @@
|
||||
[Device]
|
||||
Name=SteelSeries Rival
|
||||
DeviceMatch=usb:1038:1384
|
||||
Driver=steelseries
|
||||
Svg=steelseries-rival.svg
|
||||
|
||||
[Driver/steelseries]
|
||||
DeviceVersion=1
|
||||
Buttons=6
|
||||
Leds=2
|
||||
DpiRange=50:6500@50
|
||||
MacroLength=1
|
||||
12
data/devices/steelseries-sensei-310.device
Normal file
@@ -0,0 +1,12 @@
|
||||
[Device]
|
||||
Name=SteelSeries Sensei 310
|
||||
DeviceMatch=usb:1038:1722
|
||||
Driver=steelseries
|
||||
Svg=steelseries-sensei310.svg
|
||||
|
||||
[Driver/steelseries]
|
||||
DeviceVersion=2
|
||||
Buttons=8
|
||||
Leds=2
|
||||
DpiRange=100:12000@100
|
||||
MacroLength=1
|
||||
15
data/devices/steelseries-sensei-raw.device
Normal file
@@ -0,0 +1,15 @@
|
||||
[Device]
|
||||
Name=SteelSeries Sensei Raw
|
||||
DeviceMatch=usb:1038:1369
|
||||
Driver=steelseries
|
||||
Svg=steelseries-senseiraw.svg
|
||||
LedTypes=logo;dpi
|
||||
|
||||
[Driver/steelseries]
|
||||
DeviceVersion=1
|
||||
Buttons=8
|
||||
Leds=1
|
||||
DpiRange=90:5670@90
|
||||
MacroLength=1
|
||||
MonoLed=1
|
||||
ShortButton=1
|
||||
122
data/gnome/check-svg.py
Executable file
@@ -0,0 +1,122 @@
|
||||
#!/usr/bin/python3
|
||||
# vim: set expandtab shiftwidth=4 tabstop=4:
|
||||
|
||||
import sys
|
||||
from lxml import etree
|
||||
import logging
|
||||
|
||||
ns = {'svg': 'http://www.w3.org/2000/svg'}
|
||||
style_query = '//svg:rect[@id=\"{}\"][contains(@style, \"{}\")]'
|
||||
|
||||
logger = None
|
||||
|
||||
class SVGLogger(logging.Logger):
|
||||
def __init__(self, name, level=logging.NOTSET):
|
||||
self.success = True
|
||||
return super().__init__(name, level)
|
||||
|
||||
def error(self, msg, *args, **kwargs):
|
||||
self.success = False
|
||||
return super().error(msg, *args, **kwargs)
|
||||
|
||||
@classmethod
|
||||
def get_logger(cls, path):
|
||||
logging.setLoggerClass(SVGLogger)
|
||||
logging.basicConfig(level=logging.DEBUG)
|
||||
return logging.getLogger(path)
|
||||
|
||||
|
||||
def check_size(root):
|
||||
width = float(root.attrib['width'])
|
||||
height = float(root.attrib['height'])
|
||||
if not 400 < width < 500:
|
||||
logger.error("Width is outside of range: {}".format(width))
|
||||
if not 400 < height < 500:
|
||||
logger.error("Height is outside of range: {}".format(height))
|
||||
|
||||
|
||||
def check_layers(root):
|
||||
"""
|
||||
Check there are layers (well, groups) for the components we require.
|
||||
"""
|
||||
layer_ids = [g.attrib['id'] for g in root.iterfind('svg:g', ns)]
|
||||
|
||||
for layer in ["Device", "Buttons", "LEDs"]:
|
||||
if layer not in layer_ids:
|
||||
logger.error("Missing layer: {}".format(layer))
|
||||
|
||||
|
||||
def check_elements(root, prefix, required=0):
|
||||
"""
|
||||
Checks for elements of the form 'prefixN' in the root tag. Any elements
|
||||
found must be consecutive or an warning is printed, i.e. if there's a
|
||||
'button8' there has to be a 'button7'.
|
||||
|
||||
If required is nonzero, an error is logged for any missing element with
|
||||
an index less than required.
|
||||
"""
|
||||
|
||||
# elements can be paths and rects
|
||||
# This includes leaders and lines
|
||||
element_ids = [p.attrib['id'] for p in root.xpath('//svg:path', namespaces=ns) if p.attrib['id'].startswith(prefix)]
|
||||
element_ids += [p.attrib['id'] for p in root.xpath('//svg:rect', namespaces=ns) if p.attrib['id'].startswith(prefix)]
|
||||
element_ids += [g.attrib['id'] for g in root.xpath('//svg:g', namespaces=ns) if g.attrib['id'].startswith(prefix)]
|
||||
|
||||
idx = 0
|
||||
highest = -1
|
||||
for idx in range(0, 20):
|
||||
e = '{}{}'.format(prefix, idx)
|
||||
previous = '{}{}'.format(prefix, idx - 1)
|
||||
leader = '{}{}-leader'.format(prefix, idx)
|
||||
path = '{}{}-path'.format(prefix, idx)
|
||||
if e in element_ids:
|
||||
highest = idx
|
||||
if idx > 0 and previous not in element_ids:
|
||||
logger.warning("Non-consecutive {}: {}".format(prefix, e))
|
||||
|
||||
if leader not in element_ids:
|
||||
logger.error("Missing {} for {}".format(leader, e))
|
||||
else:
|
||||
element = root.xpath(style_query.format(leader, 'text-align'), namespaces=ns)
|
||||
if element is None or len(element) != 1 or element[0] is None:
|
||||
logger.error("Missing style property for {}".format(leader))
|
||||
|
||||
if path not in element_ids:
|
||||
logger.error("Missing {} for {}".format(path, e))
|
||||
elif leader in element_ids:
|
||||
logger.error("Have {} but not {}".format(leader, e))
|
||||
elif path in element_ids:
|
||||
logger.error("Have {} but not {}".format(path, e))
|
||||
elif idx < required:
|
||||
logger.error("Missing {}: {}".format(prefix, e))
|
||||
|
||||
logger.info("Found {} {}s".format(highest + 1, prefix))
|
||||
|
||||
|
||||
def check_leds(root):
|
||||
check_elements(root, "led")
|
||||
|
||||
|
||||
def check_buttons(root):
|
||||
check_elements(root, "button", 3)
|
||||
|
||||
|
||||
def check_svg(path):
|
||||
svg = etree.parse(path)
|
||||
root = svg.getroot()
|
||||
|
||||
check_size(root)
|
||||
check_layers(root)
|
||||
check_buttons(root)
|
||||
check_leds(root)
|
||||
|
||||
if __name__ == "__main__":
|
||||
success = True
|
||||
for path in sys.argv[1:]:
|
||||
logger = SVGLogger.get_logger(path)
|
||||
check_svg(path)
|
||||
if not logger.success:
|
||||
success = False
|
||||
|
||||
if not success:
|
||||
sys.exit(1)
|
||||
506
data/gnome/fallback.svg
Normal file
@@ -0,0 +1,506 @@
|
||||
<?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"
|
||||
width="450"
|
||||
height="450"
|
||||
viewBox="0 0 450.00001 450.00001"
|
||||
id="svg4844"
|
||||
version="1.1"
|
||||
inkscape:version="0.91 r13725"
|
||||
sodipodi:docname="fallback.svg">
|
||||
<defs
|
||||
id="defs4846" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1.4"
|
||||
inkscape:cx="162.83067"
|
||||
inkscape:cy="254.74718"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="Device"
|
||||
showgrid="false"
|
||||
units="px"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1101"
|
||||
inkscape:window-x="1920"
|
||||
inkscape:window-y="28"
|
||||
inkscape:window-maximized="1"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true">
|
||||
<sodipodi:guide
|
||||
position="20.203051,215.1625"
|
||||
orientation="1,0"
|
||||
id="guide6533" />
|
||||
<sodipodi:guide
|
||||
position="263.64982,40.406102"
|
||||
orientation="0,1"
|
||||
id="guide6535" />
|
||||
<sodipodi:guide
|
||||
position="119.198,430.32499"
|
||||
orientation="0,1"
|
||||
id="guide6537" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata4849">
|
||||
<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></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="Device"
|
||||
inkscape:label="Device"
|
||||
style="display:inline">
|
||||
<g
|
||||
id="mouse"
|
||||
transform="matrix(1.4157338,0,0,1.4150394,-15.907361,-83.397825)"
|
||||
inkscape:label="#g5682">
|
||||
<path
|
||||
sodipodi:nodetypes="csssssscssssccccccccsccccscccccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path5554"
|
||||
d="m 107.18942,257.50398 c -4.99714,2.43535 -12.465604,2.63664 -17.258052,-1.44306 -13.182502,-11.22196 -9.97511,-20.42755 -11.852724,-27.60442 -2.086919,-7.9769 -8.394971,-14.22057 -14.204755,-19.22015 -2.452298,-2.11032 -15.074169,-8.92571 -22.581405,-6.39459 -7.284157,2.45591 -8.927109,7.96865 -7.039536,13.91417 0.942265,2.96796 6.341731,12.02153 3.965931,13.71887 -6.197029,4.42735 -6.062903,-6.5818 -10.547143,-6.17694 -3.155437,2.60598 5.722132,16.20922 13.501397,8.54975 5.287042,-5.20562 -7.079343,-19.36707 -3.390295,-23.44484 9.484404,-10.48379 25.055087,3.37163 28.181213,6.1766 3.122791,2.80198 9.248496,8.52414 9.875553,20.12323 0.843858,15.60941 10.74282,34.96801 34.650426,29.65168 5.06065,14.01778 13.49867,22.70826 23.95424,24.35573 -0.73268,4.29744 8.14899,6.47132 -4.44275,21.19745 3.06561,2.85685 8.01758,11.19489 5.36011,25.42154 -5.7187,3.96316 -16.72683,16.45412 0.58015,5.39321 7.47117,-0.31027 14.12258,9.86529 24.83436,3.31115 -4.03605,-1.39212 -8.28293,-7.96174 -18.1528,-9.13334 -0.39969,-10.26297 -0.36143,-17.7796 5.94065,-24.85378 14.19011,-17.96422 10.92982,-12.10811 13.41925,-19.23937 2.48943,-7.13126 2.52109,-11.34 2.33441,-19.25558 -2.9569,-16.18074 -2.70058,-16.2775 -0.11605,-1.49727 16.61294,-0.76638 32.95879,-6.2945 39.23502,-17.29952 9.79039,-1.32985 22.51147,-7.39605 29.90276,0.56675 -5.22785,1.2715 -19.1955,26.95192 0.95314,7.4515 11.02869,-10.67388 23.99028,5.40711 27.28604,-12.1447 -31.80018,1.43261 -37.30275,-17.43649 -56.67811,-17.25445 -7.30408,-0.27416 -20.44309,-0.17002 -25.52504,9.24102 9.11653,-12.47147 0.88952,-27.94431 -1.51863,-41.85017 -15.02015,-21.13729 -30.18152,-29.86148 -43.79923,-20.54814 -13.65771,11.51411 -22.41864,26.83759 -23.4676,44.34506 -1.03036,11.6519 -3.29737,12.1189 -3.40046,33.94261 z"
|
||||
style="fill:#d3d3ce;fill-opacity:1;fill-rule:evenodd;stroke:#bfc2bb;stroke-width:2.11956239;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
sodipodi:nodetypes="zcsccczzczz"
|
||||
inkscape:connector-curvature="0"
|
||||
id="button6"
|
||||
d="m 125.00072,147.3762 c -3.94854,2.46476 -1.91248,4.22271 -6.56842,3.47664 -6.04044,-0.49004 -12.10893,4.61986 -13.01838,8.83118 -1.05538,4.887 0.82228,9.01123 6.09563,9.60013 4.20528,0.52222 4.02895,-1.99743 6.87568,-2.5868 4.10235,6.95899 19.61805,11.70942 26.38361,11.76956 4.71763,-0.6919 4.81094,-3.03006 11.87015,-12.70472 7.05921,-9.67466 6.92045,-10.39092 6.98781,-15.5586 0.0674,-5.16768 5.35659,-7.43289 0.64282,-10.74954 -1.91632,-0.43449 -6.15926,0.21143 -17.24225,0.33896 -11.08299,0.12753 -18.07811,5.11843 -22.02665,7.58319 z"
|
||||
style="fill:#d3d3ce;fill-opacity:1;fill-rule:evenodd;stroke:#babdb6;stroke-width:2.11956239;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:label="#path5399" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path5405"
|
||||
d="m 163.20277,150.23723 c -1.06521,-0.0557 -3.7617,0.42888 -4.65914,1.09722 -2,1.49899 -2.78079,2.58243 -4.28466,4.28408"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#bfc2bb;stroke-width:0.70652068px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
sodipodi:nodetypes="zszzcz"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path5414"
|
||||
d="m 140.75099,145.17797 c -1.18229,0.40938 -2.17328,0.089 -3.548,0.54388 -1.29024,0.42688 -0.38888,1.67372 0.70446,2.31451 1.09334,0.64079 4.0134,-0.29332 5.06491,-1.10649 1.05151,-0.81317 1.6576,-2.35673 1.26243,-2.48934 -0.39517,-0.13262 -2.30151,0.32805 -3.4838,0.73744 z"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#bfc2bb;stroke-width:0.70652068px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
sodipodi:nodetypes="cscccccccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="button4"
|
||||
d="m 78.728764,157.07155 c 2.729308,11.45367 -4.592785,23.20521 4.683418,32.67799 4.193755,4.28262 13.716552,5.67648 28.077598,4.49959 -16.964136,7.07876 -15.435974,11.82485 -18.038124,14.76602 -0.367398,1.93959 3.51961,2.8971 16.874634,15.52043 5.69621,-9.78547 8.32004,-20.52393 15.45362,-28.52298 15.91171,-4.8206 -2.52533,-22.7944 -2.52533,-22.7944 0,0 -6.14675,-4.9701 -9.92352,3.09571 -7.99103,-6.69016 -16.706109,-2.41957 -17.256932,4.64391 1.356748,-6.41288 0.152959,-21.95234 -2.71781,-27.4956 -9.538417,1.9887 -10.559123,3.86954 -14.594684,3.59772 -0.398494,-4.23259 11.719989,-4.91038 14.599568,-3.59704"
|
||||
style="fill:#d3d3ce;fill-opacity:1;fill-rule:evenodd;stroke:#bfc2bb;stroke-width:2.11956239;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:label="#path5425" />
|
||||
<path
|
||||
sodipodi:nodetypes="sscscccs"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path5459"
|
||||
d="m 170.57402,194.85052 c 1.27147,3.99383 5.43056,12.02629 7.61859,15.67135 1.67031,2.78261 3.12076,3.57306 4.37974,10.16536 3.35106,-2.36328 2.26625,-4.37687 7.86716,-6.63393 6.78116,-2.73268 10.74994,-17.14078 7.59325,-20.21486 -2.56921,-1.4377 -13.90652,-7.54721 -16.5961,-8.75778 -8.64652,-2.75344 -18.11595,-5.26303 -26.29721,-3.34848 9.47658,1.68644 14.2189,9.2998 15.43457,13.11834 z"
|
||||
style="fill:#babdb6;fill-opacity:1;fill-rule:evenodd;stroke:#babdb6;stroke-width:2.11956239;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
sodipodi:nodetypes="cccczccszccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="button5"
|
||||
d="m 156.57364,174.60716 c 0.61451,3.45259 -4.17141,8.40305 2.31606,7.85954 11.99907,4.07348 25.62973,4.1469 36.30113,11.66165 7.04625,4.94297 4.95335,13.00607 7.04625,4.94297 1.1521,-9.09961 -1.67322,-15.30143 -7.75899,-16.73475 -6.08578,-1.43332 -8.13701,-3.55535 -13.61967,-4.14262 -2.80249,-1.72124 -8.8609,-0.0129 -18.78998,0.48317 7.50071,-0.84183 14.47216,-0.73196 18.56074,-2.80565 0,0 6.30334,-9.54951 7.53958,-14.37709 1.23624,-4.82758 1.50074,-6.5184 3.27709,-10.38873 -4.42899,-1.01319 -7.07586,-3.6542 -10.44975,-4.61991 -2.18062,4.20089 -3.52881,8.12787 -6.83587,11.50939 -4.41968,6.55835 -8.29193,5.97237 -14.60181,12.79024 -0.89825,2.92739 -2.98478,3.82179 -2.98478,3.82179 z"
|
||||
style="fill:#d3d3ce;fill-opacity:1;fill-rule:evenodd;stroke:#babdb6;stroke-width:2.11956239;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:label="#path5453" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="button2"
|
||||
d="m 129.85315,182.50093 c 3.6135,2.58802 10.74551,5.75132 14.60758,1.93282 0.45507,-2.97455 -0.19296,-6.87423 -0.19285,-7.3212 -7.27257,-0.13193 -16.12143,-4.19401 -22.95494,-6.35683 1.4347,5.55248 6.71272,10.53825 8.54021,11.74521 z"
|
||||
style="fill:#d3d3ce;fill-opacity:1;fill-rule:evenodd;stroke:#bfc2bb;stroke-width:2.11956239;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:label="#path5540" />
|
||||
<path
|
||||
sodipodi:nodetypes="cccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="button3"
|
||||
d="m 147.13503,177.00627 c 1.16519,3.28142 3.63994,3.84875 5.91906,6.18906 4.77775,-2.47336 5.12452,-13.43108 3.9723,-16.57185 -3.79251,3.28442 -5.96683,8.30504 -9.89136,10.38279 z"
|
||||
style="fill:#d3d3ce;fill-opacity:1;fill-rule:evenodd;stroke:#bfc2bb;stroke-width:2.11956239;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:label="#path5547" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="button7"
|
||||
d="m 96.280703,132.06305 c 0,0 58.294677,-1.61611 100.929457,-0.83206 -1.27875,-12.91598 2.4481,-38.633128 2.05831,-56.889372 -46.40187,1.475128 -77.8249,2.200365 -105.250613,1.551238 4.495692,30.284264 2.262846,56.170194 2.262846,56.170194 z"
|
||||
style="fill:#d3d3ce;fill-opacity:1;fill-rule:evenodd;stroke:#bfc2bb;stroke-width:2.11956239;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:label="#path5566" />
|
||||
<path
|
||||
sodipodi:nodetypes="cscsccsccscsccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="button0"
|
||||
d="m 82.544643,155.53571 c 0.305172,-3.31535 0.980416,-11.89491 2.489066,-14.57767 2.810136,-4.99714 6.565433,-8.72285 8.454552,-11.91369 2.686043,-3.2364 2.701225,-4.20604 4.184853,-5.44313 1.47935,-1.23353 7.182396,-9.27661 8.097236,-8.77569 1.51464,3.42922 -5.03984,11.03401 -6.93589,13.34978 2.62462,-2.24644 4.10033,-4.85435 7.49772,-7.85092 3.00882,-2.65384 6.26227,-2.5427 3.72007,0.68937 -2.64048,3.02394 -3.55215,4.11719 -8.76065,8.25327 10.88502,-8.17285 19.09259,-9.06063 9.30462,-2.01748 -1.40825,1.01334 -8.4791,4.08043 -5.58663,2.88614 2.72294,-0.18651 10.84559,-2.68876 10.05588,-0.49162 -1.65227,4.59693 -8.23017,2.61804 -12.09164,4.12386 -2.17312,2.61683 -5.158266,3.64905 -7.879445,5.87814 -1.853363,2.41097 -3.914211,8.13746 -5.08138,13.723 -0.977626,0.29825 -5.450462,1.56098 -7.468362,2.16661 z"
|
||||
style="fill:#d3d3ce;fill-opacity:1;fill-rule:evenodd;stroke:#bfc2bb;stroke-width:1.41304147;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:label="#path5561" />
|
||||
<text
|
||||
sodipodi:linespacing="100%"
|
||||
id="text5583"
|
||||
y="117.5"
|
||||
x="110.17857"
|
||||
style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Italic';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#bfc2bb;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Italic';fill:#bfc2bb;fill-opacity:1"
|
||||
y="117.5"
|
||||
x="110.17857"
|
||||
id="tspan5585"
|
||||
sodipodi:role="line">404</tspan></text>
|
||||
<path
|
||||
sodipodi:nodetypes="cccccsscssccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="button1"
|
||||
d="m 183.97321,147.27678 c 3.33335,-1.48288 3.09826,-6.77076 3.85156,-9.86053 -0.35674,-3.91061 0.37686,-5.05433 -1.93804,-6.90092 -2.10346,-1.08198 -0.13041,-3.85244 1.93457,-2.9861 2.92925,1.60616 0.94495,6.22838 4.12041,7.61394 0,0 1.87775,-1.15731 1.99206,-3.40725 0.1301,-2.56065 -1.15427,-11.79601 1.03251,-13.08991 0.96059,-0.56838 1.75458,9.82486 2.96125,11.86818 -0.30586,-2.13132 -0.65718,-12.83967 0.19291,-12.16594 3.65618,2.89768 1.37042,11.98208 3.4547,14.61683 1.72735,2.18354 -3.64795,6.53893 -6.93051,11.03314 -2.12109,2.77912 -2.89583,2.76412 -4.9476,6.04875 -2.40971,-1.47777 -3.69229,-1.95944 -5.72384,-2.77019 l 0,0 z"
|
||||
style="fill:#d3d3ce;fill-opacity:1;fill-rule:evenodd;stroke:#bfc2bb;stroke-width:1.41304147;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:label="#path5587" />
|
||||
<path
|
||||
style="fill:#d3d3ce;fill-opacity:1;fill-rule:evenodd;stroke:#bfc2bb;stroke-width:3.02452755;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 129.71002,288.41558 c -7.1173,2.84692 -18.1026,3.61499 -24.6415,-2.32569 C 86.783262,269.47748 90.830889,256.94793 88.150941,246.7094 85.172248,235.32955 76.168664,226.42233 67.876267,219.28992 64.376063,216.27934 46.360664,206.5565 35.645466,210.16739 25.248672,213.671 22.903661,221.53548 25.597824,230.01736 c 1.34491,4.23409 9.051654,17.14992 5.660636,19.57135 -8.845118,6.31606 -8.653678,-9.3896 -15.054105,-8.81203 -4.503806,3.71769 8.16729,23.12409 19.27076,12.19708 7.546279,-7.42634 -10.10446,-27.62907 -4.839023,-33.44642 13.537242,-14.95619 35.761527,4.80997 40.223496,8.81154 4.45721,3.9973 13.200527,12.16054 14.095535,28.70781 1.204452,22.2684 15.333397,49.88539 49.444437,42.2623 -0.73591,-2.53682 -4.15602,-6.43263 -4.68954,-10.89341 z"
|
||||
id="led0"
|
||||
transform="matrix(0.7006157,0,0,0.70096699,16.318711,55.521354)"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="csssssscsssscc"
|
||||
inkscape:label="#path6431" />
|
||||
<path
|
||||
style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#bfc2bb;stroke-width:3.02452755;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 169.91186,400.60038 c -8.16239,5.65385 -23.87447,23.47346 0.82806,7.69396 10.66372,-0.44263 20.15739,14.07383 35.44648,4.72369 -5.76072,-1.986 -11.82236,-11.35822 -25.88738,-13.10742 -3.01274,0.0336 -8.44501,-0.32858 -10.38716,0.68977 z"
|
||||
id="path6437"
|
||||
transform="matrix(0.7006157,0,0,0.70096699,16.318711,55.521354)"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccc" />
|
||||
</g>
|
||||
<path
|
||||
inkscape:label="#path6478"
|
||||
style="fill:#d3d3ce;fill-opacity:1;fill-rule:evenodd;stroke:#bfc2bb;stroke-width:3.00000024;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 175.72866,392.52094 c -8.09615,5.60803 -23.68073,23.28322 0.82135,7.6316 10.57718,-0.43903 19.9938,13.95978 35.15883,4.68542 -5.71397,-1.96992 -11.72643,-11.26617 -25.67731,-13.0012 -2.98831,0.0334 -8.37648,-0.32592 -10.30287,0.68418 z"
|
||||
id="led1"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccc" />
|
||||
<path
|
||||
sodipodi:nodetypes="csccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="led2"
|
||||
d="m 314.43906,276.47676 c -7.40123,1.79921 -27.17571,38.13802 1.3494,10.54417 15.61369,-15.10398 33.96384,7.65126 38.62976,-17.18524 -11.69141,0.52644 -20.87204,-0.88448 -28.52139,-3.25631 -0.91845,1.9989 -7.62356,10.08149 -11.45777,9.89738 z"
|
||||
style="fill:#d3d3ce;fill-opacity:1;fill-rule:evenodd;stroke:#bfc2bb;stroke-width:3.00000024;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="Buttons"
|
||||
inkscape:label="Buttons"
|
||||
style="display:inline">
|
||||
<g
|
||||
style="display:inline"
|
||||
id="button1-path"
|
||||
inkscape:label="#g131"
|
||||
transform="translate(12.063466,68.669278)">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 282.94764,50.505764 154.05236,0"
|
||||
id="path958"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect968"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="277"
|
||||
y="47.005764" />
|
||||
<rect
|
||||
inkscape:label="#rect867"
|
||||
style="color:#000000;text-align:start;overflow:visible;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
id="button1-leader"
|
||||
width="1"
|
||||
height="1"
|
||||
x="437"
|
||||
y="50.005764" />
|
||||
</g>
|
||||
<g
|
||||
transform="translate(12.063466,28.669278)"
|
||||
inkscape:label="#g131"
|
||||
id="button0-path"
|
||||
style="display:inline">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path5628"
|
||||
d="m 282.94764,50.505764 154.05236,0"
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<rect
|
||||
y="47.005764"
|
||||
x="277"
|
||||
height="6.999999"
|
||||
width="6.999999"
|
||||
id="rect5630"
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
<rect
|
||||
y="50.005764"
|
||||
x="437"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button0-leader"
|
||||
style="color:#000000;text-align:start;overflow:visible;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect867" />
|
||||
</g>
|
||||
<g
|
||||
transform="translate(12.063466,148.66928)"
|
||||
inkscape:label="#g131"
|
||||
id="button3-path"
|
||||
style="display:inline">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path5636"
|
||||
d="m 282.94764,50.505764 154.05236,0"
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<rect
|
||||
y="47.005764"
|
||||
x="277"
|
||||
height="6.999999"
|
||||
width="6.999999"
|
||||
id="rect5638"
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
<rect
|
||||
y="50.005764"
|
||||
x="437"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button3-leader"
|
||||
style="color:#000000;text-align:start;overflow:visible;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect867" />
|
||||
</g>
|
||||
<g
|
||||
style="display:inline"
|
||||
id="button2-path"
|
||||
inkscape:label="#g131"
|
||||
transform="translate(12.063466,108.66928)">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 282.94764,50.505764 154.05236,0"
|
||||
id="path5644"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect5646"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="277"
|
||||
y="47.005764" />
|
||||
<rect
|
||||
inkscape:label="#rect867"
|
||||
style="color:#000000;text-align:start;overflow:visible;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
id="button2-leader"
|
||||
width="1"
|
||||
height="1"
|
||||
x="437"
|
||||
y="50.005764" />
|
||||
</g>
|
||||
<g
|
||||
transform="translate(12.063466,228.66928)"
|
||||
inkscape:label="#g131"
|
||||
id="button5-path"
|
||||
style="display:inline">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path5652"
|
||||
d="m 282.94764,50.505764 154.05236,0"
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<rect
|
||||
y="47.005764"
|
||||
x="277"
|
||||
height="6.999999"
|
||||
width="6.999999"
|
||||
id="rect5654"
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
<rect
|
||||
y="50.005764"
|
||||
x="437"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button5-leader"
|
||||
style="color:#000000;text-align:start;overflow:visible;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect867" />
|
||||
</g>
|
||||
<g
|
||||
style="display:inline"
|
||||
id="button4-path"
|
||||
inkscape:label="#g131"
|
||||
transform="translate(12.063466,188.66928)">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 282.94764,50.505764 154.05236,0"
|
||||
id="path5660"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect5662"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="277"
|
||||
y="47.005764" />
|
||||
<rect
|
||||
inkscape:label="#rect867"
|
||||
style="color:#000000;text-align:start;overflow:visible;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
id="button4-leader"
|
||||
width="1"
|
||||
height="1"
|
||||
x="437"
|
||||
y="50.005764" />
|
||||
</g>
|
||||
<g
|
||||
style="display:inline"
|
||||
id="button7-path"
|
||||
inkscape:label="#g131"
|
||||
transform="translate(12.063466,308.66928)">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 282.94764,50.505764 154.05236,0"
|
||||
id="path5668"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect5670"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="277"
|
||||
y="47.005764" />
|
||||
<rect
|
||||
inkscape:label="#rect867"
|
||||
style="color:#000000;text-align:start;overflow:visible;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
id="button7-leader"
|
||||
width="1"
|
||||
height="1"
|
||||
x="437"
|
||||
y="50.005764" />
|
||||
</g>
|
||||
<g
|
||||
transform="translate(12.063466,268.66928)"
|
||||
inkscape:label="#g131"
|
||||
id="button6-path"
|
||||
style="display:inline">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path5676"
|
||||
d="m 282.94764,50.505764 154.05236,0"
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<rect
|
||||
y="47.005764"
|
||||
x="277"
|
||||
height="6.999999"
|
||||
width="6.999999"
|
||||
id="rect5678"
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
<rect
|
||||
y="50.005764"
|
||||
x="437"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button6-leader"
|
||||
style="color:#000000;text-align:start;overflow:visible;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect867" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="LEDs"
|
||||
inkscape:label="LEDs">
|
||||
<g
|
||||
style="display:inline"
|
||||
id="led0-path"
|
||||
inkscape:label="#g131"
|
||||
transform="translate(12.063466,28.669278)">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 282.94764,50.505764 154.05236,0"
|
||||
id="path5785"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect5787"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="277"
|
||||
y="47.005764" />
|
||||
<rect
|
||||
inkscape:label="#rect867"
|
||||
style="color:#000000;text-align:start;overflow:visible;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
id="led0-leader"
|
||||
width="1"
|
||||
height="1"
|
||||
x="437"
|
||||
y="50.005764" />
|
||||
</g>
|
||||
<g
|
||||
transform="translate(12.063466,68.669278)"
|
||||
inkscape:label="#g131"
|
||||
id="led1-path"
|
||||
style="display:inline">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path5797"
|
||||
d="m 282.94764,50.505764 154.05236,0"
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<rect
|
||||
y="47.005764"
|
||||
x="277"
|
||||
height="6.999999"
|
||||
width="6.999999"
|
||||
id="rect5799"
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
<rect
|
||||
y="50.005764"
|
||||
x="437"
|
||||
height="1"
|
||||
width="1"
|
||||
id="led1-leader"
|
||||
style="color:#000000;text-align:start;overflow:visible;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect867" />
|
||||
</g>
|
||||
<g
|
||||
style="display:inline"
|
||||
id="led2-path"
|
||||
inkscape:label="#g131"
|
||||
transform="translate(12.063466,108.66928)">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 282.94764,50.505764 154.05236,0"
|
||||
id="path6411"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect6413"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="277"
|
||||
y="47.005764" />
|
||||
<rect
|
||||
inkscape:label="#rect867"
|
||||
style="color:#000000;text-align:start;overflow:visible;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
id="led2-leader"
|
||||
width="1"
|
||||
height="1"
|
||||
x="437"
|
||||
y="50.005764" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 31 KiB |
358
data/gnome/logitech-g-pro-wireless.svg
Normal file
@@ -0,0 +1,358 @@
|
||||
<?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"
|
||||
width="417.20001"
|
||||
height="407.25"
|
||||
viewBox="0 0 417.20001 407.24999"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="0.92.2 2405546, 2018-03-11"
|
||||
sodipodi:docname="logitech-g-pro-wireless.svg"
|
||||
inkscape:export-filename="/home/jimmac/logitech-g-pro.png"
|
||||
inkscape:export-xdpi="96"
|
||||
inkscape:export-ydpi="96">
|
||||
<defs
|
||||
id="defs2">
|
||||
<inkscape:path-effect
|
||||
effect="spiro"
|
||||
id="path-effect4193"
|
||||
is_visible="true" />
|
||||
<inkscape:path-effect
|
||||
effect="spiro"
|
||||
id="path-effect4185"
|
||||
is_visible="true" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="2.2804595"
|
||||
inkscape:cx="68.346407"
|
||||
inkscape:cy="156.12394"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="Device"
|
||||
inkscape:document-rotation="0"
|
||||
showgrid="false"
|
||||
units="px"
|
||||
borderlayer="true"
|
||||
inkscape:showpageshadow="false"
|
||||
inkscape:pagecheckerboard="false"
|
||||
showguides="true"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1016"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="27"
|
||||
inkscape:window-maximized="1"
|
||||
fit-margin-top="20"
|
||||
fit-margin-left="20"
|
||||
fit-margin-bottom="20"
|
||||
fit-margin-right="0"
|
||||
inkscape:guide-bbox="true"
|
||||
guidetolerance="10"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
inkscape:snap-others="true"
|
||||
inkscape:snap-global="true">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid956"
|
||||
originx="-68.791593"
|
||||
originy="1.2767161" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata5">
|
||||
<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>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="Device"
|
||||
inkscape:label="Device"
|
||||
transform="translate(-68.791597,-394.02675)"
|
||||
style="display:inline">
|
||||
<path
|
||||
sodipodi:nodetypes="cccccccccccccccccsccccsccccccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1292"
|
||||
d="m 360.53959,454.98488 c 3.74994,7.11792 5.22331,12.82285 5.80424,19.98939 1.3281,12.56244 0.9478,23.81846 0.96947,36.4814 l -3.17737,93.86839 c 2.16614,21.37627 5.56926,62.75825 5.56926,62.75825 0.65653,8.98996 -0.46847,26.48228 -0.46847,26.48228 -2.86905,23.33152 -10.5133,37.74934 -19.00067,50.59334 -18.20786,20.92677 -40.13338,36.77577 -73.78077,36.6144 -27.02249,-2.01448 -53.27969,-9.87305 -76.17266,-43.4221 -9.26342,-15.31303 -16.69901,-34.15568 -15.08733,-70.46891 0.62849,-14.11561 1.69038,-28.25238 4.18994,-49.46082 l -0.49311,-29.00325 1.18979,-1.57231 -0.0795,-4.45976 c -1.39215,-1.83047 -1.66233,-3.22446 -1.77535,-5.08282 -0.64341,-16.4181 -3.4946,-31.1865 -1.60176,-47.4595 l 1.47194,-0.0964 c -0.37849,-21.34319 -3.11342,-49.72121 2.66511,-66.67692 1.24485,-3.65274 1.80259,-6.37401 3.52312,-8.88212 l 1.05297,-0.01 c 0.54288,1.3278 1.67594,1.1345 2.10889,-0.024 v -5.52825 c 3.59201,-4.68158 7.50203,-9.54243 12.85097,-13.19967 15.55153,-10.63308 32.80347,-19.96687 65.99229,-22.56979 l -0.0387,6.48824 h 2.2079 l -0.01,-6.47842 c 23.50552,1.65098 57.68029,9.24243 79.04493,36.21112 l -0.0104,4.95885 0.5328,0.02 c -0.0202,1.38148 1.14549,1.60947 1.23348,-0.0306 z"
|
||||
style="fill:#d3d3ce;fill-opacity:1;stroke:#babdb6;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
sodipodi:nodetypes="cccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="button4"
|
||||
d="m 188.09729,530.74646 c 1.24811,16.49039 3.84562,32.89212 4.67165,49.41274 -0.23358,2.47096 -1.75447,3.01485 -2.76648,3.22598 -1.40633,-1.85652 -1.95252,-3.40284 -2.12696,-4.9258 -0.5931,-13.32083 -2.99544,-30.31661 -1.59655,-47.61652 z"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#babdb6;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:label="#path1308" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccczzc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="button3"
|
||||
d="m 193.52072,585.08288 -4.67671,4.33437 c -0.0827,14.62518 0.50637,29.18789 1.55352,43.76306 0.38765,1.69742 1.72362,5.2371 2.9655,5.04628 1.24187,-0.19081 2.03429,-4.00811 2.05005,-4.80974 0.0158,-0.80162 -1.89236,-48.33397 -1.89236,-48.33397 z"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#babdb6;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:label="#path1310" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#babdb6;stroke-width:1;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="button0"
|
||||
width="21.618355"
|
||||
height="54.844131"
|
||||
x="-288.2897"
|
||||
y="458.7883"
|
||||
rx="10.20224"
|
||||
ry="9.3806696"
|
||||
inkscape:label="#rect932"
|
||||
transform="scale(-1,1)" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccccccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="button1"
|
||||
d="m 348.93916,572.45034 c -0.55088,2.3786 -2.02369,4.23561 -5.30087,5.25105 l -65.10412,-0.0533 -0.056,-61.16607 c 6.69027,-0.62851 12.7931,-2.33598 13.40584,-12.8421 l 0.11678,-35.30516 c -0.67751,-4.76842 -1.92823,-11.08275 -13.43942,-12.70653 l -0.11153,-41.76267 c 28.32131,1.35252 61.44583,12.93152 79.04493,36.21112 -0.49018,45.87326 -3.70717,82.71393 -8.55561,122.37369 z"
|
||||
style="fill:#e6e6e4;fill-opacity:1;stroke:#babdb6;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:label="#path1314" />
|
||||
<path
|
||||
style="fill:#e6e6e4;fill-opacity:1;stroke:#babdb6;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 206.00299,572.3517 c 0.55088,2.3786 2.02369,4.23561 5.30087,5.25105 l 65.10412,-0.0533 -0.0153,-61.06743 c -6.69027,-0.62851 -12.72181,-2.43462 -13.33455,-12.94074 l -0.11678,-35.30516 c 0.67751,-4.76842 2.20116,-11.4932 13.43942,-12.70653 l 0.11153,-41.76267 c -28.7246,1.50375 -63.81513,13.58686 -79.04493,35.85825 0.49018,45.87326 3.70717,83.0668 8.55561,122.72656 z"
|
||||
id="button2"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccccccc"
|
||||
inkscape:label="#path1316" />
|
||||
<path
|
||||
sodipodi:nodetypes="cccccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1318"
|
||||
d="m 360.53959,454.98488 c 0.43129,16.08426 -0.23059,32.16852 -1.31311,48.25278 -2.19193,26.2623 -4.67884,48.98479 -7.12913,72.1468 -1.46408,3.93001 -3.86084,5.76149 -6.84397,6.27364 -43.14472,-1.05018 -87.90934,-1.3804 -135.88124,-0.28516 -2.36085,-0.76628 -4.72268,-1.52623 -6.5588,-5.70331 -2.11905,-20.75413 -4.2381,-39.15076 -6.35715,-65.36609 -1.04644,-16.292 -1.64275,-37.04208 -2.17067,-55.11612"
|
||||
style="fill:none;stroke:#babdb6;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<g
|
||||
transform="translate(0.23449552,400.00009)"
|
||||
style="display:inline"
|
||||
id="led0">
|
||||
<g
|
||||
transform="translate(427.72943,-408.9487)"
|
||||
id="g1304"
|
||||
style="display:inline">
|
||||
<ellipse
|
||||
style="fill:#babdb6;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
id="ellipse1298"
|
||||
cx="-150.51967"
|
||||
cy="622.58923"
|
||||
rx="1.8137393"
|
||||
ry="1.9375004" />
|
||||
<ellipse
|
||||
ry="1.9375004"
|
||||
rx="1.8137393"
|
||||
cy="610.96423"
|
||||
cx="-150.51967"
|
||||
id="ellipse1300"
|
||||
style="fill:#babdb6;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<ellipse
|
||||
style="fill:#babdb6;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
id="ellipse1302"
|
||||
cx="-150.51967"
|
||||
cy="599.15173"
|
||||
rx="1.8137393"
|
||||
ry="1.9375004" />
|
||||
</g>
|
||||
<path
|
||||
style="color:#000000;display:inline;overflow:visible;vector-effect:none;fill:none;fill-opacity:1;stroke:#babdb6;stroke-width:10;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="led0-3"
|
||||
sodipodi:type="arc"
|
||||
sodipodi:cx="-284.0806"
|
||||
sodipodi:cy="277.20975"
|
||||
sodipodi:rx="19.936752"
|
||||
sodipodi:ry="19.936752"
|
||||
sodipodi:start="0.78539816"
|
||||
sodipodi:end="5.4977871"
|
||||
sodipodi:arc-type="arc"
|
||||
d="m -269.98318,291.30716 a 19.936752,19.936752 0 0 1 -28.19483,0 19.936752,19.936752 0 0 1 0,-28.19483 19.936752,19.936752 0 0 1 28.19483,0"
|
||||
sodipodi:open="true"
|
||||
transform="rotate(-90)"
|
||||
inkscape:label="#path883" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="Buttons"
|
||||
inkscape:label="Buttons"
|
||||
style="display:inline"
|
||||
transform="translate(-68.791597,5.973336)">
|
||||
<g
|
||||
id="button0-path"
|
||||
inkscape:label="#button0-path">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path960"
|
||||
d="m 485.19274,86.21028 -207.71221,10e-7"
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
<rect
|
||||
y="82.710281"
|
||||
x="273.98053"
|
||||
height="6.999999"
|
||||
width="6.999999"
|
||||
id="rect970"
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
<rect
|
||||
inkscape:label="#rect871"
|
||||
style="color:#000000;text-align:start;overflow:visible;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
id="button0-leader"
|
||||
width="1"
|
||||
height="1"
|
||||
x="485"
|
||||
y="85.710289" />
|
||||
</g>
|
||||
<g
|
||||
id="button4-path"
|
||||
inkscape:label="#g979">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path964"
|
||||
d="m 186.12905,161.04893 -116.990518,0.0625"
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
<rect
|
||||
transform="scale(-1,1)"
|
||||
inkscape:label="#rect875"
|
||||
style="color:#000000;text-align:end;overflow:visible;fill:#888a85;fill-opacity:1;stroke:none;stroke-width:0.99999994;stroke-linecap:round"
|
||||
id="button4-leader"
|
||||
width="0.32565016"
|
||||
height="1"
|
||||
x="-69.138535"
|
||||
y="160.58018" />
|
||||
<rect
|
||||
transform="scale(-1,1)"
|
||||
y="157.58018"
|
||||
x="-189.79312"
|
||||
height="6.999999"
|
||||
width="6.999999"
|
||||
id="rect974"
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
</g>
|
||||
<g
|
||||
id="button3-path"
|
||||
inkscape:label="#g984">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="M 187.9817,205.35644 H 69.129695"
|
||||
id="path966"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
transform="scale(-1,1)"
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect976"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="-191.91962"
|
||||
y="201.85645" />
|
||||
<rect
|
||||
transform="scale(-1,1)"
|
||||
y="204.85645"
|
||||
x="-69.1297"
|
||||
height="1"
|
||||
width="0.32190493"
|
||||
id="button3-leader"
|
||||
style="color:#000000;text-align:end;overflow:visible;fill:#888a85;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round"
|
||||
inkscape:label="#rect875" />
|
||||
</g>
|
||||
<g
|
||||
id="button1-path"
|
||||
inkscape:label="#button1-path">
|
||||
<path
|
||||
sodipodi:nodetypes="ccc"
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 316.65466,47.839954 25.8491,-28.270742 H 485"
|
||||
id="path958"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
inkscape:label="#rect867"
|
||||
style="color:#000000;text-align:start;overflow:visible;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
id="button1-leader"
|
||||
width="1"
|
||||
height="1"
|
||||
x="485"
|
||||
y="19.069216" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect968"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="313.15466"
|
||||
y="44.339954" />
|
||||
</g>
|
||||
<g
|
||||
id="button2-path"
|
||||
inkscape:label="#g974">
|
||||
<rect
|
||||
transform="scale(-1,1)"
|
||||
inkscape:label="#rect869"
|
||||
y="19.069212"
|
||||
x="-69.800262"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button2-leader"
|
||||
style="color:#000000;text-align:end;overflow:visible;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1398"
|
||||
d="M 237.81014,47.839954 211.96104,19.569212 H 69.464797"
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
sodipodi:nodetypes="ccc" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect910"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="234.31013"
|
||||
y="44.339954" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="LEDs"
|
||||
inkscape:label="LEDs"
|
||||
style="display:inline"
|
||||
transform="translate(-68.791597,5.973336)">
|
||||
<g
|
||||
id="led0-path">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path877"
|
||||
d="m 484.99999,289.92309 -182.37295,10e-6"
|
||||
style="color:#000000;display:inline;overflow:visible;opacity:1;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<rect
|
||||
y="286.4231"
|
||||
x="299.12704"
|
||||
height="6.999999"
|
||||
width="6.999999"
|
||||
id="rect879"
|
||||
style="color:#000000;display:inline;overflow:visible;opacity:1;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
<rect
|
||||
inkscape:label="#rect881"
|
||||
y="289.4231"
|
||||
x="485"
|
||||
height="1"
|
||||
width="1"
|
||||
id="led0-leader"
|
||||
style="color:#000000;text-align:start;display:inline;overflow:visible;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 18 KiB |
401
data/gnome/logitech-g-pro.svg
Normal file
@@ -0,0 +1,401 @@
|
||||
<?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"
|
||||
width="417.20001"
|
||||
height="407.25"
|
||||
viewBox="0 0 417.20001 407.24999"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="0.92.2 2405546, 2018-03-11"
|
||||
sodipodi:docname="logitech-g-pro.svg"
|
||||
inkscape:export-filename="/home/jimmac/logitech-g-pro.png"
|
||||
inkscape:export-xdpi="96"
|
||||
inkscape:export-ydpi="96">
|
||||
<defs
|
||||
id="defs2">
|
||||
<inkscape:path-effect
|
||||
effect="spiro"
|
||||
id="path-effect4193"
|
||||
is_visible="true" />
|
||||
<inkscape:path-effect
|
||||
effect="spiro"
|
||||
id="path-effect4185"
|
||||
is_visible="true" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1.9881757"
|
||||
inkscape:cx="89.311243"
|
||||
inkscape:cy="190.59507"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="LEDs"
|
||||
inkscape:document-rotation="0"
|
||||
showgrid="false"
|
||||
units="px"
|
||||
borderlayer="true"
|
||||
inkscape:showpageshadow="false"
|
||||
inkscape:pagecheckerboard="false"
|
||||
showguides="true"
|
||||
inkscape:window-width="2560"
|
||||
inkscape:window-height="1381"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
fit-margin-top="20"
|
||||
fit-margin-left="20"
|
||||
fit-margin-bottom="20"
|
||||
fit-margin-right="0"
|
||||
inkscape:guide-bbox="true"
|
||||
guidetolerance="10"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
inkscape:snap-global="true"
|
||||
inkscape:snap-object-midpoints="true">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid956"
|
||||
originx="-68.791593"
|
||||
originy="1.2767161" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata5">
|
||||
<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></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="Device"
|
||||
inkscape:label="Device"
|
||||
transform="translate(-68.791597,-394.02675)"
|
||||
style="display:inline" />
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="Buttons"
|
||||
inkscape:label="Buttons"
|
||||
style="display:inline"
|
||||
transform="translate(-68.791597,5.973336)">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="color:#000000;display:inline;overflow:visible;opacity:1;fill:#d3d3ce;fill-opacity:1;stroke:#babdb6;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 266.16642,15.04496 c -22.92467,4.66104 -61.30054,24.9861 -69.63884,36.00461 -12.61957,47.68515 -14.80528,106.34213 -15.92423,155.87459 -2.00552,88.77814 32.07323,172.95939 100.58708,173.36506 46.62862,0.10701 67.422,-29.01299 84.50986,-68.69579 14.62944,-39.36304 14.98472,-73.16931 15.71414,-103.07446 0.40991,-66.33641 -5.20115,-105.262 -13.70975,-157.25734 C 354.76319,35.15715 299.72236,14.28047 297.61469,15.04496 v 5.05311 h -3.45953 v -5.05311 l -25.2862,3.5e-4 v 5.05276 l -2.70254,-10e-6 z"
|
||||
id="path870"
|
||||
sodipodi:nodetypes="ccscccccccccccc" />
|
||||
<path
|
||||
style="display:inline;fill:#989896;stroke:#babdb6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
|
||||
d="M 229.17383 21.009766 C 229.00748 20.992194 228.88813 20.993688 228.82227 21.017578 L 228.82227 26.072266 L 225.36328 26.072266 L 225.36328 21.017578 L 200.07812 21.019531 L 200.07812 26.072266 L 197.375 26.072266 L 197.375 21.017578 C 174.45033 25.678618 136.07463 46.004927 127.73633 57.023438 C 116.35922 100.01374 113.47533 151.86101 112.19531 197.96094 L 112.19727 197.96289 L 194.28711 159.88281 C 194.19011 159.92441 192.73412 179.58139 211.27148 179.11133 C 229.80884 178.64127 228.7988 160.0586 228.82227 160.05078 L 312.53125 197.98242 L 312.58008 197.88281 C 312.02168 141.36823 306.68242 104.71806 298.91211 57.234375 C 286.37504 41.63316 234.33067 21.554483 229.17383 21.009766 z "
|
||||
id="path1006"
|
||||
transform="translate(68.791597,-5.973336)" />
|
||||
<rect
|
||||
style="color:#000000;display:inline;overflow:visible;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#babdb6;stroke-width:0.99999982;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="button2"
|
||||
width="21.314863"
|
||||
height="55.109035"
|
||||
x="270.83594"
|
||||
y="53.880791"
|
||||
rx="10.657432"
|
||||
ry="11.054664"
|
||||
inkscape:label="#button2" />
|
||||
<path
|
||||
style="color:#000000;display:inline;overflow:visible;fill:none;fill-opacity:1;stroke:#babdb6;stroke-width:10;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="led0"
|
||||
sodipodi:type="arc"
|
||||
sodipodi:cx="-328.60678"
|
||||
sodipodi:cy="280.97754"
|
||||
sodipodi:rx="13.376111"
|
||||
sodipodi:ry="13.525835"
|
||||
sodipodi:start="0.78539816"
|
||||
sodipodi:end="5.4977871"
|
||||
sodipodi:arc-type="arc"
|
||||
d="m -319.14844,290.54175 a 13.376111,13.525835 0 0 1 -18.91668,0 13.376111,13.525835 0 0 1 0,-19.12842 13.376111,13.525835 0 0 1 18.91668,0"
|
||||
sodipodi:open="true"
|
||||
transform="rotate(-90)"
|
||||
inkscape:label="#led0" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="color:#000000;display:inline;overflow:visible;opacity:1;fill:#d3d3ce;fill-opacity:1;stroke:#bfc2bb;stroke-width:1.5;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 297.61497,15.045758 v 5.052735 h -0.004 c -0.072,38.851502 0.17641,91.903097 0.004,129.455077 l 76.24024,35.0039 C 371.4683,138.46428 370.62141,92.883297 359.46263,43.866071 348.69198,36.04897 332.00497,28.07624 318.64622,22.491071 307.62271,18.054789 298.7509,15.065752 297.61497,15.045758 Z"
|
||||
id="button1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="color:#000000;display:inline;overflow:visible;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#babdb6;stroke-width:1;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 183.47044,134.90318 -3.23828,3.46679 -2.36328,40.83203 3.375,2.76368 c 0.0158,-0.0318 0.0292,-0.0639 0.0449,-0.0957 0.4971,-15.01188 1.2161,-30.49256 2.37305,-45.99218 -0.0654,-0.32133 -0.12562,-0.6554 -0.19141,-0.97461 z"
|
||||
id="button4" />
|
||||
<path
|
||||
style="color:#000000;display:inline;overflow:visible;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#babdb6;stroke-width:1;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 180.98802,191.98911 -3.65625,3.90235 0.70171,41.21448 3.55024,4.1781 c -0.0255,-0.32903 -0.0218,-0.78636 -0.0254,-1.21094 -0.88777,-10.87151 -1.20752,-21.97334 -0.95508,-33.14844 0.11017,-4.87659 0.24499,-9.90124 0.38477,-14.93555 z"
|
||||
id="button3"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccsc" />
|
||||
<path
|
||||
style="display:inline;opacity:1;fill:#d3d3ce;fill-opacity:1;stroke:#babdb6;stroke-width:1.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 267.69435,112.88968 25.82029,0.0837 0.40098,45.62246 c -3.09214,13.17174 -23.47755,15.50099 -27.35134,0 z"
|
||||
id="rect1003"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccc" />
|
||||
<rect
|
||||
inkscape:label="#button5"
|
||||
ry="5.2884812"
|
||||
rx="6.152226"
|
||||
y="132.22084"
|
||||
x="273.28256"
|
||||
height="31.288317"
|
||||
width="13.468106"
|
||||
id="button5"
|
||||
style="color:#000000;display:inline;overflow:visible;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#babdb6;stroke-width:0.99999988;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
<rect
|
||||
style="display:inline;opacity:1;fill:#d3d3ce;fill-opacity:1;stroke:#babdb6;stroke-width:1.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect985"
|
||||
width="25.286205"
|
||||
height="35.886375"
|
||||
x="268.86896"
|
||||
y="15.044975"
|
||||
rx="0"
|
||||
ry="0" />
|
||||
<path
|
||||
style="color:#000000;display:inline;overflow:visible;opacity:1;fill:#d3d3ce;fill-opacity:1;stroke:#bfc2bb;stroke-width:1.5;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 266.16185,15.045758 c -18.53203,3.769004 -47.15067,17.769904 -61.84571,28.81836 -11.15926,49.01809 -14.18353,94.599442 -16.57028,140.693352 l 75.52927,-35.0039 2.89062,-129.455077 h -0.004 z"
|
||||
id="button0"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccc"
|
||||
inkscape:label="#button0" />
|
||||
<path
|
||||
style="display:inline;fill:#d3d3ce;stroke:#babdb6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
|
||||
d="M 132.05273 52.619141 C 130.22394 54.195066 128.75358 55.679201 127.73633 57.023438 C 116.71194 98.680923 113.6505 148.70889 112.30664 193.71484 L 112.35938 193.70117 L 116.07812 191.96875 C 117.08353 147.52982 122.45967 94.477962 132.07227 52.640625 C 132.0735 52.635269 132.0547 52.625295 132.05273 52.619141 z "
|
||||
transform="translate(68.791597,-5.973336)"
|
||||
id="path1008" />
|
||||
<path
|
||||
style="display:inline;fill:#d3d3ce;stroke:#babdb6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
|
||||
d="M 294.34961 52.697266 C 302.02365 91.016721 306.47025 145.70637 307.9375 192.13477 L 312.22852 194.4668 L 312.54297 194.60547 C 311.81356 139.93715 306.53143 103.79539 298.91211 57.234375 C 297.72345 55.755196 296.17495 54.236496 294.34961 52.697266 z "
|
||||
id="path1010"
|
||||
transform="translate(68.791597,-5.973336)" />
|
||||
<g
|
||||
id="button4-path">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path964"
|
||||
d="M 69.397827,158.3947 H 177.72623"
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
<rect
|
||||
inkscape:label="#rect875"
|
||||
style="color:#000000;text-align:end;overflow:visible;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
id="button4-leader"
|
||||
width="1"
|
||||
height="1"
|
||||
x="68.806679"
|
||||
y="157.8947" />
|
||||
<rect
|
||||
y="154.8947"
|
||||
x="174.22623"
|
||||
height="6.999999"
|
||||
width="6.999999"
|
||||
id="rect974"
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
</g>
|
||||
<g
|
||||
id="button3-path">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="M 69.516354,216.62752 H 176.10094"
|
||||
id="path966"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
y="216.12752"
|
||||
x="68.814278"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button3-leader"
|
||||
style="color:#000000;text-align:end;overflow:visible;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect875" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect976"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="172.60094"
|
||||
y="213.12752" />
|
||||
</g>
|
||||
<g
|
||||
id="button5-path">
|
||||
<rect
|
||||
y="147.48535"
|
||||
x="485"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button5-leader"
|
||||
style="color:#000000;text-align:start;overflow:visible;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect871" />
|
||||
<path
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="M 484.55132,147.9915 H 280.86242"
|
||||
id="path51"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect53"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="276.5166"
|
||||
y="144.36501" />
|
||||
</g>
|
||||
<g
|
||||
id="button2-path"
|
||||
inkscape:label="#g997">
|
||||
<rect
|
||||
inkscape:label="#rect869"
|
||||
y="80.93531"
|
||||
x="485"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button2-leader"
|
||||
style="color:#000000;text-align:start;overflow:visible;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round" />
|
||||
<path
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 281.49336,81.435307 203.01408,2e-6"
|
||||
id="path908"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect910"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="277.99338"
|
||||
y="77.935318" />
|
||||
</g>
|
||||
<g
|
||||
id="button1-path"
|
||||
inkscape:label="#g1002">
|
||||
<rect
|
||||
inkscape:label="#rect867"
|
||||
style="color:#000000;text-align:start;overflow:visible;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
id="button1-leader"
|
||||
width="1"
|
||||
height="1"
|
||||
x="485"
|
||||
y="52.581367" />
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="M 329.18291,53.081369 H 485.00002"
|
||||
id="path958"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect968"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="325.29486"
|
||||
y="49.581367" />
|
||||
</g>
|
||||
<g
|
||||
id="button0-path"
|
||||
inkscape:label="#button0-path">
|
||||
<rect
|
||||
inkscape:label="#rect871"
|
||||
style="color:#000000;text-align:end;overflow:visible;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
id="button0-leader"
|
||||
width="1"
|
||||
height="1"
|
||||
x="68.718681"
|
||||
y="52.581367" />
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path960"
|
||||
d="m 236.34967,53.081367 -166.192195,2e-6"
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
<rect
|
||||
y="49.581367"
|
||||
x="232.84967"
|
||||
height="6.999999"
|
||||
width="6.999999"
|
||||
id="rect970"
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
</g>
|
||||
<path
|
||||
sodipodi:nodetypes="ccccsccsccccc"
|
||||
id="led1"
|
||||
d="m 381.38813,191.93864 c 0.0522,5.34015 0.0617,10.85826 0.0263,16.58033 -0.72942,29.90515 -1.0847,63.71142 -15.71414,103.07446 -17.08786,39.6828 -37.88124,68.8028 -84.50986,68.69579 -68.51385,-0.40567 -102.5926,-84.58692 -100.58708,-173.36506 0.11095,-4.91156 0.2425,-9.86517 0.38356,-14.93656 l 2.19839,0.0215 c -0.13796,4.95985 -0.26661,11.86142 -0.37513,16.66495 -1.96142,86.82554 31.36807,166.8792 98.37558,167.27594 45.60344,0.10466 65.93966,-26.09877 82.65183,-64.90878 14.30779,-38.49728 14.65526,-71.56001 15.36865,-100.80742 0.0346,-5.59622 0.0253,-13.00199 -0.0257,-18.22469 z"
|
||||
style="color:#000000;display:inline;overflow:visible;opacity:1;fill:#babdb6;fill-opacity:1;stroke:#babdb6;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:label="#led1" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="LEDs"
|
||||
inkscape:label="LEDs"
|
||||
style="display:inline"
|
||||
transform="translate(-68.791597,5.973336)">
|
||||
<g
|
||||
id="led0-path">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path877"
|
||||
d="m 485,329.52026 -203.94584,0"
|
||||
style="color:#000000;display:inline;overflow:visible;opacity:1;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<rect
|
||||
y="326.02026"
|
||||
x="277.47754"
|
||||
height="6.999999"
|
||||
width="6.999999"
|
||||
id="rect879"
|
||||
style="color:#000000;display:inline;overflow:visible;opacity:1;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
<rect
|
||||
inkscape:label="#rect881"
|
||||
y="329.02026"
|
||||
x="485"
|
||||
height="1"
|
||||
width="1"
|
||||
id="led0-leader"
|
||||
style="color:#000000;text-align:start;display:inline;overflow:visible;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round" />
|
||||
</g>
|
||||
<g
|
||||
id="led1-path">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
style="color:#000000;display:inline;overflow:visible;opacity:1;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 484.99745,272.95285 -105.75862,0"
|
||||
id="path4525"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="color:#000000;text-align:start;display:inline;overflow:visible;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
id="led1-leader"
|
||||
width="1"
|
||||
height="1"
|
||||
x="485"
|
||||
y="272.45285"
|
||||
inkscape:label="#rect881" />
|
||||
<rect
|
||||
style="color:#000000;display:inline;overflow:visible;opacity:1;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect4544"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="375.73883"
|
||||
y="269.45285" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 22 KiB |
1
data/gnome/logitech-g102-g203.svg
Symbolic link
@@ -0,0 +1 @@
|
||||
logitech-g-pro.svg
|
||||
514
data/gnome/logitech-g300.svg
Normal file
@@ -0,0 +1,514 @@
|
||||
<?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"
|
||||
width="490"
|
||||
height="490"
|
||||
viewBox="0 0 129.64583 129.64583"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
sodipodi:docname="logitech-g300.svg"
|
||||
inkscape:version="0.92.2 (5c3e80d, 2017-08-06)">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1.4142136"
|
||||
inkscape:cx="202.78034"
|
||||
inkscape:cy="279.63686"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="LEDs"
|
||||
inkscape:document-rotation="0"
|
||||
showgrid="false"
|
||||
showguides="false"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1163"
|
||||
inkscape:window-x="1920"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
showborder="true"
|
||||
inkscape:guide-bbox="true"
|
||||
units="px"
|
||||
inkscape:snap-global="false"
|
||||
inkscape:measure-start="200.26,379.645"
|
||||
inkscape:measure-end="199.294,334.274">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid78" />
|
||||
<sodipodi:guide
|
||||
position="58.722772,112.40709"
|
||||
orientation="0,1"
|
||||
id="guide79"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="39.611923,100.54373"
|
||||
orientation="0,1"
|
||||
id="guide81"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="51.756014,88.614617"
|
||||
orientation="0,1"
|
||||
id="guide83"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="57.778386,76.729167"
|
||||
orientation="0,1"
|
||||
id="guide85"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="45.047078,64.795712"
|
||||
orientation="0,1"
|
||||
inkscape:locked="false"
|
||||
id="guide87" />
|
||||
<sodipodi:guide
|
||||
position="57.646696,52.899321"
|
||||
orientation="0,1"
|
||||
id="guide89"
|
||||
inkscape:locked="false" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata5">
|
||||
<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>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="Device"
|
||||
inkscape:label="Device"
|
||||
style="display:inline;opacity:1"
|
||||
transform="translate(0,-167.35416)">
|
||||
<path
|
||||
id="path41-6"
|
||||
style="display:inline;opacity:1;fill:#d3d3ce;fill-opacity:1;stroke:#babdb6;stroke-width:0.98645592;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 64.822903,179.22931 h -3.479995 l -3.915,-6.09 c 0,0 -11.305381,-0.13059 -17.399991,5.22 0,0 -8.990317,5.04814 -8.69995,26.96998 0,0 -0.262683,13.22939 2.609964,26.96999 -8.15696,17.08865 -6.959951,19.57498 -6.959951,19.57498 3.486257,28.75756 24.359929,38.27998 24.359929,38.27998 4.318847,1.41447 22.65114,1.41447 26.969986,0 0,0 20.873694,-9.52242 24.359955,-38.27998 0,0 1.19699,-2.48633 -6.959957,-19.57498 2.87265,-13.7406 2.609996,-26.96999 2.609996,-26.96999 0.290352,-21.92184 -8.700007,-26.96998 -8.700007,-26.96998 -6.094602,-5.35059 -17.399985,-5.22 -17.399985,-5.22 l -3.914995,6.09 h -3.479999"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccccccccccc" />
|
||||
<path
|
||||
style="fill:#eeeeec;fill-opacity:1;stroke:#babdb6;stroke-width:0.61653525;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 55.252905,176.68083 4.35,6.95997 h 10.439993 l 4.349999,-6.95997 c 0,0 4.713304,-0.60703 13.049968,4.34999 0,0 5.4795,2.46746 6.960015,18.26998 0,0 0.682398,10.45737 -0.869997,20.88 -6.631477,30.71466 -9.233113,35.45823 -12.179994,44.36996 -0.0055,0.3105 -0.606568,3.30574 -2.609998,12.17998 0,0 -1.945797,7.04942 -13.919989,6.96001 -13.44865,0.0748 -13.919991,-6.96001 -13.919991,-6.96001 -1.238296,-8.85308 -14.879861,-47.03985 -14.789987,-56.54994 0,0 -1.799981,-15.15662 -0.869993,-20.88 0,0 1.16252,-13.31705 6.089986,-18.26998 8.388589,-5.24851 13.919988,-4.34999 13.919988,-4.34999 z"
|
||||
id="path4607"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccccccccccc" />
|
||||
<path
|
||||
style="fill:none;stroke:#babdb6;stroke-width:0.61653525;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 64.822903,183.6408 c -0.06118,25.29724 0,55.68 0,55.68 v 0"
|
||||
id="path4530"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccc" />
|
||||
<path
|
||||
style="display:inline;fill:#d9dad7;fill-opacity:1;stroke:#babdb6;stroke-width:0.61653525;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 93.967914,196.69083 c 0,0 -3.141541,-12.93515 -4.350032,-13.05003 -2.701088,1.93408 -2.614239,2.22922 -4.349992,4.35002 2.394025,7.89236 3.479995,9.57001 3.479995,9.57001 z"
|
||||
id="button6"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccc"
|
||||
inkscape:label="#path4541-3" />
|
||||
<rect
|
||||
style="fill:#d9dad7;fill-opacity:1;stroke:#babdb6;stroke-width:0.61653525;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="button2"
|
||||
width="8.6999846"
|
||||
height="14.789989"
|
||||
x="60.472919"
|
||||
y="189.29581"
|
||||
ry="3.9149992"
|
||||
inkscape:label="#rect4615" />
|
||||
<path
|
||||
style="fill:#eeeeec;fill-opacity:1;stroke:#babdb6;stroke-width:0.61653525;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 44.286958,270.37954 c -1.184921,4.53183 -5.479801,5.02739 -9.331541,1.1532 -3.062052,-4.76909 -6.934437,-16.17092 -6.816123,-19.86098 0.118269,-3.69003 1.372851,-5.59065 5.281209,-14.91112 1.954179,-4.66034 1.9368,-3.20903 2.958075,0.49871 1.190396,4.32175 9.093304,28.58842 7.90838,33.12019 z"
|
||||
id="path4617"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="zczssz" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="display:inline;fill:none;fill-opacity:0.39215686;stroke:#babdb6;stroke-width:2.08971024;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="led0-5"
|
||||
sodipodi:cx="64.773148"
|
||||
sodipodi:cy="257.64056"
|
||||
sodipodi:rx="3.7614744"
|
||||
sodipodi:ry="3.7614779"
|
||||
d="m 67.432912,254.9808 a 3.7614744,3.7614779 0 0 1 0,5.31953 3.7614744,3.7614779 0 0 1 -5.319528,0 3.7614744,3.7614779 0 0 1 -1e-6,-5.31953"
|
||||
sodipodi:start="5.4977871"
|
||||
sodipodi:end="3.9269907"
|
||||
sodipodi:open="true"
|
||||
sodipodi:arc-type="arc" />
|
||||
<path
|
||||
style="display:inline;opacity:1;fill:#eeeeec;fill-opacity:1;stroke:#babdb6;stroke-width:0.61653525;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 85.335258,270.71558 c 1.18491,4.53186 5.479785,5.02738 9.331555,1.15324 3.062033,-4.76913 6.934417,-16.17102 6.816127,-19.86101 -0.11829,-3.69003 -1.37286,-5.59071 -5.281228,-14.91121 -1.95418,-4.66025 -1.936795,-3.20892 -2.95807,0.49877 -1.190396,4.32176 -9.093291,28.58839 -7.908384,33.12021 z"
|
||||
id="path4617-5"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="zczssz" />
|
||||
<path
|
||||
style="display:inline;opacity:1;fill:#d9dad7;fill-opacity:1;stroke:#babdb6;stroke-width:0.61653525;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 93.967914,214.09081 c 0.815935,-16.75448 0,-17.39998 0,-17.39998 l -5.220029,0.87 c 0,0 0.239252,0.36327 -0.870008,12.17998 6.651607,6.71191 6.090037,4.35 6.090037,4.35 z"
|
||||
id="button5"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccc"
|
||||
inkscape:label="#path4541-3-3" />
|
||||
<path
|
||||
style="display:inline;opacity:1;fill:#d9dad7;fill-opacity:1;stroke:#babdb6;stroke-width:0.61653525;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 35.737567,196.69083 c 0,0 3.141541,-12.93515 4.350032,-13.05003 2.701088,1.93408 2.614239,2.22922 4.349992,4.35002 -2.394025,7.89236 -3.479995,9.57001 -3.479995,9.57001 z"
|
||||
id="button4"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccc"
|
||||
inkscape:label="#path4541-3-5" />
|
||||
<path
|
||||
style="display:inline;opacity:1;fill:#d9dad7;fill-opacity:1;stroke:#babdb6;stroke-width:0.61653525;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 35.737567,214.09081 c -0.815935,-16.75448 0,-17.39998 0,-17.39998 l 5.220029,0.87 c 0,0 -0.239252,0.36327 0.870008,12.17998 -6.651607,6.71191 -6.090037,4.35 -6.090037,4.35 z"
|
||||
id="button3"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccc"
|
||||
inkscape:label="#path4541-3-3-6" />
|
||||
<path
|
||||
style="display:inline;opacity:1;fill:#d3d3ce;fill-opacity:1;stroke:#babdb6;stroke-width:0.61653525;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 60.426305,217.35644 v -6.74249 c -0.01103,-1.73802 1.304999,-1.74 1.304999,-1.74 h 6.089995 c 0,0 1.352705,0.0157 1.304999,1.74 v 6.74249 z"
|
||||
id="button8"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccc"
|
||||
inkscape:label="#path4589-9" />
|
||||
<path
|
||||
style="display:inline;opacity:1;fill:#d3d3ce;fill-opacity:1;stroke:#babdb6;stroke-width:0.61653525;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 60.426305,217.35644 v 6.74249 c -0.01103,1.73802 1.304999,1.74 1.304999,1.74 H 67.8213 c 0,0 1.352705,-0.0157 1.304998,-1.74 v -6.74249 z"
|
||||
id="button7"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccc"
|
||||
inkscape:label="#path4589-9-1" />
|
||||
<path
|
||||
style="fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 46.143947,189.21374 -3.642001,8.50625 1.101002,10.95189 16.221334,-7.70159 -0.921076,-16.08486 z"
|
||||
id="button0"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:label="#path3664"
|
||||
sodipodi:nodetypes="cccccc" />
|
||||
<path
|
||||
style="fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 70.954987,185.09032 -1.109402,16.05391 16.940367,7.82608 0.477526,-11.0865 -3.352352,-9.32016 z"
|
||||
id="button1"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:label="#path4486"
|
||||
sodipodi:nodetypes="cccccc" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="Buttons"
|
||||
inkscape:label="Buttons"
|
||||
transform="translate(0,-2.6458338)"
|
||||
style="display:inline">
|
||||
<g
|
||||
transform="matrix(-0.28471359,0,0,-0.26458333,70.320391,74.101432)"
|
||||
style="display:inline;opacity:1"
|
||||
id="button4-path"
|
||||
inkscape:label="#g151">
|
||||
<path
|
||||
sodipodi:nodetypes="ccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path964"
|
||||
d="m 109.31232,181.51438 38.69266,43.39973 h 98.98144"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
<rect
|
||||
inkscape:label="#rect875"
|
||||
style="color:#000000;text-align:end;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
id="button4-leader"
|
||||
width="1"
|
||||
height="1"
|
||||
x="245.98642"
|
||||
y="223.91411" />
|
||||
<rect
|
||||
y="177"
|
||||
x="105"
|
||||
height="6.999999"
|
||||
width="6.999999"
|
||||
id="rect974"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(-0.30394757,0,0,0.26458333,100.78231,-2.4556928)"
|
||||
style="display:inline"
|
||||
id="button0-path"
|
||||
inkscape:label="#g141">
|
||||
<path
|
||||
sodipodi:nodetypes="cccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path960"
|
||||
d="m 331.57794,109.27355 -66.76739,-0.0347 -34.51493,21.26646 h -68.95164"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
<rect
|
||||
y="127.00576"
|
||||
x="157"
|
||||
height="6.999999"
|
||||
width="6.999999"
|
||||
id="rect970"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
<rect
|
||||
inkscape:label="#rect871"
|
||||
style="color:#000000;text-align:end;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
id="button0-leader"
|
||||
width="1"
|
||||
height="1"
|
||||
x="330.57794"
|
||||
y="108.28136" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(-0.29294531,0,0,0.26458333,70.19679,-27.761975)"
|
||||
style="display:inline"
|
||||
id="button3-path"
|
||||
inkscape:label="#g156">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 114.17805,250.50576 125.44617,0.0352"
|
||||
id="path966"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect976"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="108"
|
||||
y="247.00577" />
|
||||
<rect
|
||||
y="250.00575"
|
||||
x="238.62422"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button3-leader"
|
||||
style="color:#000000;text-align:end;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect875" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.26458333,0,0,0.26458333,40.502648,-6.6313911)"
|
||||
style="display:inline"
|
||||
id="button5-path"
|
||||
inkscape:label="#g146">
|
||||
<path
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 336.91912,170.14213 -143.57514,0.36405"
|
||||
id="path51"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect53"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="189"
|
||||
y="167" />
|
||||
<rect
|
||||
y="169.75269"
|
||||
x="336.91913"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button5-leader"
|
||||
style="color:#000000;text-align:start;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect871" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(-0.2847136,0,0,0.26458333,87.493539,-7.2646706)"
|
||||
style="display:inline;opacity:1"
|
||||
id="button2-path"
|
||||
inkscape:label="#g151">
|
||||
<path
|
||||
sodipodi:nodetypes="ccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path964-6"
|
||||
d="m 79.210952,148.6933 62.691188,68.76371 165.40155,1e-5"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
<rect
|
||||
inkscape:label="#rect875"
|
||||
style="color:#000000;text-align:end;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
id="button2-leader"
|
||||
width="1"
|
||||
height="1"
|
||||
x="306.30368"
|
||||
y="216.45702" />
|
||||
<rect
|
||||
y="145.19263"
|
||||
x="76.187187"
|
||||
height="6.999999"
|
||||
width="6.999999"
|
||||
id="rect974-5"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.26458333,0,0,0.26458333,13.746167,11.443545)"
|
||||
style="display:inline"
|
||||
id="button7-path"
|
||||
inkscape:label="#g146">
|
||||
<path
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="M 438.04598,191.7488 H 219.48839 l -26.14441,-21.24262"
|
||||
id="path51-1-9-6-8"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccc" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect53-2-3-2-7"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="189"
|
||||
y="167" />
|
||||
<rect
|
||||
y="191.3428"
|
||||
x="438.04599"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button7-leader"
|
||||
style="color:#000000;text-align:start;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect871" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.26458333,0,0,0.26458333,13.746167,3.106915)"
|
||||
style="display:inline"
|
||||
id="button8-path"
|
||||
inkscape:label="#g146">
|
||||
<path
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="M 438.04598,178.25732 H 203.75439 l -10.41041,-7.75114"
|
||||
id="path51-1-9-6-0"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccc" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect53-2-3-2-2"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="189"
|
||||
y="167" />
|
||||
<rect
|
||||
y="177.79317"
|
||||
x="438.04599"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button8-leader"
|
||||
style="color:#000000;text-align:start;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect871" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.2847136,0,0,-0.26458333,59.129968,74.101431)"
|
||||
style="display:inline;opacity:1"
|
||||
id="button6-path"
|
||||
inkscape:label="#g151">
|
||||
<path
|
||||
sodipodi:nodetypes="ccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path964-67"
|
||||
d="m 109.31232,181.51438 38.69266,43.39973 h 99.66799"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
<rect
|
||||
inkscape:label="#rect875"
|
||||
style="color:#000000;text-align:start;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
id="button6-leader"
|
||||
width="1"
|
||||
height="1"
|
||||
x="247.67297"
|
||||
y="223.9144" />
|
||||
<rect
|
||||
y="177"
|
||||
x="105"
|
||||
height="6.999999"
|
||||
width="6.999999"
|
||||
id="rect974-3"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.30394757,0,0,0.26458333,28.636101,-2.4556931)"
|
||||
style="display:inline"
|
||||
id="button1-path"
|
||||
inkscape:label="#g141">
|
||||
<path
|
||||
sodipodi:nodetypes="cccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path960-6"
|
||||
d="m 332.32616,109.27355 -67.51561,-0.0347 -34.51493,21.26646 h -68.95164"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
<rect
|
||||
y="127.00576"
|
||||
x="157"
|
||||
height="6.999999"
|
||||
width="6.999999"
|
||||
id="rect970-2"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
<rect
|
||||
inkscape:label="#rect871"
|
||||
style="color:#000000;text-align:start;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
id="button1-leader"
|
||||
width="1"
|
||||
height="1"
|
||||
x="332.32617"
|
||||
y="109.27355" />
|
||||
</g>
|
||||
<g
|
||||
id="led0"
|
||||
inkscape:label="#g4411"
|
||||
style="fill:#eeee35;fill-opacity:1">
|
||||
<g
|
||||
id="g4457">
|
||||
<path
|
||||
id="led0-0"
|
||||
style="color:#000000;display:inline;overflow:visible;opacity:1;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:0.28991818;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="M 36.851726,81.915105 C 41.99239,103.21594 40.604019,101.71476 43.62439,106.21567 44.61563,98.208963 38.156084,80.727537 35.152327,69.797094 Z"
|
||||
inkscape:label="#path5630"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccc" />
|
||||
<path
|
||||
id="led0-1"
|
||||
style="color:#000000;display:inline;overflow:visible;opacity:1;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:0.28991818;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="M 93.039402,81.561768 C 87.898738,102.8626 89.287109,101.36142 86.266738,105.86233 85.275498,97.855627 91.735044,80.3742 94.738801,69.443757 Z"
|
||||
inkscape:label="#path5630"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccc" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="LEDs"
|
||||
inkscape:label="LEDs"
|
||||
transform="translate(0,-2.6458338)"
|
||||
style="display:inline">
|
||||
<g
|
||||
style="display:inline"
|
||||
id="led0-path"
|
||||
inkscape:label="#g161"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,38.838972,19.46058)">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path877"
|
||||
d="M 343.20703,290.50577 H 208.64438 l -18.97696,-18.97696"
|
||||
style="color:#000000;display:inline;overflow:visible;opacity:1;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
sodipodi:nodetypes="ccc" />
|
||||
<rect
|
||||
y="269.96875"
|
||||
x="188.28125"
|
||||
height="6.999999"
|
||||
width="6.999999"
|
||||
id="rect879"
|
||||
style="color:#000000;display:inline;overflow:visible;opacity:1;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
<rect
|
||||
inkscape:label="#rect881"
|
||||
y="290.00577"
|
||||
x="343.20703"
|
||||
height="1"
|
||||
width="1"
|
||||
id="led0-leader"
|
||||
style="color:#000000;text-align:start;display:inline;overflow:visible;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 27 KiB |
479
data/gnome/logitech-g402.svg
Normal file
@@ -0,0 +1,479 @@
|
||||
<?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"
|
||||
width="467.83105"
|
||||
height="400.87393"
|
||||
viewBox="0 0 467.83105 398.87393"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="0.92.3 (2405546, 2018-03-11)"
|
||||
sodipodi:docname="logitech-g402.svg"
|
||||
inkscape:export-filename="/home/daniele/Scrivania/logitech-g402.png"
|
||||
inkscape:export-xdpi="96"
|
||||
inkscape:export-ydpi="96">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="2.8284271"
|
||||
inkscape:cx="247.98208"
|
||||
inkscape:cy="192.40531"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="Device"
|
||||
inkscape:document-rotation="0"
|
||||
showgrid="false"
|
||||
units="px"
|
||||
borderlayer="true"
|
||||
inkscape:showpageshadow="false"
|
||||
inkscape:pagecheckerboard="false"
|
||||
showguides="true"
|
||||
inkscape:window-width="1280"
|
||||
inkscape:window-height="992"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-global="false"
|
||||
fit-margin-top="20"
|
||||
fit-margin-bottom="20"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid956"
|
||||
originx="-16.168953"
|
||||
originy="-1.1260801" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata5">
|
||||
<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>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="Device"
|
||||
inkscape:label="Device"
|
||||
transform="translate(-16.168953,-400)"
|
||||
style="display:inline">
|
||||
<g
|
||||
transform="translate(-374,-4.864278e-6)"
|
||||
id="g1170">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path981"
|
||||
d="m 617.52893,453.41998 -49.99065,26.66899 c -2.22449,1.86937 -2.81832,3.35837 -3.6652,5.83317 l -15.9563,53.34684 c -0.49748,2.25523 -0.34218,3.74811 0.48513,6.46679 l 3.99946,10.9325 -3.53186,0.74244 -1.35901,12.37091 -1.50378,2.8507 2.09912,18.55549 c 0,0 -13.03638,4.81768 -18.22998,15.00854 -5.19361,10.19086 -9.29541,53.53534 -6.03613,59.82001 3.25927,6.28467 25.6018,33.9057 28.70703,40.07849 3.10522,6.17279 24.79553,45.22613 30.93054,51.77106 6.13501,6.54492 35.79895,19.27618 35.79895,19.27618 6.39358,-5.0822 15.98738,-6.80155 23.61682,-0.45557 0,0 31.72192,-10.76812 43.56091,-26.60644 11.83899,-15.83832 24.57691,-52.0235 24.57691,-52.0235 0,0 -2.04663,-1.98694 -2.04663,-9.06775 0,-7.08081 3.24377,-9.90655 3.24377,-9.90655 l -7.41565,-77.33204 c 0,0 0.90478,-68.51501 -1.01514,-76.49939 -1.57946,-6.56849 -5.90589,-29.81348 -7.88675,-38.02183 -0.42699,-1.76936 -0.95122,-1.65743 -2.07882,-3.29921 l -52.65222,-36.341 4.00378,32.1344 h -28.47082 z"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#d3d3ce;fill-opacity:1;stroke:#babdb6;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
sodipodi:nodetypes="ccccccccccsccsccscsccssccccc" />
|
||||
<path
|
||||
sodipodi:nodetypes="cccccscssccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1014"
|
||||
d="m 648.06347,618.15601 34.51828,10.05586 c 2.62858,0.8078 3.9256,5.47034 3.9256,5.47034 l -0.44831,35.46611 23.5331,26.29168 c 0,0 -9.4414,38.41029 -27.23181,57.70209 -11.60967,12.58946 -39.46726,23.54443 -39.46726,23.54443 0,0 -4.87562,-48.51623 -9.30469,-56.255 -4.42908,-7.73877 -35.48734,-18.11903 -50.81543,-30.61249 -5.82123,-4.7447 -15.27906,-16.55719 -15.27906,-16.55719 l -4.00329,-23.86047 z"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#d3d3ce;fill-opacity:1;stroke:#bfc2bb;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
<path
|
||||
sodipodi:nodetypes="cccsc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1144"
|
||||
d="m 620.3461,775.42623 3.91771,-44.34657 c 1.3829,-6.28113 -0.99643,-10.76025 -6.48071,-12.64329 0,0 -33.9759,-17.94313 -41.16454,-25.32697 -7.18863,-7.38383 -16.89702,-24.84664 -16.89702,-24.84664"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#babdb6;stroke-width:1;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
<path
|
||||
style="color:#000000;display:inline;overflow:visible;vector-effect:none;fill:none;fill-opacity:1;stroke:#babdb6;stroke-width:8;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="led1"
|
||||
sodipodi:type="arc"
|
||||
sodipodi:cx="-664.05457"
|
||||
sodipodi:cy="598.10364"
|
||||
sodipodi:rx="12.162673"
|
||||
sodipodi:ry="12.162673"
|
||||
sodipodi:start="0.78539816"
|
||||
sodipodi:end="5.4977871"
|
||||
sodipodi:arc-type="arc"
|
||||
d="m -655.45426,606.70395 a 12.162673,12.162673 0 0 1 -17.20061,0 12.162673,12.162673 0 0 1 0,-17.20062 12.162673,12.162673 0 0 1 17.20061,0"
|
||||
sodipodi:open="true"
|
||||
transform="rotate(-90)"
|
||||
inkscape:label="#path1012" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccsccsc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1030"
|
||||
d="m 548.10584,591.18781 -1.39021,19.03606 c 0,0 -6.51942,1.07248 -9.54983,9.44719 -3.03041,8.37471 -8.01844,25.6823 -7.19278,55.16199 -3.80454,-3.92381 -8.20043,-7.54825 -7.93855,-14.11229 0.0565,-12.69733 0.50177,-31.56063 5.66468,-49.88965 3.26585,-11.59423 10.35698,-16.87164 20.40669,-19.6433 z"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#d9dad7;fill-opacity:1;stroke:#babdb6;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="button0"
|
||||
d="m 616.72979,453.87813 -43.21475,23.25557 -2.30905,111.85791 -3.27924,2.29913 8.95587,40.68384 43.49634,-20.81641 c 0,0 -6.29272,-57.3948 -6.04248,-82.96182 0.25025,-25.56702 2.39331,-74.31822 2.39331,-74.31822 z"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#eeeeec;fill-opacity:1;stroke:#babdb6;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
sodipodi:nodetypes="ccccccsc"
|
||||
inkscape:label="#path1060" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="button1"
|
||||
d="m 641.35924,447.84438 c 0,0 6.82136,40.56938 7.71833,77.06871 0.89697,36.49932 0.60175,77.20425 0.60175,77.20425 l 43.91543,12.95245 c 0,0 2.9472,-62.03698 1.5412,-81.15454 -1.4061,-19.11755 -6.51723,-50.97735 -8.90483,-54.50845 -2.3876,-3.5311 -44.87188,-31.56242 -44.87188,-31.56242 z"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#eeeeec;fill-opacity:1;stroke:#babdb6;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
sodipodi:nodetypes="cscccsc"
|
||||
inkscape:label="#path1062" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1066"
|
||||
d="m 624.73297,570.54019 2.51941,13.45651 14.86756,-0.0507 1.26654,-13.4599 z"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#eeeeec;fill-opacity:1;stroke:#babdb6;stroke-width:1;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#babdb6;stroke-width:1;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="button2"
|
||||
width="17.152637"
|
||||
height="51.954956"
|
||||
x="623.8761"
|
||||
y="503.84464"
|
||||
rx="8.5763187"
|
||||
ry="8.5763187"
|
||||
inkscape:label="#rect1068" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="button7"
|
||||
d="m 569.97595,534.59994 -16.73181,-6.63336 13.09595,-44.4487 3.95538,-3.11892 z"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#babdb6;stroke-width:1;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
inkscape:label="#path1098" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="button6"
|
||||
d="m 569.97595,534.59994 -15.81811,4.41446 13.12378,48.26233 z"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#babdb6;stroke-width:1;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
inkscape:label="#path1100" />
|
||||
<path
|
||||
style="color:#000000;display:inline;overflow:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#babdb6;stroke-width:1;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 550.97571,556.55099 -1.73137,22.23376 c 0,0 -8.07466,-0.0385 -6.10341,-6.67814 0.79661,-2.68321 1.88213,-11.10134 3.54027,-13.80998 2.44498,-3.99399 4.29451,-1.74564 4.29451,-1.74564 z"
|
||||
id="button5"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccsc"
|
||||
inkscape:label="#path1473" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="button4"
|
||||
d="m 553.91685,576.77039 3.78851,43.20785 -3.52893,1.40018 -4.18952,-2.67337 -1.94029,-38.13895 z"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#babdb6;stroke-width:1;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
sodipodi:nodetypes="cccccc"
|
||||
inkscape:label="#path1118" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="button3"
|
||||
d="m 557.29072,626.42287 -4.13718,-0.69442 -1.90659,6.11048 8.04212,38.1661 3.30713,3.0868 4.6499,-1.78876 z"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#babdb6;stroke-width:1;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
inkscape:label="#path1120" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="led0"
|
||||
d="m 554.07316,558.40614 18.36886,76.63506 -10.78213,5.31523 z"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#eeeeec;fill-opacity:1;stroke:#babdb6;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
inkscape:label="#path1122" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1138"
|
||||
d="m 561.0357,599.31803 1.68542,4.21409 -3.19735,5.27031 -0.72068,-4.52978 z"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1140"
|
||||
d="m 564.53845,610.12329 0.75,2.84987 -3.50226,8.03142 -0.75,-4.13156 z"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1142"
|
||||
d="m 566.94537,619.35785 1.45849,3.46056 -4.29748,11.03294 -1.04318,-4.82295 z"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
<path
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 608.6358,526.99557 v 7.97553 l -3.83318,-3.83321 z"
|
||||
id="path1148"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="Buttons"
|
||||
inkscape:label="Buttons"
|
||||
style="display:inline"
|
||||
transform="translate(-16.168953)">
|
||||
<g
|
||||
id="button0-path"
|
||||
inkscape:label="#g442">
|
||||
<path
|
||||
sodipodi:nodetypes="ccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path954"
|
||||
d="m 234.68702,62.49186 41.9857,-41.98571 H 483"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
<rect
|
||||
y="62"
|
||||
x="230"
|
||||
height="6.999999"
|
||||
width="6.999999"
|
||||
id="rect952"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
<rect
|
||||
inkscape:label="#rect865"
|
||||
y="20"
|
||||
x="483"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button0-leader"
|
||||
style="color:#000000;text-align:start;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round" />
|
||||
</g>
|
||||
<g
|
||||
id="button1-path"
|
||||
inkscape:label="#g437">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="M 275.03741,60.50615 H 483.05562"
|
||||
id="path958"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect968"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="273"
|
||||
y="57" />
|
||||
<rect
|
||||
inkscape:label="#rect867"
|
||||
style="color:#000000;text-align:start;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
id="button1-leader"
|
||||
width="1"
|
||||
height="1"
|
||||
x="483"
|
||||
y="60" />
|
||||
</g>
|
||||
<g
|
||||
id="button2-path"
|
||||
inkscape:label="#g432">
|
||||
<path
|
||||
sodipodi:nodetypes="ccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path960"
|
||||
d="M 483.15129,100.50615 H 266.97374 l -7.07445,7.07445"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
<rect
|
||||
y="106.05299"
|
||||
x="254.86905"
|
||||
height="6.999999"
|
||||
width="6.999999"
|
||||
id="rect970"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
<rect
|
||||
inkscape:label="#rect869"
|
||||
y="100"
|
||||
x="483"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button2-leader"
|
||||
style="color:#000000;text-align:start;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round" />
|
||||
</g>
|
||||
<g
|
||||
id="button6-path"
|
||||
inkscape:label="#g427">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="M 483,140.50615 H 189.32589"
|
||||
id="path962"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect972"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="188"
|
||||
y="137" />
|
||||
<rect
|
||||
inkscape:label="#rect871"
|
||||
style="color:#000000;text-align:start;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
id="button6-leader"
|
||||
width="1"
|
||||
height="1"
|
||||
x="483"
|
||||
y="140" />
|
||||
</g>
|
||||
<g
|
||||
id="button4-path"
|
||||
inkscape:label="#g402">
|
||||
<path
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 17.16895,226.39549 151.60272,0.0884 8.22787,-9.92565"
|
||||
id="path896"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccc" />
|
||||
<rect
|
||||
y="-219.98177"
|
||||
x="-181.00188"
|
||||
height="6.999999"
|
||||
width="6.999999"
|
||||
id="rect1297"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
transform="scale(-1)" />
|
||||
<rect
|
||||
inkscape:label="#rect873"
|
||||
y="-226.98393"
|
||||
x="-17.168953"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button4-leader"
|
||||
style="color:#000000;text-align:end;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
transform="scale(-1)" />
|
||||
</g>
|
||||
<g
|
||||
id="button7-path"
|
||||
inkscape:label="#g300">
|
||||
<rect
|
||||
inkscape:label="#rect873"
|
||||
y="-62.912788"
|
||||
x="-17.168953"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button7-leader"
|
||||
style="color:#000000;text-align:end;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
transform="scale(-1)" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path914"
|
||||
d="M 17.317611,62.412787 H 178.90504 l 15.75447,23.87718"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect912"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="191.28058"
|
||||
y="85.438072" />
|
||||
</g>
|
||||
<g
|
||||
id="button3-path"
|
||||
inkscape:label="#g407">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1295"
|
||||
d="m 17.294405,266.46958 168.568675,0.0407"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
<rect
|
||||
transform="scale(-1)"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect1301"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="-191.68813"
|
||||
y="-269.40173" />
|
||||
<rect
|
||||
transform="scale(-1)"
|
||||
style="color:#000000;text-align:end;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round"
|
||||
id="button3-leader"
|
||||
width="1.1351269"
|
||||
height="1"
|
||||
x="-17.294409"
|
||||
y="-266.98993"
|
||||
inkscape:label="#rect873" />
|
||||
</g>
|
||||
<g
|
||||
id="button5-path"
|
||||
inkscape:label="#g422">
|
||||
<path
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 483.13134,180.50551 -295.64539,-0.25 -14.35505,-20.22553"
|
||||
id="path890"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccc" />
|
||||
<rect
|
||||
y="-163.30751"
|
||||
x="-175.13875"
|
||||
height="6.999999"
|
||||
width="6.999999"
|
||||
id="rect894"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
transform="scale(-1)" />
|
||||
<rect
|
||||
transform="scale(-1)"
|
||||
style="color:#000000;text-align:start;display:inline;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
id="button5-leader"
|
||||
width="1"
|
||||
height="1"
|
||||
x="-484.00677"
|
||||
y="-181.00594"
|
||||
inkscape:label="#rect873" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="LEDs"
|
||||
inkscape:label="LEDs"
|
||||
style="display:inline"
|
||||
transform="translate(-16.168953)">
|
||||
<g
|
||||
id="led0-path"
|
||||
inkscape:label="#g417">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
style="color:#000000;display:inline;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="M 191.93858,220.50615 H 483.10224"
|
||||
id="path966"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="color:#000000;display:inline;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect976"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="188"
|
||||
y="217" />
|
||||
<rect
|
||||
inkscape:label="#rect875"
|
||||
style="color:#000000;text-align:start;display:inline;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
id="led0-leader"
|
||||
width="1"
|
||||
height="1"
|
||||
x="483"
|
||||
y="220" />
|
||||
</g>
|
||||
<g
|
||||
id="led1-path"
|
||||
inkscape:label="#g412">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path877"
|
||||
d="M 214.64438,260.50615 H 483"
|
||||
style="color:#000000;display:inline;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<rect
|
||||
y="257"
|
||||
x="210"
|
||||
height="6.999999"
|
||||
width="6.999999"
|
||||
id="rect879"
|
||||
style="color:#000000;display:inline;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
<rect
|
||||
inkscape:label="#rect881"
|
||||
y="260"
|
||||
x="483"
|
||||
height="1"
|
||||
width="1"
|
||||
id="led1-leader"
|
||||
style="color:#000000;text-align:start;display:inline;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 28 KiB |
@@ -10,7 +10,7 @@
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="467.83105"
|
||||
height="398.87393"
|
||||
height="400.87393"
|
||||
viewBox="0 0 467.83105 398.87393"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
@@ -97,7 +97,7 @@
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#babdb6;stroke-width:1;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
<path
|
||||
style="color:#000000;display:inline;overflow:visible;vector-effect:none;fill:none;fill-opacity:1;stroke:#babdb6;stroke-width:8;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="led1"
|
||||
id="led0"
|
||||
sodipodi:type="arc"
|
||||
sodipodi:cx="-664.05457"
|
||||
sodipodi:cy="598.10364"
|
||||
@@ -185,7 +185,7 @@
|
||||
inkscape:label="#path1120" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="led0"
|
||||
id="led1"
|
||||
d="m 554.07316,558.40614 18.36886,76.63506 -10.78213,5.31523 z"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#eeeeec;fill-opacity:1;stroke:#babdb6;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
inkscape:label="#path1122" />
|
||||
@@ -213,7 +213,7 @@
|
||||
<path
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 608.6358,526.99557 v 7.97553 l -3.83318,-3.83321 z"
|
||||
id="path1148"
|
||||
id="button10"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
@@ -296,7 +296,7 @@
|
||||
height="1"
|
||||
width="1"
|
||||
id="button2-leader"
|
||||
style="color:#000000;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round" />
|
||||
style="color:#000000;text-align:start;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round" />
|
||||
</g>
|
||||
<g
|
||||
id="button6-path"
|
||||
@@ -517,7 +517,7 @@
|
||||
style="display:inline"
|
||||
transform="translate(-16.168953)">
|
||||
<g
|
||||
id="led0-path"
|
||||
id="led1-path"
|
||||
inkscape:label="#g417">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
@@ -535,14 +535,14 @@
|
||||
<rect
|
||||
inkscape:label="#rect875"
|
||||
style="color:#000000;text-align:start;display:inline;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
id="led0-leader"
|
||||
id="led1-leader"
|
||||
width="1"
|
||||
height="1"
|
||||
x="483"
|
||||
y="220" />
|
||||
</g>
|
||||
<g
|
||||
id="led1-path"
|
||||
id="led0-path"
|
||||
inkscape:label="#g412">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
@@ -563,7 +563,7 @@
|
||||
x="483"
|
||||
height="1"
|
||||
width="1"
|
||||
id="led1-leader"
|
||||
id="led0-leader"
|
||||
style="color:#000000;text-align:start;display:inline;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round" />
|
||||
</g>
|
||||
</g>
|
||||
|
||||
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 34 KiB |
1190
data/gnome/logitech-g600.svg
Normal file
|
After Width: | Height: | Size: 95 KiB |
331
data/gnome/logitech-g603.svg
Normal file
@@ -0,0 +1,331 @@
|
||||
<?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"
|
||||
width="409.2084"
|
||||
height="411.271"
|
||||
viewBox="0 0 409.2084 411.27099"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="0.92.3 (2405546, 2018-03-11)"
|
||||
sodipodi:docname="logitech-g603.svg"
|
||||
inkscape:export-filename="/home/jimmac/logitech-g403.png"
|
||||
inkscape:export-xdpi="96"
|
||||
inkscape:export-ydpi="96">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="5.656854"
|
||||
inkscape:cx="141.15425"
|
||||
inkscape:cy="248.38223"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="Device"
|
||||
inkscape:document-rotation="0"
|
||||
showgrid="false"
|
||||
units="px"
|
||||
borderlayer="true"
|
||||
inkscape:showpageshadow="false"
|
||||
inkscape:pagecheckerboard="false"
|
||||
showguides="true"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1017"
|
||||
inkscape:window-x="-4"
|
||||
inkscape:window-y="-4"
|
||||
inkscape:window-maximized="1"
|
||||
fit-margin-top="20"
|
||||
fit-margin-left="20"
|
||||
fit-margin-bottom="20"
|
||||
fit-margin-right="0"
|
||||
inkscape:snap-smooth-nodes="false"
|
||||
inkscape:object-nodes="true"
|
||||
inkscape:snap-nodes="true"
|
||||
inkscape:guide-bbox="true">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid956"
|
||||
originx="-68.791593"
|
||||
originy="1.2767161" />
|
||||
<sodipodi:guide
|
||||
position="126.53125,259.03126"
|
||||
orientation="0,1"
|
||||
id="guide4772"
|
||||
inkscape:locked="false" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata5">
|
||||
<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>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="Device"
|
||||
inkscape:label="Device"
|
||||
transform="translate(-68.791597,-390.00576)"
|
||||
style="display:inline">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#d3d3ce;fill-opacity:1;stroke:#babdb6;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 175.34499,424.02062 c -24.661,4.08226 -60.18056,22.01925 -69.18502,28.18484 -7.932853,5.43184 -10.801193,13.70196 -10.925233,20.94538 -0.72438,42.30084 10.273313,88.0482 7.561093,130.50252 -1.21026,18.94414 -7.437413,51.01218 -9.969593,64.24176 -1.65073,6.85296 -2.50133,13.87513 -2.53464,20.92508 2.7e-4,50.2338 40.610433,90.95628 90.705683,90.95655 45.46938,-0.0495 82.39643,-34.07041 89.82748,-79.05254 10.66083,-64.53278 10.42629,-136.39723 11.98541,-204.91567 0.28464,-12.50912 -1.94334,-23.29335 -8.32377,-31.80289 -13.26086,-21.57098 -66.73071,-40.02924 -66.73071,-40.02924 v 7.19061 h -32.4107 z"
|
||||
id="path870"
|
||||
sodipodi:nodetypes="cssscccssccccc" />
|
||||
<path
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#eeeeec;fill-opacity:1;stroke:#babdb6;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 208.56756,431.16702 -3,141.31424 c -0.14923,7.02936 -6.07063,12.69123 -13.61129,12.69123 -7.54065,0 -13.46205,-5.66187 -13.61128,-12.69123 l -3,-141.31424 z"
|
||||
id="rect913"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cssscc" />
|
||||
<path
|
||||
sodipodi:nodetypes="cscsc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path950"
|
||||
d="m 95.373251,486.43435 c 38.955159,101.12102 48.667459,140.67087 51.422819,177.84397 2.03646,27.47435 -36.96151,79.62933 -36.96151,79.62933 0,0 -24.033873,-37.15986 -19.463976,-61.45137 10.258966,-54.53208 19.996276,-75.99616 5.002667,-196.02193 z"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#bfc2bb;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
<path
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#babdb6;stroke-width:1;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 104.9358,539.80779 c 2.40195,-0.25238 2.7176,0.9048 2.96999,3.30675 l 5.69164,54.1678 c 0.25238,2.40194 -1.47813,4.53882 -3.88008,4.7912 -2.40195,0.25239 -5.44876,-8.75375 -5.55682,-11.1665 l -2.02953,-45.3135 c -0.10806,-2.41275 0.40286,-5.53337 2.8048,-5.78575 z"
|
||||
id="button4"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="sssssss"
|
||||
inkscape:label="#rect921" />
|
||||
<path
|
||||
sodipodi:nodetypes="sssssss"
|
||||
inkscape:connector-curvature="0"
|
||||
id="button3"
|
||||
d="m 109.77779,602.64876 c 2.40195,-0.25239 4.53882,1.47813 4.79121,3.88007 l 5.69164,54.1678 c 0.25238,2.40195 -1.47814,4.53883 -3.88008,4.79121 -2.40195,0.25238 -7.77772,-8.87659 -7.89239,-11.28904 l -1.91843,-40.36308 c -0.11466,-2.41244 0.8061,-10.93458 3.20805,-11.18696 z"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#babdb6;stroke-width:1;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
inkscape:label="#path924" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#babdb6;stroke-width:1;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="button2"
|
||||
width="23.155933"
|
||||
height="69.467796"
|
||||
x="180.55382"
|
||||
y="454.99139"
|
||||
rx="11.577967"
|
||||
ry="11.577967"
|
||||
inkscape:label="#rect932" />
|
||||
<path
|
||||
sodipodi:nodetypes="cssscc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="button5"
|
||||
d="m 201.20722,545.97605 -0.65676,17.92859 c -0.16469,4.49569 -3.83301,8.12045 -8.59419,8.12045 -4.76117,0 -8.49995,-3.62273 -8.59417,-8.12045 l -0.65677,-17.92859 z"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#babdb6;stroke-width:1;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
inkscape:label="#path942" />
|
||||
<path
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#bfc2bb;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 281.45725,491.14612 c -30.15796,102.59778 -42.11413,137.63368 -50.74442,173.1322 -6.50823,26.76995 22.13723,79.62933 22.13723,79.62933 0,0 13.58979,-21.97214 16.0745,-32.60727 16.80373,-71.92371 12.53269,-220.15426 12.53269,-220.15426 z"
|
||||
id="path946"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cscsc" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccsc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="button0"
|
||||
d="m 174.91314,423.64614 3.0021,129.78071 -48.65044,25.07759 -32.826242,-92.02794 c -1.027151,-19.85446 -0.810142,-28.0624 15.700932,-37.87909 17.32775,-10.30224 41.981,-20.75843 62.77365,-24.95127 z"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#d3d3ce;fill-opacity:1;stroke:#bfc2bb;stroke-width:1.98825693;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
inkscape:label="#path948" />
|
||||
<path
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#d3d3ce;fill-opacity:1;stroke:#bfc2bb;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 207.75569,423.97641 -1.77476,128.93066 47.9684,25.54626 27.50793,-87.30721 c 4.86457,-36.68335 -44.6715,-55.30429 -73.70157,-67.16971 z"
|
||||
id="button1"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccc"
|
||||
inkscape:label="#path944" />
|
||||
<g
|
||||
style="display:inline"
|
||||
id="g1304"
|
||||
transform="translate(337.51617,-37.32483)">
|
||||
<ellipse
|
||||
ry="1.9375004"
|
||||
rx="1.8137393"
|
||||
cy="614.46423"
|
||||
cx="-145.51083"
|
||||
id="ellipse1298"
|
||||
style="fill:#babdb6;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="Buttons"
|
||||
inkscape:label="Buttons"
|
||||
style="display:inline"
|
||||
transform="translate(-68.791597,9.994236)">
|
||||
<g
|
||||
id="button1-path"
|
||||
inkscape:label="#g131">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="M 242.94764,50.505764 H 477"
|
||||
id="path958"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect968"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="237"
|
||||
y="47.005764" />
|
||||
<rect
|
||||
inkscape:label="#rect867"
|
||||
style="color:#000000;text-align:start;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
id="button1-leader"
|
||||
width="1"
|
||||
height="1"
|
||||
x="477"
|
||||
y="50.005764" />
|
||||
</g>
|
||||
<g
|
||||
id="button0-path"
|
||||
inkscape:label="#g141">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path960"
|
||||
d="M 477,130.50576 H 161.34398"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
<rect
|
||||
y="127.00576"
|
||||
x="157"
|
||||
height="6.999999"
|
||||
width="6.999999"
|
||||
id="rect970"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
<rect
|
||||
inkscape:label="#rect871"
|
||||
style="color:#000000;text-align:start;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
id="button0-leader"
|
||||
width="1"
|
||||
height="1"
|
||||
x="477"
|
||||
y="130.00577" />
|
||||
</g>
|
||||
<g
|
||||
id="button4-path"
|
||||
inkscape:label="#g151">
|
||||
<path
|
||||
sodipodi:nodetypes="ccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path964"
|
||||
d="M 109.31232,181.51438 137.74787,210.44326 477,210.50576"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
<rect
|
||||
inkscape:label="#rect875"
|
||||
style="color:#000000;text-align:start;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
id="button4-leader"
|
||||
width="1"
|
||||
height="1"
|
||||
x="477"
|
||||
y="210.00577" />
|
||||
<rect
|
||||
y="177"
|
||||
x="105"
|
||||
height="6.999999"
|
||||
width="6.999999"
|
||||
id="rect974"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
</g>
|
||||
<g
|
||||
id="button2-path"
|
||||
inkscape:label="#g136">
|
||||
<rect
|
||||
inkscape:label="#rect869"
|
||||
y="90.00576"
|
||||
x="477"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button2-leader"
|
||||
style="color:#000000;text-align:start;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round" />
|
||||
<path
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 195.97852,108.49147 17.9857,-17.98571 H 477"
|
||||
id="path908"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccc" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect910"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="194"
|
||||
y="104" />
|
||||
</g>
|
||||
<g
|
||||
id="button3-path"
|
||||
inkscape:label="#g156">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="M 114.17805,250.50576 H 477"
|
||||
id="path966"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect976"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="108"
|
||||
y="247.00577" />
|
||||
<rect
|
||||
y="250.00575"
|
||||
x="477"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button3-leader"
|
||||
style="color:#000000;text-align:start;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect875" />
|
||||
</g>
|
||||
<g
|
||||
id="button5-path"
|
||||
inkscape:label="#g146"
|
||||
transform="translate(0,-6)">
|
||||
<path
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="M 476.55132,170.50615 H 193.34398"
|
||||
id="path51"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect53"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="189"
|
||||
y="167" />
|
||||
<rect
|
||||
y="170"
|
||||
x="477"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button5-leader"
|
||||
style="color:#000000;text-align:start;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect871" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="LEDs"
|
||||
inkscape:label="LEDs"
|
||||
style="display:inline"
|
||||
transform="translate(-68.791597,9.994236)" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 18 KiB |
1
data/gnome/logitech-g703.svg
Symbolic link
@@ -0,0 +1 @@
|
||||
logitech-g403.svg
|
||||
509
data/gnome/logitech-g9.svg
Normal file
@@ -0,0 +1,509 @@
|
||||
<?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"
|
||||
width="490"
|
||||
height="490"
|
||||
viewBox="0 0 129.64583 129.64583"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
sodipodi:docname="logitech-g9.svg"
|
||||
inkscape:version="0.92.3 (2405546, 2018-03-11)"
|
||||
enable-background="new">
|
||||
<defs
|
||||
id="defs2">
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath145">
|
||||
<rect
|
||||
id="rect147"
|
||||
width="82.020836"
|
||||
height="120.65"
|
||||
x="20.902082"
|
||||
y="3.174999"
|
||||
style="stroke-width:0.26458332" />
|
||||
</clipPath>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="8.0000004"
|
||||
inkscape:cx="264.58829"
|
||||
inkscape:cy="370.72481"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="Device"
|
||||
inkscape:document-rotation="0"
|
||||
showgrid="false"
|
||||
showguides="true"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1016"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="27"
|
||||
inkscape:window-maximized="1"
|
||||
showborder="true"
|
||||
inkscape:guide-bbox="true"
|
||||
units="px"
|
||||
inkscape:snap-global="false"
|
||||
inkscape:measure-start="296.875,398.125"
|
||||
inkscape:measure-end="288.375,379.75">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid78" />
|
||||
<sodipodi:guide
|
||||
position="58.722772,112.40709"
|
||||
orientation="0,1"
|
||||
id="guide79"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="39.611923,100.54373"
|
||||
orientation="0,1"
|
||||
id="guide81"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="-0.18708866,88.492936"
|
||||
orientation="0,1"
|
||||
id="guide83"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="13.758333,76.993746"
|
||||
orientation="0,1"
|
||||
id="guide85"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="45.047078,64.795712"
|
||||
orientation="0,1"
|
||||
inkscape:locked="false"
|
||||
id="guide87" />
|
||||
<sodipodi:guide
|
||||
position="57.646696,52.899321"
|
||||
orientation="0,1"
|
||||
id="guide89"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="64.822916,108.74375"
|
||||
orientation="1,0"
|
||||
id="guide141"
|
||||
inkscape:locked="false" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata5">
|
||||
<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>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="Device"
|
||||
inkscape:label="Device"
|
||||
style="display:inline;opacity:1"
|
||||
transform="translate(0,-167.35416)">
|
||||
<path
|
||||
style="fill:#d3d3ce;fill-opacity:1;stroke:#babdb6;stroke-width:0.98636663;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 94.675437,179.69604 c 3.984039,23.55769 3.665039,48.23792 2.691228,71.79562 -2.08441,12.87379 -9.220213,24.06379 -17.197916,34.13125 -5.788734,2.89177 -12.325823,4.09974 -19.05,5.02708 -6.713477,-0.22178 -12.6786,-0.44356 -19.579166,-2.91041 -7.729571,-8.24539 -13.148669,-16.741 -17.727083,-25.4 -0.02339,-1.79858 0,-5.84224 0,-8.20209 -1.45391,-5.19812 -2.159466,-9.36726 -2.116667,-15.875 3.006557,-20.49321 9.287166,-40.14452 13.977522,-59.88937 2.143416,-0.99154 2.603034,-1.14118 4.278728,-1.75854 8.680505,-0.97549 16.051389,-1.76389 24.077083,-2.64584 h 7.14375 z"
|
||||
id="path4643"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccccccccc" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="display:inline;opacity:0.72399998;fill:none;fill-opacity:0.39215686;stroke:#eeeeec;stroke-width:2.089679;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="logo"
|
||||
sodipodi:cx="62.113438"
|
||||
sodipodi:cy="277.58575"
|
||||
sodipodi:rx="3.7614744"
|
||||
sodipodi:ry="3.7614779"
|
||||
d="m 64.773202,274.92599 a 3.7614744,3.7614779 0 0 1 0,5.31953 3.7614744,3.7614779 0 0 1 -5.319528,0 3.7614744,3.7614779 0 0 1 -10e-7,-5.31953"
|
||||
sodipodi:start="5.4977871"
|
||||
sodipodi:end="3.9269907"
|
||||
sodipodi:open="true"
|
||||
sodipodi:arc-type="arc"
|
||||
inkscape:label="path" />
|
||||
<path
|
||||
style="fill:none;stroke:#babdb6;stroke-width:0.98636663;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 36.247916,178.59895 C 31.541511,203.86131 25.993208,228.84304 23.8125,254.66666"
|
||||
id="path4820"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<path
|
||||
style="fill:#eeeeec;fill-opacity:1;stroke:#babdb6;stroke-width:0.61647916;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 90.83155,179.22767 c 1.340802,7.60827 2.120337,15.21655 2.338607,22.82482 -0.06236,15.27891 -0.685992,30.65136 -2.15152,45.27546 -0.124725,1.27845 -0.997805,2.18271 -2.057974,2.71279 -9.011437,2.99341 -16.339078,5.7062 -27.595579,6.73519 -10.523737,-0.10917 -22.099849,-1.22387 -25.537604,-3.27405 -1.656483,-1.67598 -2.466318,-3.00581 -2.899876,-5.23849 -0.200352,-25.84328 2.343475,-44.91236 8.699625,-71.28078 7.577091,-0.93544 15.154181,-1.87089 22.731272,-2.80633 l 7.296459,0.0936 c 6.392197,1.6526 12.784393,3.30519 19.17659,4.95779 z"
|
||||
id="path4822"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccccccc" />
|
||||
<path
|
||||
style="fill:#d9dad7;fill-opacity:1;stroke:#babdb6;stroke-width:0.61647916;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 34.237226,219.26465 30.09955,-1.86805 -0.492771,5.00179 c -0.904262,2.26065 -1.153714,2.27624 -3.554685,3.55468 -3.25846,1.27844 -3.710591,1.10694 -7.249684,1.44994 -6.485741,0.3274 -12.971481,0.65481 -19.457222,0.98221 z"
|
||||
id="led0"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccc"
|
||||
inkscape:label="#path894" />
|
||||
<path
|
||||
style="fill:#d9dad7;fill-opacity:1;stroke:#babdb6;stroke-width:0.61647916;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 34.611402,214.21326 -0.467722,5.00462 16.18317,-1.07576 0.04677,-4.77076 z"
|
||||
id="button9"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:label="#path896" />
|
||||
<path
|
||||
style="fill:#d9dad7;fill-opacity:1;stroke:#babdb6;stroke-width:0.61647916;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 64.405272,212.43591 -14.066729,0.93544 0.02888,4.76741 13.98589,-0.84138 z"
|
||||
id="button8"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccc"
|
||||
inkscape:label="#path898" />
|
||||
<path
|
||||
style="fill:none;stroke:#babdb6;stroke-width:0.61647916;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 64.624478,173.96874 -0.264583,38.43073 z"
|
||||
id="path4589"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="display:inline;opacity:1;fill:#d9dad7;fill-opacity:1;stroke:#babdb6;stroke-width:0.6744734;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="button2"
|
||||
width="8.6420469"
|
||||
height="17.819014"
|
||||
x="64.999809"
|
||||
y="187.58092"
|
||||
ry="1.5417958"
|
||||
inkscape:label="#rect4615"
|
||||
rx="1.752861" />
|
||||
<path
|
||||
style="fill:#d9dad7;fill-opacity:1;stroke:#babdb6;stroke-width:0.61647916;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 24.274755,248.26339 c -0.124726,-9.60388 -0.342996,-10.78877 0.748354,-17.86696 0.576857,0.0935 1.153713,0.18709 1.73057,0.28063 -0.826308,5.86211 -1.652616,11.72422 -2.478924,17.58633 z"
|
||||
id="button3"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccc"
|
||||
inkscape:label="#path4606" />
|
||||
<path
|
||||
style="fill:#d9dad7;fill-opacity:1;stroke:#babdb6;stroke-width:0.61647916;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 27.104469,228.7594 c -0.561265,-0.0779 -1.122531,-0.15591 -1.683796,-0.23386 0.919852,-4.78635 2.120338,-8.77758 3.671614,-12.95589 -0.662606,4.39658 -1.325212,8.79317 -1.987818,13.18975 z"
|
||||
id="button4"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccc"
|
||||
inkscape:label="#path4608" />
|
||||
<path
|
||||
style="fill:#eeeeec;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 41.814318,177.35679 -6.781966,36.38874 28.764883,-1.68379 0.467722,-37.41774 z"
|
||||
id="button0"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:label="#path4610" />
|
||||
<path
|
||||
style="fill:#eeeeec;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 65.054426,174.53098 -0.09922,12.60078 9.128124,-0.0661 0.03307,18.88463 -9.293489,-0.13229 -0.03307,6.15156 27.78125,-0.85989 0.132291,-9.1612 -0.959114,-13.32838 -1.35599,-9.09506 -18.884635,-4.89479 z"
|
||||
id="button1"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:label="#path4612" />
|
||||
<path
|
||||
transform="translate(0,164.70833)"
|
||||
id="button6"
|
||||
d="m 62.980849,30.452818 a 0.06589785,0.06589785 0 0 0 -0.046,0.02066 l -1.13998,1.23145 a 0.06589785,0.06589785 0 0 0 0.002,0.09147 l 1.13947,1.139465 a 0.06589785,0.06589785 0 0 0 0.10697,-0.07338 l -0.50385,-1.113628 0.50488,-1.205093 a 0.06589785,0.06589785 0 0 0 -0.0636,-0.09095 z"
|
||||
style="display:inline;color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-width:0.25282338;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:label="#path1016" />
|
||||
<path
|
||||
transform="translate(0,164.70833)"
|
||||
id="button7"
|
||||
d="m 75.28463,30.433444 a 0.06589785,0.06589785 0 0 1 0.046,0.02066 l 1.13998,1.23145 a 0.06589785,0.06589785 0 0 1 -0.002,0.09147 l -1.13947,1.139465 a 0.06589785,0.06589785 0 0 1 -0.10697,-0.07338 l 0.50385,-1.113628 -0.50488,-1.205093 a 0.06589785,0.06589785 0 0 1 0.0636,-0.09095 z"
|
||||
style="display:inline;color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-width:0.25282338;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:label="#path1016-3" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="Buttons"
|
||||
inkscape:label="Buttons"
|
||||
transform="translate(0,-2.6458338)"
|
||||
style="display:inline">
|
||||
<g
|
||||
transform="matrix(0.26458333,0,0,0.26458333,40.502648,-1.1017221)"
|
||||
style="display:inline"
|
||||
id="button2-path"
|
||||
inkscape:label="#g146">
|
||||
<path
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="M 336.91912,169.83277 147.21994,169.67013 109.21898,124.50618"
|
||||
id="path51"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccc" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect53"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="106.00334"
|
||||
y="120.59612" />
|
||||
<rect
|
||||
y="169.31075"
|
||||
x="336.56558"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button2-leader"
|
||||
style="color:#000000;text-align:start;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect871" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(-0.26458333,0,0,-0.26458333,116.08398,94.455601)"
|
||||
style="display:inline"
|
||||
id="button9-path"
|
||||
inkscape:label="#g146">
|
||||
<path
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="M 438.04598,191.7488 H 311.48839 l -34.64441,-29.86762"
|
||||
id="path51-1-9-6-8"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccc" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect53-2-3-2-7"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="273.625"
|
||||
y="158.5" />
|
||||
<rect
|
||||
y="191.3428"
|
||||
x="438.04599"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button9-leader"
|
||||
style="color:#000000;text-align:end;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect871" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(-0.29294531,0,0,0.26458333,70.284218,-46.390214)"
|
||||
style="display:inline"
|
||||
id="button0-path"
|
||||
inkscape:label="#g156">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 58.180682,250.50576 181.443538,0.0352"
|
||||
id="path966-9"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect976-8"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="55.471279"
|
||||
y="247.18254" />
|
||||
<rect
|
||||
y="250.00575"
|
||||
x="238.62422"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button0-leader"
|
||||
style="color:#000000;text-align:end;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect875" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.26458333,0,0,0.26458333,40.402294,-25.12739)"
|
||||
style="display:inline"
|
||||
id="button1-path"
|
||||
inkscape:label="#g146">
|
||||
<path
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 336.91912,170.14213 -189.57514,0.36405"
|
||||
id="path51-1"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect53-0"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="143.59541"
|
||||
y="166.59467" />
|
||||
<rect
|
||||
y="169.75269"
|
||||
x="336.91913"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button1-leader"
|
||||
style="color:#000000;text-align:start;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect871" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.26458333,0,0,0.26458333,13.573867,4.9859563)"
|
||||
style="display:inline"
|
||||
id="button8-path"
|
||||
inkscape:label="#g146">
|
||||
<path
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 438.04598,191.7488 -249.80759,-0.5 -23.58191,-19.43012"
|
||||
id="path51-1-9-6-8-4"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccc" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect53-2-3-2-7-4"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="161.75937"
|
||||
y="169.05698" />
|
||||
<rect
|
||||
y="191.3428"
|
||||
x="438.04599"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button8-leader"
|
||||
style="color:#000000;text-align:start;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect871" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(-0.26458333,0,0,-0.26458333,116.07548,106.30868)"
|
||||
style="display:inline"
|
||||
id="button4-path"
|
||||
inkscape:label="#g146">
|
||||
<path
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="M 438.04598,191.7488 H 359.48839 L 337.39512,173.19489"
|
||||
id="path51-1-9-6-8-7"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccc" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect53-2-3-2-7-6"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="333.90585"
|
||||
y="169.28337" />
|
||||
<rect
|
||||
y="191.3428"
|
||||
x="438.04599"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button4-leader"
|
||||
style="color:#000000;text-align:end;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect871" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(-0.26458333,0,0,-0.26458333,116.05287,118.29899)"
|
||||
style="display:inline"
|
||||
id="button3-path"
|
||||
inkscape:label="#g146">
|
||||
<path
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="M 438.04598,191.7488 H 359.48839 L 344.11263,179.02852"
|
||||
id="path51-1-9-6-8-7-7"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccc" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect53-2-3-2-7-6-5"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="340.26981"
|
||||
y="174.94023" />
|
||||
<rect
|
||||
y="191.3428"
|
||||
x="438.04599"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button3-leader"
|
||||
style="color:#000000;text-align:end;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect871" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(-0.29294531,0,0,0.26458333,70.05035,-34.688457)"
|
||||
style="display:inline"
|
||||
id="button6-path"
|
||||
inkscape:label="#g156">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 33.59277,251.21287 205.11339,-0.0974"
|
||||
id="path966-9-6"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect976-8-7"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="29.446411"
|
||||
y="247.53609" />
|
||||
<rect
|
||||
y="250.62447"
|
||||
x="238.5843"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button6-leader"
|
||||
style="color:#000000;text-align:end;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect875" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.26458333,0,0,0.26458333,40.372307,-13.288752)"
|
||||
style="display:inline"
|
||||
id="button7-path"
|
||||
inkscape:label="#g146">
|
||||
<path
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 336.91912,170.14213 -196.70014,0.23905"
|
||||
id="path51-1-6"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect53-0-7"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="137.97041"
|
||||
y="166.84467" />
|
||||
<rect
|
||||
y="169.75269"
|
||||
x="336.91913"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button7-leader"
|
||||
style="color:#000000;text-align:start;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect871" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="LEDs"
|
||||
inkscape:label="LEDs"
|
||||
transform="translate(0,-2.6458338)"
|
||||
style="display:inline">
|
||||
<g
|
||||
transform="matrix(0.26458333,0,0,0.26458333,13.592814,20.269951)"
|
||||
style="display:inline"
|
||||
id="led0-path"
|
||||
inkscape:label="#g146">
|
||||
<path
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 438.04598,178.25732 -267.54159,0.25 -31.41041,-32.75114"
|
||||
id="path51-1-9-6-0"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccc" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect53-2-3-2-2"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="135.77765"
|
||||
y="141.93933" />
|
||||
<rect
|
||||
y="177.79317"
|
||||
x="438.04599"
|
||||
height="1"
|
||||
width="1"
|
||||
id="led0-leader"
|
||||
style="color:#000000;text-align:start;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect871" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 26 KiB |
554
data/gnome/logitech-g900.svg
Normal file
@@ -0,0 +1,554 @@
|
||||
<?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"
|
||||
width="460"
|
||||
height="440"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.92+devel unknown"
|
||||
sodipodi:docname="logitech-g900.svg"
|
||||
viewBox="0 0 460 440">
|
||||
<style
|
||||
id="style5346" />
|
||||
<defs
|
||||
id="defs4" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="2.8284271"
|
||||
inkscape:cx="333.51156"
|
||||
inkscape:cy="187.93422"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="Device"
|
||||
showgrid="true"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:window-width="1853"
|
||||
inkscape:window-height="1016"
|
||||
inkscape:window-x="1507"
|
||||
inkscape:window-y="27"
|
||||
inkscape:window-maximized="1"
|
||||
units="px"
|
||||
fit-margin-top="20"
|
||||
fit-margin-left="-40"
|
||||
fit-margin-right="-40"
|
||||
fit-margin-bottom="20"
|
||||
inkscape:document-rotation="0"
|
||||
inkscape:pagecheckerboard="false">
|
||||
<sodipodi:guide
|
||||
orientation="0,1"
|
||||
position="-115.05694,356.25"
|
||||
id="guide5340"
|
||||
inkscape:locked="false"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<sodipodi:guide
|
||||
orientation="0,1"
|
||||
position="-338.2349,318.75"
|
||||
id="guide5342"
|
||||
inkscape:locked="false"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<sodipodi:guide
|
||||
orientation="0,1"
|
||||
position="-411.98489,243.75"
|
||||
id="guide5344"
|
||||
inkscape:locked="false"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<sodipodi:guide
|
||||
orientation="0,1"
|
||||
position="-447.39711,281.25"
|
||||
id="guide5346"
|
||||
inkscape:locked="false"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<sodipodi:guide
|
||||
orientation="0,1"
|
||||
position="-458.85989,206.25"
|
||||
id="guide5348"
|
||||
inkscape:locked="false"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<sodipodi:guide
|
||||
orientation="0,1"
|
||||
position="-443.23489,168.75"
|
||||
id="guide5350"
|
||||
inkscape:locked="false"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid5352"
|
||||
empspacing="4"
|
||||
visible="true"
|
||||
enabled="true"
|
||||
snapvisiblegridlinesonly="true"
|
||||
originx="0"
|
||||
originy="0"
|
||||
spacingx="0.93749999"
|
||||
spacingy="0.93749999" />
|
||||
<sodipodi:guide
|
||||
orientation="0,1"
|
||||
position="-305.47013,131.25"
|
||||
id="guide5354"
|
||||
inkscape:locked="false"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<sodipodi:guide
|
||||
orientation="1,0"
|
||||
position="230,443.73334"
|
||||
id="guide3885"
|
||||
inkscape:locked="false"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<sodipodi:guide
|
||||
position="160,100"
|
||||
orientation="0,1"
|
||||
id="guide5247"
|
||||
inkscape:locked="false"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<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>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="Device"
|
||||
inkscape:label="Device"
|
||||
style="display:inline"
|
||||
transform="translate(0,2.6666495)">
|
||||
<path
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#babdb6;stroke-width:1.875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
|
||||
d="m 321.875,220.80227 -17.8125,-0.9375 10.3125,-93.75 c 7.5,33.75 8.4375,56.71875 7.5,94.6875 z"
|
||||
id="button6"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccc" />
|
||||
<path
|
||||
sodipodi:nodetypes="cccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="button4"
|
||||
d="m 137.20625,220.80227 17.8125,-0.9375 -10.3125,-93.75 c -7.5,33.75 -8.4375,56.71875 -7.5,94.6875 z"
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#babdb6;stroke-width:1.875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
|
||||
<path
|
||||
id="path3894"
|
||||
style="display:inline;fill:#d3d3ce;fill-opacity:1;stroke:#babdb6;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 145.625,141.11478 c 0,0 -3.75,59.99999 0,84.37499 3.75,24.375 -9.375,25.82353 -9.375,61.875 0,67.5 39.375,116.25001 93.75,116.25 54.375,0 93.75,-48.75 93.75,-116.25 0,-36.05147 -13.125,-33.75 -9.375,-61.875 3.75,-28.125 0,-84.37499 0,-84.37499"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="czszszc" />
|
||||
<path
|
||||
id="path3891"
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#d9dad7;fill-opacity:1;fill-rule:nonzero;stroke:#babdb6;stroke-width:1.875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
|
||||
d="m 254.375,134.55227 22.5,49.21875 -17.8125,46.40625 c -1.65577,5.51921 -10.3125,15 -16.875,15 h -24.375 c -6.5625,0 -15.21923,-9.48079 -16.875,-15 l -17.8125,-46.40625 22.5,-49.21875"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccssccc" />
|
||||
<path
|
||||
id="path3887"
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#d3d3ce;fill-opacity:1;fill-rule:nonzero;stroke:#babdb6;stroke-width:1.875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
|
||||
d="m 220.625,231.11477 c -3.75,0 -5.82083,-5.76156 -8.4375,-15.9375 l -8.4375,-32.8125 c -0.9643,-3.75 -1.17686,-11.25 -0.9375,-15 L 211.25,35.177274 c 0.29859,-4.678 0.9375,-4.6875 2.8125,-4.6875 1.875,0 1.875,1.875 1.875,1.875 h 28.125 c 0,0 0,-1.875 1.875,-1.875 1.875,-1e-6 2.5139,0.0095 2.8125,4.6875 l 8.4375,132.187496 c 0.23936,3.75 0.0268,11.25 -0.9375,15 l -8.4375,32.8125 c -2.61667,10.17593 -4.6875,15.9375 -8.4375,15.9375 z"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ssssszcczssssss" />
|
||||
<path
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:#babdb6;stroke-width:1.875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
|
||||
d="m 248.75,36.114773 h 5.625 l 43.125,30 c 2.8125,1.956522 3.99101,3.729263 5.625,7.5 l 12.1875,28.124997 c 1.625,3.75 2.01562,9.375 1.875,13.125 l -2.8125,75 -3.75,3.75 -7.5,30 -41.25,-7.5 5.625,-28.125 c 1.125,-5.625 0.225,-9.375 -1.875,-15.9375 l -10.3125,-23.4375 z"
|
||||
id="button1"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccssssccccsscc" />
|
||||
<path
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#babdb6;stroke-width:1.875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
|
||||
d="m 320.9375,229.23977 -7.5,-0.9375 -15.9375,58.125 c -0.77117,2.8125 -1.53214,6.12475 0,6.5625 2.01565,0.57591 4.42284,-1.09513 5.625,-2.8125 l 6.5625,-9.375 c 1.6522,-2.3603 3.09783,-5.625 3.75,-9.375 z"
|
||||
id="button5"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccsssssc" />
|
||||
<path
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#babdb6;stroke-width:1.875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
|
||||
d="m 232.8125,176.73977 v 7.5 c 0,1.875 0.36208,2.76945 0.9375,4.6875 l 2.8125,9.375 c 0.5625,1.875 0.92837,1.875 2.8125,1.875 h 0.9375 c 1.875,0 2.37981,0 2.8125,-1.875 l 2.8125,-12.1875 c 0.43118,-1.86846 0.9375,-3.75 0.9375,-5.625 v -3.75 c 0,-1.875 -0.9375,-2.8125 -2.8125,-2.8125 h -8.4375 c -1.875,0 -2.8125,0.9375 -2.8125,2.8125 z"
|
||||
id="button8"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="sssssssssssss" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccsssssc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="button3"
|
||||
d="m 139.0625,229.23977 7.5,-0.9375 15.9375,58.125 c 0.77117,2.8125 1.53214,6.12476 0,6.5625 -2.01565,0.57591 -4.42284,-1.09513 -5.625,-2.8125 l -6.5625,-9.375 c -1.6522,-2.36028 -3.08377,-5.62747 -3.75,-9.375 z"
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#babdb6;stroke-width:1.875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccssssccccsscc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="button0"
|
||||
d="m 211.25,36.114774 h -5.625 L 162.5,66.114773 c -2.8125,1.956522 -3.99101,3.729262 -5.625,7.5 l -12.1875,28.124997 c -1.625,3.75 -2.02163,9.37524 -1.875,13.12501 l 2.8125,74.99999 3.75,3.75 7.5,30 41.25,-7.5 -5.625,-28.125 c -1.125,-5.625 -0.25547,-9.38482 1.875,-15.9375 l 10.3125,-23.43749 z"
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:#babdb6;stroke-width:1.875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
|
||||
<path
|
||||
id="path4352"
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#babdb6;fill-opacity:1;stroke:none;stroke-width:9.375;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
|
||||
d="m 220.625,206.73977 c 1.875,0 2.68807,0.75516 2.8125,1.875 l 1.875,16.875 c 0.10424,0.93821 0,1.875 -0.9375,1.875 -1.875,0 -2.48162,-0.9375 -2.8125,-2.8125 l -2.8125,-15.9375 c -0.19581,-1.10959 0,-1.875 1.875,-1.875 z m 18.75,0 c -1.875,0 -2.68808,0.75516 -2.8125,1.875 l -1.875,16.875 c -0.10424,0.93821 0,1.875 0.9375,1.875 1.875,0 2.48162,-0.9375 2.8125,-2.8125 l 2.8125,-15.9375 c 0.19581,-1.10959 0,-1.875 -1.875,-1.875 z m -7.5,18.75 0.9375,-16.875 c 0.049,-0.88251 0.0604,-1.875 -2.78231,-1.875 -2.84269,0 -2.89172,0.99249 -2.84269,1.875 l 0.9375,16.875 c 0.049,0.88253 0,1.875 1.90519,1.875 1.90518,0 1.79581,-0.99247 1.84481,-1.875 z"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="sssssssssssssscszsczc" />
|
||||
<path
|
||||
id="button2"
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#babdb6;stroke-width:1.875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
|
||||
d="m 236.5625,135.48978 c 2.8125,0 5.625,-2.8125 5.625,-5.625 V 79.239773 c 0,-2.8125 -2.8125,-5.625 -5.625,-5.625 h -13.125 c -2.8125,0 -5.625,2.8125 -5.625,5.625 v 50.625007 c 0,2.8125 2.8125,5.625 5.625,5.625 z"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="sssssssss" />
|
||||
<path
|
||||
id="path3927"
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:#babdb6;stroke-width:1.875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
|
||||
d="m 221.5625,142.98978 c -1.875,0 -2.70684,0.94013 -2.80606,2.81249 l -0.94394,17.81251 c -0.0992,1.87237 0.9375,2.81249 2.8125,2.81249 h 18.75 c 1.875,0 2.911,-0.94009 2.8125,-2.8125 l -0.9375,-17.8125 c -0.0985,-1.8724 -0.9375,-2.8125 -2.8125,-2.8125 z"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="sscsscsss" />
|
||||
<path
|
||||
sodipodi:nodetypes="sssssssssssss"
|
||||
inkscape:connector-curvature="0"
|
||||
id="button7"
|
||||
d="m 227.1875,176.73977 v 7.5 c 0,1.875 -0.36208,2.76945 -0.9375,4.6875 l -2.8125,9.375 c -0.5625,1.875 -0.92837,1.875 -2.8125,1.875 h -0.9375 c -1.875,0 -2.37981,0 -2.8125,-1.875 l -2.8125,-12.1875 c -0.43118,-1.86845 -0.9375,-3.75 -0.9375,-5.625 v -3.75 c 0,-1.875 0.9375,-2.8125 2.8125,-2.8125 h 8.4375 c 1.875,0 2.8125,0.9375 2.8125,2.8125 z"
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#babdb6;stroke-width:1.875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:none;fill-opacity:0.39215686;stroke:#babdb6;stroke-width:9.375;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="led0"
|
||||
sodipodi:cx="230"
|
||||
sodipodi:cy="317.36478"
|
||||
sodipodi:rx="16.875"
|
||||
sodipodi:ry="16.875002"
|
||||
d="m 241.93243,305.43235 a 16.875,16.875002 0 0 1 0,23.86485 16.875,16.875002 0 0 1 -23.86486,1e-5 16.875,16.875002 0 0 1 0,-23.86486"
|
||||
sodipodi:start="5.4977871"
|
||||
sodipodi:end="3.9269907"
|
||||
sodipodi:open="true"
|
||||
sodipodi:arc-type="arc" />
|
||||
<path
|
||||
style="opacity:1;vector-effect:none;fill:#babdb6;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:9.375;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 202,104 v 2 l -2,2 2,2 v 2 l -4,-4 z"
|
||||
id="button9"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccc"
|
||||
transform="translate(0,-2.6666495)" />
|
||||
<path
|
||||
style="opacity:1;vector-effect:none;fill:#babdb6;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:9.375;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 258,104 v 2 l 2,2 -2,2 v 2 l 4,-4 z"
|
||||
id="button10"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccc"
|
||||
transform="translate(0,-2.6666495)" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="Buttons"
|
||||
inkscape:label="Buttons"
|
||||
style="display:inline">
|
||||
<g
|
||||
id="button0-path">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4699"
|
||||
d="M 180,99.999995 H 1"
|
||||
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<rect
|
||||
y="96.5"
|
||||
x="176.5"
|
||||
height="7"
|
||||
width="7"
|
||||
id="rect4744-7"
|
||||
style="display:inline;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" />
|
||||
<rect
|
||||
style="text-align:end;display:inline;fill:#888a85;fill-opacity:1;stroke:none;stroke-width:0.99999994"
|
||||
id="button0-leader"
|
||||
width="1"
|
||||
height="1"
|
||||
x="-6.0989584e-07"
|
||||
y="99.5"
|
||||
inkscape:label="#rect5374" />
|
||||
</g>
|
||||
<g
|
||||
id="button9-path">
|
||||
<path
|
||||
sodipodi:nodetypes="ccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4697"
|
||||
d="m 212,108 -32,32 H 1"
|
||||
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<rect
|
||||
y="104.5"
|
||||
x="208.5"
|
||||
height="7"
|
||||
width="7"
|
||||
id="rect4744"
|
||||
style="display:inline;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" />
|
||||
<rect
|
||||
style="text-align:end;display:inline;fill:#888a85;fill-opacity:1;stroke:none;stroke-width:0.99999994"
|
||||
id="button9-leader"
|
||||
width="1"
|
||||
height="1"
|
||||
x="-6.0989584e-07"
|
||||
y="139.5"
|
||||
inkscape:label="#rect5374" />
|
||||
</g>
|
||||
<g
|
||||
id="button7-path">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4695"
|
||||
d="M 221,180 H 1"
|
||||
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<rect
|
||||
y="176.5"
|
||||
x="216.5"
|
||||
height="7"
|
||||
width="7"
|
||||
id="rect4744-0"
|
||||
style="display:inline;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" />
|
||||
<rect
|
||||
style="text-align:end;display:inline;fill:#888a85;fill-opacity:1;stroke:none;stroke-width:0.99999994"
|
||||
id="button7-leader"
|
||||
width="1"
|
||||
height="1"
|
||||
x="-6.0989584e-07"
|
||||
y="179.5"
|
||||
inkscape:label="#rect5374" />
|
||||
</g>
|
||||
<g
|
||||
id="button4-path">
|
||||
<path
|
||||
sodipodi:nodetypes="ccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4693"
|
||||
d="m 140,200 -20,20 H 1"
|
||||
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<rect
|
||||
y="196.5"
|
||||
x="136.5"
|
||||
height="7"
|
||||
width="7"
|
||||
id="rect4744-9"
|
||||
style="display:inline;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" />
|
||||
<rect
|
||||
style="text-align:end;display:inline;fill:#888a85;fill-opacity:1;stroke:none;stroke-width:0.99999994"
|
||||
id="button4-leader"
|
||||
width="1"
|
||||
height="1"
|
||||
x="-6.0989584e-07"
|
||||
y="219.5"
|
||||
inkscape:label="#rect5374" />
|
||||
</g>
|
||||
<g
|
||||
id="button3-path">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4691"
|
||||
d="M 148,260 H 1"
|
||||
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<rect
|
||||
y="256.5"
|
||||
x="144.5"
|
||||
height="7"
|
||||
width="7"
|
||||
id="rect4744-1"
|
||||
style="display:inline;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" />
|
||||
<rect
|
||||
style="text-align:end;display:inline;fill:#888a85;fill-opacity:1;stroke:none;stroke-width:0.99999994"
|
||||
id="button3-leader"
|
||||
width="1"
|
||||
height="1"
|
||||
x="-6.0989584e-07"
|
||||
y="259.5"
|
||||
inkscape:label="#rect5374" />
|
||||
</g>
|
||||
<g
|
||||
id="button5-path">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4711"
|
||||
d="M 312,260 H 459"
|
||||
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<rect
|
||||
y="256.5"
|
||||
x="308.5"
|
||||
height="7"
|
||||
width="7"
|
||||
id="rect4744-27"
|
||||
style="display:inline;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" />
|
||||
<rect
|
||||
style="text-align:start;display:inline;fill:#888a85;fill-opacity:1;stroke:none;stroke-width:0.99999994"
|
||||
id="button5-leader"
|
||||
width="1"
|
||||
height="1"
|
||||
x="459"
|
||||
y="259.5"
|
||||
inkscape:label="#rect5374" />
|
||||
</g>
|
||||
<g
|
||||
id="button6-path">
|
||||
<path
|
||||
sodipodi:nodetypes="ccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4709"
|
||||
d="m 320,200 20,20 h 119"
|
||||
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<rect
|
||||
y="196.5"
|
||||
x="316.5"
|
||||
height="7"
|
||||
width="7"
|
||||
id="rect4744-2"
|
||||
style="display:inline;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" />
|
||||
<rect
|
||||
style="text-align:start;display:inline;fill:#888a85;fill-opacity:1;stroke:none;stroke-width:0.99999994"
|
||||
id="button6-leader"
|
||||
width="1"
|
||||
height="1"
|
||||
x="459"
|
||||
y="219.5"
|
||||
inkscape:label="#rect5374" />
|
||||
</g>
|
||||
<g
|
||||
id="button8-path">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4707"
|
||||
d="M 240,180 H 459"
|
||||
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<rect
|
||||
y="176.5"
|
||||
x="236.5"
|
||||
height="7"
|
||||
width="7"
|
||||
id="rect4744-93"
|
||||
style="display:inline;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" />
|
||||
<rect
|
||||
style="text-align:start;display:inline;fill:#888a85;fill-opacity:1;stroke:none;stroke-width:0.99999994"
|
||||
id="button8-leader"
|
||||
width="1"
|
||||
height="1"
|
||||
x="459"
|
||||
y="179.5"
|
||||
inkscape:label="#rect5374" />
|
||||
</g>
|
||||
<g
|
||||
id="button10-path">
|
||||
<path
|
||||
sodipodi:nodetypes="ccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4701"
|
||||
d="m 248,108 32,32 h 179"
|
||||
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<rect
|
||||
y="104.5"
|
||||
x="244.5"
|
||||
height="7"
|
||||
width="7"
|
||||
id="rect4744-56"
|
||||
style="display:inline;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" />
|
||||
<rect
|
||||
style="text-align:start;display:inline;fill:#888a85;fill-opacity:1;stroke:none;stroke-width:0.99999994"
|
||||
id="button10-leader"
|
||||
width="1"
|
||||
height="1"
|
||||
x="459"
|
||||
y="139.5"
|
||||
inkscape:label="#rect5374" />
|
||||
</g>
|
||||
<g
|
||||
id="button1-path">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4703"
|
||||
d="M 280,99.999995 H 459"
|
||||
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<rect
|
||||
y="96.5"
|
||||
x="276.5"
|
||||
height="7"
|
||||
width="7"
|
||||
id="rect4744-3"
|
||||
style="display:inline;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" />
|
||||
<rect
|
||||
style="text-align:start;display:inline;fill:#888a85;fill-opacity:1;stroke:none;stroke-width:0.99999994"
|
||||
id="button1-leader"
|
||||
width="1"
|
||||
height="1"
|
||||
x="459"
|
||||
y="99.5"
|
||||
inkscape:label="#rect5374" />
|
||||
</g>
|
||||
<g
|
||||
id="button2-path">
|
||||
<path
|
||||
sodipodi:nodetypes="ccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4705"
|
||||
d="M 230,87.999999 258,59.999995 H 459"
|
||||
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<rect
|
||||
y="84.5"
|
||||
x="226.5"
|
||||
height="7"
|
||||
width="7"
|
||||
id="rect4744-5"
|
||||
style="display:inline;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" />
|
||||
<rect
|
||||
style="text-align:start;display:inline;fill:#888a85;fill-opacity:1;stroke:none;stroke-width:0.99999994"
|
||||
id="button2-leader"
|
||||
width="1"
|
||||
height="1"
|
||||
x="459"
|
||||
y="59.5"
|
||||
inkscape:label="#rect5374" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="LEDs"
|
||||
inkscape:label="LEDs">
|
||||
<g
|
||||
id="led0-path">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4705-0"
|
||||
d="m 230,320 229.375,0"
|
||||
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<rect
|
||||
style="text-align:start;display:inline;fill:#888a85;fill-opacity:1;stroke:none;stroke-width:0.99999994"
|
||||
id="led0-leader"
|
||||
width="1"
|
||||
height="1"
|
||||
x="459"
|
||||
y="319.5"
|
||||
inkscape:label="#rect5374" />
|
||||
<rect
|
||||
y="316.5"
|
||||
x="226.5"
|
||||
height="7"
|
||||
width="7"
|
||||
id="rect4744-5-3"
|
||||
style="display:inline;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 28 KiB |
349
data/gnome/logitech-mx-anywhere2.svg
Normal file
@@ -0,0 +1,349 @@
|
||||
<?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"
|
||||
version="1.1"
|
||||
id="svg942"
|
||||
width="450"
|
||||
height="450"
|
||||
viewBox="0 0 450 450.00001"
|
||||
sodipodi:docname="logitech-mx-anywhere2.svg"
|
||||
inkscape:version="0.92.2 2405546, 2018-03-11">
|
||||
<metadata
|
||||
id="metadata948">
|
||||
<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></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs946" />
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="3200"
|
||||
inkscape:window-height="1677"
|
||||
id="namedview944"
|
||||
showgrid="true"
|
||||
inkscape:object-paths="true"
|
||||
inkscape:object-nodes="false"
|
||||
inkscape:snap-intersection-paths="true"
|
||||
inkscape:zoom="5.6568542"
|
||||
inkscape:cx="132.29246"
|
||||
inkscape:cy="334.55769"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="Device"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
inkscape:snap-grids="false"
|
||||
inkscape:snap-to-guides="false"
|
||||
inkscape:snap-others="true"
|
||||
inkscape:snap-nodes="true"
|
||||
inkscape:snap-bbox="true"
|
||||
inkscape:snap-bbox-midpoints="true">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid880" />
|
||||
</sodipodi:namedview>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="Device"
|
||||
inkscape:label="Device"
|
||||
style="display:inline"
|
||||
transform="translate(0,321.03999)">
|
||||
<path
|
||||
style="opacity:1;vector-effect:none;fill:#d3d3ce;fill-opacity:1;fill-rule:evenodd;stroke:#babdb6;stroke-width:3.41371107px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 218.69405,-299.42426 c 23.35649,1.73474 46.18087,5.06587 68.35514,10.34733 23.75734,6.5434 34.95965,18.75684 40.44869,33.55046 14.75489,46.96997 14.92489,97.01791 12.09878,148.09014 -0.22053,69.160277 9.88471,151.952398 -41.25946,193.685563 C 257.44112,119.62007 184.10794,116.48359 139.99157,87.503464 100.63876,61.652557 96.65491,4.57244 95.843246,-38.897519 c -0.639505,-34.2499 -4.904947,-68.500891 -3.243152,-102.716411 1.744881,-35.9262 7.356301,-78.71605 13.841016,-107.01431 3.99526,-15.72475 12.19144,-29.89698 35.27502,-38.56736 23.0293,-5.08776 48.5148,-9.23085 76.97792,-12.22866 z"
|
||||
id="path958"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccassaccc" />
|
||||
<path
|
||||
style="display:inline;opacity:1;vector-effect:none;fill:#eeeeec;fill-opacity:1;fill-rule:evenodd;stroke:#babdb6;stroke-width:2.04822683;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 219.40508,-294.00752 67.6238,14.41163 c 10.27506,3.52994 19.61317,7.79609 21.7283,17.7374 34.47843,139.54316 2.38187,235.179053 -22.17174,337.675524 -2.70961,6.974963 -4.75518,14.198956 -16.6288,17.737404 -33.62713,9.347182 -67.25427,11.307342 -100.8814,0 C 159.63341,88.719872 154.6317,82.405292 150.45098,75.817034 125.18112,-36.599477 94.771098,-127.54074 128.50096,-260.97161 c 1.682,-10.88963 9.98626,-14.60515 18.62426,-17.95912 z"
|
||||
id="path970"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccccc" />
|
||||
<path
|
||||
style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#babdb6;stroke-width:2.38959765;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 191.52096,-288.19118 c 1.4779,64.07686 0.63073,131.09048 4.38208,189.294959 0.53834,8.352647 23.14409,12.010754 23.14409,12.010754 0,0 22.57181,-3.520747 23.2016,-11.833881 4.83394,-63.807432 1.5673,-125.647242 3.26713,-189.723552"
|
||||
id="path960"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cscsc" />
|
||||
<path
|
||||
style="display:inline;opacity:1;vector-effect:none;fill:#eeeeec;fill-opacity:1;fill-rule:evenodd;stroke:#babdb6;stroke-width:2.04822683;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="M 300.42159,70.944985 C 339.27478,43.967826 336.69108,-80.871179 335.23506,-108.90368 325.41759,-45.455804 296.49373,32.142014 300.42159,70.944985 Z"
|
||||
id="path974"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccc" />
|
||||
<path
|
||||
style="opacity:1;vector-effect:none;fill:#eeeeec;fill-opacity:1;fill-rule:evenodd;stroke:#babdb6;stroke-width:3.41371107px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 91.703995,-152.38566 c -7.529254,25.22562 -5.874086,43.32648 -5.814066,51.60811 l 5.653792,1.441169 z"
|
||||
id="button3"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccc"
|
||||
inkscape:label="" />
|
||||
<path
|
||||
style="display:inline;opacity:1;vector-effect:none;fill:#eeeeec;fill-opacity:1;fill-rule:evenodd;stroke:#babdb6;stroke-width:3.41371107px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 86.425202,-87.164219 c 1.984551,13.294118 0.345072,23.115228 8.757835,42.569729 l -2.771465,-46.006346 z"
|
||||
id="button4"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccc"
|
||||
inkscape:label="" />
|
||||
<path
|
||||
style="opacity:1;vector-effect:none;fill:#eeeeec;fill-opacity:1;fill-rule:evenodd;stroke:#babdb6;stroke-width:2.38959765;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="M 219.40508,-293.35803 V -87.543322"
|
||||
id="path1908"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<rect
|
||||
style="display:inline;opacity:1;vector-effect:none;fill:#d9dad7;fill-opacity:1;stroke:#babdb6;stroke-width:3.07234001;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill"
|
||||
id="rect972"
|
||||
width="10.198998"
|
||||
height="20.619715"
|
||||
x="214.33723"
|
||||
y="-122.47431"
|
||||
ry="5.0994992" />
|
||||
<rect
|
||||
style="display:inline;opacity:1;vector-effect:none;fill:#d9dad7;fill-opacity:1;stroke:#babdb6;stroke-width:3.07234001;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill"
|
||||
id="button2"
|
||||
width="23.3599"
|
||||
height="23.830233"
|
||||
x="207.57869"
|
||||
y="-163.18437"
|
||||
ry="4.7033353"
|
||||
inkscape:label="" />
|
||||
<rect
|
||||
style="display:inline;opacity:1;vector-effect:none;fill:#d9dad7;fill-opacity:1;stroke:#babdb6;stroke-width:3.07234001;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill"
|
||||
id="rect966"
|
||||
width="30.414902"
|
||||
height="60.202698"
|
||||
x="203.64337"
|
||||
y="-248.47151"
|
||||
ry="8.4660034" />
|
||||
<path
|
||||
style="opacity:1;vector-effect:none;fill:#eeeeec;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.04822683;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 136.54246,-257.72138 -16.3049,112.56651 63.0247,-0.6271 1.25422,-131.0663 z"
|
||||
id="button0"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:label="" />
|
||||
<path
|
||||
style="display:inline;opacity:1;vector-effect:none;fill:#eeeeec;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.04822683;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 299.43465,-259.28913 16.30489,112.56648 -63.0247,-0.6271 -1.25422,-131.0663 z"
|
||||
id="button1"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:label="" />
|
||||
<path
|
||||
style="display:inline;fill:none;fill-rule:evenodd;stroke:#babdb6;stroke-width:2.56880355px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
|
||||
d="m 199.80869,-221.82015 -3.90101,2.25227 3.90101,2.25225"
|
||||
id="button5"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:label="" />
|
||||
<path
|
||||
style="display:inline;fill:none;fill-rule:evenodd;stroke:#babdb6;stroke-width:2.56880355px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
|
||||
d="m 237.6341,-221.8517 3.90101,2.25227 -3.90101,2.25225"
|
||||
id="button6"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:label="" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="Buttons"
|
||||
inkscape:label="Buttons"
|
||||
transform="translate(0,321.03999)"
|
||||
style="display:inline">
|
||||
<g
|
||||
id="button5-path"
|
||||
inkscape:label="">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path884"
|
||||
d="m 198.00952,-210.78264 -29.43205,29.43205 H 0.35355339"
|
||||
style="display:inline;fill:none;fill-rule:evenodd;stroke:#888a85;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<rect
|
||||
inkscape:label=""
|
||||
y="-181.85059"
|
||||
x="0.10401335"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button5-leader"
|
||||
style="text-align:end;display:inline;opacity:1;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill" />
|
||||
<rect
|
||||
y="-214.28264"
|
||||
x="194.50952"
|
||||
height="7"
|
||||
width="7"
|
||||
id="rect2047"
|
||||
style="display:inline;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill" />
|
||||
</g>
|
||||
<g
|
||||
id="button3-path"
|
||||
inkscape:label="">
|
||||
<rect
|
||||
inkscape:label=""
|
||||
y="-125.62335"
|
||||
x="0.05242718"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button3-leader"
|
||||
style="text-align:end;display:inline;opacity:1;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path2119"
|
||||
d="M 80.53685,-125.12076 H 0.51959257"
|
||||
style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<rect
|
||||
y="-128.62076"
|
||||
x="77.03685"
|
||||
height="7"
|
||||
width="7"
|
||||
id="rect2047-9"
|
||||
style="display:inline;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill" />
|
||||
</g>
|
||||
<g
|
||||
id="button4-path"
|
||||
inkscape:label="">
|
||||
<rect
|
||||
inkscape:label=""
|
||||
y="-74.184525"
|
||||
x="0.0703125"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button4-leader"
|
||||
style="text-align:end;display:inline;opacity:1;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path2121"
|
||||
d="M 81.835831,-73.68108 H 0.51959257"
|
||||
style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<rect
|
||||
y="-77.181084"
|
||||
x="78.335831"
|
||||
height="7"
|
||||
width="7"
|
||||
id="rect2047-87"
|
||||
style="display:inline;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill" />
|
||||
</g>
|
||||
<g
|
||||
style="display:inline"
|
||||
id="button0-path"
|
||||
inkscape:label="">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path2117"
|
||||
d="M 154.83858,-230.33824 96.384414,-288.7924 H 0.51959257"
|
||||
style="display:inline;fill:none;fill-rule:evenodd;stroke:#888a85;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<rect
|
||||
inkscape:label=""
|
||||
y="-289.29233"
|
||||
x="0.25592589"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button0-leader"
|
||||
style="text-align:end;display:inline;opacity:1;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill" />
|
||||
<rect
|
||||
y="-233.83824"
|
||||
x="151.33858"
|
||||
height="7"
|
||||
width="7"
|
||||
id="rect2047-7"
|
||||
style="display:inline;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill" />
|
||||
</g>
|
||||
<g
|
||||
id="button1-path"
|
||||
inkscape:label="">
|
||||
<path
|
||||
sodipodi:nodetypes="ccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path2125"
|
||||
d="m 284.47693,-230.07844 55.72631,-55.72631 h 109.63402"
|
||||
style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<rect
|
||||
y="-233.57845"
|
||||
x="280.97693"
|
||||
height="7"
|
||||
width="7"
|
||||
id="rect2047-0"
|
||||
style="display:inline;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill" />
|
||||
<rect
|
||||
y="-286.3056"
|
||||
x="448.96484"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button1-leader"
|
||||
style="text-align:start;display:inline;opacity:1;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill"
|
||||
inkscape:label="" />
|
||||
</g>
|
||||
<g
|
||||
id="button2-path"
|
||||
inkscape:label="">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path2129"
|
||||
d="m 219.25864,-151.26926 42.56584,42.56585 h 187.62309"
|
||||
style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<rect
|
||||
y="-154.76926"
|
||||
x="215.75864"
|
||||
height="7"
|
||||
width="7"
|
||||
id="rect2047-08"
|
||||
style="display:inline;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill" />
|
||||
<rect
|
||||
inkscape:label=""
|
||||
y="-109.20406"
|
||||
x="448.96875"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button2-leader"
|
||||
style="text-align:start;display:inline;opacity:1;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill" />
|
||||
</g>
|
||||
<g
|
||||
id="button6-path"
|
||||
inkscape:label="">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path891"
|
||||
d="m 239.67007,-210.78999 29.97581,29.97581 h 180.25081"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#888a85;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<rect
|
||||
inkscape:label=""
|
||||
y="-181.31418"
|
||||
x="448.96875"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button6-leader"
|
||||
style="text-align:start;display:inline;opacity:1;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill" />
|
||||
<rect
|
||||
y="-214.28999"
|
||||
x="236.17007"
|
||||
height="7"
|
||||
width="7"
|
||||
id="rect2047-8"
|
||||
style="display:inline;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="LEDs"
|
||||
inkscape:label="LEDs"
|
||||
style="display:inline" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 18 KiB |
1
data/gnome/logitech-mx-anywhere2s.svg
Symbolic link
@@ -0,0 +1 @@
|
||||
logitech-mx-anywhere2.svg
|
||||
359
data/gnome/logitech-mx-master-2s.svg
Normal file
@@ -0,0 +1,359 @@
|
||||
<?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"
|
||||
width="485"
|
||||
height="445"
|
||||
viewBox="0 0 128.32296 117.73977"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
sodipodi:docname="logitech-mx-master-2s.svg"
|
||||
inkscape:version="0.92.3 (2405546, 2018-03-11)">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1.979899"
|
||||
inkscape:cx="189.95565"
|
||||
inkscape:cy="227.78986"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="Buttons"
|
||||
showgrid="true"
|
||||
inkscape:window-width="2560"
|
||||
inkscape:window-height="1376"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="27"
|
||||
inkscape:window-maximized="1"
|
||||
units="px"
|
||||
showguides="false"
|
||||
inkscape:snap-global="false">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid5521"
|
||||
spacingy="10.583333"
|
||||
spacingx="264583.33"
|
||||
originy="5.2916751" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata5">
|
||||
<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></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="Device"
|
||||
inkscape:label="Device"
|
||||
style="display:inline"
|
||||
transform="translate(0,-179.26022)">
|
||||
<path
|
||||
style="fill:#eeeeec;fill-opacity:1;stroke:#babdb6;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 19.866021,223.53772 c 0,0 -0.785103,0.71829 -2.204974,1.68714 -1.419868,0.96885 -3.558026,2.2885 -4.877667,3.35758 -1.319644,1.06907 -2.004523,2.37202 -2.622585,3.77518 -0.6180575,1.40317 -1.4031635,5.06142 -2.121448,9.92238 -0.718287,4.86097 -1.102486,9.43796 -1.2194155,13.69757 -0.11693,4.2596 -0.451017,4.79414 0.868623,8.76978 1.5191735,3.4768 3.2046955,4.45805 4.2429035,5.41221 1.085782,0.83521 6.965712,5.3955 11.72645,8.30206 4.760738,2.90655 11.225936,6.8707 14.699824,8.16842 1.860286,0.69493 2.586897,1.04147 4.032189,1.46211 1.219513,0.35492 2.417778,0.58726 4.971452,0.8765 4.324451,0.48981 9.010044,-0.72432 11.943604,-2.20498 2.83974,-1.63702 7.75082,-4.94448 11.04158,-8.70296 3.29075,-3.75848 4.17608,-4.69392 4.91107,-7.76752 0.73499,-3.0736 1.23612,-9.6217 1.11919,-15.31788 -0.11693,-5.69619 -0.7851,-13.64745 -1.41987,-18.67546 -0.63476,-5.02801 -1.26952,-7.684 -1.26952,-7.684"
|
||||
id="path5225"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="csccsscccsssccsscc" />
|
||||
<path
|
||||
sodipodi:nodetypes="cscssscsc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="button5"
|
||||
d="m 19.676541,228.60285 c 0,0 -5.707153,4.07215 -6.676005,5.10782 -0.968853,1.03567 -1.5368,2.70611 -1.703845,3.74178 -0.167042,1.03567 -1.169302,7.58377 -1.5702065,12.56167 -0.4009035,4.97789 -0.7015815,6.98241 -0.233862,9.32102 0.467722,2.33861 1.4365735,3.64155 2.2383825,4.30972 0.801809,0.66817 13.229842,9.2208 15.969354,10.7576 0.342743,-3.52158 1.597747,-7.89241 -0.165219,-10.5636 -4.912482,-7.44322 -8.870526,-19.92797 -7.858599,-35.23601 z"
|
||||
style="fill:#d3d3ce;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
inkscape:label="#path5657" />
|
||||
<path
|
||||
style="fill:#d3d3ce;fill-opacity:1;stroke:#babdb6;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 19.676541,228.60285 c 0,0 -5.707153,4.07215 -6.676005,5.10782 -0.968853,1.03567 -1.5368,2.70611 -1.703845,3.74178 -0.167042,1.03567 -1.169302,7.58377 -1.5702065,12.56167 -0.4009035,4.97789 -0.7015815,6.98241 -0.233862,9.32102 0.467722,2.33861 1.4365735,3.64155 2.2383825,4.30972 0.801809,0.66817 14.365737,9.78875 17.105249,11.32555 2.739514,1.5368 8.352173,4.57699 12.127356,5.34539 3.775181,0.7684 7.249684,1.20271 12.127357,0.93544 4.87767,-0.26727 11.35895,-4.00904 13.0962,-5.57925 1.73725,-1.57021 6.38106,-7.18287 7.38333,-10.08942 1.00226,-2.90656 1.77066,-11.42578 1.26952,-20.21226 -0.50113,-8.78649 -1.06907,-15.30119 -1.1693,-16.5039 -0.10022,-1.20271 -0.0334,-7.58377 -0.93544,-18.40819 -0.90204,-10.82441 -1.36976,-11.99372 -2.20498,-14.26551 -0.83522,-2.27179 -7.85104,-5.47902 -11.22532,-6.84878 -3.37427,-1.36976 -9.585632,-3.70469 -11.541371,-3.84016 -1.955737,-0.13547 -8.938152,2.40359 -11.944935,3.77334 -3.006783,1.36976 -8.073472,4.0577 -8.073472,4.0577 -4.468114,9.08817 -5.960983,22.63921 -8.068658,35.26804 z"
|
||||
id="path78"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cscssssssscccsscsscc" />
|
||||
<rect
|
||||
id="button6"
|
||||
width="5.315289"
|
||||
height="5.3152866"
|
||||
x="45.235897"
|
||||
y="221.81316"
|
||||
style="opacity:1;vector-effect:none;fill:#d3d3ce;fill-opacity:1;stroke:#babdb6;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
rx="0.69999999"
|
||||
ry="0.69999999"
|
||||
inkscape:label="#rect5215" />
|
||||
<rect
|
||||
style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#babdb6;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="button2"
|
||||
width="7.0870538"
|
||||
height="14.552083"
|
||||
x="44.220081"
|
||||
y="199.01646"
|
||||
rx="0.70000017"
|
||||
ry="0.70000017"
|
||||
inkscape:label="#rect5217" />
|
||||
<path
|
||||
id="button0"
|
||||
style="fill:#d3d3ce;fill-opacity:1;stroke:#babdb6;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 47.762508,195.6666 c -1.892311,0.0167 -3.873176,0.0377 -4.226442,0.0417 -0.709932,0.008 -1.720551,0.96885 -1.737251,1.72054 -0.0141,0.63483 -0.159624,28.13451 -0.171424,28.86684 -0.01181,0.73233 -0.563567,1.23439 -0.747315,1.40144 -0.183748,0.16704 -17.283331,6.12265 -17.708555,6.24077 -0.425221,0.11811 -0.761454,0.3511 -1.039434,-0.40751 -0.347226,-0.94758 -0.07087,-7.39416 0.87407,-17.9775 0.944941,-10.58333 4.739037,-22.21806 4.739037,-22.21806 0,0 5.066694,-2.68795 8.073477,-4.05771 3.006783,-1.36975 9.989198,-3.90881 11.944936,-3.77211 z"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccscccc"
|
||||
inkscape:label="#path5627" />
|
||||
<path
|
||||
id="button1"
|
||||
style="fill:#d3d3ce;fill-opacity:1;stroke:#babdb6;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 47.763608,185.50377 v 10.08368 m -0.01842,0.0784 c 1.690105,-0.0156 3.321588,-0.0284 3.692045,-0.0244 0.944073,0.0103 2.438833,1.06072 2.488943,2.38872 0.0535,1.41886 0.18375,26.82718 0.23387,27.92966 0.0501,1.10249 0.14727,1.2276 0.71424,1.66464 0.56696,0.43703 13.97331,5.5279 14.74107,5.65783 0.76776,0.12993 0.88588,-0.14174 0.95675,-0.68508 0.0709,-0.54334 0.50944,-11.58187 0.27558,-14.7557 -0.23387,-3.17383 -1.089962,-16.77534 -2.799869,-24.09699 -2.565285,-1.75722 -6.479518,-3.48182 -8.74284,-4.4006 -3.37427,-1.36976 -9.585632,-3.70469 -11.541371,-3.84016"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccsccccc"
|
||||
inkscape:label="#path5631" />
|
||||
<path
|
||||
style="opacity:1;vector-effect:none;fill:#d3d3ce;fill-opacity:1;stroke:#babdb6;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 24.70574,258.91885 c 0,0 -2.944259,-4.70523 -3.525604,-7.81361 0.07137,0.16032 1.142052,1.76828 1.374962,1.88086"
|
||||
id="button3"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccc"
|
||||
inkscape:label="#path5636" />
|
||||
<path
|
||||
style="opacity:1;vector-effect:none;fill:#d3d3ce;fill-opacity:1;stroke:#babdb6;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 20.347215,244.33435 c 0,0 0.503997,5.22172 0.804675,6.62488 0.300678,1.40317 1.186008,1.85418 1.186008,1.85418"
|
||||
id="button4"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccc"
|
||||
inkscape:label="#path5634" />
|
||||
<path
|
||||
style="opacity:1;vector-effect:none;fill:#eeeeec;fill-opacity:1;stroke:#babdb6;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 27.745199,193.33481 c 0,0 -1.681865,1.10395 -2.416856,2.12291 -0.734991,1.01897 -3.240643,8.4524 -4.510173,19.00955 -1.269531,10.55714 -0.985557,10.80771 -1.085783,14.51607 -0.100226,3.70837 0.06098,11.98844 0.627949,15.41385 0.566964,3.42541 2.69308,11.19754 4.086867,13.98512 1.393787,2.78757 2.944127,5.32102 3.061057,5.37113 0.116931,0.0501 0.175396,0.10858 0.400904,-0.0334 0.225509,-0.14198 1.03567,-0.92709 1.127544,-1.30294 0.09187,-0.37584 0.200452,-0.77675 0.04176,-1.17765 -0.158692,-0.40091 -2.029578,-3.25735 -2.38037,-4.14268 -0.350791,-0.88533 -2.15486,-4.86097 -2.873147,-8.4357 -0.718287,-3.57473 -1.503391,-7.51695 -1.753956,-9.83885 -0.250566,-2.32191 -0.183748,-4.09257 -0.183748,-5.04472 0,-0.95214 0.09187,-2.02958 0.09187,-2.02958 0.279608,-13.8572 2.014074,-26.7818 5.766082,-38.41311 z"
|
||||
id="path5223"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="csssccccccsssscc" />
|
||||
<g
|
||||
id="g1137"
|
||||
transform="translate(-3.6416254,5.291675)">
|
||||
<rect
|
||||
y="193.85353"
|
||||
x="48.915695"
|
||||
height="14.312759"
|
||||
width="1.8040693"
|
||||
id="rect1131"
|
||||
style="opacity:1;vector-effect:none;fill:#d3d3ce;fill-opacity:1;stroke:none;stroke-width:0.26502112px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<rect
|
||||
style="opacity:1;vector-effect:none;fill:#d3d3ce;fill-opacity:1;stroke:none;stroke-width:0.26502112px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect1133"
|
||||
width="1.8040693"
|
||||
height="14.312759"
|
||||
x="52.090698"
|
||||
y="193.85353" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="Buttons"
|
||||
inkscape:label="Buttons"
|
||||
transform="translate(0,-179.26022)">
|
||||
<g
|
||||
transform="matrix(0.26458333,0,0,0.26458333,2.1166624,183.016)"
|
||||
style="display:inline"
|
||||
id="button1-path"
|
||||
inkscape:label="#g131">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="M 242.94764,50.505764 H 477"
|
||||
id="path958"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect968"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="237"
|
||||
y="47.005764" />
|
||||
<rect
|
||||
inkscape:label="#rect867"
|
||||
style="color:#000000;text-align:start;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
id="button1-leader"
|
||||
width="1"
|
||||
height="1"
|
||||
x="477"
|
||||
y="50.005764" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:label="#g131"
|
||||
id="button6-path"
|
||||
style="display:inline"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,2.1166624,213.83995)">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path5469"
|
||||
d="M 173.32645,40.025431 193.47816,54.00578 H 477.59978"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
sodipodi:nodetypes="ccc" />
|
||||
<rect
|
||||
y="36.559353"
|
||||
x="169.85715"
|
||||
height="6.999999"
|
||||
width="6.999999"
|
||||
id="rect5471"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
<rect
|
||||
y="53.505779"
|
||||
x="477"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button6-leader"
|
||||
style="color:#000000;text-align:start;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect867" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.26458333,0,0,0.26458333,2.1166624,204.05037)"
|
||||
style="display:inline"
|
||||
id="button0-path"
|
||||
inkscape:label="#g131">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="M 132.23335,50.505764 H 477"
|
||||
id="path5477"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect5479"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="128.42857"
|
||||
y="47.005764" />
|
||||
<rect
|
||||
inkscape:label="#rect867"
|
||||
style="color:#000000;text-align:start;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
id="button0-leader"
|
||||
width="1"
|
||||
height="1"
|
||||
x="477"
|
||||
y="50.005764" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:label="#g131"
|
||||
id="button2-path"
|
||||
style="display:inline"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,2.1166624,193.59933)">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path5485"
|
||||
d="M 168.43093,50.505764 H 477"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:0.94604886;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<rect
|
||||
y="47.005764"
|
||||
x="167.35715"
|
||||
height="6.999999"
|
||||
width="6.999999"
|
||||
id="rect5487"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
<rect
|
||||
y="50.005764"
|
||||
x="477"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button2-leader"
|
||||
style="color:#000000;text-align:start;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect867" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.26458333,0,0,0.26458333,2.1166624,225.21704)"
|
||||
style="display:inline"
|
||||
id="button5-path"
|
||||
inkscape:label="#g131">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1.17770362;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="M 55.283671,50.505764 H 477"
|
||||
id="path5493"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect5495"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="48.428574"
|
||||
y="47.005764" />
|
||||
<rect
|
||||
inkscape:label="#rect867"
|
||||
style="color:#000000;text-align:start;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
id="button5-leader"
|
||||
width="1"
|
||||
height="1"
|
||||
x="477"
|
||||
y="50.005764" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:label="#g131"
|
||||
id="button4-path"
|
||||
style="display:inline"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,2.1166624,235.80037)">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path5503"
|
||||
d="M 69.460332,50.505764 H 477"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1.13811326;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<rect
|
||||
y="47.005764"
|
||||
x="67.665703"
|
||||
height="6.999999"
|
||||
width="6.999999"
|
||||
id="rect5505"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
<rect
|
||||
y="50.005764"
|
||||
x="477"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button4-leader"
|
||||
style="color:#000000;text-align:start;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect867" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.26458333,0,0,0.26458333,2.1166624,246.3837)"
|
||||
style="display:inline"
|
||||
id="button3-path"
|
||||
inkscape:label="#g131">
|
||||
<path
|
||||
sodipodi:nodetypes="ccc"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1.12054801;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="M 78.817927,36.487907 105.14285,50.505764 H 477"
|
||||
id="path5513"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect5515"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="75.454132"
|
||||
y="33.075569" />
|
||||
<rect
|
||||
inkscape:label="#rect867"
|
||||
style="color:#000000;text-align:start;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
id="button3-leader"
|
||||
width="1"
|
||||
height="1"
|
||||
x="477"
|
||||
y="50.005764" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="LEDs"
|
||||
inkscape:label="LEDs"
|
||||
transform="translate(0,-14.552099)" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 21 KiB |
1
data/gnome/logitech-mx-master.svg
Symbolic link
@@ -0,0 +1 @@
|
||||
logitech-mx-master-2s.svg
|
||||
@@ -102,23 +102,28 @@
|
||||
<sodipodi:guide
|
||||
position="125.24434,292.81279"
|
||||
orientation="1,0"
|
||||
id="guide4350" />
|
||||
id="guide4350"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="232.01745,389.68642"
|
||||
orientation="0,1"
|
||||
id="guide4352" />
|
||||
id="guide4352"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="339.49769,179.67571"
|
||||
orientation="1,0"
|
||||
id="guide4354" />
|
||||
id="guide4354"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="262.42305,21.283798"
|
||||
orientation="0,1"
|
||||
id="guide4356" />
|
||||
id="guide4356"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="61.51829,157.33126"
|
||||
orientation="1,0"
|
||||
id="guide5867" />
|
||||
id="guide5867"
|
||||
inkscape:locked="false" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata5">
|
||||
@@ -128,7 +133,7 @@
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
@@ -193,7 +198,7 @@
|
||||
<path
|
||||
sodipodi:nodetypes="ccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="button9"
|
||||
id="button7"
|
||||
d="m 209.20722,524.3296 -0.65676,27.92859 -17.18836,0 -0.65677,-27.92859 z"
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#babdb6;stroke-width:1;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
inkscape:label="#path942" />
|
||||
@@ -201,7 +206,7 @@
|
||||
inkscape:label="#path942"
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#babdb6;stroke-width:1;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 208.41172,565.23341 -1.86126,32.17123 c -0.25984,4.4912 -1.83301,4.12045 -6.59419,4.12045 -4.76117,0 -6.33658,0.37088 -6.59417,-4.12045 l -1.94966,-31.99445 z"
|
||||
id="button10"
|
||||
id="button8"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cssscc" />
|
||||
<path
|
||||
@@ -220,7 +225,7 @@
|
||||
<path
|
||||
sodipodi:nodetypes="ccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="button11"
|
||||
id="button9"
|
||||
d="m 206.55097,441.9448 1.9995,15.20984 -17.18836,0 1.99948,-15.17859 z"
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#babdb6;stroke-width:1;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
inkscape:label="#path942" />
|
||||
@@ -258,11 +263,11 @@
|
||||
<g
|
||||
id="button1-path"
|
||||
inkscape:label="#g131"
|
||||
transform="translate(8,72)">
|
||||
transform="translate(8,111.99976)">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
sodipodi:nodetypes="ccc"
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 242.94764,50.505764 194.05236,0"
|
||||
d="M 221.19764,23.005764 248.71312,50.628685 437,50.505764"
|
||||
id="path958"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
@@ -270,8 +275,8 @@
|
||||
id="rect968"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="237"
|
||||
y="47.005764" />
|
||||
x="217.125"
|
||||
y="19.255764" />
|
||||
<rect
|
||||
inkscape:label="#rect867"
|
||||
style="color:#000000;text-align:start;overflow:visible;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
@@ -282,7 +287,7 @@
|
||||
y="50.005764" />
|
||||
</g>
|
||||
<g
|
||||
id="button11-path"
|
||||
id="button9-path"
|
||||
inkscape:label="#g141"
|
||||
transform="translate(8,-88)">
|
||||
<path
|
||||
@@ -303,7 +308,7 @@
|
||||
<rect
|
||||
inkscape:label="#rect871"
|
||||
style="color:#000000;text-align:start;overflow:visible;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
id="button11-leader"
|
||||
id="button9-leader"
|
||||
width="1"
|
||||
height="1"
|
||||
x="437"
|
||||
@@ -336,12 +341,12 @@
|
||||
y="92" />
|
||||
</g>
|
||||
<g
|
||||
id="button10-path"
|
||||
id="button8-path"
|
||||
inkscape:label="#g146"
|
||||
transform="translate(8,-8)">
|
||||
transform="matrix(1,0,0,-1,8,371.99953)">
|
||||
<path
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 436.55132,170.50615 -223.20734,0 -18.11371,18.15319"
|
||||
d="M 436.55132,170.50615 H 213.34398 l -18.11371,18.15319"
|
||||
id="path51"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccc" />
|
||||
@@ -357,14 +362,14 @@
|
||||
x="437"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button10-leader"
|
||||
id="button8-leader"
|
||||
style="color:#000000;text-align:start;overflow:visible;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect871" />
|
||||
</g>
|
||||
<g
|
||||
transform="translate(-72.0872,-77.953227)"
|
||||
style="display:inline"
|
||||
id="button9-path"
|
||||
id="button7-path"
|
||||
inkscape:label="#g191">
|
||||
<path
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
@@ -383,7 +388,7 @@
|
||||
<rect
|
||||
transform="scale(-1,-1)"
|
||||
style="color:#000000;text-align:end;overflow:visible;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
id="button9-leader"
|
||||
id="button7-leader"
|
||||
width="1"
|
||||
height="1"
|
||||
x="-37.168953"
|
||||
@@ -452,12 +457,12 @@
|
||||
inkscape:label="#g191"
|
||||
id="button0-path"
|
||||
style="display:inline"
|
||||
transform="translate(-72.0872,-137.95323)">
|
||||
transform="translate(-72.0872,-177.95275)">
|
||||
<path
|
||||
sodipodi:nodetypes="cccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="button0-line"
|
||||
d="m 37.16895,320.50027 59.327469,0 99.344411,-99.98695 26.85261,0"
|
||||
d="m 37.16895,320.50027 h 59.327469 l 99.344411,-99.98695 h 26.85261"
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
inkscape:label="#path5841" />
|
||||
<rect
|
||||
@@ -467,7 +472,7 @@
|
||||
width="6.999999"
|
||||
id="button0-rect"
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
transform="scale(-1,-1)"
|
||||
transform="scale(-1)"
|
||||
inkscape:label="#rect5843" />
|
||||
<rect
|
||||
inkscape:label="#rect873"
|
||||
@@ -477,7 +482,64 @@
|
||||
width="1"
|
||||
id="button0-leader"
|
||||
style="color:#000000;text-align:end;overflow:visible;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
transform="scale(-1,-1)" />
|
||||
transform="scale(-1)" />
|
||||
</g>
|
||||
<g
|
||||
transform="translate(-72.0872,-137.95275)"
|
||||
style="display:inline"
|
||||
id="button5-path"
|
||||
inkscape:label="#g191">
|
||||
<path
|
||||
inkscape:label="#path5841"
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 37.16895,320.50027 h 59.327469 l 88.152021,-88.86195 h 55.67"
|
||||
id="path85"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccc" />
|
||||
<rect
|
||||
inkscape:label="#rect5843"
|
||||
transform="scale(-1)"
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect87"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="-244.00287"
|
||||
y="-235.48463" />
|
||||
<rect
|
||||
transform="scale(-1)"
|
||||
style="color:#000000;text-align:end;overflow:visible;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
id="button5-leader"
|
||||
width="1"
|
||||
height="1"
|
||||
x="-37.168953"
|
||||
y="-321.00027"
|
||||
inkscape:label="#rect873" />
|
||||
</g>
|
||||
<g
|
||||
transform="translate(10.625,71.49976)"
|
||||
inkscape:label="#g131"
|
||||
id="button6-path">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path93"
|
||||
d="m 221.19764,23.005764 27.51548,27.622921 185.72362,-0.122921"
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
sodipodi:nodetypes="ccc" />
|
||||
<rect
|
||||
y="19.255764"
|
||||
x="217.125"
|
||||
height="6.999999"
|
||||
width="6.999999"
|
||||
id="rect95"
|
||||
style="color:#000000;overflow:visible;opacity:1;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
<rect
|
||||
y="50.005764"
|
||||
x="434.37524"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button6-leader"
|
||||
style="color:#000000;text-align:start;overflow:visible;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect867" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
|
||||
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 32 KiB |
285
data/gnome/steelseries-kinzu-v2.svg
Normal file
@@ -0,0 +1,285 @@
|
||||
<?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"
|
||||
width="490"
|
||||
height="490"
|
||||
viewBox="0 0 129.64583 129.64583"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
sodipodi:docname="steelseries-kinzu-v2.svg"
|
||||
inkscape:version="0.92.3 (2405546, 2018-03-11)">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="128"
|
||||
inkscape:cx="1.394717"
|
||||
inkscape:cy="334.40624"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="Buttons"
|
||||
inkscape:document-rotation="0"
|
||||
showgrid="false"
|
||||
showguides="false"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1163"
|
||||
inkscape:window-x="1920"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
showborder="true"
|
||||
inkscape:guide-bbox="true"
|
||||
units="px"
|
||||
inkscape:snap-global="false"
|
||||
inkscape:measure-start="0,0"
|
||||
inkscape:measure-end="0,0">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid78" />
|
||||
<sodipodi:guide
|
||||
position="58.722772,112.40709"
|
||||
orientation="0,1"
|
||||
id="guide79"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="39.611923,100.54373"
|
||||
orientation="0,1"
|
||||
id="guide81"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="51.756014,88.614617"
|
||||
orientation="0,1"
|
||||
id="guide83"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="57.778386,76.729167"
|
||||
orientation="0,1"
|
||||
id="guide85"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="45.047078,64.795712"
|
||||
orientation="0,1"
|
||||
inkscape:locked="false"
|
||||
id="guide87" />
|
||||
<sodipodi:guide
|
||||
position="57.646696,52.899321"
|
||||
orientation="0,1"
|
||||
id="guide89"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="64.732676,142.09384"
|
||||
orientation="1,0"
|
||||
id="guide913"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="-45.462545,31.805073"
|
||||
orientation="0,1"
|
||||
inkscape:locked="false"
|
||||
id="guide944" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata5">
|
||||
<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>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="Device"
|
||||
inkscape:label="Device"
|
||||
style="display:inline;opacity:1"
|
||||
transform="translate(0,-167.35416)">
|
||||
<path
|
||||
style="fill:#eeeeec;fill-opacity:1;fill-rule:evenodd;stroke:#babdb6;stroke-width:0.98636663;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 61.052601,173.57187 c -6.81302,0.0662 -11.972394,1.52136 -16.073435,3.37344 -2.88728,1.31189 -4.888218,3.54982 -6.680729,5.62239 -2.215885,3.43407 -2.38125,5.63618 -2.976562,8.86355 -0.919394,7.49385 -0.763027,14.47321 -0.79375,22.62187 -0.0441,2.92144 -0.104731,3.9908 -0.33073,6.28385 -0.132292,4.05143 -0.413412,7.82174 -0.79375,11.90625 l -0.859895,11.9724 -1.190625,16.27187 c -0.0248,0.94258 -10e-7,1.65364 0.198437,2.57969 0.171855,0.8399 0.352238,1.03153 0.463021,1.52135 0.595312,2.4033 0.529166,3.99631 1.785937,7.2099 2.116666,4.23333 3.604948,6.84609 6.746875,10.71562 3.858506,4.06797 6.928936,5.67685 11.575518,7.34219 4.293136,1.39044 7.919768,1.65835 12.633854,1.78594 0,0 8.340581,-0.39932 12.633718,-1.78976 4.646582,-1.66534 7.717012,-3.27422 11.575518,-7.34219 3.141927,-3.86953 4.630209,-6.48229 6.746875,-10.71562 1.256771,-3.21359 1.190625,-4.8066 1.785937,-7.2099 0.110783,-0.48982 0.291166,-0.68145 0.463021,-1.52135 0.198438,-0.92605 0.223237,-1.63711 0.198437,-2.57969 L 96.969648,244.2118 96.109753,232.2394 c -0.380338,-4.08451 -0.661458,-7.85482 -0.79375,-11.90625 -0.225999,-2.29305 -0.28663,-3.36241 -0.33073,-6.28385 -0.03072,-8.14866 0.125644,-15.12802 -0.79375,-22.62187 -0.595312,-3.22737 -0.760677,-5.42948 -2.976562,-8.86355 -1.792511,-2.07257 -3.793449,-4.3105 -6.680729,-5.62239 -4.101041,-1.85208 -9.260416,-3.30724 -16.073436,-3.37344"
|
||||
id="path926"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccccccccccccccccccccccccc" />
|
||||
<path
|
||||
style="fill:#eeeeec;fill-opacity:1;stroke:#babdb6;stroke-width:0.56091666;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 67.539008,213.39476 c 0.596076,-0.40461 0.976498,-1.09288 1.262849,-1.75395 0.59297,-1.36894 1.002146,-2.81668 1.345797,-4.2684 0.360294,-1.52203 0.585878,-3.07592 0.760677,-4.63021 0.233495,-2.07621 0.429791,-4.16174 0.463021,-6.25078 0.04814,-3.0267 0.02798,-6.06163 -0.219194,-9.0786 -0.12373,-1.51024 -0.256628,-3.03361 -0.631425,-4.50182 -0.572228,-2.24162 -1.647818,-4.33612 -2.198291,-6.58318 -0.216184,-0.88248 0.0049,-1.99996 -0.01156,-2.94772 -1.271665,3e-5 -4.766155,-0.0195 -7.137319,0.009 -0.0538,0.84704 0.04496,2.27487 -0.171222,3.15735 -0.550473,2.24706 -1.626063,4.34156 -2.198291,6.58318 -0.374797,1.46821 -0.507695,2.99158 -0.631425,4.50182 -0.247174,3.01697 -0.267336,6.0519 -0.219194,9.0786 0.03323,2.08904 0.229526,4.17457 0.463021,6.25078 0.174799,1.55428 0.400383,3.10818 0.760677,4.63021 0.343651,1.45172 0.752827,2.89946 1.345797,4.2684 0.286351,0.66107 0.666773,1.34934 1.262849,1.75395 0.754658,0.51225 1.678069,0.76673 2.876621,0.7559 1.213084,-0.011 2.121964,-0.46243 2.876622,-0.97468 z"
|
||||
id="path67"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cssssassccssasssssssc" />
|
||||
<rect
|
||||
style="display:inline;opacity:1;fill:#d9dad7;fill-opacity:1;stroke:#babdb6;stroke-width:0.56091666;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="button2"
|
||||
width="7.9137998"
|
||||
height="13.453473"
|
||||
x="60.725685"
|
||||
y="182.47507"
|
||||
ry="3.5612154"
|
||||
inkscape:label="#rect4615" />
|
||||
<path
|
||||
style="fill:#d9dad7;fill-opacity:1;stroke:#babdb6;stroke-width:0.52916664;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 63.166987,210.17431 c 0.413327,0.85333 0.912893,2.12412 1.659236,2.12129 0.787332,-0.0468 1.235565,-1.13423 1.730571,-2.10475 0.963186,-2.27407 1.866349,-4.95232 2.011204,-7.01582 -0.04511,-0.75357 -0.133324,-0.96262 -0.841899,-1.16931 H 62.16021 c -0.833415,0.11951 -1.319565,0.66897 -1.309621,1.44994 0.120828,1.81242 1.213354,4.50867 2.316398,6.71865 z"
|
||||
id="button3"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccc"
|
||||
inkscape:label="#path914" />
|
||||
<path
|
||||
style="fill:#d9dad7;fill-opacity:1;stroke:#babdb6;stroke-width:0.56091666;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 95.299608,220.25429 c 0,0 -2.993099,22.36809 -2.993099,33.61862 0,1.85752 0.06615,2.789 0.06615,4.72943 0,2.7249 -0.02687,3.50461 0.644922,5.02708 0.260631,0.59067 1.072687,1.52327 2.133203,1.88516 1.196295,0.23151 2.146396,-0.87485 2.844271,-2.0836 0.05512,-1.02526 0.110243,-2.05052 0.165364,-3.07578 z"
|
||||
id="path927"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cssscccc" />
|
||||
<path
|
||||
style="fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 74.015046,179.00533 c -0.3698,5.3513 -0.7396,10.70261 -1.1094,16.05391 5.64679,2.60869 11.29357,5.21739 16.94036,7.82608 0.15918,-3.6955 0.31835,-7.391 0.47753,-11.0865 -1.11745,-3.10672 -2.2349,-6.21344 -3.35235,-9.32016 -4.31871,-1.15778 -8.63743,-2.31555 -12.95614,-3.47333 z"
|
||||
id="button1"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:label="#path4486"
|
||||
sodipodi:nodetypes="cccccc" />
|
||||
<path
|
||||
style="fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 43.711955,183.42729 c -1.214,2.83542 -2.428,5.67083 -3.642,8.50625 0.367,3.65063 0.734,7.30126 1.101,10.95189 5.40711,-2.5672 10.81422,-5.13439 16.22133,-7.70159 -0.30702,-5.36162 -0.61405,-10.72324 -0.92107,-16.08486 -4.25309,1.44277 -8.50617,2.88554 -12.75926,4.32831 z"
|
||||
id="button0"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:label="#path3664"
|
||||
sodipodi:nodetypes="cccccc" />
|
||||
<path
|
||||
style="display:inline;opacity:1;fill:#d9dad7;fill-opacity:1;stroke:#babdb6;stroke-width:0.56091666;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 34.320498,219.97553 c 0,0 2.9931,22.36809 2.9931,33.61862 0,1.85752 -0.0661,2.789 -0.0661,4.72943 0,2.7249 0.0269,3.50461 -0.64492,5.02708 -0.26064,0.59067 -1.07269,1.52327 -2.13321,1.88516 -1.19629,0.23151 -2.146392,-0.87485 -2.844272,-2.0836 -0.0551,-1.02526 -0.11024,-2.05052 -0.16536,-3.07578 z"
|
||||
id="path927-7"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cssscccc" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="Buttons"
|
||||
inkscape:label="Buttons"
|
||||
transform="translate(0,-2.6458338)"
|
||||
style="display:inline">
|
||||
<g
|
||||
transform="matrix(-0.29294531,0,0,0.26458333,70.19679,-40.717196)"
|
||||
style="display:inline"
|
||||
id="button0-path"
|
||||
inkscape:label="#g156">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 81.663449,250.50576 157.960771,0.0352"
|
||||
id="path966"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect976"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="79.083046"
|
||||
y="247.00577" />
|
||||
<rect
|
||||
y="250.00575"
|
||||
x="238.62422"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button0-leader"
|
||||
style="color:#000000;text-align:end;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect875" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.26458333,0,0,0.26458333,40.502648,-19.549003)"
|
||||
style="display:inline"
|
||||
id="button1-path"
|
||||
inkscape:label="#g146">
|
||||
<path
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 336.91912,170.14213 -183.57514,0.36405"
|
||||
id="path51"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect53"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="149"
|
||||
y="167" />
|
||||
<rect
|
||||
y="169.75269"
|
||||
x="336.91913"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button1-leader"
|
||||
style="color:#000000;text-align:start;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect871" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(-0.2847136,0,0,0.26458333,87.493539,-7.2646706)"
|
||||
style="display:inline;opacity:1"
|
||||
id="button2-path"
|
||||
inkscape:label="#g151">
|
||||
<path
|
||||
sodipodi:nodetypes="ccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path964-6"
|
||||
d="m 79.210952,122.6933 62.691188,68.76371 165.40155,1e-5"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
<rect
|
||||
inkscape:label="#rect875"
|
||||
style="color:#000000;text-align:end;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
id="button2-leader"
|
||||
width="1"
|
||||
height="1"
|
||||
x="306.40533"
|
||||
y="190.93378" />
|
||||
<rect
|
||||
y="117.94263"
|
||||
x="76.303352"
|
||||
height="6.999999"
|
||||
width="6.999999"
|
||||
id="rect974-5"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.26458333,0,0,0.26458333,13.746167,-3.2430852)"
|
||||
style="display:inline"
|
||||
id="button3-path"
|
||||
inkscape:label="#g146">
|
||||
<path
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="M 438.04598,178.25732 H 203.75439 l -10.41041,-7.75114"
|
||||
id="path51-1-9-6-0"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccc" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect53-2-3-2-2"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="189"
|
||||
y="167" />
|
||||
<rect
|
||||
y="177.79317"
|
||||
x="438.04599"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button3-leader"
|
||||
style="color:#000000;text-align:start;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect871" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="LEDs"
|
||||
inkscape:label="LEDs"
|
||||
transform="translate(0,-2.6458338)"
|
||||
style="display:none" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 15 KiB |
443
data/gnome/steelseries-rival.svg
Normal file
@@ -0,0 +1,443 @@
|
||||
<?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"
|
||||
width="490"
|
||||
height="490"
|
||||
viewBox="0 0 129.64583 129.64583"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
sodipodi:docname="steelseries-rival.svg"
|
||||
inkscape:version="0.92.2 (5c3e80d, 2017-08-06)">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1.4142136"
|
||||
inkscape:cx="78.639558"
|
||||
inkscape:cy="261.77819"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="Device"
|
||||
inkscape:document-rotation="0"
|
||||
showgrid="false"
|
||||
showguides="false"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1016"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="27"
|
||||
inkscape:window-maximized="1"
|
||||
showborder="true"
|
||||
inkscape:guide-bbox="true"
|
||||
units="px"
|
||||
inkscape:snap-global="false"
|
||||
inkscape:measure-start="241.5,424.5"
|
||||
inkscape:measure-end="193,423">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid78" />
|
||||
<sodipodi:guide
|
||||
position="58.722772,112.40709"
|
||||
orientation="0,1"
|
||||
id="guide79"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="39.611923,100.54373"
|
||||
orientation="0,1"
|
||||
id="guide81"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="51.756014,88.614617"
|
||||
orientation="0,1"
|
||||
id="guide83"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="57.778386,76.729167"
|
||||
orientation="0,1"
|
||||
id="guide85"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="45.047078,64.795712"
|
||||
orientation="0,1"
|
||||
inkscape:locked="false"
|
||||
id="guide87" />
|
||||
<sodipodi:guide
|
||||
position="57.646696,52.899321"
|
||||
orientation="0,1"
|
||||
id="guide89"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="64.031094,118.70775"
|
||||
orientation="1,0"
|
||||
id="guide996"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="76.729165,115.65599"
|
||||
orientation="1,0"
|
||||
id="guide4799"
|
||||
inkscape:locked="false" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata5">
|
||||
<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>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="Device"
|
||||
inkscape:label="Device"
|
||||
style="display:inline;opacity:1"
|
||||
transform="translate(0,-167.35416)">
|
||||
<path
|
||||
style="opacity:1;fill:#d3d3ce;fill-opacity:1;fill-rule:evenodd;stroke:#bfc2bb;stroke-width:0.98636663;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 40.966398,178.40384 c 10.128269,-6.06958 13.843202,-5.15315 22.125375,-5.36057 0.815799,-0.022 1.397736,-0.0441 2.213535,-0.0661 7.544908,0.008 16.804302,3.17239 21.130756,6.44865 1.422136,0.452 2.190922,3.57156 3.150036,8.42225 0.859896,4.92786 2.377355,23.3214 3.378944,30.28552 4.289427,17.445 6.148079,21.13233 5.839397,36.23562 0.08155,9.96062 -3.435205,16.37945 -6.88054,22.71347 -4.707536,5.80429 -6.249571,6.86442 -15.801399,10.09956 -7.805208,1.74184 -11.135198,2.13807 -18.278948,0.8372 -6.32795,-1.67569 -10.758421,-3.68269 -14.782617,-8.15118 -2.665941,-4.21879 -4.043454,-12.34041 -3.573015,-23.27668 0.83923,-20.53867 -3.23693,-47.28029 -3.417692,-53.41373 l 0.529166,-14.69573 c 0.23151,-6.33201 2.28507,-9.07943 4.367002,-10.07828 z"
|
||||
id="path882"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccccccccccc" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="display:inline;opacity:1;fill:none;fill-opacity:0.39215686;stroke:#babdb6;stroke-width:3.62082291;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="led0"
|
||||
sodipodi:cx="64.507607"
|
||||
sodipodi:cy="278.93338"
|
||||
sodipodi:rx="6.5174346"
|
||||
sodipodi:ry="6.5174408"
|
||||
d="m 69.116129,274.32485 a 6.5174346,6.5174408 0 0 1 0,9.21706 6.5174346,6.5174408 0 0 1 -9.217044,0 6.5174346,6.5174408 0 0 1 -10e-7,-9.21706"
|
||||
sodipodi:start="5.4977871"
|
||||
sodipodi:end="3.9269907"
|
||||
sodipodi:open="true"
|
||||
sodipodi:arc-type="arc"
|
||||
inkscape:label="#led1" />
|
||||
<path
|
||||
style="display:inline;opacity:1;fill:none;stroke:#babdb6;stroke-width:0.51011664;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 63.998032,175.33704 c -0.0617,17.18181 0,37.8177 0,37.8177 v 0"
|
||||
id="path4530-9"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccc" />
|
||||
<rect
|
||||
style="display:inline;opacity:1;fill:#eeeeec;fill-opacity:1;stroke:#bfc2bb;stroke-width:0.65934163;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="button2"
|
||||
width="8.6572962"
|
||||
height="16.992365"
|
||||
x="59.667027"
|
||||
y="183.8551"
|
||||
ry="1.5045637"
|
||||
inkscape:label="#rect4615"
|
||||
rx="2.8998742" />
|
||||
<rect
|
||||
style="display:inline;opacity:1;fill:#d3d3ce;fill-opacity:1;stroke:#bfc2bb;stroke-width:0.50999999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="button5"
|
||||
width="4.0773749"
|
||||
height="11.664907"
|
||||
x="61.934288"
|
||||
y="213.306"
|
||||
ry="0.74915975"
|
||||
inkscape:label="#rect4615"
|
||||
rx="0.63142258" />
|
||||
<path
|
||||
style="opacity:1;fill:#eeeeec;fill-opacity:1;fill-rule:evenodd;stroke:#bfc2bb;stroke-width:0.65934163;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 91.112176,226.98205 c -0.763945,13.64188 -1.430609,13.74737 0,20.39268 0.486529,2.25997 1.696179,5.2841 2.85379,6.32088 1.157611,1.03679 1.081149,0.34438 4.589061,0.89006 0.940243,-6.53749 -0.570931,-13.96226 -1.479399,-18.97414 -1.652616,-7.76419 -2.041209,-9.76648 -4.816357,-19.91603 -0.935218,-0.0567 -1.141827,10.22026 -1.147095,11.28655 z"
|
||||
id="path959"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cascccc" />
|
||||
<path
|
||||
style="opacity:1;fill:#d3d3ce;fill-opacity:1;fill-rule:evenodd;stroke:#bfc2bb;stroke-width:0.51011664;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 38.306404,179.27446 c 6.240372,-5.59743 15.089504,-6.58952 25.788485,-6.52355 0.06236,2.93106 -0.208006,8.1177 -0.145616,11.04875 -0.966626,0.0156 -1.617539,-0.0389 -2.677709,0.15206 -0.576857,0.12082 -1.668207,0.59244 -1.683798,1.44993 0.03118,4.73958 0.06237,9.47916 0.09355,14.21874 0.428974,0.80223 0.791803,1.0753 1.683798,1.21608 h 2.666014 c 0.09354,3.89768 -0.04677,7.79536 0.04677,11.69304 -1.777343,0.0624 -3.554686,0.12473 -5.332029,0.18709 -4.677216,3.30523 -9.354432,6.6104 -14.031648,9.91563 -1.948383,1.15278 -2.949891,1.59818 -7.302533,1.7394 -0.830377,-6.12609 -3.925564,-39.29473 0.894716,-45.09717 z"
|
||||
id="button0"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccccccccc"
|
||||
inkscape:label="#path971" />
|
||||
<path
|
||||
style="display:inline;opacity:1;fill:#d3d3ce;fill-opacity:1;fill-rule:evenodd;stroke:#bfc2bb;stroke-width:0.51011664;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 87.229344,179.65609 c -8.975635,-7.54404 -14.108253,-6.88035 -22.922173,-6.91425 -0.06236,2.93106 0.0077,8.08746 -0.05466,11.01851 0.966626,0.0156 1.617539,-0.0389 2.677709,0.15206 0.576857,0.12082 1.668207,0.59244 1.683798,1.44993 -0.03118,4.73958 -0.06237,9.47916 -0.09355,14.21874 -0.428974,0.80223 -0.791803,1.0753 -1.683798,1.21608 h -2.80633 c -0.09354,3.89768 0.187088,7.79536 0.09354,11.69304 1.777343,0.0624 3.554686,0.12473 5.332029,0.18709 4.677216,3.30523 9.050413,6.64971 13.72763,9.95494 2.182243,-0.0165 4.486808,-0.13974 7.992488,-0.15492 2.289604,-8.17688 -1.912326,-39.03947 -3.946687,-42.82126 z"
|
||||
id="button1"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccccccccc"
|
||||
inkscape:label="#path971-5" />
|
||||
<path
|
||||
style="opacity:1;fill:#d3d3ce;fill-opacity:1;fill-rule:evenodd;stroke:#bfc2bb;stroke-width:0.51011664;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 39.533701,248.31208 c 0.08789,-9.75637 -0.210156,-12.40005 -1.249267,-23.97153 -0.755908,0.011 0.02246,0.0448 -1.253567,0.0612 l 1.730229,23.94557 c 0.618261,-0.0306 -0.0064,-0.0352 0.772605,-0.0352 z"
|
||||
id="button3"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccc"
|
||||
inkscape:label="#path998" />
|
||||
<path
|
||||
style="opacity:1;fill:#d3d3ce;fill-opacity:1;fill-rule:evenodd;stroke:#bfc2bb;stroke-width:0.51011664;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 38.039569,223.41713 -1.173721,-0.46275 -1.223702,-11.3646 0.83829,-1.79053 z"
|
||||
id="button4"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccc"
|
||||
inkscape:label="#path1000" />
|
||||
<g
|
||||
id="g27"
|
||||
inkscape:label="#g84"
|
||||
style="opacity:1">
|
||||
<path
|
||||
inkscape:label="#path42"
|
||||
inkscape:connector-curvature="0"
|
||||
id="led1"
|
||||
d="m 60.202463,185.20746 c 0,14.31228 0,14.31228 0,14.31228"
|
||||
style="fill:#c8c8c8;fill-opacity:1;stroke:#babdb6;stroke-width:0.23228861px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:label="#path42"
|
||||
inkscape:connector-curvature="0"
|
||||
id="led0-3"
|
||||
d="m 67.749483,185.21452 c 0,14.31228 0,14.31228 0,14.31228"
|
||||
style="display:inline;opacity:1;fill:#c8c8c8;fill-opacity:1;stroke:#babdb6;stroke-width:0.23228861px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
</g>
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#bfc2bb;stroke-width:0.50999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
d="m 63.937548,224.94747 v 9.40121"
|
||||
id="path951"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cc" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="Buttons"
|
||||
inkscape:label="Buttons"
|
||||
transform="translate(0,-2.6458338)"
|
||||
style="display:inline">
|
||||
<g
|
||||
transform="matrix(-0.29294531,0,0,0.26458333,70.19679,-46.28282)"
|
||||
style="display:inline"
|
||||
id="button0-path"
|
||||
inkscape:label="#g156">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 69.018882,250.50576 170.100828,0.008"
|
||||
id="path966"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect976"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="65.211685"
|
||||
y="247.25577" />
|
||||
<rect
|
||||
y="250.01747"
|
||||
x="238.66302"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button0-leader"
|
||||
style="color:#000000;text-align:end;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect875" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.26458333,0,0,0.26458333,40.502648,-25.152234)"
|
||||
style="display:inline"
|
||||
id="button1-path"
|
||||
inkscape:label="#g146">
|
||||
<path
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 336.41912,170.11088 -197.26264,0.0828"
|
||||
id="path51"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect53"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="137"
|
||||
y="166.75" />
|
||||
<rect
|
||||
y="169.61206"
|
||||
x="335.92694"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button1-leader"
|
||||
style="color:#000000;text-align:start;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect871" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.26458333,0,0,0.26458333,39.927878,-13.516602)"
|
||||
style="display:inline"
|
||||
id="button2-path"
|
||||
inkscape:label="#g146">
|
||||
<path
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="M 338.62224,171.07963 91.069203,171.06803"
|
||||
id="path51-2"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect53-3"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="87.596474"
|
||||
y="167.57452" />
|
||||
<rect
|
||||
y="170.56519"
|
||||
x="338.10663"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button2-leader"
|
||||
style="color:#000000;text-align:start;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect871" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.26458333,0,0,0.26458333,39.855422,10.357346)"
|
||||
style="display:inline"
|
||||
id="button5-path"
|
||||
inkscape:label="#g146">
|
||||
<path
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="M 338.91912,170.14213 91.343981,170.50618"
|
||||
id="path51-2-3"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect53-3-4"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="88"
|
||||
y="167.375" />
|
||||
<rect
|
||||
y="169.65894"
|
||||
x="338.32538"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button5-leader"
|
||||
style="color:#000000;text-align:start;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect871" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(-0.29294531,0,0,0.26458333,70.354375,-10.600792)"
|
||||
style="display:inline"
|
||||
id="button4-path"
|
||||
inkscape:label="#g156">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 113.69984,250.59415 125.92438,-0.0532"
|
||||
id="path966-1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect976-3"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="110.07652"
|
||||
y="247.06827" />
|
||||
<rect
|
||||
y="250.06044"
|
||||
x="239.16049"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button4-leader"
|
||||
style="color:#000000;text-align:end;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect875" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(-0.29294531,0,0,0.26458333,70.260832,1.1857932)"
|
||||
style="display:inline"
|
||||
id="button3-path"
|
||||
inkscape:label="#g156">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 109.05947,250.54995 130.56475,-0.009"
|
||||
id="path966-2"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect976-8"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="105.5442"
|
||||
y="247.06068" />
|
||||
<rect
|
||||
y="250.00575"
|
||||
x="238.62422"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button3-leader"
|
||||
style="color:#000000;text-align:end;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect875" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="LEDs"
|
||||
inkscape:label="LEDs"
|
||||
transform="translate(0,-2.6458338)"
|
||||
style="display:inline">
|
||||
<g
|
||||
transform="matrix(-0.29294531,0,0,0.26458333,69.912779,-34.520744)"
|
||||
style="display:inline"
|
||||
id="led1-path"
|
||||
inkscape:label="#g156">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 33.260958,250.40632 204.900782,0.0964"
|
||||
id="path966-0"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect976-2"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="29.527279"
|
||||
y="246.99062" />
|
||||
<rect
|
||||
y="249.97328"
|
||||
x="237.64519"
|
||||
height="1"
|
||||
width="1"
|
||||
id="led1-leader"
|
||||
style="color:#000000;text-align:end;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect875" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(-0.29294531,0,0,0.26458333,69.953208,49.201431)"
|
||||
style="display:inline"
|
||||
id="led0-path"
|
||||
inkscape:label="#g156">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 19.28901,250.49471 219.01243,0.008"
|
||||
id="path966-0-2"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect976-2-1"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="16.834169"
|
||||
y="246.63705" />
|
||||
<rect
|
||||
y="249.97328"
|
||||
x="237.7849"
|
||||
height="1"
|
||||
width="1"
|
||||
id="led0-leader"
|
||||
style="color:#000000;text-align:end;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect875" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 22 KiB |
443
data/gnome/steelseries-rival310.svg
Normal file
@@ -0,0 +1,443 @@
|
||||
<?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"
|
||||
width="490"
|
||||
height="490"
|
||||
viewBox="0 0 129.64583 129.64583"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
sodipodi:docname="steelseries-rival310.svg"
|
||||
inkscape:version="0.92.2 (5c3e80d, 2017-08-06)">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1.4142136"
|
||||
inkscape:cx="158.34512"
|
||||
inkscape:cy="283.9471"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="Device"
|
||||
inkscape:document-rotation="0"
|
||||
showgrid="false"
|
||||
showguides="false"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1163"
|
||||
inkscape:window-x="1920"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
showborder="true"
|
||||
inkscape:guide-bbox="true"
|
||||
units="px"
|
||||
inkscape:snap-global="false"
|
||||
inkscape:measure-start="241.5,424.5"
|
||||
inkscape:measure-end="193,423">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid78" />
|
||||
<sodipodi:guide
|
||||
position="58.722772,112.40709"
|
||||
orientation="0,1"
|
||||
id="guide79"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="39.611923,100.54373"
|
||||
orientation="0,1"
|
||||
id="guide81"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="51.756014,88.614617"
|
||||
orientation="0,1"
|
||||
id="guide83"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="57.778386,76.729167"
|
||||
orientation="0,1"
|
||||
id="guide85"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="45.047078,64.795712"
|
||||
orientation="0,1"
|
||||
inkscape:locked="false"
|
||||
id="guide87" />
|
||||
<sodipodi:guide
|
||||
position="57.646696,52.899321"
|
||||
orientation="0,1"
|
||||
id="guide89"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="64.031094,118.70775"
|
||||
orientation="1,0"
|
||||
id="guide996"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="76.729165,115.65599"
|
||||
orientation="1,0"
|
||||
id="guide4799"
|
||||
inkscape:locked="false" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata5">
|
||||
<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>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="Device"
|
||||
inkscape:label="Device"
|
||||
style="display:inline;opacity:1"
|
||||
transform="translate(0,-167.35416)">
|
||||
<path
|
||||
style="fill:#d3d3ce;fill-opacity:1;fill-rule:evenodd;stroke:#bfc2bb;stroke-width:0.98636663;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;opacity:1"
|
||||
d="m 39.422916,178.73125 c 8.753298,-5.1263 8.742273,-5.15937 19.909893,-6.35 0.86322,1.81872 1.399035,2.16412 3.571875,2.57968 0.815799,-0.022 1.631597,-0.0441 2.447396,-0.0661 1.808025,-0.44162 2.142728,-0.67277 3.108854,-2.4474 11.230355,1.36029 11.188618,1.38757 18.25625,6.74688 2.745052,3.1309 3.671094,5.00504 4.365625,8.59896 0.264583,5.1263 1.254823,10.18645 1.320969,15.27968 4.850693,20.06424 6.726771,34.70452 8.270172,54.63646 -0.57326,10.05417 -1.411108,14.15521 -6.879162,21.43125 -5.55625,5.60034 -10.31875,7.8934 -17.859375,10.84791 -7.805208,1.74184 -11.509375,1.76389 -18.653125,0.46302 -6.32795,-1.67569 -10.384244,-5.1794 -14.221351,-10.58333 -4.882794,-8.38114 -5.236545,-14.94896 -7.408333,-22.62187 -0.782726,-9.55807 -1.367014,-19.31459 -2.050521,-28.97188 l 2.38125,-0.39687 c -0.0441,-0.50712 -0.08819,-1.01423 -0.132292,-1.52135 l -2.38125,-0.99219 v -17.19792 c 0.617361,-1.6316 1.234723,-3.26319 1.852084,-4.89479 l 0.926041,-18.1901 c 0.496094,-3.10887 1.256771,-4.69638 3.175,-6.35004 z"
|
||||
id="path882"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccccccccccccccccc" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="display:inline;opacity:1;fill:none;fill-opacity:0.39215686;stroke:#babdb6;stroke-width:3.62082291;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="led0"
|
||||
sodipodi:cx="64.507607"
|
||||
sodipodi:cy="278.93338"
|
||||
sodipodi:rx="6.5174346"
|
||||
sodipodi:ry="6.5174408"
|
||||
d="m 69.116129,274.32485 a 6.5174346,6.5174408 0 0 1 0,9.21706 6.5174346,6.5174408 0 0 1 -9.217044,0 6.5174346,6.5174408 0 0 1 -10e-7,-9.21706"
|
||||
sodipodi:start="5.4977871"
|
||||
sodipodi:end="3.9269907"
|
||||
sodipodi:open="true"
|
||||
sodipodi:arc-type="arc"
|
||||
inkscape:label="#led1" />
|
||||
<path
|
||||
style="display:inline;opacity:1;fill:none;stroke:#babdb6;stroke-width:0.51011664;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 63.998032,175.33704 c -0.0617,17.18181 0,37.8177 0,37.8177 v 0"
|
||||
id="path4530-9"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccc" />
|
||||
<rect
|
||||
style="display:inline;opacity:1;fill:#eeeeec;fill-opacity:1;stroke:#bfc2bb;stroke-width:0.65934163;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="button2"
|
||||
width="8.6572962"
|
||||
height="16.992365"
|
||||
x="59.667027"
|
||||
y="183.8551"
|
||||
ry="1.5045637"
|
||||
inkscape:label="#rect4615"
|
||||
rx="2.8998742" />
|
||||
<rect
|
||||
style="display:inline;opacity:1;fill:#d3d3ce;fill-opacity:1;stroke:#bfc2bb;stroke-width:0.51011665;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="button5"
|
||||
width="4.0773749"
|
||||
height="11.664907"
|
||||
x="61.934288"
|
||||
y="213.306"
|
||||
ry="0.74915975"
|
||||
inkscape:label="#rect4615"
|
||||
rx="0.63142258" />
|
||||
<path
|
||||
style="fill:#eeeeec;fill-opacity:1;fill-rule:evenodd;stroke:#bfc2bb;stroke-width:0.65934163;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;opacity:1"
|
||||
d="m 92.234711,203.24519 c 0.280629,9.51034 -0.467724,16.09741 -0.467724,24.43845 -0.763945,13.64188 -1.153714,9.79098 -1.590254,28.48425 -0.04677,3.7028 1.344699,5.74518 2.50231,6.78196 1.157611,1.03679 4.41997,3.85091 6.618261,5.14494 0.941986,-4.54444 1.338226,-4.86758 1.335156,-10.49869 -0.4989,-10.35224 -1.350744,-19.81747 -3.369743,-31.52609 -1.652616,-7.76419 -1.878682,-12.53495 -5.028008,-22.82482 z"
|
||||
id="path959"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccsccccc" />
|
||||
<path
|
||||
style="fill:#eeeeec;fill-opacity:1;fill-rule:evenodd;stroke:#bfc2bb;stroke-width:0.65934163;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;opacity:1"
|
||||
d="m 37.603906,265.61379 c 1.378038,-1.69774 1.896181,-2.56866 2.447396,-4.49791 0.275607,-1.59853 0.319704,-2.27101 0.132291,-3.70417 -0.176389,-0.97014 -0.352777,-1.94028 -0.529166,-2.91042 -0.352778,0.022 -0.705556,0.0441 -1.058334,0.0661 -1.113455,-0.31971 -1.631597,-0.93707 -2.248958,-1.65365 -0.429948,-0.89297 -0.859896,-1.78593 -1.289844,-2.6789 0.176389,2.30408 0.352778,4.60816 0.529167,6.91224 0.672483,2.82224 1.344965,5.64447 2.017448,8.46671 z"
|
||||
id="path961"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccccc" />
|
||||
<path
|
||||
style="fill:#d3d3ce;fill-opacity:1;fill-rule:evenodd;stroke:#bfc2bb;stroke-width:0.51011665;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;opacity:1"
|
||||
d="m 39.662795,224.50314 c -1.418755,-15.53616 -1.294028,-30.04332 -0.748352,-45.27546 7.464057,-5.23848 10.578303,-5.75298 20.392662,-7.01583 0.604141,2.15932 2.552981,2.88039 4.583673,2.89988 0.06236,2.93106 -0.0039,5.75688 0.05847,8.68793 -0.966626,0.0156 -1.617539,-0.0389 -2.677709,0.15206 -0.576857,0.12082 -1.668207,0.59244 -1.683798,1.44993 0.03118,4.73958 0.06237,9.47916 0.09355,14.21874 0.428974,0.80223 0.791803,1.0753 1.683798,1.21608 h 2.666014 c 0.09354,3.89768 -0.04677,7.79536 0.04677,11.69304 -1.777343,0.0624 -3.554686,0.12473 -5.332029,0.18709 -4.677216,3.30523 -9.354432,6.61047 -14.031648,9.9157 -1.948383,1.15278 -3.036871,1.77639 -5.051401,1.87084 z"
|
||||
id="button0"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccccccccccc"
|
||||
inkscape:label="#path971" />
|
||||
<path
|
||||
style="display:inline;opacity:1;fill:#d3d3ce;fill-opacity:1;fill-rule:evenodd;stroke:#bfc2bb;stroke-width:0.51011664;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 88.538966,224.46383 c 1.418756,-15.53616 -0.763946,-29.5756 -1.309622,-44.80774 -6.341526,-5.61266 -8.520329,-6.2207 -18.334688,-7.48355 -0.604141,2.15932 -2.833614,2.83362 -4.864306,2.85311 -0.06236,2.93106 0.284533,5.80365 0.222163,8.7347 0.966626,0.0156 1.617539,-0.0389 2.677709,0.15206 0.576857,0.12082 1.668207,0.59244 1.683798,1.44993 -0.03118,4.73958 -0.06237,9.47916 -0.09355,14.21874 -0.428974,0.80223 -0.791803,1.0753 -1.683798,1.21608 h -2.80633 c -0.09354,3.89768 0.187088,7.79536 0.09354,11.69304 1.777343,0.0624 3.554686,0.12473 5.332029,0.18709 4.677216,3.30523 9.354432,6.61047 14.031649,9.9157 1.948382,1.15278 3.036871,1.77639 5.0514,1.87084 z"
|
||||
id="button1"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccccccccccc"
|
||||
inkscape:label="#path971-5" />
|
||||
<path
|
||||
style="fill:#d3d3ce;fill-opacity:1;fill-rule:evenodd;stroke:#bfc2bb;stroke-width:0.51011664;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;opacity:1"
|
||||
d="m 39.721262,254.48409 c -2.127995,-12.76601 -2.492187,-15.11204 -3.531298,-26.68352 -0.880877,0.16371 -1.761753,0.32741 -2.64263,0.49111 0.510597,7.26528 1.021194,14.53055 1.531791,21.79583 0.415673,1.21059 0.673654,1.8504 1.39147,2.98173 0.557369,0.65481 1.067966,1.08745 1.882582,1.5084 0.738934,0.12313 0.851361,0.031 1.368085,-0.0935 z"
|
||||
id="button3"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccc"
|
||||
inkscape:label="#path998" />
|
||||
<path
|
||||
style="fill:#d3d3ce;fill-opacity:1;fill-rule:evenodd;stroke:#bfc2bb;stroke-width:0.51011664;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;opacity:1"
|
||||
d="m 36.061341,226.30387 -2.595857,-0.95884 v -17.51617 l 2.128134,-4.89938 z"
|
||||
id="button4"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccc"
|
||||
inkscape:label="#path1000" />
|
||||
<g
|
||||
id="g27"
|
||||
inkscape:label="#g84"
|
||||
style="opacity:1">
|
||||
<path
|
||||
inkscape:label="#path42"
|
||||
inkscape:connector-curvature="0"
|
||||
id="led1"
|
||||
d="m 60.202463,185.20746 c 0,14.31228 0,14.31228 0,14.31228"
|
||||
style="fill:#c8c8c8;fill-opacity:1;stroke:#babdb6;stroke-width:0.23228861px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:label="#path42"
|
||||
inkscape:connector-curvature="0"
|
||||
id="led0-3"
|
||||
d="m 67.749483,185.21452 c 0,14.31228 0,14.31228 0,14.31228"
|
||||
style="display:inline;opacity:1;fill:#c8c8c8;fill-opacity:1;stroke:#babdb6;stroke-width:0.23228861px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="Buttons"
|
||||
inkscape:label="Buttons"
|
||||
transform="translate(0,-2.6458338)"
|
||||
style="display:inline">
|
||||
<g
|
||||
transform="matrix(-0.29294531,0,0,0.26458333,70.19679,-46.28282)"
|
||||
style="display:inline"
|
||||
id="button0-path"
|
||||
inkscape:label="#g156">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 69.018882,250.50576 170.100828,0.008"
|
||||
id="path966"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect976"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="65.211685"
|
||||
y="247.25577" />
|
||||
<rect
|
||||
y="250.01747"
|
||||
x="238.66302"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button0-leader"
|
||||
style="color:#000000;text-align:end;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect875" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.26458333,0,0,0.26458333,40.502648,-25.152234)"
|
||||
style="display:inline"
|
||||
id="button1-path"
|
||||
inkscape:label="#g146">
|
||||
<path
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 336.41912,170.11088 -197.26264,0.0828"
|
||||
id="path51"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect53"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="137"
|
||||
y="166.75" />
|
||||
<rect
|
||||
y="169.61206"
|
||||
x="335.92694"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button1-leader"
|
||||
style="color:#000000;text-align:start;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect871" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.26458333,0,0,0.26458333,39.927878,-13.516602)"
|
||||
style="display:inline"
|
||||
id="button2-path"
|
||||
inkscape:label="#g146">
|
||||
<path
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="M 338.62224,171.07963 91.069203,171.06803"
|
||||
id="path51-2"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect53-3"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="87.596474"
|
||||
y="167.57452" />
|
||||
<rect
|
||||
y="170.56519"
|
||||
x="338.10663"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button2-leader"
|
||||
style="color:#000000;text-align:start;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect871" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.26458333,0,0,0.26458333,39.855422,10.357346)"
|
||||
style="display:inline"
|
||||
id="button5-path"
|
||||
inkscape:label="#g146">
|
||||
<path
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="M 338.91912,170.14213 91.343981,170.50618"
|
||||
id="path51-2-3"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect53-3-4"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="88"
|
||||
y="167.375" />
|
||||
<rect
|
||||
y="169.65894"
|
||||
x="338.32538"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button5-leader"
|
||||
style="color:#000000;text-align:start;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect871" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(-0.29294531,0,0,0.26458333,70.354375,-10.600792)"
|
||||
style="display:inline"
|
||||
id="button4-path"
|
||||
inkscape:label="#g156">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 121.40352,250.50576 118.2207,0.0352"
|
||||
id="path966-1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect976-3"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="118.01969"
|
||||
y="247.06827" />
|
||||
<rect
|
||||
y="250.06044"
|
||||
x="239.16049"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button4-leader"
|
||||
style="color:#000000;text-align:end;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect875" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(-0.29294531,0,0,0.26458333,70.260832,1.1857932)"
|
||||
style="display:inline"
|
||||
id="button3-path"
|
||||
inkscape:label="#g156">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 119.59715,250.50576 120.02707,0.0352"
|
||||
id="path966-2"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect976-8"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="116.24155"
|
||||
y="247.19327" />
|
||||
<rect
|
||||
y="250.00575"
|
||||
x="238.62422"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button3-leader"
|
||||
style="color:#000000;text-align:end;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect875" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="LEDs"
|
||||
inkscape:label="LEDs"
|
||||
transform="translate(0,-2.6458338)"
|
||||
style="display:inline">
|
||||
<g
|
||||
transform="matrix(-0.29294531,0,0,0.26458333,69.912779,-34.520744)"
|
||||
style="display:inline"
|
||||
id="led1-path"
|
||||
inkscape:label="#g156">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 33.260958,250.40632 204.900782,0.0964"
|
||||
id="path966-0"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect976-2"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="29.527279"
|
||||
y="246.99062" />
|
||||
<rect
|
||||
y="249.97328"
|
||||
x="237.64519"
|
||||
height="1"
|
||||
width="1"
|
||||
id="led1-leader"
|
||||
style="color:#000000;text-align:end;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect875" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(-0.29294531,0,0,0.26458333,69.953208,49.201431)"
|
||||
style="display:inline"
|
||||
id="led0-path"
|
||||
inkscape:label="#g156">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 19.28901,250.49471 219.01243,0.008"
|
||||
id="path966-0-2"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect976-2-1"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="16.834169"
|
||||
y="246.63705" />
|
||||
<rect
|
||||
y="249.97328"
|
||||
x="237.7849"
|
||||
height="1"
|
||||
width="1"
|
||||
id="led0-leader"
|
||||
style="color:#000000;text-align:end;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect875" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 23 KiB |
637
data/gnome/steelseries-rival600.svg
Normal file
@@ -0,0 +1,637 @@
|
||||
<?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"
|
||||
width="499"
|
||||
height="499"
|
||||
viewBox="0 0 132.02708 132.02709"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="0.92.2 2405546, 2018-03-11"
|
||||
sodipodi:docname="steelseries-rival600.svg">
|
||||
<defs
|
||||
id="defs2">
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath4634">
|
||||
<rect
|
||||
style="fill:#3d1400;fill-opacity:0.54140128;stroke:#000000;stroke-width:0.2117648;stroke-opacity:1"
|
||||
id="rect4636"
|
||||
width="107.04193"
|
||||
height="199.41115"
|
||||
x="30.877195"
|
||||
y="155.32713" />
|
||||
</clipPath>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="4.0000002"
|
||||
inkscape:cx="257.92153"
|
||||
inkscape:cy="362.68056"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="Device"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1012"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
units="px"
|
||||
showguides="false"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:snap-global="true"
|
||||
inkscape:measure-start="305.625,430.5"
|
||||
inkscape:measure-end="269.5,430.75">
|
||||
<sodipodi:guide
|
||||
position="66.14583,85.422621"
|
||||
orientation="1,0"
|
||||
id="guide4638"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="115.99497,127"
|
||||
orientation="0,1"
|
||||
id="guide4640"
|
||||
inkscape:locked="false"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<sodipodi:guide
|
||||
position="9.354433,5.2916666"
|
||||
orientation="0,1"
|
||||
id="guide4642"
|
||||
inkscape:locked="false"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata5">
|
||||
<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>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="Device"
|
||||
inkscape:label="Device"
|
||||
style="display:inline"
|
||||
transform="translate(0,-0.26458333)">
|
||||
<path
|
||||
sodipodi:nodetypes="csccccccccsscccccccssssssscccccccccccscsssc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4673"
|
||||
d="m 40.02385,14.984554 c 1.580795,-2.51549 5.975285,-3.539984 9.385335,-4.965329 3.128814,-1.3077924 9.164225,-4.4175966 9.164225,-4.4175966 l 3.236676,-0.3099634 -0.0053,8.952208 1.214482,-5.705833 6.015962,-0.014436 1.88187,5.552463 -0.06133,-8.784402 2.895343,0.3674956 c 0,0 5.054486,2.5992473 7.544173,3.9686799 5.3036,2.9172035 11.440444,3.4069705 11.658567,6.9089765 l 2.434325,39.08341 2.530042,28.965015 c 0,0 0.286756,7.495044 -0.371079,10.115766 l -3.292458,-3.010664 -0.559771,0.835476 1.951257,2.541965 c 0.442734,0.62875 1.161707,2.907068 1.161707,2.907068 0,0 -0.1,2.252347 -0.334606,3.189677 -1.586764,6.33968 -6.10449,11.6792 -9.236308,15.53526 -2.544851,3.13335 -5.161521,5.64996 -8.518934,7.38326 -3.502718,1.80832 -7.474043,2.75126 -11.412536,2.91659 -4.30071,0.18053 -6.918836,0.23282 -12.770724,-1.91491 -4.175515,-1.53248 -7.367165,-5.08869 -9.121485,-7.10927 -9.051815,-10.4256 -9.37199,-18.857963 -8.769367,-19.894766 L 39.845444,91.905117 39.425142,90.803985 37.552215,94.320171 37.160224,93.903502 37.128144,92.93534 38.295133,81.010098 37.99214,64.407639 38.450135,63.977055 37.8061,63.559233 36.932233,47.808124 36.554461,47.459545 c 0,0 0.05032,-2.921717 0.06444,-3.330011 0.09797,-2.831675 0.826526,-3.731517 0.826526,-3.731517 0,0 0.08006,-10.762552 0.583863,-15.991305 0.174175,-1.807686 0.853434,-1.118453 0.93179,-1.886883 0.337789,-3.312656 -0.515822,-5.023298 1.062766,-7.535275 z"
|
||||
style="display:inline;fill:#d3d3ce;fill-opacity:1;stroke:#babdb6;stroke-width:1.32291663;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
style="fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.57558382;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 232.34375,93.232422 v 60.628908 c 0.50061,1.14157 1.4678,2.62577 3.32617,4.04492 h 0.60742 V 93.232422 Z m 31.91406,0 v 64.673828 h 1.83985 c 0.83119,-0.78541 1.40627,-1.64516 1.81054,-2.55664 V 93.232422 Z"
|
||||
transform="matrix(0.26458334,0,0,0.26458334,0,0.26458333)"
|
||||
id="led0"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:#eeeeec;fill-opacity:1;stroke:#babdb6;stroke-width:1.99999988;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
|
||||
d="m 243.77734,85.634766 c -4.155,0 -7.5,3.345 -7.5,7.5 v 65.191404 c 2.23306,1.53273 5.55795,2.93721 10.59375,3.66211 l -0.0527,4.12695 h 6.42578 v -4.08593 c 5.24654,-0.45952 8.69408,-1.43412 10.98047,-2.7461 0.0194,-0.22077 0.0332,-0.44199 0.0332,-0.66797 V 93.134766 c 0,-4.155 -3.345,-7.5 -7.5,-7.5 z"
|
||||
transform="matrix(0.26458334,0,0,0.26458334,0,0.26458333)"
|
||||
id="button2"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:label="#button2" />
|
||||
<rect
|
||||
style="fill:#d3d3ce;fill-opacity:1;stroke:#babdb6;stroke-width:0.52916664;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
|
||||
id="button6"
|
||||
width="5.0028081"
|
||||
height="14.072443"
|
||||
x="63.525414"
|
||||
y="49.707458"
|
||||
ry="0.89731663"
|
||||
inkscape:label="#button6" />
|
||||
<path
|
||||
style="fill:#d3d3ce;fill-opacity:1;stroke:#babdb6;stroke-width:2;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
|
||||
d="m 231.80196,19.999994 -10.42305,1.171881 c 0,0 -22.80933,11.752475 -34.63477,16.695313 -12.88838,5.38713 -29.498,9.260214 -35.47266,18.767578 -5.45964,8.687822 -3.23027,14.853779 -3.78906,25.429687 l 0.89286,110.357427 c 0.75974,6.5985 8.53258,13.62191 67.64583,28.30897 l 20.49636,0.59268 0.20962,-34.60642 c 1.20454,-5.7407 4.81879,-6.03597 9.92297,-6.35918 l 0.22147,-17.37007 c -14.80392,-2.13101 -15.06957,-10.10154 -15.06957,-10.10154 z"
|
||||
transform="scale(0.26458333)"
|
||||
id="button0"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccssccccccccc"
|
||||
inkscape:label="#button0" />
|
||||
<path
|
||||
style="fill:#d3d3ce;fill-opacity:1;stroke:#babdb6;stroke-width:2;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
|
||||
d="m 268.57227,20.097656 0.34526,131.616644 c -0.47516,5.1884 -1.66448,10.08839 -15.67427,11.31543 l 6.2e-4,17.28677 c 4.75243,0.31401 8.60528,1.4133 9.36291,7.0537 l 0.15706,34.28927 23.61411,-0.28538 c 59.2439,-12.2777 65.79173,-21.56131 66.69622,-30.52428 V 90.634766 l -1.75195,-28.132813 c -0.82441,-13.235928 -24.01935,-15.08763 -44.06446,-26.113281 -9.40984,-5.175808 -28.51367,-15 -28.51367,-15 z"
|
||||
id="button1"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccccccscc"
|
||||
inkscape:label="#button1"
|
||||
transform="scale(0.26458333)" />
|
||||
<path
|
||||
style="fill:#eeeeec;fill-opacity:1;stroke:#babdb6;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 141.16016,153.26562 c -0.75439,1.32491 -2.46978,5.19815 -2.75782,13.52344 -0.0534,1.54316 -0.24414,12.58594 -0.24414,12.58594 l 1.42774,1.31641 v 0 l 2.08789,0.006 v -27.43148 z"
|
||||
transform="scale(0.26458333)"
|
||||
id="button5"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccc"
|
||||
inkscape:label="#button5" />
|
||||
<path
|
||||
style="fill:#eeeeec;fill-opacity:1;stroke:#babdb6;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 139.70312,182.80273 3.17774,57.26563 h 4.10547 l -3.40926,-57.51817 z"
|
||||
transform="scale(0.26458333)"
|
||||
id="button4"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccc"
|
||||
inkscape:label="#button4" />
|
||||
<path
|
||||
style="fill:#eeeeec;fill-opacity:1;stroke:#babdb6;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 143.60352,244.08398 2.65262,62.72071 4.65625,16.10854 -0.46289,-21.07144 -2.32143,-57.75782 z"
|
||||
transform="scale(0.26458333)"
|
||||
id="button3"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccc"
|
||||
inkscape:label="#button3" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="display:inline;opacity:1;fill:none;fill-opacity:0.39215686;stroke:#babdb6;stroke-width:3.62082291;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="led1"
|
||||
sodipodi:cx="66.014069"
|
||||
sodipodi:cy="113.27822"
|
||||
sodipodi:rx="6.5174346"
|
||||
sodipodi:ry="6.5174413"
|
||||
d="m 70.622591,108.66969 a 6.5174346,6.5174413 0 0 1 0,9.21706 6.5174346,6.5174413 0 0 1 -9.217044,0 6.5174346,6.5174413 0 0 1 -10e-7,-9.21706"
|
||||
sodipodi:start="5.4977871"
|
||||
sodipodi:end="3.9269907"
|
||||
sodipodi:open="true"
|
||||
sodipodi:arc-type="arc"
|
||||
inkscape:label="#led1" />
|
||||
<path
|
||||
style="fill:#eeeeec;fill-opacity:1;stroke:#babdb6;stroke-width:0.39687499;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 53.883876,61.201732 c 0.701684,-1.04199 1.713438,-1.252361 2.700948,-1.273296 -1.062711,6.124293 -2.23957,15.448337 -2.929315,17.714841 l -2.279083,-0.01181 c 0.921085,-4.981084 1.8723,-11.917817 2.50745,-16.429735 z"
|
||||
id="led2"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccc"
|
||||
inkscape:label="#led2" />
|
||||
<path
|
||||
style="fill:#eeeeec;fill-opacity:1;stroke:#babdb6;stroke-width:0.39687499;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 51.098164,78.550869 2.137416,0.0032 c -2.45902,3.08502 -5.645313,5.394855 -8.68164,7.870003 l 0.01274,-1.902901 c 2.26525,-2.119478 4.965592,-3.807868 6.531484,-5.970314 z"
|
||||
id="led4"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccc"
|
||||
inkscape:label="#led4" />
|
||||
<path
|
||||
style="fill:#eeeeec;fill-opacity:1;stroke:#babdb6;stroke-width:0.38111177;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 39.904215,90.216504 c 2.946365,-4.10277 2.992207,-3.879322 3.87751,-4.907952 v 1.643592 c -1.069962,1.220999 -2.14185,2.446029 -3.652074,4.588366 -0.34675,-0.266319 -0.171896,-0.86875 -0.225436,-1.324006 z"
|
||||
id="led6"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccc"
|
||||
inkscape:label="#led6" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="led3"
|
||||
d="m 77.958921,61.201732 c -0.701684,-1.04199 -1.713438,-1.252361 -2.700948,-1.273296 1.062711,6.124293 2.23957,15.448337 2.929315,17.714841 l 2.279083,-0.01181 c -0.921085,-4.981084 -1.8723,-11.917817 -2.50745,-16.429735 z"
|
||||
style="fill:#eeeeec;fill-opacity:1;stroke:#babdb6;stroke-width:0.39687499;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:label="#led3" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="led5"
|
||||
d="m 80.744633,78.550869 -2.137416,0.0032 c 2.45902,3.08502 5.645313,5.394855 8.68164,7.870003 l -0.01274,-1.902901 c -2.26525,-2.119478 -4.965592,-3.807868 -6.531484,-5.970314 z"
|
||||
style="fill:#eeeeec;fill-opacity:1;stroke:#babdb6;stroke-width:0.39687499;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:label="#led5" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="led7"
|
||||
d="M 93.828039,91.01326 C 90.782971,87.489788 88.89285,86.252223 88.034855,85.182947 l 0.02219,1.740055 c 1.135212,1.088123 3.299661,3.204904 5.082908,5.26536 0.341405,-0.26364 0.635364,-0.724423 0.688079,-1.175102 z"
|
||||
style="fill:#eeeeec;fill-opacity:1;stroke:#babdb6;stroke-width:0.37625623;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:label="#led7" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="Buttons"
|
||||
inkscape:label="Buttons"
|
||||
transform="translate(0,-0.26458333)">
|
||||
<g
|
||||
id="button0-path"
|
||||
inkscape:label="#button0-path">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path966"
|
||||
d="m 50.609489,18.387576 -50.47151772,0.0019"
|
||||
style="color:#000000;display:inline;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:0.26270351;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<rect
|
||||
y="17.462502"
|
||||
x="-51.329166"
|
||||
height="1.8520831"
|
||||
width="1.8520833"
|
||||
id="rect976"
|
||||
style="color:#000000;display:inline;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:0.50289863;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
transform="scale(-1,1)" />
|
||||
<rect
|
||||
transform="scale(-1,1)"
|
||||
y="18.25625"
|
||||
x="-0.26458332"
|
||||
height="0.26458332"
|
||||
width="0.26458332"
|
||||
id="button0-leader"
|
||||
style="color:#000000;text-align:end;display:inline;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-width:0.26458335;stroke-linecap:round"
|
||||
inkscape:label="#button0-leader" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:label="#button5-path"
|
||||
id="button5-path"
|
||||
transform="matrix(1,0,0,0.99991172,-13.551005,26.460036)">
|
||||
<path
|
||||
sodipodi:nodetypes="ccc"
|
||||
style="color:#000000;display:inline;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:0.26290539;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="M 50.998437,18.983827 37.196023,5.1572762 H 13.68371"
|
||||
id="path8646"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
transform="scale(-1,1)"
|
||||
style="color:#000000;display:inline;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:0.50289863;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect8648"
|
||||
width="1.8520833"
|
||||
height="1.8520831"
|
||||
x="-51.329166"
|
||||
y="17.462502" />
|
||||
<rect
|
||||
inkscape:label="#button5-leader"
|
||||
style="color:#000000;text-align:end;display:inline;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-width:0.26458335;stroke-linecap:round"
|
||||
id="button5-leader"
|
||||
width="0.26458332"
|
||||
height="0.26458332"
|
||||
x="-13.815588"
|
||||
y="5.0258474"
|
||||
transform="scale(-1,1)" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(1,0,0,0.99991171,-13.551005,26.460037)"
|
||||
id="button4-path"
|
||||
inkscape:label="#button4-path">
|
||||
<path
|
||||
sodipodi:nodetypes="ccc"
|
||||
style="color:#000000;display:inline;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:0.27385584;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="M 51.951929,30.017489 40.205394,18.387452 H 13.749442"
|
||||
id="path8646-1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
y="28.52924"
|
||||
x="-52.315731"
|
||||
height="1.8520831"
|
||||
width="1.8520833"
|
||||
id="rect8648-0"
|
||||
style="color:#000000;display:inline;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:0.50289863;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
transform="scale(-1,1)" />
|
||||
<rect
|
||||
transform="scale(-1,1)"
|
||||
y="18.256182"
|
||||
x="-13.815588"
|
||||
height="0.26458332"
|
||||
width="0.26458332"
|
||||
id="button4-leader"
|
||||
style="color:#000000;text-align:end;display:inline;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-width:0.26458335;stroke-linecap:round"
|
||||
inkscape:label="#button4-leader" />
|
||||
</g>
|
||||
<g
|
||||
id="button3-path"
|
||||
inkscape:label="#button3-path">
|
||||
<path
|
||||
style="fill:none;stroke:#888a85;stroke-width:0.26771936px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="M 0.13358648,58.076072 H 27.970024 l 10.933108,10.675053"
|
||||
id="path8774"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
transform="scale(-1,1)"
|
||||
style="color:#000000;display:inline;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:0.50287646;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect8648-0-7"
|
||||
width="1.8520833"
|
||||
height="1.8519195"
|
||||
x="-39.559853"
|
||||
y="67.568466" />
|
||||
<rect
|
||||
inkscape:label="#button3-leader"
|
||||
style="color:#000000;text-align:end;display:inline;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-width:0.26457167;stroke-linecap:round"
|
||||
id="button3-leader"
|
||||
width="0.26458332"
|
||||
height="0.26455995"
|
||||
x="-0.26458332"
|
||||
y="57.943771"
|
||||
transform="scale(-1,1)" />
|
||||
</g>
|
||||
<g
|
||||
id="button1-path"
|
||||
inkscape:label="#button1-path">
|
||||
<path
|
||||
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:0.26376939px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="M 131.97389,18.386474 H 80.896353"
|
||||
id="path8957"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
transform="scale(-1,1)"
|
||||
style="color:#000000;display:inline;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:0.50289863;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect976-6"
|
||||
width="1.8520833"
|
||||
height="1.8520831"
|
||||
x="-81.801758"
|
||||
y="17.4625" />
|
||||
<rect
|
||||
inkscape:label="#button1-leader"
|
||||
style="color:#000000;text-align:start;display:inline;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-width:0.26458335;stroke-linecap:round"
|
||||
id="button1-leader"
|
||||
width="0.26458332"
|
||||
height="0.26458332"
|
||||
x="-132.02708"
|
||||
y="18.25625"
|
||||
transform="scale(-1,1)" />
|
||||
</g>
|
||||
<g
|
||||
id="button2-path"
|
||||
inkscape:label="#button2-path">
|
||||
<path
|
||||
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:0.26416048px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="M 131.95474,31.62391 H 66.14583"
|
||||
id="path8993"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
y="30.632051"
|
||||
x="-67.080887"
|
||||
height="1.8520831"
|
||||
width="1.8520833"
|
||||
id="rect976-6-9"
|
||||
style="color:#000000;display:inline;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:0.50289863;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
transform="scale(-1,1)" />
|
||||
<rect
|
||||
transform="scale(-1,1)"
|
||||
y="31.485416"
|
||||
x="-132.02708"
|
||||
height="0.26458332"
|
||||
width="0.26458332"
|
||||
id="button2-leader"
|
||||
style="color:#000000;text-align:start;display:inline;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-width:0.26458335;stroke-linecap:round"
|
||||
inkscape:label="#button2-leader" />
|
||||
</g>
|
||||
<g
|
||||
id="button6-path"
|
||||
inkscape:label="#button6-path">
|
||||
<path
|
||||
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:0.26408577px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="M 131.91236,58.082243 H 66.14583"
|
||||
id="path9075"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
transform="scale(-1,1)"
|
||||
style="color:#000000;display:inline;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:0.50289863;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect976-6-9-2"
|
||||
width="1.8520833"
|
||||
height="1.8520831"
|
||||
x="-67.0345"
|
||||
y="57.148987" />
|
||||
<rect
|
||||
inkscape:label="#button6-leader"
|
||||
style="color:#000000;text-align:start;display:inline;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-width:0.26458335;stroke-linecap:round"
|
||||
id="button6-leader"
|
||||
width="0.26458332"
|
||||
height="0.26458332"
|
||||
x="-132.02708"
|
||||
y="57.943748"
|
||||
transform="scale(-1,1)" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="LEDs"
|
||||
inkscape:label="LEDs"
|
||||
transform="translate(0,-0.26458333)">
|
||||
<g
|
||||
id="led2-path"
|
||||
inkscape:label="#led2-path">
|
||||
<path
|
||||
style="fill:none;stroke:#888a85;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="M 0.12402344,71.315542 H 53.647675"
|
||||
id="path8810"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
y="70.379326"
|
||||
x="-54.539886"
|
||||
height="1.8519195"
|
||||
width="1.8520833"
|
||||
id="rect8648-0-7-5"
|
||||
style="color:#000000;display:inline;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:0.50287646;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
transform="scale(-1,1)" />
|
||||
<rect
|
||||
transform="scale(-1,1)"
|
||||
y="71.172935"
|
||||
x="-0.26458332"
|
||||
height="0.26455995"
|
||||
width="0.26458332"
|
||||
id="led2-leader"
|
||||
style="color:#000000;text-align:end;display:inline;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-width:0.26457167;stroke-linecap:round"
|
||||
inkscape:label="#led2-leader" />
|
||||
</g>
|
||||
<g
|
||||
id="led4-path"
|
||||
inkscape:label="#led4-path">
|
||||
<path
|
||||
style="fill:none;stroke:#888a85;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="M 0.12862346,84.537282 H 27.648958 l 2.241759,-2.400562 h 18.612019"
|
||||
id="path8848"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccc" />
|
||||
<rect
|
||||
transform="scale(-1,1)"
|
||||
style="color:#000000;display:inline;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:0.50287646;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect8648-0-7-5-7"
|
||||
width="1.8520833"
|
||||
height="1.8519195"
|
||||
x="-49.503178"
|
||||
y="81.204086" />
|
||||
<rect
|
||||
inkscape:label="#led4-leader"
|
||||
style="color:#000000;text-align:end;display:inline;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-width:0.26457167;stroke-linecap:round"
|
||||
id="led4-leader"
|
||||
width="0.26458332"
|
||||
height="0.26455995"
|
||||
x="-0.26458332"
|
||||
y="84.402107"
|
||||
transform="scale(-1,1)" />
|
||||
</g>
|
||||
<g
|
||||
id="led6-path"
|
||||
inkscape:label="#led6-path">
|
||||
<path
|
||||
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 0.12277694,97.767959 25.38364906,4e-5 9.304738,-9.437079 7.003154,-4e-5"
|
||||
id="path8884"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccc" />
|
||||
<rect
|
||||
y="87.419861"
|
||||
x="-42.752739"
|
||||
height="1.8519195"
|
||||
width="1.8520833"
|
||||
id="rect8648-0-7-5-7-7"
|
||||
style="color:#000000;display:inline;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:0.50287646;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
transform="scale(-1,1)" />
|
||||
<rect
|
||||
transform="scale(-1,1)"
|
||||
y="97.631271"
|
||||
x="-0.26458332"
|
||||
height="0.26455995"
|
||||
width="0.26458332"
|
||||
id="led6-leader"
|
||||
style="color:#000000;text-align:end;display:inline;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-width:0.26457167;stroke-linecap:round"
|
||||
inkscape:label="#led6-leader" />
|
||||
</g>
|
||||
<g
|
||||
id="led1-path"
|
||||
inkscape:label="#led1-path"
|
||||
transform="matrix(-1,0,0,1,132.29166,0)">
|
||||
<path
|
||||
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:0.26420629px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="M 0.31955082,110.99571 H 27.672239 l 2.158822,2.42958 H 66.14583"
|
||||
id="path8920"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccc" />
|
||||
<rect
|
||||
transform="scale(-1,1)"
|
||||
style="color:#000000;display:inline;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:0.50287646;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect8648-0-7-5-7-7-6"
|
||||
width="1.8520833"
|
||||
height="1.8519195"
|
||||
x="-67.071869"
|
||||
y="112.48402" />
|
||||
<rect
|
||||
inkscape:label="#led1-leader"
|
||||
style="color:#000000;text-align:start;display:inline;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-width:0.26457167;stroke-linecap:round"
|
||||
id="led1-leader"
|
||||
width="0.26458332"
|
||||
height="0.26455995"
|
||||
x="-0.52915835"
|
||||
y="110.86044"
|
||||
transform="scale(-1,1)" />
|
||||
</g>
|
||||
<g
|
||||
id="led0-path"
|
||||
inkscape:label="#led0-path">
|
||||
<path
|
||||
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:0.26413852px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="M 131.9564,44.847906 H 106.24218 L 100.20967,38.95381 H 70.511457"
|
||||
id="path9031"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccc" />
|
||||
<rect
|
||||
y="38.02457"
|
||||
x="-71.448746"
|
||||
height="1.8519195"
|
||||
width="1.8520833"
|
||||
id="rect8648-0-7-5-7-7-6-4"
|
||||
style="color:#000000;display:inline;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:0.50287646;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
transform="scale(-1,1)" />
|
||||
<rect
|
||||
transform="scale(-1,1)"
|
||||
y="44.714607"
|
||||
x="-132.02708"
|
||||
height="0.26455995"
|
||||
width="0.26458332"
|
||||
id="led0-leader"
|
||||
style="color:#000000;text-align:start;display:inline;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-width:0.26457167;stroke-linecap:round"
|
||||
inkscape:label="#led0-leader" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:label="#led3-path"
|
||||
id="led3-path"
|
||||
transform="matrix(-1,0,0,1,131.90105,0)">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path9077"
|
||||
d="M -0.02273763,71.315542 H 53.647675"
|
||||
style="fill:none;stroke:#888a85;stroke-width:0.26494581px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<rect
|
||||
transform="scale(-1,1)"
|
||||
style="color:#000000;display:inline;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:0.50287646;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect9079"
|
||||
width="1.8520833"
|
||||
height="1.8519195"
|
||||
x="-54.539886"
|
||||
y="70.379326" />
|
||||
<rect
|
||||
inkscape:label="#led3-leader"
|
||||
style="color:#000000;text-align:start;display:inline;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-width:0.26457167;stroke-linecap:round"
|
||||
id="led3-leader"
|
||||
width="0.26458332"
|
||||
height="0.26455995"
|
||||
x="-0.13854833"
|
||||
y="71.172935"
|
||||
transform="scale(-1,1)" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:label="#led5-path"
|
||||
id="led5-path"
|
||||
transform="matrix(-1,0,0,1,131.90105,0)">
|
||||
<path
|
||||
sodipodi:nodetypes="cccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path9085"
|
||||
d="M -0.08572876,84.537282 H 27.556552 l 2.251693,-2.400562 h 18.694491"
|
||||
style="fill:none;stroke:#888a85;stroke-width:0.26516888px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<rect
|
||||
y="81.204086"
|
||||
x="-49.503178"
|
||||
height="1.8519195"
|
||||
width="1.8520833"
|
||||
id="rect9087"
|
||||
style="color:#000000;display:inline;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:0.50287646;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
transform="scale(-1,1)" />
|
||||
<rect
|
||||
transform="scale(-1,1)"
|
||||
y="84.402107"
|
||||
x="-0.13854833"
|
||||
height="0.26455995"
|
||||
width="0.26458332"
|
||||
id="led5-leader"
|
||||
style="color:#000000;text-align:start;display:inline;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-width:0.26457167;stroke-linecap:round"
|
||||
inkscape:label="#led5-leader" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:label="#led7-path"
|
||||
id="led7-path"
|
||||
transform="matrix(-1,0,0,1,131.90105,0)">
|
||||
<path
|
||||
sodipodi:nodetypes="cccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path9093"
|
||||
d="m 0.02270835,97.767959 25.44457565,4e-5 9.327071,-9.437079 7.019963,-4e-5"
|
||||
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:0.26490065px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<rect
|
||||
transform="scale(-1,1)"
|
||||
style="color:#000000;display:inline;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:0.50287646;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect9095"
|
||||
width="1.8520833"
|
||||
height="1.8519195"
|
||||
x="-42.752739"
|
||||
y="87.419861" />
|
||||
<rect
|
||||
inkscape:label="#led7-leader"
|
||||
style="color:#000000;text-align:start;display:inline;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-width:0.26457167;stroke-linecap:round"
|
||||
id="led7-leader"
|
||||
width="0.26458332"
|
||||
height="0.26455995"
|
||||
x="-0.13854833"
|
||||
y="97.631271"
|
||||
transform="scale(-1,1)" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 33 KiB |
513
data/gnome/steelseries-sensei310.svg
Normal file
@@ -0,0 +1,513 @@
|
||||
<?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"
|
||||
width="490"
|
||||
height="490"
|
||||
viewBox="0 0 129.64583 129.64583"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
sodipodi:docname="steelseries-sensei310.svg"
|
||||
inkscape:version="0.92.2 (5c3e80d, 2017-08-06)">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1"
|
||||
inkscape:cx="251.39478"
|
||||
inkscape:cy="163.59644"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="Buttons"
|
||||
inkscape:document-rotation="0"
|
||||
showgrid="false"
|
||||
showguides="false"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1163"
|
||||
inkscape:window-x="1920"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
showborder="true"
|
||||
inkscape:guide-bbox="true"
|
||||
units="px"
|
||||
inkscape:snap-global="false"
|
||||
inkscape:measure-start="-166.877,108.894"
|
||||
inkscape:measure-end="135.057,119.501">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid78" />
|
||||
<sodipodi:guide
|
||||
position="58.722772,112.40709"
|
||||
orientation="0,1"
|
||||
id="guide79"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="39.611923,100.54373"
|
||||
orientation="0,1"
|
||||
id="guide81"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="51.756014,88.614617"
|
||||
orientation="0,1"
|
||||
id="guide83"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="57.778386,76.729167"
|
||||
orientation="0,1"
|
||||
id="guide85"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="45.047078,64.795712"
|
||||
orientation="0,1"
|
||||
inkscape:locked="false"
|
||||
id="guide87" />
|
||||
<sodipodi:guide
|
||||
position="57.646696,52.899321"
|
||||
orientation="0,1"
|
||||
id="guide89"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="64.029165,118.70775"
|
||||
orientation="1,0"
|
||||
id="guide996"
|
||||
inkscape:locked="true"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" />
|
||||
<sodipodi:guide
|
||||
position="76.729165,115.65599"
|
||||
orientation="1,0"
|
||||
id="guide4799"
|
||||
inkscape:locked="false" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata5">
|
||||
<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>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="Device"
|
||||
inkscape:label="Device"
|
||||
style="display:inline;opacity:1"
|
||||
transform="translate(0,-167.35416)">
|
||||
<path
|
||||
style="opacity:1;fill:#d3d3ce;fill-opacity:1;fill-rule:evenodd;stroke:#bfc2bb;stroke-width:0.98636663;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 39.422916,178.73125 c 8.753298,-5.1263 8.742273,-5.15937 19.909893,-6.35 0.86322,1.81872 1.399035,2.16412 3.571875,2.57968 0.815799,-0.022 1.631597,-0.0441 2.447396,-0.0661 1.808025,-0.44162 2.142728,-0.67277 3.108854,-2.4474 11.230355,1.36029 11.188618,1.38757 18.25625,6.74688 2.745052,3.1309 3.671094,5.00504 4.365625,8.59896 0.264583,5.1263 1.254823,10.38485 1.320969,15.47808 l 2.184761,4.89479 v 17.19791 l -2.513542,0.99224 10e-7,1.52135 2.513541,0.39687 c -1.007974,11.0006 -2.00013,19.52446 -2.182812,28.97188 -0.57326,10.05417 -0.800418,19.72432 -6.813021,26.64427 -3.502949,4.03157 -9.595838,4.97222 -14.816666,6.09791 -4.39946,0.94859 -9.075269,1.31864 -13.493752,0.46302 -5.302922,-1.02689 -11.328135,-2.43714 -14.816664,-6.56093 -5.920645,-6.99879 -4.641232,-18.97136 -6.81302,-26.64427 -0.782726,-9.55807 -1.367014,-19.31459 -2.050521,-28.97188 l 2.38125,-0.39687 c -0.0441,-0.50712 -0.08819,-1.01423 -0.132292,-1.52135 l -2.38125,-0.99224 v -17.19791 c 0.617361,-1.6316 1.234723,-3.26319 1.852084,-4.89479 l 0.926041,-18.19006 c 0.496094,-3.10887 1.256771,-4.69638 3.175,-6.35004 z"
|
||||
id="path882"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccccccccccaaaaccccccccc" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="display:inline;opacity:1;fill:none;fill-opacity:0.39215686;stroke:#babdb6;stroke-width:3.62082291;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="led0"
|
||||
sodipodi:cx="64.507607"
|
||||
sodipodi:cy="278.93338"
|
||||
sodipodi:rx="6.5174346"
|
||||
sodipodi:ry="6.5174408"
|
||||
d="m 69.116129,274.32485 a 6.5174346,6.5174408 0 0 1 0,9.21706 6.5174346,6.5174408 0 0 1 -9.217044,0 6.5174346,6.5174408 0 0 1 -10e-7,-9.21706"
|
||||
sodipodi:start="5.4977871"
|
||||
sodipodi:end="3.9269907"
|
||||
sodipodi:open="true"
|
||||
sodipodi:arc-type="arc"
|
||||
inkscape:label="#led1" />
|
||||
<path
|
||||
style="display:inline;opacity:1;fill:none;stroke:#babdb6;stroke-width:0.51011664;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 63.998032,175.33704 c -0.0617,17.18181 0,37.8177 0,37.8177 v 0"
|
||||
id="path4530-9"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccc" />
|
||||
<rect
|
||||
style="display:inline;opacity:1;fill:#eeeeec;fill-opacity:1;stroke:#bfc2bb;stroke-width:0.65934163;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="button2"
|
||||
width="8.6572962"
|
||||
height="16.992365"
|
||||
x="59.667027"
|
||||
y="183.8551"
|
||||
ry="1.5045637"
|
||||
inkscape:label="#rect4615"
|
||||
rx="2.8998742" />
|
||||
<rect
|
||||
style="display:inline;opacity:1;fill:#d3d3ce;fill-opacity:1;stroke:#bfc2bb;stroke-width:0.51011664;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="button7"
|
||||
width="4.0773749"
|
||||
height="11.664907"
|
||||
x="61.934288"
|
||||
y="213.306"
|
||||
ry="0.74915975"
|
||||
inkscape:label="#rect4615"
|
||||
rx="0.63142258" />
|
||||
<path
|
||||
style="opacity:1;fill:#eeeeec;fill-opacity:1;fill-rule:evenodd;stroke:#bfc2bb;stroke-width:0.65934163;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 37.140885,265.81223 c 1.378038,-1.69774 2.359202,-2.7671 2.910417,-4.69635 0.275607,-1.59853 0.319704,-2.27101 0.132291,-3.70417 l -0.529166,-2.91042 c -0.352778,0.022 -0.705556,0.0441 -1.058334,0.0661 -1.113455,-0.31971 -1.631597,-0.93707 -2.248958,-1.65365 -0.429948,-0.89297 -0.859896,-1.78593 -1.289844,-2.6789 l 0.529167,6.91224 z"
|
||||
id="path961"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccccc" />
|
||||
<path
|
||||
style="opacity:1;fill:#d3d3ce;fill-opacity:1;fill-rule:evenodd;stroke:#bfc2bb;stroke-width:0.51011664;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 39.662795,224.50314 c -1.418755,-15.53616 -1.294028,-30.04332 -0.748352,-45.27546 7.464057,-5.23848 10.578303,-5.75298 20.392662,-7.01583 0.604141,2.15932 2.552981,2.88039 4.583673,2.89988 0.06236,2.93106 -0.0039,5.75688 0.05847,8.68793 -0.966626,0.0156 -1.617539,-0.0389 -2.677709,0.15206 -0.576857,0.12082 -1.668207,0.59244 -1.683798,1.44993 0.03118,4.73958 0.06237,9.47916 0.09355,14.21874 0.428974,0.80223 0.791803,1.0753 1.683798,1.21608 h 2.666014 c 0.09354,3.89768 -0.04677,7.79536 0.04677,11.69304 -1.777343,0.0624 -3.554686,0.12473 -5.332029,0.18709 -4.677216,3.30523 -9.354432,6.61047 -14.031648,9.9157 -1.948383,1.15278 -3.036871,1.77639 -5.051401,1.87084 z"
|
||||
id="button0"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccccccccccc"
|
||||
inkscape:label="#path971" />
|
||||
<path
|
||||
style="display:inline;opacity:1;fill:#d3d3ce;fill-opacity:1;fill-rule:evenodd;stroke:#bfc2bb;stroke-width:0.51011664;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 88.538966,224.46383 c 1.418756,-15.53616 -0.763946,-29.5756 -1.309622,-44.80774 -6.341526,-5.61266 -8.520329,-6.2207 -18.334688,-7.48355 -0.604141,2.15932 -2.833614,2.83362 -4.864306,2.85311 -0.06236,2.93106 0.284533,5.80365 0.222163,8.7347 0.966626,0.0156 1.617539,-0.0389 2.677709,0.15206 0.576857,0.12082 1.668207,0.59244 1.683798,1.44993 -0.03118,4.73958 -0.06237,9.47916 -0.09355,14.21874 -0.428974,0.80223 -0.791803,1.0753 -1.683798,1.21608 h -2.80633 c -0.09354,3.89768 0.187088,7.79536 0.09354,11.69304 1.777343,0.0624 3.554686,0.12473 5.332029,0.18709 4.677216,3.30523 9.354432,6.61047 14.031649,9.9157 1.948382,1.15278 3.036871,1.77639 5.0514,1.87084 z"
|
||||
id="button1"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccccccccccc"
|
||||
inkscape:label="#path971-5" />
|
||||
<path
|
||||
style="opacity:1;fill:#d3d3ce;fill-opacity:1;fill-rule:evenodd;stroke:#bfc2bb;stroke-width:0.51011664;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 39.721262,254.48409 c -2.127995,-12.76601 -2.492187,-15.11204 -3.531298,-26.68352 -0.880877,0.16371 -1.761753,0.32741 -2.64263,0.49111 0.510597,7.26528 1.021194,14.53055 1.531791,21.79583 0.415673,1.21059 0.673654,1.8504 1.39147,2.98173 0.557369,0.65481 1.067966,1.08745 1.882582,1.5084 0.738934,0.12313 0.851361,0.031 1.368085,-0.0935 z"
|
||||
id="button3"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccc"
|
||||
inkscape:label="#path998" />
|
||||
<path
|
||||
style="opacity:1;fill:#d3d3ce;fill-opacity:1;fill-rule:evenodd;stroke:#bfc2bb;stroke-width:0.51011664;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 36.061341,226.30387 -2.595857,-0.95884 v -17.51617 l 2.128134,-4.89938 z"
|
||||
id="button4"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccc"
|
||||
inkscape:label="#path1000" />
|
||||
<g
|
||||
id="g27"
|
||||
inkscape:label="#g84"
|
||||
style="opacity:1">
|
||||
<path
|
||||
inkscape:label="#path42"
|
||||
inkscape:connector-curvature="0"
|
||||
id="led1"
|
||||
d="m 60.202463,185.20746 c 0,14.31228 0,14.31228 0,14.31228"
|
||||
style="fill:#c8c8c8;fill-opacity:1;stroke:#babdb6;stroke-width:0.23228861px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:label="#path42"
|
||||
inkscape:connector-curvature="0"
|
||||
id="led0-3"
|
||||
d="m 67.749483,185.21452 c 0,14.31228 0,14.31228 0,14.31228"
|
||||
style="display:inline;opacity:1;fill:#c8c8c8;fill-opacity:1;stroke:#babdb6;stroke-width:0.23228861px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
</g>
|
||||
<path
|
||||
style="display:inline;opacity:1;fill:#d3d3ce;fill-opacity:1;fill-rule:evenodd;stroke:#bfc2bb;stroke-width:0.51011664;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 91.839114,226.13585 2.59586,-0.95884 v -17.51617 l -2.12814,-4.89938 z"
|
||||
id="button6"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccc"
|
||||
inkscape:label="#path1000" />
|
||||
<path
|
||||
style="display:inline;opacity:1;fill:#eeeeec;fill-opacity:1;fill-rule:evenodd;stroke:#bfc2bb;stroke-width:0.65934163;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 91.651856,265.50364 c -1.378038,-1.69774 -3.25217,-2.70095 -3.803385,-4.6302 -0.275607,-1.59853 -0.319704,-2.27101 -0.132291,-3.70417 l 0.529166,-2.91042 c 0.352778,0.022 0.705556,0.0441 1.058334,0.0661 1.113455,-0.31971 1.631597,-0.93707 2.248958,-1.65365 0.429948,-0.89297 0.859896,-1.78593 1.289844,-2.6789 l -0.529167,6.91224 z"
|
||||
id="path961-7"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccccc" />
|
||||
<path
|
||||
style="display:inline;opacity:1;fill:#d3d3ce;fill-opacity:1;fill-rule:evenodd;stroke:#bfc2bb;stroke-width:0.51011664;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 88.31891,254.33178 c 2.127995,-12.76601 2.492187,-15.11204 3.531298,-26.68352 0.880877,0.16371 1.761753,0.32741 2.64263,0.49111 -0.510597,7.26528 -1.021194,14.53055 -1.531791,21.79583 -0.415673,1.21059 -0.673654,1.8504 -1.39147,2.98173 -0.557369,0.65481 -1.067966,1.08745 -1.882582,1.5084 -0.738934,0.12313 -0.851361,0.031 -1.368085,-0.0935 z"
|
||||
id="button5"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccc"
|
||||
inkscape:label="#path998" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="Buttons"
|
||||
inkscape:label="Buttons"
|
||||
transform="translate(0,-2.6458338)"
|
||||
style="display:inline">
|
||||
<g
|
||||
transform="matrix(-0.29294531,0,0,0.26458333,70.19679,-46.28282)"
|
||||
style="display:inline"
|
||||
id="button0-path"
|
||||
inkscape:label="#g156">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 69.018882,250.50576 170.100828,0.008"
|
||||
id="path966"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect976"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="65.211685"
|
||||
y="247.25577" />
|
||||
<rect
|
||||
y="250.01747"
|
||||
x="238.66302"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button0-leader"
|
||||
style="color:#000000;text-align:end;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect875" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.26458333,0,0,0.26458333,40.502648,-25.152234)"
|
||||
style="display:inline"
|
||||
id="button1-path"
|
||||
inkscape:label="#g146">
|
||||
<path
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 336.41912,170.11088 -197.26264,0.0828"
|
||||
id="path51"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect53"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="137"
|
||||
y="166.75" />
|
||||
<rect
|
||||
y="169.61206"
|
||||
x="335.92694"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button1-leader"
|
||||
style="color:#000000;text-align:start;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect871" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.26458333,0,0,0.26458333,39.927878,-13.516602)"
|
||||
style="display:inline"
|
||||
id="button2-path"
|
||||
inkscape:label="#g146">
|
||||
<path
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="M 338.62224,171.07963 91.069203,171.06803"
|
||||
id="path51-2"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect53-3"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="87.596474"
|
||||
y="167.57452" />
|
||||
<rect
|
||||
y="170.56519"
|
||||
x="338.10663"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button2-leader"
|
||||
style="color:#000000;text-align:start;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect871" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.26458333,0,0,0.26458333,39.855422,10.357346)"
|
||||
style="display:inline"
|
||||
id="button7-path"
|
||||
inkscape:label="#g146">
|
||||
<path
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="M 339.97978,126.30151 139.89299,126.07359 91.343981,170.50618"
|
||||
id="path51-2-3"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccc" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect53-3-4"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="88"
|
||||
y="167.375" />
|
||||
<rect
|
||||
y="125.46475"
|
||||
x="338.41376"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button7-leader"
|
||||
style="color:#000000;text-align:start;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect871" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(-0.29294531,0,0,0.26458333,70.354375,-10.600792)"
|
||||
style="display:inline"
|
||||
id="button4-path"
|
||||
inkscape:label="#g156">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 121.40352,250.50576 118.2207,0.0352"
|
||||
id="path966-1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect976-3"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="118.01969"
|
||||
y="247.06827" />
|
||||
<rect
|
||||
y="250.06044"
|
||||
x="239.16049"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button4-leader"
|
||||
style="color:#000000;text-align:end;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect875" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(-0.29294531,0,0,0.26458333,70.260832,1.1857932)"
|
||||
style="display:inline"
|
||||
id="button3-path"
|
||||
inkscape:label="#g156">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 119.59715,250.50576 120.02707,0.0352"
|
||||
id="path966-2"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect976-8"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="116.24155"
|
||||
y="247.19327" />
|
||||
<rect
|
||||
y="250.00575"
|
||||
x="238.62422"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button3-leader"
|
||||
style="color:#000000;text-align:end;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect875" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.29294531,0,0,0.26458333,57.669203,-10.667542)"
|
||||
style="display:inline"
|
||||
id="button6-path"
|
||||
inkscape:label="#g156">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="M 121.40352,250.50576 245.2523,250.36418"
|
||||
id="path966-1-56"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect976-3-2"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="118.01969"
|
||||
y="247.06827" />
|
||||
<rect
|
||||
y="249.93338"
|
||||
x="244.75864"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button6-leader"
|
||||
style="color:#000000;text-align:start;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect875" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.29294531,0,0,0.26458333,57.642982,1.1725622)"
|
||||
style="display:inline"
|
||||
id="button5-path"
|
||||
inkscape:label="#g156">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="M 121.40352,250.50576 245.2523,250.36418"
|
||||
id="path966-1-56-2"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect976-3-2-7"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="116.50291"
|
||||
y="247.24504" />
|
||||
<rect
|
||||
y="249.93338"
|
||||
x="244.75864"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button5-leader"
|
||||
style="color:#000000;text-align:start;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect875" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="LEDs"
|
||||
inkscape:label="LEDs"
|
||||
transform="translate(0,-2.6458338)"
|
||||
style="display:inline">
|
||||
<g
|
||||
transform="matrix(-0.29294531,0,0,0.26458333,69.912779,-34.520744)"
|
||||
style="display:inline"
|
||||
id="led1-path"
|
||||
inkscape:label="#g156">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 33.260958,250.40632 204.900782,0.0964"
|
||||
id="path966-0"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect976-2"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="29.527279"
|
||||
y="246.99062" />
|
||||
<rect
|
||||
y="249.97328"
|
||||
x="237.64519"
|
||||
height="1"
|
||||
width="1"
|
||||
id="led1-leader"
|
||||
style="color:#000000;text-align:end;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect875" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(-0.29294531,0,0,0.26458333,69.953208,49.201431)"
|
||||
style="display:inline"
|
||||
id="led0-path"
|
||||
inkscape:label="#g156">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 19.28901,250.49471 219.01243,0.008"
|
||||
id="path966-0-2"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect976-2-1"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="16.834169"
|
||||
y="246.63705" />
|
||||
<rect
|
||||
y="249.97328"
|
||||
x="237.7849"
|
||||
height="1"
|
||||
width="1"
|
||||
id="led0-leader"
|
||||
style="color:#000000;text-align:end;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect875" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 27 KiB |
497
data/gnome/steelseries-senseiraw.svg
Normal file
@@ -0,0 +1,497 @@
|
||||
<?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"
|
||||
width="490"
|
||||
height="490"
|
||||
viewBox="0 0 129.64583 129.64583"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
sodipodi:docname="steelseries-senseiraw.svg"
|
||||
inkscape:version="0.92.3 (2405546, 2018-03-11)">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1.4986862"
|
||||
inkscape:cx="234.07051"
|
||||
inkscape:cy="291.38143"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="Device"
|
||||
inkscape:document-rotation="0"
|
||||
showgrid="false"
|
||||
showguides="false"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1149"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
showborder="true"
|
||||
inkscape:guide-bbox="true"
|
||||
units="px"
|
||||
inkscape:snap-global="false"
|
||||
inkscape:measure-start="0,0"
|
||||
inkscape:measure-end="0,0">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid78" />
|
||||
<sodipodi:guide
|
||||
position="58.722772,112.40709"
|
||||
orientation="0,1"
|
||||
id="guide79"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="39.611923,100.54373"
|
||||
orientation="0,1"
|
||||
id="guide81"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="51.756014,88.614617"
|
||||
orientation="0,1"
|
||||
id="guide83"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="57.778386,76.729167"
|
||||
orientation="0,1"
|
||||
id="guide85"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="45.047078,64.795712"
|
||||
orientation="0,1"
|
||||
inkscape:locked="false"
|
||||
id="guide87" />
|
||||
<sodipodi:guide
|
||||
position="57.646696,52.899321"
|
||||
orientation="0,1"
|
||||
id="guide89"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="64.732676,142.09384"
|
||||
orientation="1,0"
|
||||
id="guide913"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="-45.462545,31.805073"
|
||||
orientation="0,1"
|
||||
inkscape:locked="false"
|
||||
id="guide944" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata5">
|
||||
<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>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:label="Image"
|
||||
style="display:none"
|
||||
sodipodi:insensitive="true" />
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="Device"
|
||||
inkscape:label="Device"
|
||||
style="display:inline;opacity:1"
|
||||
transform="translate(0,-167.35416)">
|
||||
<path
|
||||
style="display:inline;fill:#d3d3ce;fill-opacity:1;fill-rule:evenodd;stroke:#babdb6;stroke-width:0.98636663;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 61.118815,173.57187 c -6.81302,0.0662 -11.972394,1.52136 -16.073435,3.37344 -2.88728,1.31189 -4.888218,3.54982 -6.680729,5.62239 -2.215885,3.43407 -3.375386,5.63618 -3.970698,8.86355 -0.919394,7.49385 -0.194949,14.47321 -0.225672,22.62187 -0.0441,2.92144 0.321327,3.9908 0.09533,6.28385 -0.132292,4.05143 -0.413412,7.82174 -0.79375,11.90625 l -0.859895,11.9724 -1.190625,16.27187 c -0.0248,0.94258 -1e-6,1.65364 0.198437,2.57969 0.171855,0.8399 0.352238,1.03153 0.463021,1.52135 0.595312,2.4033 0.529166,3.99631 1.785937,7.2099 2.116666,4.23333 3.604948,6.84609 6.746875,10.71562 3.858506,4.06797 6.928936,5.67685 11.575518,7.34219 4.293136,1.39044 7.919768,1.65835 12.633854,1.78594 0,0 8.340581,-0.39932 12.633718,-1.78976 4.646582,-1.66534 7.717012,-3.27422 11.575518,-7.34219 3.141927,-3.86953 4.630209,-6.48229 6.746875,-10.71562 1.256771,-3.21359 1.190625,-4.8066 1.785937,-7.2099 0.110783,-0.48982 0.291166,-0.68145 0.463021,-1.52135 0.198438,-0.92605 0.223237,-1.63711 0.198437,-2.57969 l -1.190625,-16.27187 -0.717876,-8.98999 c -0.380338,-4.08451 -0.803477,-10.83723 -0.935769,-14.88866 -0.225999,-2.29305 -0.28663,-3.36241 -0.33073,-6.28385 -0.03072,-8.14866 0.835741,-15.12802 -0.08365,-22.62187 -0.595312,-3.22737 -1.470774,-5.42948 -3.686659,-8.86355 -1.792511,-2.07257 -3.793449,-4.3105 -6.680729,-5.62239 -4.101041,-1.85208 -9.260416,-3.30724 -16.073436,-3.37344 -3.028432,-0.0919 -5.294794,0.0499 -7.4082,0.004 z"
|
||||
id="path926"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccccccccccccccccccccccccccc" />
|
||||
<path
|
||||
id="path5205"
|
||||
style="display:inline;opacity:1;vector-effect:none;fill:#eeeeec;fill-opacity:1;fill-rule:evenodd;stroke:#babdb6;stroke-width:0.98636663;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke"
|
||||
d="m 68.894015,173.48626 c 0.01741,1.97468 0.845255,8.1474 1.684943,11.60161 1.369264,5.63272 0.266853,23.47034 0.266853,23.47034 0,0 -2.042025,17.37272 -6.022897,17.27166 -3.980871,0.16348 -6.022896,-17.20924 -6.022896,-17.20924 0,0 -1.10241,-17.83762 0.266854,-23.47034 0.839687,-3.45421 1.667532,-9.62693 1.684942,-11.60161 z"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cscccscc" />
|
||||
<path
|
||||
style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#babdb6;stroke-width:0.98636663;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 64.695108,222.94948 c -0.606916,-0.009 -3.440676,-6.06643 -3.513997,-9.56014 -0.02982,-1.42071 0.176696,-1.66675 3.591511,-1.70532 3.503766,-0.0396 3.702586,0.22584 3.694867,1.62781 -0.01799,3.26716 -3.27008,9.64508 -3.772381,9.63765 z"
|
||||
id="button7"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="sssss"
|
||||
mask="none"
|
||||
clip-path="none" />
|
||||
<path
|
||||
style="display:inline;opacity:1;vector-effect:none;fill:#eeeeec;fill-opacity:1;stroke:#babdb6;stroke-width:0.98636663;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 95.121771,209.18914 c 0,0 -0.197205,17.71196 -1.241986,33.44373 -0.483924,7.28668 -1.491683,12.97597 -2.130552,18.3934 -0.45519,3.85988 0.58105,6.73694 2.373267,7.24471 1.728139,0.48961 3.747262,-3.87217 3.747262,-3.87217"
|
||||
id="path4742"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="csssc" />
|
||||
<path
|
||||
sodipodi:nodetypes="csssc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4744"
|
||||
d="m 34.385075,208.66134 c 0,0 0.197205,17.71196 1.241986,33.44373 0.483924,7.28668 1.491683,12.97597 2.130552,18.3934 0.45519,3.85988 -0.58105,6.73694 -2.373267,7.24471 -1.728139,0.48961 -3.747262,-3.87217 -3.747262,-3.87217"
|
||||
style="display:inline;opacity:1;vector-effect:none;fill:#eeeeec;fill-opacity:1;stroke:#babdb6;stroke-width:0.98636663;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<path
|
||||
style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#babdb6;stroke-width:0.98636663;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 33.794256,226.79927 0.594666,-18.07871"
|
||||
id="path58"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<path
|
||||
style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#babdb6;stroke-width:0.98636663;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 35.720073,242.99898 c 0,0 -1.305894,-0.86732 -1.520495,-1.08633 -0.214601,-0.21901 -0.406023,-15.1316 -0.406023,-15.1316 l 1.116802,0.0102"
|
||||
id="path56"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="czcc" />
|
||||
<path
|
||||
style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#babdb6;stroke-width:0.98636663;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 95.452345,226.07744 -0.362533,-16.8175"
|
||||
id="path54"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<path
|
||||
style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#babdb6;stroke-width:0.98636663;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 93.827188,242.82115 c 0,0 1.385456,-0.49501 1.574101,-0.65851 0.188645,-0.16351 0.05639,-16.17317 0.05639,-16.17317 l -0.703725,-0.17593"
|
||||
id="path52"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="czcc" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="display:inline;opacity:1;fill:none;fill-opacity:0.39215686;stroke:#babdb6;stroke-width:3.62082291;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="led0"
|
||||
sodipodi:cx="64.822914"
|
||||
sodipodi:cy="280.68228"
|
||||
sodipodi:rx="6.5174346"
|
||||
sodipodi:ry="6.5174413"
|
||||
d="m 69.431436,276.07375 a 6.5174346,6.5174413 0 0 1 10e-7,9.21706 6.5174346,6.5174413 0 0 1 -9.217045,0 6.5174346,6.5174413 0 0 1 -10e-7,-9.21705"
|
||||
sodipodi:start="5.4977871"
|
||||
sodipodi:end="3.9269907"
|
||||
sodipodi:open="true"
|
||||
sodipodi:arc-type="arc"
|
||||
inkscape:label="#led1" />
|
||||
<path
|
||||
style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#babdb6;stroke-width:0.98636663;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
|
||||
d="m 62.181167,187.21067 -0.0053,13.99772 c 0.798868,1.60491 0.79411,1.60258 2.56045,1.60804 1.9255,-0.003 1.931661,-0.005 2.733645,-1.59929 l -0.0049,-14.01641 c -0.79057,-1.56574 -0.793119,-1.57885 -2.72281,-1.60756 -1.766557,0.0242 -1.762015,0.025 -2.561099,1.6175 z"
|
||||
id="button2"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccc" />
|
||||
<rect
|
||||
id="button0"
|
||||
width="18.360525"
|
||||
height="26.481527"
|
||||
x="37.983463"
|
||||
y="180.65782"
|
||||
style="display:inline;fill:none;stroke-width:0.26458332"
|
||||
inkscape:label="#button0" />
|
||||
<rect
|
||||
id="button1"
|
||||
width="19.0667"
|
||||
height="26.834612"
|
||||
x="72.056366"
|
||||
y="179.95164"
|
||||
style="display:inline;fill:none;stroke-width:0.26458332"
|
||||
inkscape:label="#button1" />
|
||||
<rect
|
||||
id="button4"
|
||||
width="3.8839571"
|
||||
height="16.242002"
|
||||
x="32.334072"
|
||||
y="209.96404"
|
||||
style="display:inline;fill:none;stroke-width:0.26458332"
|
||||
inkscape:label="#button4" />
|
||||
<rect
|
||||
id="button3"
|
||||
width="4.0605006"
|
||||
height="15.006199"
|
||||
x="32.334072"
|
||||
y="227.2653"
|
||||
style="display:inline;fill:none;stroke-width:0.26458332"
|
||||
inkscape:label="#button3" />
|
||||
<rect
|
||||
id="button5"
|
||||
width="3.177783"
|
||||
height="14.653111"
|
||||
x="93.594673"
|
||||
y="210.67021"
|
||||
style="display:inline;fill:none;stroke-width:0.26458332"
|
||||
inkscape:label="#button5" />
|
||||
<rect
|
||||
id="button6"
|
||||
width="3.3543267"
|
||||
height="15.712373"
|
||||
x="93.594673"
|
||||
y="226.91222"
|
||||
style="display:inline;fill:none;stroke-width:0.26458332"
|
||||
inkscape:label="#button6" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="Buttons"
|
||||
inkscape:label="Buttons"
|
||||
transform="translate(0,-2.6458338)"
|
||||
style="display:inline">
|
||||
<g
|
||||
transform="matrix(-0.29294531,0,0,0.26458333,70.223399,-40.717196)"
|
||||
style="display:inline"
|
||||
id="button0-path"
|
||||
inkscape:label="#button0-path">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 81.663449,250.50576 157.960771,0.0352"
|
||||
id="path966"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect976"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="79.083046"
|
||||
y="247.00577" />
|
||||
<rect
|
||||
y="250.00575"
|
||||
x="238.62422"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button0-leader"
|
||||
style="color:#000000;text-align:end;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#button0-leader" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.26458333,0,0,0.26458333,40.529257,-19.549003)"
|
||||
style="display:inline"
|
||||
id="button1-path"
|
||||
inkscape:label="#button1-path">
|
||||
<path
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 336.91912,170.14213 -183.57514,0.36405"
|
||||
id="path51"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect53"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="149"
|
||||
y="167" />
|
||||
<rect
|
||||
y="169.75269"
|
||||
x="336.91913"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button1-leader"
|
||||
style="color:#000000;text-align:start;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#button1-leader" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(-0.2847136,0,0,0.26458333,87.395313,-3.7692874)"
|
||||
style="display:inline;opacity:1"
|
||||
id="button2-path"
|
||||
inkscape:label="#button2-path">
|
||||
<path
|
||||
sodipodi:nodetypes="ccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path964-6"
|
||||
d="m 79.210952,122.6933 62.691188,68.76371 165.40155,1e-5"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
<rect
|
||||
inkscape:label="#button2-leader"
|
||||
style="color:#000000;text-align:end;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
id="button2-leader"
|
||||
width="1"
|
||||
height="1"
|
||||
x="306.40533"
|
||||
y="190.93378" />
|
||||
<rect
|
||||
y="117.94263"
|
||||
x="76.303352"
|
||||
height="6.999999"
|
||||
width="6.999999"
|
||||
id="rect974-5"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.26458333,0,0,0.26458333,13.523106,5.8698781)"
|
||||
style="display:inline"
|
||||
id="button7-path"
|
||||
inkscape:label="#button7-path">
|
||||
<path
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="M 438.5178,161.34199 H 204.22621 l -10.41041,7.75114"
|
||||
id="path51-1-9-6-0"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccc" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect53-2-3-2-2"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="189"
|
||||
y="167" />
|
||||
<rect
|
||||
y="160.86166"
|
||||
x="437.87918"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button7-leader"
|
||||
style="color:#000000;text-align:start;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#button7-leader" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:label="#button3-path"
|
||||
id="button3-path"
|
||||
style="display:inline"
|
||||
transform="matrix(-0.29294531,0,0,0.26458333,58.364063,-10.132593)">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path64"
|
||||
d="m 81.659897,250.49954 118.042313,0.0476"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1.00572562;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<rect
|
||||
y="247.00577"
|
||||
x="79.083046"
|
||||
height="6.999999"
|
||||
width="6.999999"
|
||||
id="rect66"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
<rect
|
||||
inkscape:label="#button3-leader"
|
||||
style="color:#000000;text-align:end;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
id="button3-leader"
|
||||
width="1"
|
||||
height="1"
|
||||
x="199.22597"
|
||||
y="250.00575" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(-0.29294531,0,0,0.26458333,58.488898,4.7227855)"
|
||||
style="display:inline"
|
||||
id="button4-path"
|
||||
inkscape:label="#button4-path">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1.00572562;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 81.659897,250.49954 118.042313,0.0476"
|
||||
id="path72"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect74"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="79.083046"
|
||||
y="247.00577" />
|
||||
<rect
|
||||
y="250.00575"
|
||||
x="199.15065"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button4-leader"
|
||||
style="color:#000000;text-align:end;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#button4-leader" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.29294531,0,0,0.26458333,71.117413,-9.779506)"
|
||||
style="display:inline"
|
||||
id="button5-path"
|
||||
inkscape:label="#button5-path">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1.00572562;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 81.659897,250.49954 118.042313,0.0476"
|
||||
id="path80"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect82"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="79.083046"
|
||||
y="247.00577" />
|
||||
<rect
|
||||
y="250.00575"
|
||||
x="199.22597"
|
||||
height="1"
|
||||
width="1"
|
||||
id="button5-leader"
|
||||
style="color:#000000;text-align:start;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#button5-leader" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:label="#button6-path"
|
||||
id="button6-path"
|
||||
style="display:inline"
|
||||
transform="matrix(0.29294531,0,0,0.26458333,70.992573,5.0758725)">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path88"
|
||||
d="m 81.659897,250.49954 118.042313,0.0476"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1.00572562;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<rect
|
||||
y="247.00577"
|
||||
x="79.083046"
|
||||
height="6.999999"
|
||||
width="6.999999"
|
||||
id="rect90"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
|
||||
<rect
|
||||
inkscape:label="#button6-leader"
|
||||
style="color:#000000;text-align:start;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
id="button6-leader"
|
||||
width="1"
|
||||
height="1"
|
||||
x="199.15065"
|
||||
y="250.00575" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="LEDs"
|
||||
inkscape:label="LEDs"
|
||||
transform="translate(0,-2.6458338)"
|
||||
style="display:inline">
|
||||
<g
|
||||
transform="matrix(-0.29294531,0,0,0.26458333,70.145744,50.590488)"
|
||||
style="display:inline"
|
||||
id="led0-path"
|
||||
inkscape:label="#led0-path">
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
d="m 19.28901,250.49471 219.01243,0.008"
|
||||
id="path966-0-2"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
|
||||
id="rect976-2-1"
|
||||
width="6.999999"
|
||||
height="6.999999"
|
||||
x="16.834169"
|
||||
y="246.63705" />
|
||||
<rect
|
||||
y="249.97328"
|
||||
x="237.7849"
|
||||
height="1"
|
||||
width="1"
|
||||
id="led0-leader"
|
||||
style="color:#000000;text-align:end;overflow:visible;vector-effect:none;fill:#888a85;fill-opacity:1;stroke:none;stroke-linecap:round"
|
||||
inkscape:label="#rect875" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 25 KiB |
@@ -11,8 +11,7 @@
|
||||
<allow receive_sender="org.freedesktop.ratbag1"/>
|
||||
</policy>
|
||||
|
||||
<!-- allow everyone to talk to the daemon -->
|
||||
<policy context="default">
|
||||
<policy @access@>
|
||||
<allow send_destination="org.freedesktop.ratbag1"/>
|
||||
<allow receive_sender="org.freedesktop.ratbag1"/>
|
||||
</policy>
|
||||
@@ -2,4 +2,4 @@
|
||||
Name=org.freedesktop.ratbag1
|
||||
Exec=@bindir@/ratbagd
|
||||
User=root
|
||||
SystemdService=dbus-org.freedesktop.ratbag1.service
|
||||
SystemdService=ratbagd.service
|
||||
|
||||
157
doc/conf.py.in
Normal file
@@ -0,0 +1,157 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# @PACKAGE_NAME@ documentation build configuration file, created by
|
||||
# sphinx-quickstart on Wed Oct 11 13:45:08 2017.
|
||||
#
|
||||
# This file is execfile()d with the current directory set to its
|
||||
# containing dir.
|
||||
#
|
||||
# Note that not all possible configuration values are present in this
|
||||
# autogenerated file.
|
||||
#
|
||||
# All configuration values have a default; values that are commented out
|
||||
# serve to show the default.
|
||||
|
||||
# If extensions (or modules to document with autodoc) are in another directory,
|
||||
# add these directories to sys.path here. If the directory is relative to the
|
||||
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
||||
|
||||
import os
|
||||
import sys
|
||||
sys.path.insert(0, os.path.abspath('..'))
|
||||
|
||||
# -- General configuration ------------------------------------------------
|
||||
|
||||
# If your documentation needs a minimal Sphinx version, state it here.
|
||||
#
|
||||
# needs_sphinx = '1.0'
|
||||
|
||||
# Add any Sphinx extension module names here, as strings. They can be
|
||||
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
||||
# ones.
|
||||
extensions = []
|
||||
|
||||
# Add any paths that contain templates here, relative to this directory.
|
||||
templates_path = ['_templates']
|
||||
|
||||
# The suffix(es) of source filenames.
|
||||
# You can specify multiple suffix as a list of string:
|
||||
#
|
||||
# source_suffix = ['.rst', '.md']
|
||||
source_suffix = '.rst'
|
||||
|
||||
# The master toctree document.
|
||||
master_doc = 'index'
|
||||
|
||||
# General information about the project.
|
||||
project = '@PACKAGE_NAME@'
|
||||
copyright = '2017, The ratbaggers'
|
||||
author = 'The ratbaggers'
|
||||
|
||||
# The version info for the project you're documenting, acts as replacement for
|
||||
# |version| and |release|, also used in various other places throughout the
|
||||
# built documents.
|
||||
#
|
||||
# The short X.Y version.
|
||||
version = ''
|
||||
# The full version, including alpha/beta/rc tags.
|
||||
release = ''
|
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||
# for a list of supported languages.
|
||||
#
|
||||
# This is also used if you do content translation via gettext catalogs.
|
||||
# Usually you set "language" from the command line for these cases.
|
||||
language = None
|
||||
|
||||
# List of patterns, relative to source directory, that match files and
|
||||
# directories to ignore when looking for source files.
|
||||
# This patterns also effect to html_static_path and html_extra_path
|
||||
exclude_patterns = []
|
||||
|
||||
# The name of the Pygments (syntax highlighting) style to use.
|
||||
pygments_style = 'sphinx'
|
||||
|
||||
# If true, `todo` and `todoList` produce output, else they produce nothing.
|
||||
todo_include_todos = False
|
||||
|
||||
|
||||
# -- Options for HTML output ----------------------------------------------
|
||||
|
||||
# The theme to use for HTML and HTML Help pages. See the documentation for
|
||||
# a list of builtin themes.
|
||||
#
|
||||
# html_theme = 'alabaster'
|
||||
html_theme = 'sphinx_rtd_theme'
|
||||
|
||||
# Theme options are theme-specific and customize the look and feel of a theme
|
||||
# further. For a list of options available for each theme, see the
|
||||
# documentation.
|
||||
#
|
||||
# html_theme_options = {}
|
||||
|
||||
# Add any paths that contain custom static files (such as style sheets) here,
|
||||
# relative to this directory. They are copied after the builtin static files,
|
||||
# so a file named "default.css" will overwrite the builtin "default.css".
|
||||
html_static_path = ['_static']
|
||||
|
||||
|
||||
# -- Options for HTMLHelp output ------------------------------------------
|
||||
|
||||
# Output file base name for HTML help builder.
|
||||
htmlhelp_basename = '@PACKAGE_NAME@doc'
|
||||
|
||||
|
||||
# -- Options for LaTeX output ---------------------------------------------
|
||||
|
||||
latex_elements = {
|
||||
# The paper size ('letterpaper' or 'a4paper').
|
||||
#
|
||||
# 'papersize': 'letterpaper',
|
||||
|
||||
# The font size ('10pt', '11pt' or '12pt').
|
||||
#
|
||||
# 'pointsize': '10pt',
|
||||
|
||||
# Additional stuff for the LaTeX preamble.
|
||||
#
|
||||
# 'preamble': '',
|
||||
|
||||
# Latex figure (float) alignment
|
||||
#
|
||||
# 'figure_align': 'htbp',
|
||||
}
|
||||
|
||||
# Grouping the document tree into LaTeX files. List of tuples
|
||||
# (source start file, target name, title,
|
||||
# author, documentclass [howto, manual, or own class]).
|
||||
latex_documents = [
|
||||
(master_doc, '@PACKAGE_NAME@.tex', '@PACKAGE_NAME@ Documentation',
|
||||
'The ratbaggers', 'manual'),
|
||||
]
|
||||
|
||||
|
||||
# -- Options for manual page output ---------------------------------------
|
||||
|
||||
# One entry per manual page. List of tuples
|
||||
# (source start file, name, description, authors, manual section).
|
||||
man_pages = [
|
||||
(master_doc, '@PACKAGE_NAME@', '@PACKAGE_NAME@ Documentation',
|
||||
[author], 1)
|
||||
]
|
||||
|
||||
|
||||
# -- Options for Texinfo output -------------------------------------------
|
||||
|
||||
# Grouping the document tree into Texinfo files. List of tuples
|
||||
# (source start file, target name, title, author,
|
||||
# dir menu entry, description, category)
|
||||
texinfo_documents = [
|
||||
(master_doc, '@PACKAGE_NAME@', '@PACKAGE_NAME@ Documentation',
|
||||
author, '@PACKAGE_NAME@', 'One line description of project.',
|
||||
'Miscellaneous'),
|
||||
]
|
||||
|
||||
|
||||
|
||||
459
doc/dbus.rst
Normal file
@@ -0,0 +1,459 @@
|
||||
********
|
||||
DBus API
|
||||
********
|
||||
|
||||
Note: **the DBus interface is subject to change**
|
||||
|
||||
Interfaces:
|
||||
|
||||
* org.freedesktop.ratbag1.Manager
|
||||
* org.freedesktop.ratbag1.Device
|
||||
* org.freedesktop.ratbag1.Profile
|
||||
* org.freedesktop.ratbag1.Resolution
|
||||
* org.freedesktop.ratbag1.Button
|
||||
* org.freedesktop.ratbag1.Led
|
||||
|
||||
For a list of dbus types as used below, see https://dbus.freedesktop.org/doc/dbus-specification.html
|
||||
|
||||
Properties marked as **constant** do not change for the lifetime of the
|
||||
object. Properties marked as **mutable** may change, and a
|
||||
``org.freedesktop.DBus.Properties.PropertyChanged`` signal is sent for those
|
||||
unless otherwise specified.
|
||||
|
||||
All setters (whether implicit for read-write properties or explicit) return
|
||||
success instead of the internal return value because DBus does not like
|
||||
non-standard error values. Upon a ratbag error, the `Resync` signal is emitted
|
||||
on the device, indicating that clients should resync their values.
|
||||
|
||||
Values listed as enums are defined in `libratbag-enums.h <https://github.com/libratbag/libratbag/blob/master/src/libratbag-enums.h>`_
|
||||
|
||||
org.freedesktop.ratbag1.Manager
|
||||
-------------------------------
|
||||
|
||||
.. js:class:: Manager
|
||||
|
||||
The **org.freedesktop.ratbag1.Manager** interface is the entry point to
|
||||
interact with ratbagd.
|
||||
|
||||
.. js:attribute:: Devices
|
||||
|
||||
:type: ao
|
||||
|
||||
An array of read-only **object paths** to :js:class:`Device` objects
|
||||
|
||||
.. js:attribute:: Themes
|
||||
|
||||
:type: as
|
||||
|
||||
:flags: read-only, constant
|
||||
|
||||
Provides the list of available theme names. This list is guaranteed to have
|
||||
one theme available ('default'). Other themes are implementation defined.
|
||||
A theme listed here is only a guarantee that the theme is known to libratbag
|
||||
and that SVGs *may* exist, it is not a guarantee that the SVG for any
|
||||
specific device exists. In other words, a device may not have an SVG for a
|
||||
specific theme.
|
||||
|
||||
This list is static for the lifetime of ratbagd.
|
||||
|
||||
org.freedesktop.ratbag1.Device
|
||||
-------------------------------
|
||||
|
||||
.. js:class:: Device
|
||||
|
||||
The **org.freedesktop.ratbag1.Device** interface describes a single device
|
||||
known to ratbagd.
|
||||
|
||||
.. js:attribute:: Id
|
||||
|
||||
:type: as
|
||||
|
||||
:flags: read-only, constant
|
||||
|
||||
An ID describing this device. This ID should not be used for presentation to
|
||||
the user. This ID is unique for the device for the lifetime of the device
|
||||
but may be recycled when the device is removed. No guarantee is given for
|
||||
the content of the ID, the client should treat it as an opaque string.
|
||||
|
||||
.. js:attribute:: Description
|
||||
|
||||
:type: s
|
||||
:flags: read-only, constant
|
||||
|
||||
The device's name, suitable for presentation to the user.
|
||||
|
||||
.. js:attribute:: Capabilities
|
||||
|
||||
:type: au
|
||||
:flags: read-only, constant
|
||||
|
||||
The capabilities supported by this device. see `enum
|
||||
ratbag_device_capability` in libratbag-enums.h for the list of permissible
|
||||
capabilities.
|
||||
|
||||
|
||||
.. js:attribute:: Svg
|
||||
|
||||
:type: s
|
||||
:flags: read-only, constant
|
||||
|
||||
The device's SVG file name, without path.
|
||||
|
||||
.. js:attribute:: Profiles
|
||||
|
||||
:type: ao
|
||||
:flags: read-only, mutable
|
||||
|
||||
This property is mutable if the device supports adding and removing
|
||||
profiles.
|
||||
|
||||
Provides the list of profile paths for all profiles on this device, see
|
||||
:js:class:`Profile`.
|
||||
|
||||
.. js:function:: Commit() → ()
|
||||
|
||||
Commits the changes to the device. Changes to the device are batched; they
|
||||
are not written to the hardware until :js:func:`Commit()` is invoked.
|
||||
|
||||
.. js:function:: GetSvg(s) → (s)
|
||||
|
||||
:param s: the theme name
|
||||
:returns: A full path to the SVG for the given theme
|
||||
|
||||
Returns the full path to the SVG for the given theme or an
|
||||
empty string if none is available. The theme must be one of
|
||||
:js:attr:`Themes`.
|
||||
|
||||
The theme **'default'** is guaranteed to be available.
|
||||
ratbagd may return the path to a file that doesn't exist.
|
||||
This is the case if the device has SVGs available but not
|
||||
for the given theme.
|
||||
|
||||
.. js:function:: GetSvgFd(s) → (h)
|
||||
|
||||
:param s: the theme name
|
||||
:returns: An open file descriptor to the SVG for the given theme
|
||||
|
||||
Returns an open file descriptor to the SVG for the given theme or an
|
||||
errno on error. The theme must be one of :js:attr:`Themes`.
|
||||
|
||||
The theme **'default'** is guaranteed to be available.
|
||||
ratbagd may return ENOENT if a file doesn't exist.
|
||||
This is the case if the device has SVGs available but not
|
||||
for the given theme.
|
||||
|
||||
.. js:function:: Resync()
|
||||
|
||||
:type: Signal
|
||||
|
||||
Emitted when an internal error occurs. Upon receiving this
|
||||
signal, clients are expected to resync their values with
|
||||
ratbagd.
|
||||
|
||||
|
||||
org.freedesktop.ratbag1.Profile
|
||||
-------------------------------
|
||||
|
||||
.. js:class:: Profile
|
||||
|
||||
.. js:attribute:: Index
|
||||
|
||||
:type: u
|
||||
:flags: read-only, constant
|
||||
|
||||
The index of this profile
|
||||
|
||||
.. js:attribute:: Name
|
||||
|
||||
:type: s
|
||||
:flags: read-write, mutable
|
||||
|
||||
The name of this profile.
|
||||
|
||||
.. js:attribute:: Enabled
|
||||
|
||||
:type: b
|
||||
:flags: read-write, mutable
|
||||
|
||||
True if this is the profile is enabled, false otherwise.
|
||||
|
||||
Note that a disabled profile might not have correct bindings, so it's
|
||||
a good thing to rebind everything before calling :js:func:`Commit()` on the
|
||||
:js:class:`Device`.
|
||||
|
||||
.. js:attribute:: Resolutions
|
||||
|
||||
:type: ao
|
||||
:flags: read-only, mutable
|
||||
|
||||
This property is mutable if the device supports adding and removing
|
||||
resolutions.
|
||||
|
||||
Provides the object paths of all resolutions in this profile, see
|
||||
:js:class:`Resolution`
|
||||
|
||||
.. js:attribute:: Buttons
|
||||
|
||||
:type: ao
|
||||
:flags: read-only, constant
|
||||
|
||||
Provides the object paths of all buttons in this profile, see
|
||||
:js:class:`Button`
|
||||
|
||||
.. js:attribute:: Leds
|
||||
|
||||
:type: ao
|
||||
:flags: read-only, constant
|
||||
|
||||
Provides the object paths of all LEDs in this profile, see
|
||||
:js:class:`Led`
|
||||
|
||||
.. js:attribute:: IsActive
|
||||
|
||||
:type: b
|
||||
:flags: read-only, mutable
|
||||
|
||||
True if this is the currently active profile, false otherwise.
|
||||
|
||||
Profiles can only be set to active, but never to not active - at least one
|
||||
profile must be active at all times. This property is read-only, use the
|
||||
:js:func:`SetActive()` method to activate a profile.
|
||||
|
||||
.. js:function:: SetActive() → ()
|
||||
|
||||
Set this profile to be the active profile
|
||||
|
||||
org.freedesktop.ratbag1.Resolution
|
||||
----------------------------------
|
||||
|
||||
.. js:class:: Resolution
|
||||
|
||||
.. js:attribute:: Index
|
||||
|
||||
:type: u
|
||||
:flags: read-only, constant
|
||||
|
||||
Index of the resolution
|
||||
|
||||
.. js:attribute:: Capabilities
|
||||
|
||||
:type: au
|
||||
:flags: read-only, constant
|
||||
|
||||
Array of uints from the ratbag\_resolution\_capability from libratbag.h.
|
||||
|
||||
.. js:attribute:: IsActive
|
||||
|
||||
:type: b
|
||||
:flags: read-only, mutable
|
||||
|
||||
True if this is the currently active resolution, false otherwise.
|
||||
|
||||
Resolutions can only be set to active, but never to not
|
||||
active - at least one resoultion must be active at all
|
||||
times. This property is read-only, use the
|
||||
:js:func:`SetActive()` method to set a resolution as the
|
||||
active resolution.
|
||||
|
||||
.. js:attribute:: IsDefault
|
||||
|
||||
:type: b
|
||||
:flags: read-only, mutable
|
||||
|
||||
True if this is the currently default resolution, false
|
||||
otherwise. If the device does not have the default
|
||||
resolution capability, this property is always false.
|
||||
|
||||
Resolutions can only be set to default, but never to not
|
||||
default - at least one resolution must be default at all
|
||||
times. This property is read-only, use the
|
||||
:js:func:`SetDefault()` method to set a resolution as
|
||||
the default resolution.
|
||||
|
||||
.. js:attribute:: Resolution
|
||||
|
||||
:type: uu
|
||||
:flags: read-write, mutable
|
||||
|
||||
uint for the x and y resolution assigned to this entry,
|
||||
respectively. The value for the resolution must be equal to
|
||||
one of the values in :js:attr:`Resolutions`.
|
||||
|
||||
If the resolution does not support separate x/y resolutions,
|
||||
x and y must be the same value.
|
||||
|
||||
.. js:attribute:: Resolutions
|
||||
|
||||
:type: au
|
||||
:flags: read-only, constant
|
||||
|
||||
A list of permitted resolutions. Values in this list may be used in
|
||||
the :js:attr:`Resolution` property. This list is always sorted
|
||||
ascending, the lowest resolution is the first item in the list.
|
||||
|
||||
This list may be empty if the device does not support reading and/or
|
||||
writing to resolutions.
|
||||
|
||||
.. js:attribute:: ReportRate
|
||||
|
||||
:type: u
|
||||
:flags: read-write, mutable
|
||||
|
||||
uint for the report rate in Hz assigned to this entry
|
||||
|
||||
If the resolution does not have the individual report rate
|
||||
capability, changing the report rate on one resolution will
|
||||
change the report rate on all resolutions.
|
||||
|
||||
.. js:attribute:: ReportRates
|
||||
|
||||
:type: au
|
||||
:flags: read-write, constant
|
||||
|
||||
A list of permitted report rates. Values in this list may be used
|
||||
in the :js:attr:`ReportRate` property. This list is always sorted
|
||||
ascending, the lowest report rate is the first item in the list.
|
||||
|
||||
This list may be empty if the device does not support reading and/or
|
||||
writing to resolutions.
|
||||
|
||||
.. js:function:: SetDefault() → ()
|
||||
|
||||
Set this resolution to be the default
|
||||
|
||||
.. js:function:: SetActive() → ()
|
||||
|
||||
Set this resolution to be the active one
|
||||
|
||||
org.freedesktop.ratbag1.Button
|
||||
------------------------------
|
||||
|
||||
.. js:class:: Button
|
||||
|
||||
.. js:attribute:: Index
|
||||
|
||||
:type: u
|
||||
:flags: read-only, constant
|
||||
|
||||
Index of the button
|
||||
|
||||
.. js:attribute:: Type
|
||||
|
||||
:type: u
|
||||
:flags: read-only, constant
|
||||
|
||||
Enum describing the button physical type, see
|
||||
:cpp:enum:`ratbag_button_type`. This type is unrelated to the
|
||||
logical button mapping and serves to easily identify the button on
|
||||
the device.
|
||||
|
||||
.. js:attribute:: ButtonMapping
|
||||
|
||||
:type: u
|
||||
:flags: read-write, mutable
|
||||
|
||||
uint of the current button mapping (if mapping to button)
|
||||
|
||||
.. js:attribute:: SpecialMapping
|
||||
|
||||
:type: u
|
||||
:flags: read-write, mutable
|
||||
|
||||
Enum describing the current special mapping (if mapped to special)
|
||||
|
||||
.. js:attribute:: Macro
|
||||
|
||||
:type: a(uu)
|
||||
:flags: read-write, mutable
|
||||
|
||||
Array of (type, keycode), where type may be one of
|
||||
:cpp:enumerator:`RATBAG_MACRO_EVENT_KEY_PRESSED` or
|
||||
:cpp:enumerator:`RATBAG_MACRO_EVENT_KEY_RELEASED`.
|
||||
|
||||
.. js:attribute:: ActionType
|
||||
|
||||
:type: u
|
||||
:flags: read-only, mutable
|
||||
|
||||
An enum describing the action type of the button, see
|
||||
:cpp:enum:`ratbag_button_action_type` for the list of enums.
|
||||
This decides which one of :js:attr:`ButtonMapping`,
|
||||
:js:attr:`SpecialMapping` and :js:attr:`Macro` has a value.
|
||||
|
||||
.. js:attribute:: ActionTypes
|
||||
|
||||
:type: au
|
||||
:flags: read-only, constant
|
||||
|
||||
Array of :cpp:enum:`ratbag_button_action_type`, possible values
|
||||
for ActionType on the current device
|
||||
|
||||
.. js:function:: Disable() → ()
|
||||
|
||||
Disable this button
|
||||
|
||||
org.freedesktop.ratbag1.Led
|
||||
---------------------------
|
||||
|
||||
.. js:class:: Led
|
||||
|
||||
.. js:attribute:: Index
|
||||
|
||||
:type: u
|
||||
:flags: read-only, constant
|
||||
|
||||
Index of the LED
|
||||
|
||||
.. js:attribute:: Mode
|
||||
|
||||
:type: u
|
||||
:flags: read-write, mutable
|
||||
|
||||
uint mapping to the mode enum from libratbag
|
||||
|
||||
.. js:attribute:: Modes
|
||||
|
||||
:type: au
|
||||
:flags: read-only, constant
|
||||
|
||||
A list of modes supported by this LED
|
||||
|
||||
.. js:attribute:: Type
|
||||
|
||||
:type: u
|
||||
:flags: read-only, mutable
|
||||
|
||||
enum describing the LED type
|
||||
|
||||
.. js:attribute:: Color
|
||||
|
||||
:type: (uuu)
|
||||
:flags: read-write, mutable
|
||||
|
||||
uint triplet (RGB) of the LED's color
|
||||
|
||||
.. js:attribute:: ColorDepth
|
||||
|
||||
:type: u
|
||||
:flags: read-only, constant
|
||||
|
||||
The color depth of this LED as one of the constants in libratbag-enums.h
|
||||
|
||||
.. js:attribute:: EffectDuration
|
||||
|
||||
:type: u
|
||||
:flags: read-write, mutable
|
||||
|
||||
The effect duration in ms, possible values are in the range 0 - 10000
|
||||
|
||||
.. js:attribute:: Brightness
|
||||
|
||||
:type: u
|
||||
:flags: read-write, mutable
|
||||
|
||||
The brightness of the LED, possible values are in the range 0 - 255
|
||||
|
||||
For easier debugging, objects paths are constructed from the device. e.g.
|
||||
`/org/freedesktop/ratbag/button/event5/p0/b10` is the button interface for
|
||||
button 10 on profile 0 on event5. The naming is subject to change. Do not
|
||||
rely on a constructed object path in your application.
|
||||
53
doc/doxygen-enums-to-rst.xsl
Normal file
@@ -0,0 +1,53 @@
|
||||
<!-- XSLT script to combine the generated output into a single file.
|
||||
If you have xsltproc you could use:
|
||||
xsltproc combine.xslt index.xml >all.xml
|
||||
-->
|
||||
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
|
||||
<xsl:output method="text" indent="yes"/>
|
||||
<xsl:strip-space elements="detaileddescription briefdescription"/>
|
||||
|
||||
<xsl:template match="/">
|
||||
<xsl:text>
|
||||
************
|
||||
Enumerations
|
||||
************
|
||||
|
||||
This document contains the enums used by libratbag's DBus interface.
|
||||
|
||||
</xsl:text>
|
||||
<xsl:apply-templates select="//memberdef"/>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="memberdef">
|
||||
|
||||
<xsl:value-of select="name"/>
|
||||
---------------------------------------
|
||||
|
||||
<xsl:text>
</xsl:text>
|
||||
<xsl:if test="briefdescription != ''">
|
||||
<xsl:value-of select="briefdescription"/>
|
||||
</xsl:if>
|
||||
<xsl:if test="detaileddescription != ''">
|
||||
<xsl:value-of select="detaileddescription"/>
|
||||
</xsl:if>
|
||||
|
||||
.. cpp:enum:: <xsl:value-of select="name"/>
|
||||
|
||||
<xsl:text>

</xsl:text>
|
||||
<xsl:apply-templates select="./enumvalue"/>
|
||||
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="enumvalue">
|
||||
.. cpp:enumerator:: <xsl:value-of select="name"/><xsl:text> </xsl:text><xsl:value-of select="initializer"/>
|
||||
<xsl:text>

</xsl:text>
|
||||
<xsl:if test="briefdescription != ''">
|
||||
<xsl:text> </xsl:text><xsl:value-of select="briefdescription"/>
|
||||
</xsl:if>
|
||||
<xsl:if test="detaileddescription != ''">
|
||||
<xsl:text> </xsl:text><xsl:value-of select="detaileddescription"/>
|
||||
</xsl:if>
|
||||
<xsl:text>

</xsl:text>
|
||||
</xsl:template>
|
||||
</xsl:stylesheet>
|
||||
|
||||
20
doc/index.rst
Normal file
@@ -0,0 +1,20 @@
|
||||
.. libratbag documentation master file, created by
|
||||
sphinx-quickstart on Wed Oct 11 13:45:08 2017.
|
||||
You can adapt this file completely to your liking, but it should at least
|
||||
contain the root `toctree` directive.
|
||||
|
||||
**********************
|
||||
The libratbag DBus API
|
||||
**********************
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
:caption: Contents:
|
||||
|
||||
The DBus Interfaces <dbus.rst>
|
||||
Enumerations <enums.rst>
|
||||
|
||||
This document describes the DBus API that is the public interface for
|
||||
libratbag.
|
||||
|
||||
Note: **the DBus interface is subject to change**
|
||||
15
doc/libratbag.doxygen.in
Normal file
@@ -0,0 +1,15 @@
|
||||
PROJECT_NAME = @PACKAGE_NAME@
|
||||
PROJECT_NUMBER = @PACKAGE_VERSION@
|
||||
PROJECT_BRIEF = "A mouse configuration library"
|
||||
JAVADOC_AUTOBRIEF = YES
|
||||
TAB_SIZE = 8
|
||||
OPTIMIZE_OUTPUT_FOR_C = YES
|
||||
EXTRACT_ALL = YES
|
||||
EXTRACT_STATIC = YES
|
||||
MAX_INITIALIZER_LINES = 0
|
||||
QUIET = YES
|
||||
# Keep this list in sync with meson.build
|
||||
INPUT = @top_srcdir@/src/libratbag-enums.h
|
||||
GENERATE_HTML = NO
|
||||
GENERATE_XML = YES
|
||||
GENERATE_LATEX = NO
|
||||
73
doc/meson.build
Normal file
@@ -0,0 +1,73 @@
|
||||
if get_option('documentation')
|
||||
|
||||
cmd_sphinx = find_program('sphinx-build-3', 'sphinx-build3')
|
||||
cmd_doxygen = find_program('doxygen')
|
||||
cmd_xsltproc = find_program('xsltproc')
|
||||
|
||||
doc_config = configuration_data()
|
||||
doc_config.set('PACKAGE_NAME', meson.project_name())
|
||||
doc_config.set('PACKAGE_VERSION', meson.project_version())
|
||||
doc_config.set('top_srcdir', meson.source_root())
|
||||
|
||||
# We have a dependency chain here:
|
||||
# - generate doxygen xml from the source
|
||||
# - convert the xml to rst with xstlproc
|
||||
# - generate the sphinx conf
|
||||
# - run sphinx against the generated rst
|
||||
doxyfile = configure_file(input : 'libratbag.doxygen.in',
|
||||
output : 'libratbag.doxygen',
|
||||
configuration : doc_config,
|
||||
install : false)
|
||||
|
||||
src_doxygen = [ doxyfile,
|
||||
files('../src/libratbag-enums.h') ]
|
||||
doxygen = custom_target('doxygen',
|
||||
input : src_doxygen,
|
||||
output : [ 'xml' ],
|
||||
command : [ cmd_doxygen, doxyfile ],
|
||||
install : false,
|
||||
build_by_default : true)
|
||||
|
||||
|
||||
# Sphinx really really wants a _static directory in its source tree. Let's
|
||||
# make it happy
|
||||
run_command('mkdir', '-p', join_paths(meson.build_root(), 'doc', '_static'))
|
||||
|
||||
xsl = join_paths(meson.source_root(), 'doc', 'doxygen-enums-to-rst.xsl')
|
||||
src_xsltproc = join_paths(meson.build_root(), 'xml', 'group__enums.xml')
|
||||
dst_xstlproc = join_paths(meson.build_root(), 'doc', 'enums.rst')
|
||||
rst_enum = custom_target('xsltproc',
|
||||
input : doxygen,
|
||||
output : 'enums.rst',
|
||||
command: [ cmd_xsltproc, '-o', dst_xstlproc, xsl, src_xsltproc],
|
||||
build_by_default : true)
|
||||
|
||||
# Effectively a noop copy. We *must* generate enums.rst so that will end up
|
||||
# in the build directory. sphinx doesn't allow for multiple source
|
||||
# directories, so any .rst and the conf.py must be copied over to the
|
||||
# build directory too
|
||||
src_rsts = ['index.rst', 'dbus.rst']
|
||||
dst_rsts = [rst_enum]
|
||||
foreach rst : src_rsts
|
||||
f = configure_file(input : rst,
|
||||
output : rst,
|
||||
configuration : doc_config,
|
||||
install : false)
|
||||
dst_rsts += f
|
||||
endforeach
|
||||
|
||||
sphinx_conf = configure_file(input : 'conf.py.in',
|
||||
output : 'conf.py',
|
||||
configuration : doc_config,
|
||||
install : false)
|
||||
|
||||
custom_target('sphinx',
|
||||
input : [ sphinx_conf, dst_rsts ],
|
||||
output : 'html',
|
||||
command : [ cmd_sphinx, '-b', 'html', '-q', '-n',
|
||||
join_paths(meson.build_root(), 'doc'),
|
||||
join_paths(meson.build_root(), 'doc', 'html') ],
|
||||
build_by_default : true,
|
||||
install : false)
|
||||
|
||||
endif
|
||||
@@ -1,237 +0,0 @@
|
||||
# Database for libratbag to select the correct driver to use for gaming mice.
|
||||
#
|
||||
# The lookup keys are composed in:
|
||||
# 70-libratbag-mouse.rules
|
||||
#
|
||||
# Match string format:
|
||||
# mouse:<subsystem>:v<vid>p<pid>:name:<name>:
|
||||
#
|
||||
# Supported subsystems: usb, bluetooth
|
||||
# vid/pid as 4-digit hex lowercase vendor/product
|
||||
#
|
||||
# if vid/pid is unavailable, use
|
||||
# mouse:*:name:<name>:
|
||||
# if name is unavailable, use
|
||||
# mouse:<subsystem>:v<vid>p<pid>:*
|
||||
#
|
||||
# For example, the following 5 matches all match the same mouse:
|
||||
# mouse:usb:v17efp6019:name:Lenovo Optical USB Mouse:
|
||||
# mouse:usb:*:name:Lenovo Optical USB Mouse:
|
||||
# mouse:usb:v17efp6019:*
|
||||
# mouse:*:name:Lenovo Optical USB Mouse:
|
||||
#
|
||||
# To add local entries, create a new file
|
||||
# /etc/udev/hwdb.d/71-libratbat-mouse-local.hwdb
|
||||
# and add your rules there. To load the new rules execute (as root):
|
||||
# udevadm hwdb --update
|
||||
# udevadm trigger /dev/input/eventXX
|
||||
# where /dev/input/eventXX is the mouse in question. If in
|
||||
# doubt, simply use /dev/input/event* to reload all input rules.
|
||||
#
|
||||
# If your changes are generally applicable, preferably send them as a pull
|
||||
# request to
|
||||
# https://github.com/libratbag/libratbag
|
||||
# or create a bug report on https://github.com/libratbag/libratbag/issues and
|
||||
# include your new rules, a description of the device, and the output of
|
||||
# udevadm info /dev/input/eventXX
|
||||
# (or /dev/input/event*).
|
||||
#
|
||||
# Allowed properties are:
|
||||
# RATBAG_DRIVER
|
||||
# RATBAG_SVG
|
||||
|
||||
# Sort by brand, driver
|
||||
|
||||
|
||||
##########################################
|
||||
# Etekcity
|
||||
##########################################
|
||||
|
||||
mouse:usb:v1ea7p4011:name:*:
|
||||
RATBAG_DRIVER=etekcity
|
||||
RATBAG_SVG=etekcity.svg
|
||||
|
||||
##########################################
|
||||
# Logitech
|
||||
##########################################
|
||||
|
||||
# M705
|
||||
mouse:usb:v046dp101b:name:*:
|
||||
RATBAG_DRIVER=hidpp10
|
||||
|
||||
# M570
|
||||
mouse:usb:v046dp1028:name:*:
|
||||
RATBAG_DRIVER=hidpp10
|
||||
|
||||
# G5
|
||||
mouse:usb:v046dpc041:name:*:
|
||||
RATBAG_DRIVER=hidpp10
|
||||
RATBAG_HIDPP10_DPI_LIST=400;800;1600;2000
|
||||
|
||||
# G5 2007
|
||||
# http://support.logitech.com/en_us/product/g5-laser-mouse-product/specs
|
||||
mouse:usb:v046dpc049:name:*:
|
||||
RATBAG_DRIVER=hidpp10
|
||||
RATBAG_HIDPP10_DPI_LIST=400;800;1600;2000
|
||||
RATBAG_HIDPP10_PROFILE_COUNT=1
|
||||
|
||||
# G7
|
||||
# http://support.logitech.com/en_us/product/g7-laser-cordless-mouse/specs
|
||||
mouse:usb:v046dpc51a:name:*:
|
||||
RATBAG_DRIVER=hidpp10
|
||||
RATBAG_HIDPP10_PROFILE_COUNT=1
|
||||
|
||||
# G9
|
||||
# http://support.logitech.com/en_us/product/g9-laser-mouse/specs
|
||||
mouse:usb:v046dpc048:name:*:
|
||||
RATBAG_DRIVER=hidpp10
|
||||
RATBAG_HIDPP10_DPI_LIST=0;200;400;600;800;1000;1200;1400;1600;1800;2000;2200;2400;2600;2800;3000;3200
|
||||
RATBAG_HIDPP10_PROFILE=G9
|
||||
RATBAG_HIDPP10_PROFILE_COUNT=5
|
||||
|
||||
# G9x [Original]
|
||||
# http://support.logitech.com/en_us/product/g9x-laser-mouse/specs
|
||||
mouse:usb:v046dpc066:name:*:
|
||||
RATBAG_DRIVER=hidpp10
|
||||
RATBAG_HIDPP10_DPI=0:5700@23.53
|
||||
RATBAG_HIDPP10_PROFILE=G500
|
||||
RATBAG_HIDPP10_PROFILE_COUNT=5
|
||||
|
||||
# G9x [Call of Duty MW3 Edition]
|
||||
# http://support.logitech.com/en_us/product/laser-mouse-g9x/specs
|
||||
mouse:usb:v046dpc249:name:*:
|
||||
RATBAG_DRIVER=hidpp10
|
||||
RATBAG_HIDPP10_DPI=0:5700@23.53
|
||||
RATBAG_HIDPP10_PROFILE=G500
|
||||
RATBAG_HIDPP10_PROFILE_COUNT=5
|
||||
|
||||
# G300
|
||||
mouse:usb:v046dpc246:name:*:
|
||||
RATBAG_DRIVER=logitech_g300
|
||||
RATBAG_SVG=logitech-g300.svg
|
||||
|
||||
# G403 over USB
|
||||
mouse:usb:v046dpc082:name:*:
|
||||
RATBAG_DRIVER=hidpp20
|
||||
RATBAG_SVG=logitech-g403.svg
|
||||
|
||||
# G500
|
||||
# http://support.logitech.com/en_us/product/gaming-mouse-g500/specs
|
||||
mouse:usb:v046dpc068:name:*:
|
||||
RATBAG_DRIVER=hidpp10
|
||||
RATBAG_SVG=logitech-g500.svg
|
||||
RATBAG_HIDPP10_DPI=0:5700@23.53
|
||||
RATBAG_HIDPP10_PROFILE=G500
|
||||
RATBAG_HIDPP10_PROFILE_COUNT=1
|
||||
|
||||
# G500s
|
||||
# http://support.logitech.com/en_us/product/g500s-laser-gaming-mouse/specs
|
||||
mouse:usb:v046dpc24e:name:*:
|
||||
RATBAG_DRIVER=hidpp10
|
||||
RATBAG_SVG=logitech-g500s.svg
|
||||
RATBAG_HIDPP10_DPI=0:8200@50
|
||||
RATBAG_HIDPP10_PROFILE=G500
|
||||
RATBAG_HIDPP10_PROFILE_COUNT=1
|
||||
|
||||
# G502 Proteus Core over USB
|
||||
mouse:usb:v046dpc07d:name:*:
|
||||
RATBAG_DRIVER=hidpp20
|
||||
RATBAG_SVG=logitech-g502.svg
|
||||
|
||||
# G502 Proteus Spectrum over USB
|
||||
mouse:usb:v046dpc332:name:*:
|
||||
RATBAG_DRIVER=hidpp20
|
||||
RATBAG_SVG=logitech-g502.svg
|
||||
|
||||
# G700 over USB
|
||||
# http://support.logitech.com/en_us/product/wireless-gaming-mouse-g700/specs
|
||||
mouse:usb:v046dpc06b:name:*:
|
||||
RATBAG_DRIVER=hidpp10
|
||||
RATBAG_SVG=logitech-g700.svg
|
||||
RATBAG_HIDPP10_DPI=0:5700@23.53
|
||||
RATBAG_HIDPP10_PROFILE=G700
|
||||
RATBAG_HIDPP10_PROFILE_COUNT=5
|
||||
|
||||
# G700 over wireless USB
|
||||
# http://support.logitech.com/en_us/product/wireless-gaming-mouse-g700/specs
|
||||
mouse:usb:v046dpc531:name:*:
|
||||
RATBAG_DRIVER=hidpp10
|
||||
RATBAG_HIDPP10_DPI=0:5700@23.53
|
||||
RATBAG_HIDPP10_PROFILE=G700
|
||||
RATBAG_HIDPP10_INDEX=1
|
||||
RATBAG_HIDPP10_PROFILE_COUNT=5
|
||||
|
||||
# G700s over USB
|
||||
# http://support.logitech.com/en_us/product/g700s-rechargable-wireless-gaming-mouse/specs
|
||||
mouse:usb:v046dpc07c:name:*:
|
||||
RATBAG_DRIVER=hidpp10
|
||||
RATBAG_SVG=logitech-g700.svg
|
||||
RATBAG_HIDPP10_DPI=0:8200@50
|
||||
RATBAG_HIDPP10_PROFILE=G700
|
||||
RATBAG_HIDPP10_PROFILE_COUNT=5
|
||||
|
||||
# G700s over wireless USB
|
||||
# http://support.logitech.com/en_us/product/g700s-rechargable-wireless-gaming-mouse/specs
|
||||
mouse:usb:v046dpc531:name:*:
|
||||
RATBAG_DRIVER=hidpp10
|
||||
RATBAG_SVG=logitech-g700.svg
|
||||
RATBAG_HIDPP10_DPI=0:8200@50
|
||||
RATBAG_HIDPP10_PROFILE=G700
|
||||
RATBAG_HIDPP10_INDEX=1
|
||||
RATBAG_HIDPP10_PROFILE_COUNT=5
|
||||
|
||||
# MX Master over unifying
|
||||
mouse:usb:v046dp4041:name:*:
|
||||
# MX Master over bluetooth
|
||||
mouse:bluetooth:v046dpb012:name:*:
|
||||
RATBAG_DRIVER=hidpp20
|
||||
RATBAG_SVG=logitech-mx_master.svg
|
||||
|
||||
# T650 over unifying
|
||||
mouse:usb:v046dp4101:name:*:
|
||||
RATBAG_DRIVER=hidpp20
|
||||
|
||||
# M325 over unifying
|
||||
mouse:usb:v046dp400a:name:*:
|
||||
RATBAG_DRIVER=hidpp20
|
||||
|
||||
# G303 over USB
|
||||
mouse:usb:v046dpc080:name:*:
|
||||
RATBAG_DRIVER=hidpp20
|
||||
RATBAG_SVG=logitech-g303.svg
|
||||
|
||||
# Wireless Touchpad (Unifying)
|
||||
mouse:usb:v046dp4011:name:*:
|
||||
RATBAG_DRIVER=hidpp20
|
||||
|
||||
# G602 over wireless USB
|
||||
mouse:usb:v046dpc537:name:*:
|
||||
RATBAG_HIDPP20_INDEX=1
|
||||
|
||||
# G900 over USB
|
||||
mouse:usb:v046dpc081:name:*:
|
||||
RATBAG_SVG=logitech-g900.svg
|
||||
|
||||
# G900, G403 over wireless USB
|
||||
mouse:usb:v046dpc539:name:*:
|
||||
RATBAG_DRIVER=hidpp20
|
||||
RATBAG_SVG=logitech-g900.svg
|
||||
RATBAG_HIDPP20_INDEX=1
|
||||
|
||||
|
||||
##########################################
|
||||
# Roccat
|
||||
##########################################
|
||||
|
||||
mouse:usb:v1e7dp2e22:name:*:
|
||||
RATBAG_DRIVER=roccat
|
||||
RATBAG_SVG=roccat-kone-xtd.svg
|
||||
|
||||
|
||||
##########################################
|
||||
# G.Skill
|
||||
##########################################
|
||||
|
||||
# MX-780
|
||||
mouse:usb:v28dap3101:name:*:
|
||||
RATBAG_DRIVER=gskill
|
||||
@@ -1,24 +0,0 @@
|
||||
# do not edit this file, it will be overwritten on update
|
||||
|
||||
ACTION=="remove", GOTO="mouse_end"
|
||||
KERNEL!="event*", GOTO="mouse_end"
|
||||
ENV{ID_INPUT}=="", GOTO="mouse_end"
|
||||
|
||||
# mouse:<subsystem>:v<vid>p<pid>:name:<name>:*
|
||||
KERNELS=="input*", ENV{ID_BUS}=="usb", \
|
||||
IMPORT{builtin}="hwdb 'mouse:$env{ID_BUS}:v$attr{id/vendor}p$attr{id/product}:name:$attr{name}:'", \
|
||||
GOTO="mouse_end"
|
||||
KERNELS=="input*", ENV{ID_BUS}=="bluetooth", \
|
||||
IMPORT{builtin}="hwdb 'mouse:$env{ID_BUS}:v$attr{id/vendor}p$attr{id/product}:name:$attr{name}:'", \
|
||||
GOTO="mouse_end"
|
||||
KERNELS=="input*", ENV{DEVPATH}=="/devices/virtual/misc/uhid/0003:*", \
|
||||
IMPORT{builtin}="hwdb 'mouse:usb:v$attr{id/vendor}p$attr{id/product}:name:$attr{name}:'", \
|
||||
GOTO="mouse_end"
|
||||
KERNELS=="input*", ENV{DEVPATH}=="/devices/virtual/misc/uhid/0005:*", \
|
||||
IMPORT{builtin}="hwdb 'mouse:bluetooth:v$attr{id/vendor}p$attr{id/product}:name:$attr{name}:'", \
|
||||
GOTO="mouse_end"
|
||||
DRIVERS=="psmouse", SUBSYSTEMS=="serio", \
|
||||
IMPORT{builtin}="hwdb 'mouse:ps2::name:$attr{device/name}:'", \
|
||||
GOTO="mouse_end"
|
||||
|
||||
LABEL="mouse_end"
|
||||
393
meson.build
@@ -1,7 +1,8 @@
|
||||
project('libratbag', 'c', 'cpp',
|
||||
version : '0.9.900',
|
||||
version : '0.9.904',
|
||||
license : 'MIT/Expat',
|
||||
default_options : [ 'c_std=gnu99', 'warning_level=2' ])
|
||||
default_options : [ 'c_std=gnu99', 'warning_level=2' ],
|
||||
meson_version : '>= 0.40.0')
|
||||
|
||||
libratbag_version = meson.project_version().split('.')
|
||||
|
||||
@@ -37,19 +38,51 @@ add_project_arguments(cppflags, language: 'cpp')
|
||||
# is generated at the end of this file
|
||||
config_h = configuration_data()
|
||||
config_h.set('_GNU_SOURCE', '1')
|
||||
config_h.set_quoted('RATBAG_VERSION', meson.project_version())
|
||||
config_h.set_quoted('FALLBACK_SVG_NAME', 'fallback.svg')
|
||||
libratbag_data_dir = join_paths(get_option('prefix'),
|
||||
get_option('datadir'),
|
||||
'libratbag')
|
||||
libratbag_data_dir_devel = join_paths(meson.source_root(), 'data')
|
||||
config_h.set_quoted('LIBRATBAG_DATA_DIR', libratbag_data_dir)
|
||||
|
||||
# Coverity breaks because it doesn't define _Float128 correctly, you'll end
|
||||
# up with a bunch of messages in the form:
|
||||
# "/usr/include/stdlib.h", line 133: error #20: identifier "_Float128" is
|
||||
# undefined
|
||||
# extern _Float128 strtof128 (const char *__restrict __nptr,
|
||||
# ^
|
||||
# We don't use float128 ourselves, it gets pulled in from math.h or
|
||||
# something, so let's just define it as uint128 and move on.
|
||||
# Unfortunately we can't detect the coverity build at meson configure
|
||||
# time, we only know it fails at runtime. So make this an option instead, to
|
||||
# be removed when coverity fixes this again.
|
||||
if get_option('coverity')
|
||||
config_h.set('_Float128', '__uint128_t')
|
||||
config_h.set('_Float32', 'int')
|
||||
config_h.set('_Float32x', 'int')
|
||||
config_h.set('_Float64', 'long')
|
||||
config_h.set('_Float64x', 'long')
|
||||
endif
|
||||
|
||||
# dependencies
|
||||
pkgconfig = import('pkgconfig')
|
||||
dep_udev = dependency('libudev')
|
||||
dep_libevdev = dependency('libevdev')
|
||||
dep_libsystemd = dependency('libsystemd', version : '>=227')
|
||||
dep_systemd = dependency('systemd')
|
||||
dep_glib = dependency('glib-2.0')
|
||||
dep_lm = cc.find_library('m')
|
||||
|
||||
if get_option('logind-provider') == 'elogind'
|
||||
logind_dep = dependency('libelogind', version : '>=227')
|
||||
else
|
||||
logind_dep = dependency('libsystemd', version : '>=227')
|
||||
endif
|
||||
|
||||
enable_systemd = get_option('systemd')
|
||||
if enable_systemd
|
||||
dep_systemd = dependency('systemd')
|
||||
endif
|
||||
|
||||
#### libutil.a ####
|
||||
src_libutil = [
|
||||
'src/libratbag-util.c',
|
||||
@@ -121,16 +154,21 @@ pkgconfig.generate (
|
||||
|
||||
#### libratbag.so ####
|
||||
src_libratbag = [
|
||||
'src/libratbag-enums.h',
|
||||
'src/libratbag.h',
|
||||
'src/driver-etekcity.c',
|
||||
'src/driver-hidpp20.c',
|
||||
'src/driver-hidpp10.c',
|
||||
'src/driver-logitech-g300.c',
|
||||
'src/driver-logitech-g600.c',
|
||||
'src/driver-roccat.c',
|
||||
'src/driver-gskill.c',
|
||||
'src/driver-steelseries.c',
|
||||
'src/driver-test.c',
|
||||
'src/libratbag.c',
|
||||
'src/libratbag.h',
|
||||
'src/libratbag-data.c',
|
||||
'src/libratbag-data.h',
|
||||
'src/libratbag-hidraw.c',
|
||||
'src/libratbag-hidraw.h',
|
||||
'src/libratbag-private.h',
|
||||
@@ -142,19 +180,11 @@ src_libratbag = [
|
||||
deps_libratbag = [
|
||||
dep_udev,
|
||||
dep_libevdev,
|
||||
dep_glib,
|
||||
dep_libutil,
|
||||
dep_libhidpp,
|
||||
]
|
||||
|
||||
libratbag_version_h_config = configuration_data()
|
||||
libratbag_version_h_config.set_quoted('LIBRATBAG_VERSION', meson.project_version())
|
||||
|
||||
libratbag_version_h = configure_file(
|
||||
output : 'libratbag-version.h',
|
||||
configuration : libratbag_version_h_config,
|
||||
install: false,
|
||||
)
|
||||
|
||||
lib_libratbag = static_library('ratbag',
|
||||
src_libratbag,
|
||||
include_directories : include_directories('.'),
|
||||
@@ -183,33 +213,6 @@ lib_libshared = static_library('shared',
|
||||
)
|
||||
dep_libshared = declare_dependency(link_with: lib_libshared)
|
||||
|
||||
#### ratbag-command ####
|
||||
src_ratbag_command = [ 'tools/ratbag-command.c' ]
|
||||
deps_ratbag_command = [
|
||||
dep_libshared,
|
||||
dep_libratbag,
|
||||
dep_libevdev
|
||||
]
|
||||
|
||||
executable('ratbag-command',
|
||||
src_ratbag_command,
|
||||
dependencies : deps_ratbag_command,
|
||||
include_directories : include_directories('src'),
|
||||
install : false,
|
||||
)
|
||||
|
||||
man_config = configuration_data()
|
||||
|
||||
man_config.set('version', meson.project_version())
|
||||
|
||||
man_ratbag_command = configure_file (
|
||||
input: 'tools/ratbag-command.man',
|
||||
output: 'ratbag-command.1',
|
||||
configuration: man_config,
|
||||
install : true,
|
||||
install_dir : join_paths(get_option('mandir'), 'man1')
|
||||
)
|
||||
|
||||
#### hidpp10-dump-page ####
|
||||
src_hidpp10_dump_page = [ 'tools/hidpp10-dump-page.c' ]
|
||||
executable('hidpp10-dump-page',
|
||||
@@ -228,6 +231,15 @@ executable('hidpp20-dump-page',
|
||||
install : false,
|
||||
)
|
||||
|
||||
#### hidpp20-reset ####
|
||||
src_hidpp20_reset = [ 'tools/hidpp20-reset.c' ]
|
||||
executable('hidpp20-reset',
|
||||
src_hidpp20_reset,
|
||||
dependencies : [ dep_libhidpp ],
|
||||
include_directories : include_directories('src'),
|
||||
install : false,
|
||||
)
|
||||
|
||||
#### lur-command ####
|
||||
src_lur_command = [ 'tools/lur-command.c' ]
|
||||
executable('lur-command',
|
||||
@@ -237,6 +249,10 @@ executable('lur-command',
|
||||
install : true,
|
||||
)
|
||||
|
||||
man_config = configuration_data()
|
||||
|
||||
man_config.set('version', meson.project_version())
|
||||
|
||||
man_lur_command = configure_file (
|
||||
input: 'tools/lur-command.man',
|
||||
output: 'lur-command.1',
|
||||
@@ -245,54 +261,111 @@ man_lur_command = configure_file (
|
||||
install_dir : join_paths(get_option('mandir'), 'man1')
|
||||
)
|
||||
|
||||
#### hwdb ####
|
||||
udev_dir = get_option('udev-dir')
|
||||
if udev_dir == ''
|
||||
udev_dir = '@0@/lib/udev'.format(get_option('prefix'))
|
||||
endif
|
||||
udev_rules_dir = '@0@/rules.d'.format(udev_dir)
|
||||
udev_hwdb_dir = '@0@/hwdb.d'.format(udev_dir)
|
||||
#### data files ####
|
||||
# list ordered by git ls-files data/devices/*.device
|
||||
data_files = files(
|
||||
'data/devices/etekcity-scroll-alpha.device',
|
||||
'data/devices/gskill-MX-780.device',
|
||||
'data/devices/logitech-M325.device',
|
||||
'data/devices/logitech-M570.device',
|
||||
'data/devices/logitech-M705.device',
|
||||
'data/devices/logitech-MX-Master.device',
|
||||
'data/devices/logitech-MX-Master-2S.device',
|
||||
'data/devices/logitech-T650.device',
|
||||
'data/devices/logitech-Wireless-Touchpad.device',
|
||||
'data/devices/logitech-g-pro-wireless.device',
|
||||
'data/devices/logitech-g-pro.device',
|
||||
'data/devices/logitech-g102-g203.device',
|
||||
'data/devices/logitech-g300.device',
|
||||
'data/devices/logitech-g302.device',
|
||||
'data/devices/logitech-g303.device',
|
||||
'data/devices/logitech-g402.device',
|
||||
'data/devices/logitech-g403.device',
|
||||
'data/devices/logitech-g5-2007.device',
|
||||
'data/devices/logitech-g5.device',
|
||||
'data/devices/logitech-g500.device',
|
||||
'data/devices/logitech-g500s.device',
|
||||
'data/devices/logitech-g502-HERO-over-USB.device',
|
||||
'data/devices/logitech-g502-Proteus-Core-over-USB.device',
|
||||
'data/devices/logitech-g502-Proteus-Spectrum-over-USB.device',
|
||||
'data/devices/logitech-g600.device',
|
||||
'data/devices/logitech-g602.device',
|
||||
'data/devices/logitech-g7.device',
|
||||
'data/devices/logitech-g700-wireless.device',
|
||||
'data/devices/logitech-g700.device',
|
||||
'data/devices/logitech-g700s-wireless.device',
|
||||
'data/devices/logitech-g700s.device',
|
||||
'data/devices/logitech-g703.device',
|
||||
'data/devices/logitech-g9.device',
|
||||
'data/devices/logitech-g900-wireless.device',
|
||||
'data/devices/logitech-g900.device',
|
||||
'data/devices/logitech-g903.device',
|
||||
'data/devices/logitech-g9x-[Call-of-Duty-MW3-Edition].device',
|
||||
'data/devices/logitech-g9x-[Original].device',
|
||||
'data/devices/logitech-gpowerplay-wireless.device',
|
||||
'data/devices/logitech-MX-Anywhere2.device',
|
||||
'data/devices/logitech-MX-Anywhere2S.device',
|
||||
'data/devices/roccat-kone-xtd.device',
|
||||
'data/devices/steelseries-kinzu-v2.device',
|
||||
'data/devices/steelseries-rival-310.device',
|
||||
'data/devices/steelseries-rival-600.device',
|
||||
'data/devices/steelseries-rival.device',
|
||||
'data/devices/steelseries-sensei-310.device',
|
||||
'data/devices/steelseries-sensei-raw.device',
|
||||
)
|
||||
|
||||
install_data('hwdb/70-libratbag-mouse.rules',
|
||||
install_dir : udev_rules_dir)
|
||||
install_data('hwdb/70-libratbag-mouse.hwdb',
|
||||
install_dir : udev_hwdb_dir)
|
||||
install_data(data_files,
|
||||
install_dir : join_paths(get_option('datadir'), 'libratbag', 'devices'))
|
||||
|
||||
data_parse_test = find_program(join_paths(meson.source_root(), 'data/devices/data-parse-test.py'))
|
||||
test('data-parse-test', data_parse_test,
|
||||
args : [ '--svg-dir', join_paths(meson.source_root(), 'data/default'),
|
||||
'--svg-dir', join_paths(meson.source_root(), 'data/gnome') ] + data_files)
|
||||
|
||||
#### svg files ####
|
||||
default_svg_files = [
|
||||
'data/default/etekcity.svg',
|
||||
'data/default/logitech-g300.svg',
|
||||
'data/default/logitech-g303.svg',
|
||||
'data/default/logitech-g500s.svg',
|
||||
'data/default/logitech-g502.svg',
|
||||
'data/default/logitech-g700.svg',
|
||||
'data/default/logitech-g900.svg',
|
||||
'data/default/logitech-mx_master.svg',
|
||||
'data/default/roccat-kone-xtd.svg'
|
||||
]
|
||||
install_data(default_svg_files,
|
||||
install_dir : join_paths(get_option('datadir'), 'libratbag', 'default'))
|
||||
|
||||
gnome_svg_files = [
|
||||
# list ordered by git ls-files data/gnome/*.svg
|
||||
gnome_svg_files = files(
|
||||
'data/gnome/fallback.svg',
|
||||
'data/gnome/logitech-g102-g203.svg',
|
||||
'data/gnome/logitech-g300.svg',
|
||||
'data/gnome/logitech-g303.svg',
|
||||
'data/gnome/logitech-g402.svg',
|
||||
'data/gnome/logitech-g403.svg',
|
||||
'data/gnome/logitech-g500.svg',
|
||||
'data/gnome/logitech-g500s.svg',
|
||||
'data/gnome/logitech-g502.svg',
|
||||
'data/gnome/logitech-g600.svg',
|
||||
'data/gnome/logitech-g603.svg',
|
||||
'data/gnome/logitech-g700.svg',
|
||||
'data/gnome/logitech-g703.svg',
|
||||
'data/gnome/logitech-g9.svg',
|
||||
'data/gnome/logitech-g900.svg',
|
||||
'data/gnome/logitech-g-pro.svg',
|
||||
'data/gnome/logitech-g-pro-wireless.svg',
|
||||
'data/gnome/logitech-mx-anywhere2.svg',
|
||||
'data/gnome/logitech-mx-anywhere2s.svg',
|
||||
'data/gnome/logitech-mx-master-2s.svg',
|
||||
'data/gnome/logitech-mx-master.svg',
|
||||
'data/gnome/roccat-kone-xtd.svg',
|
||||
]
|
||||
'data/gnome/steelseries-kinzu-v2.svg',
|
||||
'data/gnome/steelseries-rival.svg',
|
||||
'data/gnome/steelseries-rival310.svg',
|
||||
'data/gnome/steelseries-rival600.svg',
|
||||
'data/gnome/steelseries-sensei310.svg',
|
||||
'data/gnome/steelseries-senseiraw.svg',
|
||||
)
|
||||
install_data(gnome_svg_files,
|
||||
install_dir : join_paths(get_option('datadir'), 'libratbag', 'gnome'))
|
||||
|
||||
test_svg_files = find_program('data/gnome/check-svg.py')
|
||||
test('check-svg', test_svg_files, args : gnome_svg_files)
|
||||
|
||||
#### tests ####
|
||||
enable_tests = get_option('enable-tests')
|
||||
enable_tests = get_option('tests')
|
||||
if enable_tests
|
||||
dep_check = dependency('check', version: '>= 0.9.10')
|
||||
|
||||
config_h.set('BUILD_TESTS', '1')
|
||||
env_test = environment()
|
||||
env_test.set('RATBAG_TEST', '1')
|
||||
|
||||
test_context = executable('test-context',
|
||||
['test/test-context.c'],
|
||||
@@ -304,6 +377,11 @@ if enable_tests
|
||||
dependencies : [ dep_libratbag, dep_check ],
|
||||
include_directories : include_directories('src'),
|
||||
install : false)
|
||||
test_util = executable('test-util',
|
||||
['test/test-util.c'],
|
||||
dependencies : [ dep_libratbag, dep_check ],
|
||||
include_directories : include_directories('src'),
|
||||
install : false)
|
||||
test_iconv_helper = executable('test-iconv-helper',
|
||||
['test/test-iconv-helper.c'],
|
||||
dependencies : [ dep_libratbag,
|
||||
@@ -311,9 +389,10 @@ if enable_tests
|
||||
dep_libutil],
|
||||
include_directories : include_directories('src'),
|
||||
install : false)
|
||||
test('test-context', test_context, env : env_test)
|
||||
test('test-device', test_device, env : env_test)
|
||||
test('test-iconv-helper', test_iconv_helper, env : env_test)
|
||||
test('test-context', test_context)
|
||||
test('test-device', test_device)
|
||||
test('test-util', test_util)
|
||||
test('test-iconv-helper', test_iconv_helper)
|
||||
|
||||
valgrind = find_program('valgrind')
|
||||
valgrind_suppressions_file = join_paths(meson.source_root(), 'test', 'valgrind.suppressions')
|
||||
@@ -324,7 +403,6 @@ if enable_tests
|
||||
'--quiet',
|
||||
'--error-exitcode=3',
|
||||
'--suppressions=' + valgrind_suppressions_file ],
|
||||
env : env_test,
|
||||
timeout_multiplier: 5)
|
||||
|
||||
executable('test-build-cxx',
|
||||
@@ -352,11 +430,6 @@ if enable_tests
|
||||
install : false)
|
||||
endif
|
||||
|
||||
test_symbols_leak = find_program('test/symbols-leak-test')
|
||||
test('symbols-leak-test',
|
||||
test_symbols_leak,
|
||||
args : [ meson.current_source_dir() ])
|
||||
|
||||
#### ratbagd ####
|
||||
src_ratbagd = [
|
||||
'src/shared-macro.h',
|
||||
@@ -369,13 +442,14 @@ src_ratbagd = [
|
||||
'ratbagd/ratbagd-device.c',
|
||||
'ratbagd/ratbagd-profile.c',
|
||||
'ratbagd/ratbagd-resolution.c',
|
||||
'ratbagd/ratbagd-test.c',
|
||||
'src/libratbag-util.h',
|
||||
'src/libratbag-util.c',
|
||||
]
|
||||
|
||||
deps_ratbagd = [
|
||||
dep_udev,
|
||||
dep_libsystemd,
|
||||
logind_dep,
|
||||
dep_libratbag,
|
||||
]
|
||||
|
||||
@@ -395,7 +469,8 @@ executable('ratbagd.devel',
|
||||
dependencies : deps_ratbagd,
|
||||
include_directories : include_directories('src'),
|
||||
install : false,
|
||||
c_args : '-DRATBAG_DBUS_INTERFACE="ratbag_devel1_@0@"'.format(ratbagd_sha),
|
||||
c_args : ['-DRATBAG_DBUS_INTERFACE="ratbag_devel1_@0@"'.format(ratbagd_sha),
|
||||
'-DDISABLE_COREDUMP=1'],
|
||||
)
|
||||
|
||||
config_ratbagd_devel = configuration_data()
|
||||
@@ -405,35 +480,39 @@ configure_file(input : 'dbus/org.freedesktop.ratbag_devel1.conf.in',
|
||||
configuration : config_ratbagd_devel)
|
||||
|
||||
#### unit file ####
|
||||
unitdir = get_option('systemd-unit-dir')
|
||||
if unitdir == ''
|
||||
libdir = get_option('libdir')
|
||||
default_unitdir = dep_systemd.get_pkgconfig_variable('systemdsystemunitdir')
|
||||
# Fedora uses lib64 but systemd is in lib. Hack around this so it
|
||||
# works out of the box.
|
||||
intended_unitdir = join_paths(get_option('prefix'), get_option('libdir'), 'systemd')
|
||||
if get_option('prefix') == '/usr' and intended_unitdir != default_unitdir
|
||||
message('
|
||||
systemd unitdir libdir mismatch detected, changing unitdir to
|
||||
@0@
|
||||
or specify with
|
||||
mesonconf -Dsystemd-unit-dir=<path>
|
||||
if enable_systemd
|
||||
unitdir = get_option('systemd-unit-dir')
|
||||
if unitdir == ''
|
||||
libdir = get_option('libdir')
|
||||
default_unitdir = dep_systemd.get_pkgconfig_variable('systemdsystemunitdir')
|
||||
# Fedora uses lib64 but systemd is in lib. Hack around this so it
|
||||
# works out of the box.
|
||||
intended_unitdir = join_paths(get_option('prefix'), get_option('libdir'), 'systemd')
|
||||
if get_option('prefix') == '/usr' and intended_unitdir != default_unitdir
|
||||
message('''
|
||||
systemd unitdir libdir mismatch detected, changing unitdir to
|
||||
@0@
|
||||
or specify with
|
||||
mesonconf -Dsystemd-unit-dir=<path>
|
||||
|
||||
See https://github.com/libratbag/libratbag/issues/188
|
||||
'.format(default_unitdir))
|
||||
unitdir = default_unitdir
|
||||
else
|
||||
unitdir = intended_unitdir
|
||||
See https://github.com/libratbag/libratbag/issues/188
|
||||
'''.format(default_unitdir))
|
||||
unitdir = default_unitdir
|
||||
else
|
||||
unitdir = intended_unitdir
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
config_bindir = configuration_data()
|
||||
config_bindir.set('bindir', join_paths(get_option('prefix'), get_option('bindir')))
|
||||
|
||||
configure_file(input : 'ratbagd/ratbagd.service.in',
|
||||
output : 'ratbagd.service',
|
||||
configuration : config_bindir,
|
||||
install_dir : unitdir)
|
||||
if enable_systemd
|
||||
configure_file(input : 'ratbagd/ratbagd.service.in',
|
||||
output : 'ratbagd.service',
|
||||
configuration : config_bindir,
|
||||
install_dir : unitdir)
|
||||
endif
|
||||
|
||||
dbusdir = get_option('dbus-root-dir')
|
||||
if dbusdir == ''
|
||||
@@ -444,14 +523,35 @@ configure_file(input : 'dbus/org.freedesktop.ratbag1.service.in',
|
||||
output : 'org.freedesktop.ratbag1.service',
|
||||
configuration : config_bindir,
|
||||
install_dir : join_paths(dbusdir, 'system-services'))
|
||||
install_data('dbus/org.freedesktop.ratbag1.conf',
|
||||
install_dir : join_paths(dbusdir, 'system.d'))
|
||||
|
||||
dbusgroup = get_option('dbus-group')
|
||||
if dbusgroup == ''
|
||||
# grant everybody access by default
|
||||
access = 'context="default"'
|
||||
else
|
||||
# grant access to members of the specified group only
|
||||
access = 'group="@0@"'.format(dbusgroup)
|
||||
endif
|
||||
|
||||
config_dbusaccess = configuration_data()
|
||||
config_dbusaccess.set('access', access)
|
||||
|
||||
configure_file(input : 'dbus/org.freedesktop.ratbag1.conf.in',
|
||||
output : 'org.freedesktop.ratbag1.conf',
|
||||
configuration : config_dbusaccess,
|
||||
install_dir : join_paths(dbusdir, 'system.d'))
|
||||
|
||||
#### tools ####
|
||||
|
||||
python = import('python3')
|
||||
py3 = python.find_python()
|
||||
if meson.version().version_compare('<0.48.0')
|
||||
python = import('python3')
|
||||
py3 = python.find_python()
|
||||
else
|
||||
pymod = import('python')
|
||||
py3 = pymod.find_installation()
|
||||
endif
|
||||
|
||||
# ratbagctl calls ratbagd over DBus
|
||||
custom_target('ratbagctl',
|
||||
output : 'ratbagctl',
|
||||
input : ['tools/ratbagctl.in', 'tools/ratbagd.py'],
|
||||
@@ -462,24 +562,85 @@ custom_target('ratbagctl',
|
||||
'--version', meson.project_version()],
|
||||
install: true,
|
||||
install_dir: get_option('bindir'))
|
||||
install_man('tools/ratbagctl.1')
|
||||
|
||||
man_ratbagctl = configure_file (
|
||||
input: 'tools/ratbagctl.1',
|
||||
output: 'ratbagctl.1',
|
||||
configuration: man_config,
|
||||
install : true,
|
||||
install_dir : join_paths(get_option('mandir'), 'man1')
|
||||
)
|
||||
|
||||
config_ratbagctl_devel = configuration_data()
|
||||
config_ratbagctl_devel.set('ratbagd_sha', ratbagd_sha)
|
||||
config_ratbagctl_devel.set('MESON_BUILD_ROOT', meson.build_root())
|
||||
configure_file(input : 'tools/ratbagctl.devel.in',
|
||||
output : 'ratbagctl.devel',
|
||||
configuration : config_ratbagctl_devel)
|
||||
configure_file(input : 'tools/ratbagctl.test.in',
|
||||
output : 'ratbagctl.test',
|
||||
configuration : config_ratbagctl_devel)
|
||||
ratbagctl_test = find_program(join_paths(meson.build_root(), 'ratbagctl.test'))
|
||||
test('ratbagctl-test', ratbagctl_test, args: ['-v'])
|
||||
config_ratbagctl_devel.set('LIBRATBAG_DATA_DIR', libratbag_data_dir_devel)
|
||||
|
||||
configure_file(input : 'tools/toolbox.py',
|
||||
output : 'toolbox.py',
|
||||
configuration : config_ratbagctl_devel)
|
||||
# ratbagctl.devel starts a custom ratbagd and interacts with that over DBus
|
||||
configure_file(input : 'tools/ratbagctl.devel.in',
|
||||
output : 'ratbagctl.devel',
|
||||
configuration : config_ratbagctl_devel)
|
||||
# ratbagctl.test starts a custom ratbagd and interacts with that over DBus
|
||||
configure_file(input : 'tools/ratbagctl.test.in',
|
||||
output : 'ratbagctl.test',
|
||||
configuration : config_ratbagctl_devel)
|
||||
|
||||
env_test = environment()
|
||||
env_test.set('LIBRATBAG_DATA_DIR', libratbag_data_dir_devel)
|
||||
ratbagctl_test = find_program(join_paths(meson.build_root(), 'ratbagctl.test'))
|
||||
test('ratbagctl-test', ratbagctl_test, args: ['-v'], env : env_test)
|
||||
|
||||
# ratbag-command uses Swig bindings to call libratbag directly
|
||||
swig = find_program('swig')
|
||||
swig_gen = generator(
|
||||
swig,
|
||||
output: ['@BASENAME@.c'],
|
||||
arguments: ['-python', '-py3', '-o', './@OUTPUT@',
|
||||
'-outdir', '.',
|
||||
'-I' + join_paths(meson.source_root(), 'src'),
|
||||
'-I' + join_paths(meson.source_root(), 'tools'),
|
||||
'@INPUT@'],
|
||||
)
|
||||
|
||||
wrapper_deps = [
|
||||
dependency('python3'),
|
||||
dep_libratbag,
|
||||
dep_libshared,
|
||||
]
|
||||
|
||||
i_source = join_paths(meson.source_root(), 'src', 'libratbag.i')
|
||||
c_source = swig_gen.process(i_source)
|
||||
shared_library(
|
||||
'libratbag',
|
||||
c_source,
|
||||
name_prefix: '_',
|
||||
c_args : ['-Wno-missing-prototypes', '-Wno-format-nonliteral'],
|
||||
extra_files: [ i_source ] + src_libratbag ,
|
||||
dependencies: deps_libratbag + wrapper_deps,
|
||||
include_directories : include_directories('src', 'tools'),
|
||||
install: false,
|
||||
)
|
||||
|
||||
# ratbagc is the layer that maps ratbagctl to the swig bindings
|
||||
ratbagc_py_conf = configuration_data()
|
||||
ratbagc_py_conf.set('LIBRATBAG_DATA_DIR', libratbag_data_dir_devel)
|
||||
ratbagc_py = configure_file(input: 'tools/ratbagc.py.in',
|
||||
output: 'ratbagc.py',
|
||||
configuration: ratbagc_py_conf)
|
||||
custom_target('ratbag-command',
|
||||
output : 'ratbag-command',
|
||||
input : ['tools/ratbagctl.in', ratbagc_py],
|
||||
build_by_default : true,
|
||||
command : [py3, join_paths(meson.source_root(), 'tools', 'merge_ratbagd.py'),
|
||||
'@INPUT@',
|
||||
'--output', '@OUTPUT@',
|
||||
'--version', meson.project_version()],
|
||||
install: false)
|
||||
|
||||
#### output files ####
|
||||
configure_file(output: 'config.h', install: false, configuration: config_h)
|
||||
|
||||
subdir('doc')
|
||||
|
||||
@@ -1,19 +1,45 @@
|
||||
option('udev-dir',
|
||||
type: 'string',
|
||||
default: '',
|
||||
description: 'udev base directory [default=$prefix/lib/udev]')
|
||||
type: 'string',
|
||||
value: '',
|
||||
description: 'udev base directory [default=$prefix/lib/udev]')
|
||||
|
||||
option('enable-tests',
|
||||
option('tests',
|
||||
type: 'boolean',
|
||||
value: true,
|
||||
description: 'Build the tests (default=yes)')
|
||||
|
||||
option('systemd-unit-dir',
|
||||
type : 'string',
|
||||
default : '',
|
||||
value : '',
|
||||
description : 'systemd unit directory [default=$libdir/systemd/system]')
|
||||
|
||||
option('dbus-root-dir',
|
||||
type : 'string',
|
||||
default : '',
|
||||
value : '',
|
||||
description : 'dbus service directory [default=$datadir/dbus-1]')
|
||||
|
||||
option('documentation',
|
||||
type: 'boolean',
|
||||
value: false,
|
||||
description: 'Enable documentation build (default=no)')
|
||||
|
||||
option('dbus-group',
|
||||
type: 'string',
|
||||
value : '',
|
||||
description : 'The UNIX group that is granted access to the ratbagd D-Bus service. By default all users may access it.')
|
||||
|
||||
option('systemd',
|
||||
type : 'boolean',
|
||||
value : true,
|
||||
description : 'Build systemd unit files')
|
||||
|
||||
option('logind-provider',
|
||||
type : 'combo',
|
||||
choices: [ 'elogind', 'systemd'],
|
||||
value : 'systemd',
|
||||
description : 'Which logind provider to use')
|
||||
|
||||
option('coverity',
|
||||
type: 'boolean',
|
||||
value: false,
|
||||
description: 'Enable coverity build fixes, see meson.build for details [default=false]')
|
||||
|
||||
@@ -39,6 +39,7 @@
|
||||
#include "libratbag-util.h"
|
||||
|
||||
struct ratbagd_button {
|
||||
struct ratbagd_device *device;
|
||||
struct ratbag_button *lib_button;
|
||||
unsigned int index;
|
||||
char *path;
|
||||
@@ -57,6 +58,8 @@ static int ratbagd_button_get_type(sd_bus *bus,
|
||||
|
||||
t = ratbag_button_get_type(button->lib_button);
|
||||
|
||||
verify_unsigned_int(t);
|
||||
|
||||
return sd_bus_message_append(reply, "u", t);
|
||||
}
|
||||
|
||||
@@ -73,6 +76,8 @@ static int ratbagd_button_get_button(sd_bus *bus,
|
||||
|
||||
b = ratbag_button_get_button(button->lib_button);
|
||||
|
||||
verify_unsigned_int(b);
|
||||
|
||||
return sd_bus_message_append(reply, "u", b);
|
||||
}
|
||||
|
||||
@@ -112,7 +117,7 @@ static int ratbagd_button_set_button(sd_bus *bus,
|
||||
NULL);
|
||||
}
|
||||
|
||||
return r;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ratbagd_button_get_special(sd_bus *bus,
|
||||
@@ -127,8 +132,14 @@ static int ratbagd_button_get_special(sd_bus *bus,
|
||||
enum ratbag_button_action_special special;
|
||||
|
||||
special = ratbag_button_get_special(button->lib_button);
|
||||
if (special == RATBAG_BUTTON_ACTION_SPECIAL_INVALID)
|
||||
special = RATBAG_BUTTON_ACTION_SPECIAL_UNKNOWN;
|
||||
|
||||
return sd_bus_message_append(reply, "u", special);
|
||||
verify_unsigned_int(special);
|
||||
|
||||
CHECK_CALL(sd_bus_message_append(reply, "u", special));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ratbagd_button_set_special(sd_bus *bus,
|
||||
@@ -143,9 +154,7 @@ static int ratbagd_button_set_special(sd_bus *bus,
|
||||
enum ratbag_button_action_special special;
|
||||
int r;
|
||||
|
||||
r = sd_bus_message_read(m, "u", &special);
|
||||
if (r < 0)
|
||||
return r;
|
||||
CHECK_CALL(sd_bus_message_read(m, "u", &special));
|
||||
|
||||
r = ratbag_button_set_special(button->lib_button, special);
|
||||
|
||||
@@ -164,104 +173,7 @@ static int ratbagd_button_set_special(sd_bus *bus,
|
||||
NULL);
|
||||
}
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
static int ratbagd_button_get_key(sd_bus *bus,
|
||||
const char *path,
|
||||
const char *interface,
|
||||
const char *property,
|
||||
sd_bus_message *reply,
|
||||
void *userdata,
|
||||
sd_bus_error *error)
|
||||
{
|
||||
struct ratbagd_button *button = userdata;
|
||||
unsigned int key;
|
||||
unsigned int modifiers[10] = {0};
|
||||
size_t nmodifiers = ELEMENTSOF(modifiers);
|
||||
size_t i;
|
||||
int r;
|
||||
|
||||
/* Return an array with the first element the key, the rest
|
||||
are modifiers (or 0 if unset). If no key is set, the array is
|
||||
just [0] */
|
||||
|
||||
r = sd_bus_message_open_container(reply, 'a', "u");
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
key = ratbag_button_get_key(button->lib_button,
|
||||
modifiers,
|
||||
&nmodifiers);
|
||||
|
||||
r = sd_bus_message_append(reply, "u", key);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
if (key == 0)
|
||||
nmodifiers = 0;
|
||||
|
||||
for (i = 0; i < nmodifiers; i++) {
|
||||
r = sd_bus_message_append(reply, "u", modifiers[0]);
|
||||
if (r < 0)
|
||||
return r;
|
||||
}
|
||||
|
||||
return sd_bus_message_close_container(reply);
|
||||
}
|
||||
|
||||
static int ratbagd_button_set_key(sd_bus *bus,
|
||||
const char *path,
|
||||
const char *interface,
|
||||
const char *property,
|
||||
sd_bus_message *m,
|
||||
void *userdata,
|
||||
sd_bus_error *error)
|
||||
{
|
||||
struct ratbagd_button *button = userdata;
|
||||
unsigned int key;
|
||||
size_t nmodifiers = 10;
|
||||
unsigned int modifiers[nmodifiers];
|
||||
int r;
|
||||
|
||||
/* Expect an array with the first element the key, the rest
|
||||
are modifiers (or 0 if unset). */
|
||||
|
||||
r = sd_bus_message_enter_container(m, 'a', "u");
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = sd_bus_message_read(m, "u", &key);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
nmodifiers = 0;
|
||||
while ((r = sd_bus_message_read_basic(m, 'u',
|
||||
&modifiers[nmodifiers++])) > 0)
|
||||
;
|
||||
|
||||
r = sd_bus_message_exit_container(m);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = ratbag_button_set_key(button->lib_button, key, modifiers, nmodifiers);
|
||||
|
||||
if (r == 0) {
|
||||
sd_bus *bus = sd_bus_message_get_bus(m);
|
||||
sd_bus_emit_properties_changed(bus,
|
||||
button->path,
|
||||
RATBAGD_NAME_ROOT ".Button",
|
||||
"KeyMapping",
|
||||
NULL);
|
||||
|
||||
sd_bus_emit_properties_changed(bus,
|
||||
button->path,
|
||||
RATBAGD_NAME_ROOT ".Button",
|
||||
"ActionType",
|
||||
NULL);
|
||||
}
|
||||
|
||||
return r;
|
||||
return 0;
|
||||
}
|
||||
|
||||
DEFINE_TRIVIAL_CLEANUP_FUNC(struct ratbag_button_macro *, ratbag_button_macro_unref);
|
||||
@@ -276,12 +188,9 @@ static int ratbagd_button_get_macro(sd_bus *bus,
|
||||
{
|
||||
struct ratbagd_button *button = userdata;
|
||||
_cleanup_(ratbag_button_macro_unrefp) struct ratbag_button_macro *macro = NULL;
|
||||
int r;
|
||||
unsigned int idx;
|
||||
|
||||
r = sd_bus_message_open_container(reply, 'a', "(uu)");
|
||||
if (r < 0)
|
||||
return r;
|
||||
CHECK_CALL(sd_bus_message_open_container(reply, 'a', "(uu)"));
|
||||
|
||||
macro = ratbag_button_get_macro(button->lib_button);
|
||||
if (!macro)
|
||||
@@ -305,15 +214,20 @@ static int ratbagd_button_get_macro(sd_bus *bus,
|
||||
case RATBAG_MACRO_EVENT_WAIT:
|
||||
value = ratbag_button_macro_get_event_timeout(macro, idx);
|
||||
break;
|
||||
default:
|
||||
abort();
|
||||
}
|
||||
|
||||
r = sd_bus_message_append(reply, "(uu)", type, value);
|
||||
if (r < 0)
|
||||
return r;
|
||||
verify_unsigned_int(type);
|
||||
verify_unsigned_int(value);
|
||||
|
||||
CHECK_CALL(sd_bus_message_append(reply, "(uu)", type, value));
|
||||
}
|
||||
|
||||
out:
|
||||
return sd_bus_message_close_container(reply);
|
||||
CHECK_CALL(sd_bus_message_close_container(reply));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ratbagd_button_set_macro(sd_bus *bus,
|
||||
@@ -329,26 +243,28 @@ static int ratbagd_button_set_macro(sd_bus *bus,
|
||||
int r, idx = 0;
|
||||
_cleanup_(ratbag_button_macro_unrefp) struct ratbag_button_macro *macro = NULL;
|
||||
|
||||
r = sd_bus_message_enter_container(m, 'a', "(uu)");
|
||||
if (r < 0)
|
||||
return r;
|
||||
CHECK_CALL(sd_bus_message_enter_container(m, 'a', "(uu)"));
|
||||
|
||||
macro = ratbag_button_macro_new("macro");
|
||||
while ((r = sd_bus_message_read(m, "(uu)", &type, &value)) > 0) {
|
||||
r = ratbag_button_macro_set_event(macro, idx++, type, value);
|
||||
if (r < 0)
|
||||
return r;
|
||||
if (r < 0) {
|
||||
r = ratbagd_device_resync(button->device, bus);
|
||||
if (r < 0)
|
||||
return r;
|
||||
}
|
||||
}
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = sd_bus_message_exit_container(m);
|
||||
if (r < 0)
|
||||
return r;
|
||||
CHECK_CALL(sd_bus_message_exit_container(m));
|
||||
|
||||
r = ratbag_button_set_macro(button->lib_button, macro);
|
||||
if (r < 0)
|
||||
return r;
|
||||
if (r < 0) {
|
||||
r = ratbagd_device_resync(button->device, bus);
|
||||
if (r < 0)
|
||||
return r;
|
||||
}
|
||||
|
||||
if (r == 0) {
|
||||
sd_bus *bus = sd_bus_message_get_bus(m);
|
||||
@@ -365,7 +281,7 @@ static int ratbagd_button_set_macro(sd_bus *bus,
|
||||
NULL);
|
||||
}
|
||||
|
||||
return r;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ratbagd_button_get_action_type(sd_bus *bus,
|
||||
@@ -380,8 +296,14 @@ static int ratbagd_button_get_action_type(sd_bus *bus,
|
||||
enum ratbag_button_action_type type;
|
||||
|
||||
type = ratbag_button_get_action_type(button->lib_button);
|
||||
if (type == RATBAG_BUTTON_ACTION_TYPE_KEY)
|
||||
type = RATBAG_BUTTON_ACTION_TYPE_UNKNOWN;
|
||||
|
||||
return sd_bus_message_append(reply, "u", type);
|
||||
verify_unsigned_int(type);
|
||||
|
||||
CHECK_CALL(sd_bus_message_append(reply, "u", type));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ratbagd_button_get_action_types(sd_bus *bus,
|
||||
@@ -393,30 +315,27 @@ static int ratbagd_button_get_action_types(sd_bus *bus,
|
||||
sd_bus_error *error)
|
||||
{
|
||||
struct ratbagd_button *button = userdata;
|
||||
int r;
|
||||
enum ratbag_button_action_type types[] = {
|
||||
RATBAG_BUTTON_ACTION_TYPE_BUTTON,
|
||||
RATBAG_BUTTON_ACTION_TYPE_SPECIAL,
|
||||
RATBAG_BUTTON_ACTION_TYPE_KEY,
|
||||
RATBAG_BUTTON_ACTION_TYPE_MACRO
|
||||
};
|
||||
enum ratbag_button_action_type *t;
|
||||
|
||||
|
||||
r = sd_bus_message_open_container(reply, 'a', "u");
|
||||
if (r < 0)
|
||||
return r;
|
||||
CHECK_CALL(sd_bus_message_open_container(reply, 'a', "u"));
|
||||
|
||||
ARRAY_FOR_EACH(types, t) {
|
||||
if (!ratbag_button_has_action_type(button->lib_button, *t))
|
||||
continue;
|
||||
|
||||
r = sd_bus_message_append(reply, "u", *t);
|
||||
if (r < 0)
|
||||
return r;
|
||||
verify_unsigned_int(*t);
|
||||
CHECK_CALL(sd_bus_message_append(reply, "u", *t));
|
||||
}
|
||||
|
||||
return sd_bus_message_close_container(reply);
|
||||
CHECK_CALL(sd_bus_message_close_container(reply));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ratbagd_button_disable(sd_bus_message *m,
|
||||
@@ -426,13 +345,19 @@ static int ratbagd_button_disable(sd_bus_message *m,
|
||||
struct ratbagd_button *button = userdata;
|
||||
int r;
|
||||
|
||||
r = sd_bus_message_read(m, "");
|
||||
if (r < 0)
|
||||
return r;
|
||||
CHECK_CALL(sd_bus_message_read(m, ""));
|
||||
|
||||
r = ratbag_button_disable(button->lib_button);
|
||||
if (r < 0) {
|
||||
sd_bus *bus = sd_bus_message_get_bus(m);
|
||||
r = ratbagd_device_resync(button->device, bus);
|
||||
if (r < 0)
|
||||
return r;
|
||||
}
|
||||
|
||||
return sd_bus_reply_method_return(m, "u", r);
|
||||
CHECK_CALL(sd_bus_reply_method_return(m, "u", 0));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
const sd_bus_vtable ratbagd_button_vtable[] = {
|
||||
@@ -447,10 +372,6 @@ const sd_bus_vtable ratbagd_button_vtable[] = {
|
||||
ratbagd_button_get_special,
|
||||
ratbagd_button_set_special,
|
||||
0, SD_BUS_VTABLE_UNPRIVILEGED | SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
|
||||
SD_BUS_WRITABLE_PROPERTY("KeyMapping", "au",
|
||||
ratbagd_button_get_key,
|
||||
ratbagd_button_set_key,
|
||||
0, SD_BUS_VTABLE_UNPRIVILEGED | SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
|
||||
SD_BUS_WRITABLE_PROPERTY("Macro", "a(uu)",
|
||||
ratbagd_button_get_macro,
|
||||
ratbagd_button_set_macro,
|
||||
@@ -476,6 +397,7 @@ int ratbagd_button_new(struct ratbagd_button **out,
|
||||
assert(lib_button);
|
||||
|
||||
button = zalloc(sizeof(*button));
|
||||
button->device = device;
|
||||
button->lib_button = lib_button;
|
||||
button->index = index;
|
||||
|
||||
@@ -483,7 +405,7 @@ int ratbagd_button_new(struct ratbagd_button **out,
|
||||
sprintf(button_buffer, "b%u", index);
|
||||
r = sd_bus_path_encode_many(&button->path,
|
||||
RATBAGD_OBJ_ROOT "/button/%/%/%",
|
||||
ratbagd_device_get_name(device),
|
||||
ratbagd_device_get_sysname(device),
|
||||
profile_buffer,
|
||||
button_buffer);
|
||||
if (r < 0)
|
||||
@@ -511,3 +433,15 @@ struct ratbagd_button *ratbagd_button_free(struct ratbagd_button *button)
|
||||
return mfree(button);
|
||||
}
|
||||
|
||||
int ratbagd_button_resync(sd_bus *bus,
|
||||
struct ratbagd_button *button)
|
||||
{
|
||||
return sd_bus_emit_properties_changed(bus,
|
||||
button->path,
|
||||
RATBAGD_NAME_ROOT ".Button",
|
||||
"ButtonMapping",
|
||||
"SpecialMapping",
|
||||
"Macro",
|
||||
"ActionType",
|
||||
NULL);
|
||||
}
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
struct ratbagd_device {
|
||||
struct ratbagd *ctx;
|
||||
RBNode node;
|
||||
char *name;
|
||||
char *sysname;
|
||||
char *path;
|
||||
struct ratbag_device *lib_device;
|
||||
|
||||
@@ -125,12 +125,14 @@ static int ratbagd_device_get_device_name(sd_bus *bus,
|
||||
|
||||
name = ratbag_device_get_name(device->lib_device);
|
||||
if (!name) {
|
||||
log_error("Unable to fetch name for %s\n",
|
||||
ratbagd_device_get_name(device));
|
||||
log_error("%s: failed to fetch name\n",
|
||||
ratbagd_device_get_sysname(device));
|
||||
name = "";
|
||||
}
|
||||
|
||||
return sd_bus_message_append(reply, "s", name);
|
||||
CHECK_CALL(sd_bus_message_append(reply, "s", name));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ratbagd_device_get_svg(sd_bus *bus,
|
||||
@@ -146,12 +148,14 @@ static int ratbagd_device_get_svg(sd_bus *bus,
|
||||
|
||||
svg = ratbag_device_get_svg_name(device->lib_device);
|
||||
if (!svg) {
|
||||
log_error("Unable to fetch SVG for %s\n",
|
||||
ratbagd_device_get_name(device));
|
||||
log_error("%s: failed to fetch SVG\n",
|
||||
ratbagd_device_get_sysname(device));
|
||||
svg = "";
|
||||
}
|
||||
|
||||
return sd_bus_message_append(reply, "s", svg);
|
||||
CHECK_CALL(sd_bus_message_append(reply, "s", svg));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ratbagd_device_get_theme_svg(sd_bus_message *m,
|
||||
@@ -162,24 +166,65 @@ static int ratbagd_device_get_theme_svg(sd_bus_message *m,
|
||||
char svg_path[PATH_MAX] = {0};
|
||||
const char *theme;
|
||||
const char *svg;
|
||||
int r;
|
||||
const char *datadir;
|
||||
|
||||
r = sd_bus_message_read(m, "s", &theme);
|
||||
if (r < 0)
|
||||
return r;
|
||||
datadir = getenv("LIBRATBAG_DATA_DIR");
|
||||
if (!datadir)
|
||||
datadir = LIBRATBAG_DATA_DIR;
|
||||
|
||||
CHECK_CALL(sd_bus_message_read(m, "s", &theme));
|
||||
|
||||
svg = ratbag_device_get_svg_name(device->lib_device);
|
||||
if (!svg) {
|
||||
log_error("Unable to fetch SVG for %s\n",
|
||||
ratbagd_device_get_name(device));
|
||||
goto out;
|
||||
log_error("%s: failed to fetch SVG, using fallback\n",
|
||||
ratbagd_device_get_sysname(device));
|
||||
svg = FALLBACK_SVG_NAME;
|
||||
}
|
||||
|
||||
sprintf(svg_path, "%s/%s/%s", LIBRATBAG_DATA_DIR, theme, svg);
|
||||
snprintf(svg_path, sizeof(svg_path), "%s/%s/%s", datadir, theme, svg);
|
||||
|
||||
out:
|
||||
return sd_bus_reply_method_return(m, "s", svg_path);
|
||||
CHECK_CALL(sd_bus_reply_method_return(m, "s", svg_path));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ratbagd_device_get_theme_svg_fd(sd_bus_message *m,
|
||||
void *userdata,
|
||||
sd_bus_error *error)
|
||||
{
|
||||
struct ratbagd_device *device = userdata;
|
||||
char svg_path[PATH_MAX] = {0};
|
||||
const char *theme;
|
||||
const char *svg;
|
||||
const char *datadir;
|
||||
_cleanup_close_ int fd = -1;
|
||||
|
||||
datadir = getenv("LIBRATBAG_DATA_DIR");
|
||||
if (!datadir)
|
||||
datadir = LIBRATBAG_DATA_DIR;
|
||||
|
||||
CHECK_CALL(sd_bus_message_read(m, "s", &theme));
|
||||
|
||||
svg = ratbag_device_get_svg_name(device->lib_device);
|
||||
if (!svg) {
|
||||
log_error("%s: failed to fetch SVG, using fallback\n",
|
||||
ratbagd_device_get_sysname(device));
|
||||
svg = FALLBACK_SVG_NAME;
|
||||
}
|
||||
|
||||
snprintf(svg_path, sizeof(svg_path), "%s/%s/%s", datadir, theme, svg);
|
||||
|
||||
fd = open(svg_path, O_RDONLY);
|
||||
if (fd == -1) {
|
||||
log_error("%s: failed to open SVG '%s' (%m)\n",
|
||||
ratbagd_device_get_sysname(device),
|
||||
svg_path);
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
CHECK_CALL(sd_bus_reply_method_return(m, "h", fd));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ratbagd_device_get_profiles(sd_bus *bus,
|
||||
@@ -193,25 +238,32 @@ static int ratbagd_device_get_profiles(sd_bus *bus,
|
||||
struct ratbagd_device *device = userdata;
|
||||
struct ratbagd_profile *profile;
|
||||
unsigned int i;
|
||||
int r;
|
||||
|
||||
r = sd_bus_message_open_container(reply, 'a', "o");
|
||||
if (r < 0)
|
||||
return r;
|
||||
CHECK_CALL(sd_bus_message_open_container(reply, 'a', "o"));
|
||||
|
||||
for (i = 0; i < device->n_profiles; ++i) {
|
||||
profile = device->profiles[i];
|
||||
if (!profile)
|
||||
continue;
|
||||
|
||||
r = sd_bus_message_append(reply,
|
||||
"o",
|
||||
ratbagd_profile_get_path(profile));
|
||||
if (r < 0)
|
||||
return r;
|
||||
CHECK_CALL(sd_bus_message_append(reply,
|
||||
"o",
|
||||
ratbagd_profile_get_path(profile)));
|
||||
}
|
||||
|
||||
return sd_bus_message_close_container(reply);
|
||||
CHECK_CALL(sd_bus_message_close_container(reply));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void ratbagd_device_commit_pending(void *data)
|
||||
{
|
||||
struct ratbagd_device *device = data;
|
||||
int r;
|
||||
|
||||
r = ratbag_device_commit(device->lib_device);
|
||||
if (r < 0)
|
||||
ratbagd_device_resync(device, device->ctx->bus);
|
||||
}
|
||||
|
||||
static int ratbagd_device_commit(sd_bus_message *m,
|
||||
@@ -219,11 +271,14 @@ static int ratbagd_device_commit(sd_bus_message *m,
|
||||
sd_bus_error *error)
|
||||
{
|
||||
struct ratbagd_device *device = userdata;
|
||||
int r;
|
||||
|
||||
r = ratbag_device_commit(device->lib_device);
|
||||
ratbagd_schedule_task(device->ctx,
|
||||
ratbagd_device_commit_pending,
|
||||
device);
|
||||
|
||||
return sd_bus_reply_method_return(m, "u", r);
|
||||
CHECK_CALL(sd_bus_reply_method_return(m, "u", 0));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
@@ -251,40 +306,39 @@ ratbagd_device_get_capabilities(sd_bus *bus,
|
||||
RATBAG_DEVICE_CAP_BUTTON_MACROS,
|
||||
RATBAG_DEVICE_CAP_LED,
|
||||
};
|
||||
int r;
|
||||
size_t i;
|
||||
|
||||
r = sd_bus_message_open_container(reply, 'a', "u");
|
||||
if (r < 0)
|
||||
return r;
|
||||
CHECK_CALL(sd_bus_message_open_container(reply, 'a', "u"));
|
||||
|
||||
for (i = 0; i < ELEMENTSOF(caps); i++) {
|
||||
cap = caps[i];
|
||||
if (ratbag_device_has_capability(lib_device, cap)) {
|
||||
r = sd_bus_message_append(reply, "u", cap);
|
||||
if (r < 0)
|
||||
return r;
|
||||
CHECK_CALL(sd_bus_message_append(reply, "u", cap));
|
||||
}
|
||||
}
|
||||
|
||||
return sd_bus_message_close_container(reply);
|
||||
CHECK_CALL(sd_bus_message_close_container(reply));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
const sd_bus_vtable ratbagd_device_vtable[] = {
|
||||
SD_BUS_VTABLE_START(0),
|
||||
SD_BUS_PROPERTY("Id", "s", NULL, offsetof(struct ratbagd_device, name), SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
SD_BUS_PROPERTY("Id", "s", NULL, offsetof(struct ratbagd_device, sysname), SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
SD_BUS_PROPERTY("Capabilities", "au", ratbagd_device_get_capabilities, 0, SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
SD_BUS_PROPERTY("Name", "s", ratbagd_device_get_device_name, 0, SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
SD_BUS_PROPERTY("Svg", "s", ratbagd_device_get_svg, 0, SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
SD_BUS_PROPERTY("Profiles", "ao", ratbagd_device_get_profiles, 0, SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
SD_BUS_METHOD("GetSvg", "s", "s", ratbagd_device_get_theme_svg, SD_BUS_VTABLE_UNPRIVILEGED),
|
||||
SD_BUS_METHOD("GetSvgFd", "s", "h", ratbagd_device_get_theme_svg_fd, SD_BUS_VTABLE_UNPRIVILEGED),
|
||||
SD_BUS_METHOD("Commit", "", "u", ratbagd_device_commit, SD_BUS_VTABLE_UNPRIVILEGED),
|
||||
SD_BUS_SIGNAL("Resync", "", 0),
|
||||
SD_BUS_VTABLE_END,
|
||||
};
|
||||
|
||||
int ratbagd_device_new(struct ratbagd_device **out,
|
||||
struct ratbagd *ctx,
|
||||
const char *name,
|
||||
const char *sysname,
|
||||
struct ratbag_device *lib_device)
|
||||
{
|
||||
_cleanup_(ratbagd_device_freep) struct ratbagd_device *device = NULL;
|
||||
@@ -294,17 +348,17 @@ int ratbagd_device_new(struct ratbagd_device **out,
|
||||
|
||||
assert(out);
|
||||
assert(ctx);
|
||||
assert(name);
|
||||
assert(sysname);
|
||||
|
||||
device = zalloc(sizeof(*device));
|
||||
device->ctx = ctx;
|
||||
rbnode_init(&device->node);
|
||||
device->lib_device = ratbag_device_ref(lib_device);
|
||||
|
||||
device->name = strdup_safe(name);
|
||||
device->sysname = strdup_safe(sysname);
|
||||
|
||||
r = sd_bus_path_encode(RATBAGD_OBJ_ROOT "/device",
|
||||
device->name,
|
||||
device->sysname,
|
||||
&device->path);
|
||||
if (r < 0)
|
||||
return r;
|
||||
@@ -313,10 +367,10 @@ int ratbagd_device_new(struct ratbagd_device **out,
|
||||
device->n_profiles = ratbag_device_get_num_profiles(device->lib_device);
|
||||
device->profiles = zalloc(device->n_profiles * sizeof(*device->profiles));
|
||||
|
||||
log_verbose("%s: \"%s\", %d profiles\n",
|
||||
name,
|
||||
ratbag_device_get_name(lib_device),
|
||||
device->n_profiles);
|
||||
log_info("%s: \"%s\", %d profiles\n",
|
||||
sysname,
|
||||
ratbag_device_get_name(lib_device),
|
||||
device->n_profiles);
|
||||
|
||||
for (i = 0; i < device->n_profiles; ++i) {
|
||||
profile = ratbag_device_get_profile(device->lib_device, i);
|
||||
@@ -329,8 +383,8 @@ int ratbagd_device_new(struct ratbagd_device **out,
|
||||
i);
|
||||
if (r < 0) {
|
||||
errno = -r;
|
||||
log_error("Cannot allocate profile for '%s': %m\n",
|
||||
device->name);
|
||||
log_error("%s: failed to allocate profile: %m\n",
|
||||
device->sysname);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -354,17 +408,17 @@ struct ratbagd_device *ratbagd_device_free(struct ratbagd_device *device)
|
||||
device->profiles = mfree(device->profiles);
|
||||
device->lib_device = ratbag_device_unref(device->lib_device);
|
||||
device->path = mfree(device->path);
|
||||
device->name = mfree(device->name);
|
||||
device->sysname = mfree(device->sysname);
|
||||
|
||||
assert(!device->lib_device); /* ratbag yields !NULL if still pinned */
|
||||
|
||||
return mfree(device);
|
||||
}
|
||||
|
||||
const char *ratbagd_device_get_name(struct ratbagd_device *device)
|
||||
const char *ratbagd_device_get_sysname(struct ratbagd_device *device)
|
||||
{
|
||||
assert(device);
|
||||
return device->name;
|
||||
return device->sysname;
|
||||
}
|
||||
|
||||
const char *ratbagd_device_get_path(struct ratbagd_device *device)
|
||||
@@ -385,6 +439,21 @@ unsigned int ratbagd_device_get_num_leds(struct ratbagd_device *device)
|
||||
return ratbag_device_get_num_leds(device->lib_device);
|
||||
}
|
||||
|
||||
int ratbagd_device_resync(struct ratbagd_device *device, sd_bus *bus)
|
||||
{
|
||||
assert(device);
|
||||
assert(bus);
|
||||
|
||||
ratbagd_for_each_profile_signal(bus, device,
|
||||
ratbagd_profile_resync);
|
||||
|
||||
return sd_bus_emit_signal(bus,
|
||||
device->path,
|
||||
RATBAGD_NAME_ROOT ".Device",
|
||||
"Resync",
|
||||
NULL);
|
||||
}
|
||||
|
||||
bool ratbagd_device_linked(struct ratbagd_device *device)
|
||||
{
|
||||
return device && rbnode_linked(&device->node);
|
||||
@@ -407,7 +476,7 @@ void ratbagd_device_link(struct ratbagd_device *device)
|
||||
while (*node) {
|
||||
parent = *node;
|
||||
iter = ratbagd_device_from_node(parent);
|
||||
v = strcmp(device->name, iter->name);
|
||||
v = strcmp(device->sysname, iter->sysname);
|
||||
|
||||
/* if there's a duplicate, the caller screwed up */
|
||||
assert(v != 0);
|
||||
@@ -425,7 +494,7 @@ void ratbagd_device_link(struct ratbagd_device *device)
|
||||
/* register profile interfaces */
|
||||
r = sd_bus_path_encode_many(&prefix,
|
||||
RATBAGD_OBJ_ROOT "/profile/%",
|
||||
device->name);
|
||||
device->sysname);
|
||||
if (r >= 0) {
|
||||
r = sd_bus_add_fallback_vtable(device->ctx->bus,
|
||||
&device->profile_vtable_slot,
|
||||
@@ -443,8 +512,8 @@ void ratbagd_device_link(struct ratbagd_device *device)
|
||||
}
|
||||
if (r < 0) {
|
||||
errno = -r;
|
||||
log_error("Cannot register profile interfaces for '%s': %m\n",
|
||||
device->name);
|
||||
log_error("%s: failed to register profile interfaces: %m\n",
|
||||
device->sysname);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -453,24 +522,24 @@ void ratbagd_device_link(struct ratbagd_device *device)
|
||||
device,
|
||||
device->profiles[i]);
|
||||
if (r < 0) {
|
||||
log_error("Cannot register resolutions for '%s': %m\n",
|
||||
device->name);
|
||||
log_error("%s: failed to register resolutions: %m\n",
|
||||
device->sysname);
|
||||
}
|
||||
|
||||
r = ratbagd_profile_register_buttons(device->ctx->bus,
|
||||
device,
|
||||
device->profiles[i]);
|
||||
if (r < 0) {
|
||||
log_error("Cannot register buttons for '%s': %m\n",
|
||||
device->name);
|
||||
log_error("%s: failed to register buttons: %m\n",
|
||||
device->sysname);
|
||||
}
|
||||
|
||||
r = ratbagd_profile_register_leds(device->ctx->bus,
|
||||
device,
|
||||
device->profiles[i]);
|
||||
if (r < 0) {
|
||||
log_error("Cannot register leds for '%s': %m\n",
|
||||
device->name);
|
||||
log_error("%s: failed to register leds: %m\n",
|
||||
device->sysname);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -502,7 +571,7 @@ struct ratbagd_device *ratbagd_device_lookup(struct ratbagd *ctx,
|
||||
node = ctx->device_map.root;
|
||||
while (node) {
|
||||
device = ratbagd_device_from_node(node);
|
||||
v = strcmp(name, device->name);
|
||||
v = strcmp(name, device->sysname);
|
||||
if (!v)
|
||||
return device;
|
||||
else if (v < 0)
|
||||
|
||||
@@ -37,8 +37,34 @@ struct ratbagd_led {
|
||||
struct ratbag_led *lib_led;
|
||||
unsigned int index;
|
||||
char *path;
|
||||
enum ratbag_led_colordepth colordepth;
|
||||
};
|
||||
|
||||
static int ratbagd_led_get_modes(sd_bus *bus,
|
||||
const char *path,
|
||||
const char *interface,
|
||||
const char *property,
|
||||
sd_bus_message *reply,
|
||||
void *userdata,
|
||||
sd_bus_error *error)
|
||||
{
|
||||
struct ratbagd_led *led = userdata;
|
||||
enum ratbag_led_mode mode = 0;
|
||||
|
||||
CHECK_CALL(sd_bus_message_open_container(reply, 'a', "u"));
|
||||
|
||||
|
||||
while (mode <= RATBAG_LED_BREATHING) {
|
||||
if (ratbag_led_has_mode(led->lib_led, mode))
|
||||
CHECK_CALL(sd_bus_message_append(reply, "u", mode));
|
||||
mode++;
|
||||
}
|
||||
|
||||
CHECK_CALL(sd_bus_message_close_container(reply));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ratbagd_led_get_mode(sd_bus *bus,
|
||||
const char *path,
|
||||
const char *interface,
|
||||
@@ -51,7 +77,12 @@ static int ratbagd_led_get_mode(sd_bus *bus,
|
||||
enum ratbag_led_mode mode;
|
||||
|
||||
mode = ratbag_led_get_mode(led->lib_led);
|
||||
return sd_bus_message_append(reply, "u", mode);
|
||||
|
||||
verify_unsigned_int(mode);
|
||||
|
||||
CHECK_CALL(sd_bus_message_append(reply, "u", mode));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ratbagd_led_set_mode(sd_bus *bus,
|
||||
@@ -66,9 +97,7 @@ static int ratbagd_led_set_mode(sd_bus *bus,
|
||||
enum ratbag_led_mode mode;
|
||||
int r;
|
||||
|
||||
r = sd_bus_message_read(m, "u", &mode);
|
||||
if (r < 0)
|
||||
return r;
|
||||
CHECK_CALL(sd_bus_message_read(m, "u", &mode));
|
||||
|
||||
r = ratbag_led_set_mode(led->lib_led, mode);
|
||||
|
||||
@@ -81,7 +110,7 @@ static int ratbagd_led_set_mode(sd_bus *bus,
|
||||
NULL);
|
||||
}
|
||||
|
||||
return r;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ratbagd_led_get_type(sd_bus *bus,
|
||||
@@ -97,7 +126,11 @@ static int ratbagd_led_get_type(sd_bus *bus,
|
||||
|
||||
type = ratbag_led_get_type(led->lib_led);
|
||||
|
||||
return sd_bus_message_append(reply, "u", type);
|
||||
verify_unsigned_int(type);
|
||||
|
||||
CHECK_CALL(sd_bus_message_append(reply, "u", type));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ratbagd_led_get_color(sd_bus *bus,
|
||||
@@ -112,7 +145,9 @@ static int ratbagd_led_get_color(sd_bus *bus,
|
||||
struct ratbag_color c;
|
||||
|
||||
c = ratbag_led_get_color(led->lib_led);
|
||||
return sd_bus_message_append(reply, "(uuu)", c.red, c.green, c.blue);
|
||||
CHECK_CALL(sd_bus_message_append(reply, "(uuu)", c.red, c.green, c.blue));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ratbagd_led_set_color(sd_bus *bus,
|
||||
@@ -127,12 +162,14 @@ static int ratbagd_led_set_color(sd_bus *bus,
|
||||
struct ratbag_color c;
|
||||
int r;
|
||||
|
||||
r = sd_bus_message_read(m, "(uuu)", &c.red, &c.green, &c.blue);
|
||||
if (r < 0)
|
||||
return r;
|
||||
CHECK_CALL(sd_bus_message_read(m, "(uuu)", &c.red, &c.green, &c.blue));
|
||||
|
||||
if (c.red > 255 || c.green > 255 || c.blue > 255)
|
||||
return RATBAG_ERROR_VALUE;
|
||||
if (c.red > 255)
|
||||
c.red = 255;
|
||||
if (c.green > 255)
|
||||
c.green = 255;
|
||||
if (c.blue > 255)
|
||||
c.blue = 255;
|
||||
|
||||
r = ratbag_led_set_color(led->lib_led, c);
|
||||
|
||||
@@ -145,55 +182,58 @@ static int ratbagd_led_set_color(sd_bus *bus,
|
||||
NULL);
|
||||
}
|
||||
|
||||
return r;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ratbagd_led_get_effect_rate(sd_bus *bus,
|
||||
const char *path,
|
||||
const char *interface,
|
||||
const char *property,
|
||||
sd_bus_message *reply,
|
||||
void *userdata,
|
||||
sd_bus_error *error)
|
||||
static int ratbagd_led_get_effect_duration(sd_bus *bus,
|
||||
const char *path,
|
||||
const char *interface,
|
||||
const char *property,
|
||||
sd_bus_message *reply,
|
||||
void *userdata,
|
||||
sd_bus_error *error)
|
||||
{
|
||||
struct ratbagd_led *led = userdata;
|
||||
int rate;
|
||||
|
||||
rate = ratbag_led_get_effect_rate(led->lib_led);
|
||||
return sd_bus_message_append(reply, "u", rate);
|
||||
rate = ratbag_led_get_effect_duration(led->lib_led);
|
||||
|
||||
verify_unsigned_int(rate);
|
||||
|
||||
CHECK_CALL(sd_bus_message_append(reply, "u", rate));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ratbagd_led_set_effect_rate(sd_bus *bus,
|
||||
const char *path,
|
||||
const char *interface,
|
||||
const char *property,
|
||||
sd_bus_message *m,
|
||||
void *userdata,
|
||||
sd_bus_error *error)
|
||||
static int ratbagd_led_set_effect_duration(sd_bus *bus,
|
||||
const char *path,
|
||||
const char *interface,
|
||||
const char *property,
|
||||
sd_bus_message *m,
|
||||
void *userdata,
|
||||
sd_bus_error *error)
|
||||
{
|
||||
struct ratbagd_led *led = userdata;
|
||||
unsigned int rate;
|
||||
int r;
|
||||
|
||||
r = sd_bus_message_read(m, "u", &rate);
|
||||
if (r < 0)
|
||||
return r;
|
||||
CHECK_CALL(sd_bus_message_read(m, "u", &rate));
|
||||
|
||||
if (rate < 100 || rate > 20000)
|
||||
return 0;
|
||||
if (rate > 10000)
|
||||
rate = 10000;
|
||||
|
||||
r = ratbag_led_set_effect_rate(led->lib_led, rate);
|
||||
r = ratbag_led_set_effect_duration(led->lib_led, rate);
|
||||
|
||||
if (r == 0) {
|
||||
sd_bus *bus = sd_bus_message_get_bus(m);
|
||||
sd_bus_emit_properties_changed(bus,
|
||||
led->path,
|
||||
RATBAGD_NAME_ROOT ".Led",
|
||||
"EffectRate",
|
||||
"EffectDuration",
|
||||
NULL);
|
||||
}
|
||||
|
||||
return r;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ratbagd_led_get_brightness(sd_bus *bus,
|
||||
@@ -208,7 +248,12 @@ static int ratbagd_led_get_brightness(sd_bus *bus,
|
||||
unsigned int brightness;
|
||||
|
||||
brightness = ratbag_led_get_brightness(led->lib_led);
|
||||
return sd_bus_message_append(reply, "u", brightness);
|
||||
|
||||
verify_unsigned_int(brightness);
|
||||
|
||||
CHECK_CALL(sd_bus_message_append(reply, "u", brightness));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ratbagd_led_set_brightness(sd_bus *bus,
|
||||
@@ -223,12 +268,10 @@ static int ratbagd_led_set_brightness(sd_bus *bus,
|
||||
unsigned int brightness;
|
||||
int r;
|
||||
|
||||
r = sd_bus_message_read(m, "u", &brightness);
|
||||
if (r < 0)
|
||||
return r;
|
||||
CHECK_CALL(sd_bus_message_read(m, "u", &brightness));
|
||||
|
||||
if (brightness > 255)
|
||||
return 0;
|
||||
brightness = 255;
|
||||
|
||||
r = ratbag_led_set_brightness(led->lib_led, brightness);
|
||||
|
||||
@@ -241,12 +284,13 @@ static int ratbagd_led_set_brightness(sd_bus *bus,
|
||||
NULL);
|
||||
}
|
||||
|
||||
return r;
|
||||
return 0;
|
||||
}
|
||||
|
||||
const sd_bus_vtable ratbagd_led_vtable[] = {
|
||||
SD_BUS_VTABLE_START(0),
|
||||
SD_BUS_PROPERTY("Index", "u", NULL, offsetof(struct ratbagd_led, index), SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
SD_BUS_PROPERTY("Modes", "au", ratbagd_led_get_modes, 0, SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
SD_BUS_WRITABLE_PROPERTY("Mode", "u",
|
||||
ratbagd_led_get_mode,
|
||||
ratbagd_led_set_mode, 0,
|
||||
@@ -255,8 +299,9 @@ const sd_bus_vtable ratbagd_led_vtable[] = {
|
||||
SD_BUS_WRITABLE_PROPERTY("Color", "(uuu)",
|
||||
ratbagd_led_get_color, ratbagd_led_set_color, 0,
|
||||
SD_BUS_VTABLE_UNPRIVILEGED|SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
|
||||
SD_BUS_WRITABLE_PROPERTY("EffectRate", "u",
|
||||
ratbagd_led_get_effect_rate, ratbagd_led_set_effect_rate, 0,
|
||||
SD_BUS_PROPERTY("ColorDepth", "u", NULL, offsetof(struct ratbagd_led, colordepth), SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
SD_BUS_WRITABLE_PROPERTY("EffectDuration", "u",
|
||||
ratbagd_led_get_effect_duration, ratbagd_led_set_effect_duration, 0,
|
||||
SD_BUS_VTABLE_UNPRIVILEGED|SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
|
||||
SD_BUS_WRITABLE_PROPERTY("Brightness", "u",
|
||||
ratbagd_led_get_brightness, ratbagd_led_set_brightness, 0,
|
||||
@@ -281,12 +326,13 @@ int ratbagd_led_new(struct ratbagd_led **out,
|
||||
led = zalloc(sizeof(*led));
|
||||
led->lib_led = lib_led;
|
||||
led->index = index;
|
||||
led->colordepth = ratbag_led_get_colordepth(lib_led);
|
||||
|
||||
sprintf(profile_buffer, "p%u", ratbagd_profile_get_index(profile));
|
||||
sprintf(led_buffer, "l%u", index);
|
||||
r = sd_bus_path_encode_many(&led->path,
|
||||
RATBAGD_OBJ_ROOT "/led/%/%/%",
|
||||
ratbagd_device_get_name(device),
|
||||
ratbagd_device_get_sysname(device),
|
||||
profile_buffer,
|
||||
led_buffer);
|
||||
if (r < 0)
|
||||
@@ -314,3 +360,15 @@ struct ratbagd_led *ratbagd_led_free(struct ratbagd_led *led)
|
||||
return mfree(led);
|
||||
}
|
||||
|
||||
int ratbagd_led_resync(sd_bus *bus,
|
||||
struct ratbagd_led *led)
|
||||
{
|
||||
return sd_bus_emit_properties_changed(bus,
|
||||
led->path,
|
||||
RATBAGD_NAME_ROOT ".Led",
|
||||
"Mode",
|
||||
"Color",
|
||||
"EffectDuration",
|
||||
"Brightness",
|
||||
NULL);
|
||||
}
|
||||
|
||||
@@ -102,25 +102,22 @@ static int ratbagd_profile_get_resolutions(sd_bus *bus,
|
||||
struct ratbagd_profile *profile = userdata;
|
||||
struct ratbagd_resolution *resolution;
|
||||
unsigned int i;
|
||||
int r;
|
||||
|
||||
r = sd_bus_message_open_container(reply, 'a', "o");
|
||||
if (r < 0)
|
||||
return r;
|
||||
CHECK_CALL(sd_bus_message_open_container(reply, 'a', "o"));
|
||||
|
||||
for (i = 0; i < profile->n_resolutions; ++i) {
|
||||
resolution = profile->resolutions[i];
|
||||
if (!resolution)
|
||||
continue;
|
||||
|
||||
r = sd_bus_message_append(reply,
|
||||
"o",
|
||||
ratbagd_resolution_get_path(resolution));
|
||||
if (r < 0)
|
||||
return r;
|
||||
CHECK_CALL(sd_bus_message_append(reply,
|
||||
"o",
|
||||
ratbagd_resolution_get_path(resolution)));
|
||||
}
|
||||
|
||||
return sd_bus_message_close_container(reply);
|
||||
CHECK_CALL(sd_bus_message_close_container(reply));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ratbagd_profile_get_buttons(sd_bus *bus,
|
||||
@@ -134,25 +131,22 @@ static int ratbagd_profile_get_buttons(sd_bus *bus,
|
||||
struct ratbagd_profile *profile = userdata;
|
||||
struct ratbagd_button *button;
|
||||
unsigned int i;
|
||||
int r;
|
||||
|
||||
r = sd_bus_message_open_container(reply, 'a', "o");
|
||||
if (r < 0)
|
||||
return r;
|
||||
CHECK_CALL(sd_bus_message_open_container(reply, 'a', "o"));
|
||||
|
||||
for (i = 0; i < profile->n_buttons; ++i) {
|
||||
button = profile->buttons[i];
|
||||
if (!button)
|
||||
continue;
|
||||
|
||||
r = sd_bus_message_append(reply,
|
||||
CHECK_CALL(sd_bus_message_append(reply,
|
||||
"o",
|
||||
ratbagd_button_get_path(button));
|
||||
if (r < 0)
|
||||
return r;
|
||||
ratbagd_button_get_path(button)));
|
||||
}
|
||||
|
||||
return sd_bus_message_close_container(reply);
|
||||
CHECK_CALL(sd_bus_message_close_container(reply));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ratbagd_profile_get_leds(sd_bus *bus,
|
||||
@@ -166,25 +160,22 @@ static int ratbagd_profile_get_leds(sd_bus *bus,
|
||||
struct ratbagd_profile *profile = userdata;
|
||||
struct ratbagd_led *led;
|
||||
unsigned int i;
|
||||
int r;
|
||||
|
||||
r = sd_bus_message_open_container(reply, 'a', "o");
|
||||
if (r < 0)
|
||||
return r;
|
||||
CHECK_CALL(sd_bus_message_open_container(reply, 'a', "o"));
|
||||
|
||||
for (i = 0; i < profile->n_leds; ++i) {
|
||||
led = profile->leds[i];
|
||||
if (!led)
|
||||
continue;
|
||||
|
||||
r = sd_bus_message_append(reply,
|
||||
"o",
|
||||
ratbagd_led_get_path(led));
|
||||
if (r < 0)
|
||||
return r;
|
||||
CHECK_CALL(sd_bus_message_append(reply,
|
||||
"o",
|
||||
ratbagd_led_get_path(led)));
|
||||
}
|
||||
|
||||
return sd_bus_message_close_container(reply);
|
||||
CHECK_CALL(sd_bus_message_close_container(reply));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ratbagd_profile_is_active(sd_bus *bus,
|
||||
@@ -196,11 +187,13 @@ static int ratbagd_profile_is_active(sd_bus *bus,
|
||||
sd_bus_error *error)
|
||||
{
|
||||
struct ratbagd_profile *profile = userdata;
|
||||
bool is_active;
|
||||
int is_active;
|
||||
|
||||
is_active = !!ratbag_profile_is_active(profile->lib_profile);
|
||||
is_active = ratbag_profile_is_active(profile->lib_profile);
|
||||
|
||||
return sd_bus_message_append(reply, "b", is_active);
|
||||
CHECK_CALL(sd_bus_message_append(reply, "b", is_active));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ratbagd_profile_find_button(sd_bus *bus,
|
||||
@@ -268,17 +261,13 @@ static int ratbagd_profile_find_led(sd_bus *bus,
|
||||
static int ratbagd_profile_active_signal_cb(sd_bus *bus,
|
||||
struct ratbagd_profile *profile)
|
||||
{
|
||||
struct ratbag_profile *lib_profile = profile->lib_profile;
|
||||
|
||||
/* FIXME: we should cache is active and only send the signal for
|
||||
* those profiles where it changed */
|
||||
|
||||
(void) sd_bus_emit_signal(bus,
|
||||
profile->path,
|
||||
RATBAGD_NAME_ROOT ".Profile",
|
||||
"IsActive",
|
||||
"b",
|
||||
ratbag_profile_is_active(lib_profile));
|
||||
(void) sd_bus_emit_properties_changed(bus,
|
||||
profile->path,
|
||||
RATBAGD_NAME_ROOT ".Profile",
|
||||
"IsActive",
|
||||
NULL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -290,16 +279,23 @@ static int ratbagd_profile_set_active(sd_bus_message *m,
|
||||
struct ratbagd_profile *profile = userdata;
|
||||
int r;
|
||||
|
||||
r = sd_bus_message_read(m, "");
|
||||
if (r < 0)
|
||||
return r;
|
||||
CHECK_CALL(sd_bus_message_read(m, ""));
|
||||
|
||||
r = ratbag_profile_set_active(profile->lib_profile);
|
||||
if (r < 0) {
|
||||
sd_bus *bus = sd_bus_message_get_bus(m);
|
||||
r = ratbagd_device_resync(profile->device, bus);
|
||||
if (r < 0)
|
||||
return r;
|
||||
}
|
||||
|
||||
ratbagd_for_each_profile_signal(sd_bus_message_get_bus(m),
|
||||
profile->device,
|
||||
ratbagd_profile_active_signal_cb);
|
||||
|
||||
return sd_bus_reply_method_return(m, "u",
|
||||
ratbag_profile_set_active(profile->lib_profile));
|
||||
CHECK_CALL(sd_bus_reply_method_return(m, "u", 0));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
@@ -312,12 +308,10 @@ ratbagd_profile_set_enabled(sd_bus *bus,
|
||||
sd_bus_error *error)
|
||||
{
|
||||
struct ratbagd_profile *profile = userdata;
|
||||
bool enabled;
|
||||
int enabled;
|
||||
int r;
|
||||
|
||||
r = sd_bus_message_read(m, "b", &enabled);
|
||||
if (r < 0)
|
||||
return r;
|
||||
CHECK_CALL(sd_bus_message_read(m, "b", &enabled));
|
||||
|
||||
r = ratbag_profile_set_enabled(profile->lib_profile, enabled);
|
||||
if (r == 0) {
|
||||
@@ -329,7 +323,7 @@ ratbagd_profile_set_enabled(sd_bus *bus,
|
||||
NULL);
|
||||
}
|
||||
|
||||
return r;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
@@ -342,18 +336,101 @@ ratbagd_profile_is_enabled(sd_bus *bus,
|
||||
sd_bus_error *error)
|
||||
{
|
||||
struct ratbagd_profile *profile = userdata;
|
||||
bool enabled = ratbag_profile_is_enabled(profile->lib_profile) != 0;
|
||||
int enabled = ratbag_profile_is_enabled(profile->lib_profile) != 0;
|
||||
|
||||
return sd_bus_message_append(reply, "b", enabled);
|
||||
CHECK_CALL(sd_bus_message_append(reply, "b", enabled));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
ratbagd_profile_set_name(sd_bus *bus,
|
||||
const char *path,
|
||||
const char *interface,
|
||||
const char *property,
|
||||
sd_bus_message *m,
|
||||
void *userdata,
|
||||
sd_bus_error *error)
|
||||
{
|
||||
struct ratbagd_profile *profile = userdata;
|
||||
char *name;
|
||||
int r;
|
||||
|
||||
CHECK_CALL(sd_bus_message_read(m, "s", &name));
|
||||
|
||||
r = ratbag_profile_set_name(profile->lib_profile, name);
|
||||
|
||||
if (r == 0) {
|
||||
sd_bus_emit_properties_changed(bus,
|
||||
profile->path,
|
||||
RATBAGD_NAME_ROOT ".Profile",
|
||||
"Name",
|
||||
NULL);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
ratbagd_profile_get_name(sd_bus *bus,
|
||||
const char *path,
|
||||
const char *interface,
|
||||
const char *property,
|
||||
sd_bus_message *reply,
|
||||
void *userdata,
|
||||
sd_bus_error *error)
|
||||
{
|
||||
struct ratbagd_profile *profile = userdata;
|
||||
const char *name = ratbag_profile_get_name(profile->lib_profile);
|
||||
|
||||
CHECK_CALL(sd_bus_message_append(reply, "s", name));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
ratbagd_profile_get_capabilities(sd_bus *bus,
|
||||
const char *path,
|
||||
const char *interface,
|
||||
const char *property,
|
||||
sd_bus_message *reply,
|
||||
void *userdata,
|
||||
sd_bus_error *error)
|
||||
{
|
||||
struct ratbagd_profile *profile = userdata;
|
||||
struct ratbag_profile *lib_profile = profile->lib_profile;
|
||||
enum ratbag_profile_capability cap;
|
||||
enum ratbag_profile_capability caps[] = {
|
||||
RATBAG_PROFILE_CAP_WRITABLE_NAME,
|
||||
};
|
||||
size_t i;
|
||||
|
||||
CHECK_CALL(sd_bus_message_open_container(reply, 'a', "u"));
|
||||
|
||||
for (i = 0; i < ELEMENTSOF(caps); i++) {
|
||||
cap = caps[i];
|
||||
if (ratbag_profile_has_capability(lib_profile, cap)) {
|
||||
CHECK_CALL(sd_bus_message_append(reply, "u", cap));
|
||||
}
|
||||
}
|
||||
|
||||
CHECK_CALL(sd_bus_message_close_container(reply));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
const sd_bus_vtable ratbagd_profile_vtable[] = {
|
||||
SD_BUS_VTABLE_START(0),
|
||||
SD_BUS_WRITABLE_PROPERTY("Name", "s",
|
||||
ratbagd_profile_get_name,
|
||||
ratbagd_profile_set_name, 0,
|
||||
SD_BUS_VTABLE_UNPRIVILEGED|SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
|
||||
SD_BUS_WRITABLE_PROPERTY("Enabled", "b",
|
||||
ratbagd_profile_is_enabled,
|
||||
ratbagd_profile_set_enabled, 0,
|
||||
SD_BUS_VTABLE_UNPRIVILEGED|SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
|
||||
SD_BUS_PROPERTY("Index", "u", NULL, offsetof(struct ratbagd_profile, index), SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
SD_BUS_PROPERTY("Capabilities", "au", ratbagd_profile_get_capabilities, 0, SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
SD_BUS_PROPERTY("Resolutions", "ao", ratbagd_profile_get_resolutions, 0, 0),
|
||||
SD_BUS_PROPERTY("Buttons", "ao", ratbagd_profile_get_buttons, 0, 0),
|
||||
SD_BUS_PROPERTY("Leds", "ao", ratbagd_profile_get_leds, 0, 0),
|
||||
@@ -387,7 +464,7 @@ int ratbagd_profile_new(struct ratbagd_profile **out,
|
||||
sprintf(index_buffer, "p%u", index);
|
||||
r = sd_bus_path_encode_many(&profile->path,
|
||||
RATBAGD_OBJ_ROOT "/profile/%/%",
|
||||
ratbagd_device_get_name(device),
|
||||
ratbagd_device_get_sysname(device),
|
||||
index_buffer);
|
||||
if (r < 0)
|
||||
return r;
|
||||
@@ -413,8 +490,8 @@ int ratbagd_profile_new(struct ratbagd_profile **out,
|
||||
i);
|
||||
if (r < 0) {
|
||||
errno = -r;
|
||||
log_error("Cannot allocate resolution for '%s': %m\n",
|
||||
ratbagd_device_get_name(device));
|
||||
log_error("%s: failed to allocate resolution: %m\n",
|
||||
ratbagd_device_get_sysname(device));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -430,8 +507,8 @@ int ratbagd_profile_new(struct ratbagd_profile **out,
|
||||
i);
|
||||
if (r < 0) {
|
||||
errno = -r;
|
||||
log_error("Cannot allocate button for '%s': %m\n",
|
||||
ratbagd_device_get_name(device));
|
||||
log_error("%s: failed to allocate button: %m\n",
|
||||
ratbagd_device_get_sysname(device));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -447,8 +524,8 @@ int ratbagd_profile_new(struct ratbagd_profile **out,
|
||||
i);
|
||||
if (r < 0) {
|
||||
errno = -r;
|
||||
log_error("Cannot allocate led for '%s': %m\n",
|
||||
ratbagd_device_get_name(device));
|
||||
log_error("%s: failed to allocate led: %m\n",
|
||||
ratbagd_device_get_sysname(device));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -540,7 +617,7 @@ int ratbagd_profile_register_resolutions(struct sd_bus *bus,
|
||||
/* register resolution interfaces */
|
||||
r = sd_bus_path_encode_many(&prefix,
|
||||
RATBAGD_OBJ_ROOT "/resolution/%/%",
|
||||
ratbagd_device_get_name(device),
|
||||
ratbagd_device_get_sysname(device),
|
||||
index_buffer);
|
||||
|
||||
if (r >= 0) {
|
||||
@@ -560,8 +637,8 @@ int ratbagd_profile_register_resolutions(struct sd_bus *bus,
|
||||
}
|
||||
if (r < 0) {
|
||||
errno = -r;
|
||||
log_error("Cannot register resolutions for '%s': %m\n",
|
||||
ratbagd_device_get_name(device));
|
||||
log_error("%s: failed to register resolutions: %m\n",
|
||||
ratbagd_device_get_sysname(device));
|
||||
}
|
||||
|
||||
return 0;
|
||||
@@ -606,7 +683,7 @@ int ratbagd_profile_register_buttons(struct sd_bus *bus,
|
||||
/* register button interfaces */
|
||||
r = sd_bus_path_encode_many(&prefix,
|
||||
RATBAGD_OBJ_ROOT "/button/%/%",
|
||||
ratbagd_device_get_name(device),
|
||||
ratbagd_device_get_sysname(device),
|
||||
index_buffer);
|
||||
|
||||
if (r >= 0) {
|
||||
@@ -626,8 +703,8 @@ int ratbagd_profile_register_buttons(struct sd_bus *bus,
|
||||
}
|
||||
if (r < 0) {
|
||||
errno = -r;
|
||||
log_error("Cannot register buttons for '%s': %m\n",
|
||||
ratbagd_device_get_name(device));
|
||||
log_error("%s: failed to register buttons: %m\n",
|
||||
ratbagd_device_get_sysname(device));
|
||||
}
|
||||
|
||||
return 0;
|
||||
@@ -672,7 +749,7 @@ int ratbagd_profile_register_leds(struct sd_bus *bus,
|
||||
/* register led interfaces */
|
||||
r = sd_bus_path_encode_many(&prefix,
|
||||
RATBAGD_OBJ_ROOT "/led/%/%",
|
||||
ratbagd_device_get_name(device),
|
||||
ratbagd_device_get_sysname(device),
|
||||
index_buffer);
|
||||
|
||||
if (r >= 0) {
|
||||
@@ -692,8 +769,8 @@ int ratbagd_profile_register_leds(struct sd_bus *bus,
|
||||
}
|
||||
if (r < 0) {
|
||||
errno = -r;
|
||||
log_error("Cannot register leds for '%s': %m\n",
|
||||
ratbagd_device_get_name(device));
|
||||
log_error("%s: failed to register leds: %m\n",
|
||||
ratbagd_device_get_sysname(device));
|
||||
}
|
||||
|
||||
return 0;
|
||||
@@ -711,3 +788,47 @@ int ratbagd_for_each_resolution_signal(sd_bus *bus,
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
int ratbagd_for_each_button_signal(sd_bus *bus,
|
||||
struct ratbagd_profile *profile,
|
||||
int (*func)(sd_bus *bus,
|
||||
struct ratbagd_button *button))
|
||||
{
|
||||
int rc = 0;
|
||||
|
||||
for (size_t i = 0; rc == 0 && i < profile->n_buttons; i++)
|
||||
rc = func(bus, profile->buttons[i]);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
int ratbagd_for_each_led_signal(sd_bus *bus,
|
||||
struct ratbagd_profile *profile,
|
||||
int (*func)(sd_bus *bus,
|
||||
struct ratbagd_led *button))
|
||||
{
|
||||
int rc = 0;
|
||||
|
||||
for (size_t i = 0; rc == 0 && i < profile->n_leds; i++)
|
||||
rc = func(bus, profile->leds[i]);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
||||
int ratbagd_profile_resync(sd_bus *bus,
|
||||
struct ratbagd_profile *profile)
|
||||
{
|
||||
ratbagd_for_each_resolution_signal(bus, profile, ratbagd_resolution_resync);
|
||||
ratbagd_for_each_button_signal(bus, profile, ratbagd_button_resync);
|
||||
ratbagd_for_each_led_signal(bus, profile, ratbagd_led_resync);
|
||||
|
||||
return sd_bus_emit_properties_changed(bus,
|
||||
profile->path,
|
||||
RATBAGD_NAME_ROOT ".Profile",
|
||||
"Resolutions",
|
||||
"Buttons",
|
||||
"Leds",
|
||||
"IsActive",
|
||||
NULL);
|
||||
}
|
||||
|
||||
@@ -38,62 +38,32 @@
|
||||
#include "libratbag-util.h"
|
||||
|
||||
struct ratbagd_resolution {
|
||||
struct ratbagd_device *device;
|
||||
struct ratbagd_profile *profile;
|
||||
struct ratbag_resolution *lib_resolution;
|
||||
unsigned int index;
|
||||
char *path;
|
||||
};
|
||||
|
||||
static int
|
||||
ratbagd_resolution_set_report_rate(sd_bus *bus,
|
||||
const char *path,
|
||||
const char *interface,
|
||||
const char *property,
|
||||
sd_bus_message *m,
|
||||
void *userdata,
|
||||
sd_bus_error *error)
|
||||
int ratbagd_resolution_resync(sd_bus *bus,
|
||||
struct ratbagd_resolution *resolution)
|
||||
{
|
||||
struct ratbagd_resolution *resolution = userdata;
|
||||
unsigned int rate;
|
||||
int r;
|
||||
|
||||
r = sd_bus_message_read(m, "u", &rate);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
/* basic sanity check */
|
||||
if (rate > 5000 || rate % 100)
|
||||
return 0;
|
||||
|
||||
r = ratbag_resolution_set_report_rate(resolution->lib_resolution,
|
||||
rate);
|
||||
if (r == 0) {
|
||||
sd_bus *bus = sd_bus_message_get_bus(m);
|
||||
sd_bus_emit_properties_changed(bus,
|
||||
resolution->path,
|
||||
RATBAGD_NAME_ROOT ".Resolution",
|
||||
"ReportRate",
|
||||
NULL);
|
||||
}
|
||||
|
||||
return r;
|
||||
return sd_bus_emit_properties_changed(bus,
|
||||
resolution->path,
|
||||
RATBAGD_NAME_ROOT ".Resolution",
|
||||
"IsDefault",
|
||||
"Resolution",
|
||||
"ReportRate",
|
||||
"IsActive",
|
||||
NULL);
|
||||
}
|
||||
|
||||
static int ratbagd_resolution_active_signal_cb(sd_bus *bus,
|
||||
struct ratbagd_resolution *resolution)
|
||||
{
|
||||
struct ratbag_resolution *lib_resolution = resolution->lib_resolution;
|
||||
|
||||
/* FIXME: we should cache is_active and only send the signal for
|
||||
* those resolutions where it changed */
|
||||
|
||||
(void) sd_bus_emit_signal(bus,
|
||||
resolution->path,
|
||||
RATBAGD_NAME_ROOT ".Resolution",
|
||||
"IsActive",
|
||||
"b",
|
||||
ratbag_resolution_is_active(lib_resolution));
|
||||
|
||||
(void) sd_bus_emit_properties_changed(bus,
|
||||
resolution->path,
|
||||
RATBAGD_NAME_ROOT ".Resolution",
|
||||
@@ -111,31 +81,26 @@ static int ratbagd_resolution_set_active(sd_bus_message *m,
|
||||
int r;
|
||||
|
||||
r = ratbag_resolution_set_active(resolution->lib_resolution);
|
||||
if (r < 0)
|
||||
return r;
|
||||
if (r < 0) {
|
||||
sd_bus *bus = sd_bus_message_get_bus(m);
|
||||
r = ratbagd_device_resync(resolution->device, bus);
|
||||
if (r < 0)
|
||||
return r;
|
||||
}
|
||||
|
||||
ratbagd_for_each_resolution_signal(sd_bus_message_get_bus(m),
|
||||
resolution->profile,
|
||||
ratbagd_resolution_active_signal_cb);
|
||||
|
||||
return sd_bus_reply_method_return(m, "u", r);
|
||||
return sd_bus_reply_method_return(m, "u", 0);
|
||||
}
|
||||
|
||||
static int ratbagd_resolution_default_signal_cb(sd_bus *bus,
|
||||
struct ratbagd_resolution *resolution)
|
||||
{
|
||||
struct ratbag_resolution *lib_resolution = resolution->lib_resolution;
|
||||
|
||||
/* FIXME: we should cache is default and only send the signal for
|
||||
* those resolutions where it changed */
|
||||
|
||||
(void) sd_bus_emit_signal(bus,
|
||||
resolution->path,
|
||||
RATBAGD_NAME_ROOT ".Resolution",
|
||||
"IsDefault",
|
||||
"b",
|
||||
ratbag_resolution_is_default(lib_resolution));
|
||||
|
||||
(void) sd_bus_emit_properties_changed(bus,
|
||||
resolution->path,
|
||||
RATBAGD_NAME_ROOT ".Resolution",
|
||||
@@ -153,14 +118,18 @@ static int ratbagd_resolution_set_default(sd_bus_message *m,
|
||||
int r;
|
||||
|
||||
r = ratbag_resolution_set_default(resolution->lib_resolution);
|
||||
if (r < 0)
|
||||
return r;
|
||||
if (r < 0) {
|
||||
sd_bus *bus = sd_bus_message_get_bus(m);
|
||||
r = ratbagd_device_resync(resolution->device, bus);
|
||||
if (r < 0)
|
||||
return r;
|
||||
}
|
||||
|
||||
ratbagd_for_each_resolution_signal(sd_bus_message_get_bus(m),
|
||||
resolution->profile,
|
||||
ratbagd_resolution_default_signal_cb);
|
||||
|
||||
return sd_bus_reply_method_return(m, "u", r);
|
||||
return sd_bus_reply_method_return(m, "u", 0);
|
||||
}
|
||||
|
||||
static int
|
||||
@@ -174,7 +143,7 @@ ratbagd_resolution_get_capabilities(sd_bus *bus,
|
||||
{
|
||||
struct ratbagd_resolution *resolution = userdata;
|
||||
struct ratbag_resolution *lib_resolution = resolution->lib_resolution;
|
||||
enum ratbag_device_capability cap;
|
||||
enum ratbag_resolution_capability cap;
|
||||
int r;
|
||||
|
||||
r = sd_bus_message_open_container(reply, 'a', "u");
|
||||
@@ -209,9 +178,9 @@ ratbagd_resolution_is_active(sd_bus *bus,
|
||||
{
|
||||
struct ratbagd_resolution *resolution = userdata;
|
||||
struct ratbag_resolution *lib_resolution = resolution->lib_resolution;
|
||||
bool is_active;
|
||||
int is_active;
|
||||
|
||||
is_active = !!ratbag_resolution_is_active(lib_resolution);
|
||||
is_active = ratbag_resolution_is_active(lib_resolution);
|
||||
|
||||
return sd_bus_message_append(reply, "b", is_active);
|
||||
}
|
||||
@@ -227,13 +196,46 @@ ratbagd_resolution_is_default(sd_bus *bus,
|
||||
{
|
||||
struct ratbagd_resolution *resolution = userdata;
|
||||
struct ratbag_resolution *lib_resolution = resolution->lib_resolution;
|
||||
bool is_default;
|
||||
int is_default;
|
||||
|
||||
is_default = !!ratbag_resolution_is_default(lib_resolution);
|
||||
is_default = ratbag_resolution_is_default(lib_resolution);
|
||||
|
||||
return sd_bus_message_append(reply, "b", is_default);
|
||||
}
|
||||
|
||||
static int
|
||||
ratbagd_resolution_get_resolutions(sd_bus *bus,
|
||||
const char *path,
|
||||
const char *interface,
|
||||
const char *property,
|
||||
sd_bus_message *reply,
|
||||
void *userdata,
|
||||
sd_bus_error *error)
|
||||
{
|
||||
struct ratbagd_resolution *resolution = userdata;
|
||||
struct ratbag_resolution *lib_resolution = resolution->lib_resolution;
|
||||
unsigned int dpis[300];
|
||||
unsigned int ndpis = ARRAY_LENGTH(dpis);
|
||||
int r;
|
||||
|
||||
r = sd_bus_message_open_container(reply, 'a', "u");
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
ndpis = ratbag_resolution_get_dpi_list(lib_resolution,
|
||||
dpis, ndpis);
|
||||
assert(ndpis <= ARRAY_LENGTH(dpis));
|
||||
|
||||
for (unsigned int i = 0; i < ndpis; i++) {
|
||||
verify_unsigned_int(dpis[i]);
|
||||
r = sd_bus_message_append(reply, "u", dpis[i]);
|
||||
if (r < 0)
|
||||
return r;
|
||||
}
|
||||
|
||||
return sd_bus_message_close_container(reply);
|
||||
}
|
||||
|
||||
static int
|
||||
ratbagd_resolution_get_resolution(sd_bus *bus,
|
||||
const char *path,
|
||||
@@ -250,6 +252,9 @@ ratbagd_resolution_get_resolution(sd_bus *bus,
|
||||
xres = ratbag_resolution_get_dpi_x(lib_resolution);
|
||||
yres = ratbag_resolution_get_dpi_y(lib_resolution);
|
||||
|
||||
verify_unsigned_int(xres);
|
||||
verify_unsigned_int(yres);
|
||||
|
||||
return sd_bus_message_append(reply, "(uu)", xres, yres);
|
||||
}
|
||||
|
||||
@@ -264,7 +269,7 @@ ratbagd_resolution_set_resolution(sd_bus *bus,
|
||||
{
|
||||
struct ratbagd_resolution *resolution = userdata;
|
||||
struct ratbag_resolution *lib_resolution = resolution->lib_resolution;
|
||||
const enum ratbag_device_capability cap = RATBAG_RESOLUTION_CAP_SEPARATE_XY_RESOLUTION;
|
||||
const enum ratbag_resolution_capability cap = RATBAG_RESOLUTION_CAP_SEPARATE_XY_RESOLUTION;
|
||||
int xres, yres;
|
||||
int r;
|
||||
|
||||
@@ -288,58 +293,96 @@ ratbagd_resolution_set_resolution(sd_bus *bus,
|
||||
NULL);
|
||||
}
|
||||
|
||||
return r;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
ratbagd_resolution_get_rate(sd_bus *bus,
|
||||
const char *path,
|
||||
const char *interface,
|
||||
const char *property,
|
||||
sd_bus_message *reply,
|
||||
void *userdata,
|
||||
sd_bus_error *error)
|
||||
ratbagd_resolution_get_report_rate(sd_bus *bus,
|
||||
const char *path,
|
||||
const char *interface,
|
||||
const char *property,
|
||||
sd_bus_message *reply,
|
||||
void *userdata,
|
||||
sd_bus_error *error)
|
||||
{
|
||||
struct ratbagd_resolution *resolution = userdata;
|
||||
struct ratbag_resolution *lib_resolution = resolution->lib_resolution;
|
||||
int rate;
|
||||
|
||||
rate = ratbag_resolution_get_report_rate(lib_resolution);
|
||||
verify_unsigned_int(rate);
|
||||
return sd_bus_message_append(reply, "u", rate);
|
||||
}
|
||||
|
||||
static int
|
||||
ratbagd_resolution_get_minimum(sd_bus *bus,
|
||||
const char *path,
|
||||
const char *interface,
|
||||
const char *property,
|
||||
sd_bus_message *reply,
|
||||
void *userdata,
|
||||
sd_bus_error *error)
|
||||
ratbagd_resolution_get_report_rates(sd_bus *bus,
|
||||
const char *path,
|
||||
const char *interface,
|
||||
const char *property,
|
||||
sd_bus_message *reply,
|
||||
void *userdata,
|
||||
sd_bus_error *error)
|
||||
{
|
||||
struct ratbagd_resolution *resolution = userdata;
|
||||
struct ratbag_resolution *lib_resolution = resolution->lib_resolution;
|
||||
int min;
|
||||
unsigned int rates[8];
|
||||
unsigned int nrates = ARRAY_LENGTH(rates);
|
||||
int r;
|
||||
|
||||
min = ratbag_resolution_get_dpi_minimum(lib_resolution);
|
||||
return sd_bus_message_append(reply, "u", min);
|
||||
r = sd_bus_message_open_container(reply, 'a', "u");
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
nrates = ratbag_resolution_get_report_rate_list(lib_resolution,
|
||||
rates, nrates);
|
||||
assert(nrates <= ARRAY_LENGTH(rates));
|
||||
|
||||
for (unsigned int i = 0; i < nrates; i++) {
|
||||
verify_unsigned_int(rates[i]);
|
||||
r = sd_bus_message_append(reply, "u", rates[i]);
|
||||
if (r < 0)
|
||||
return r;
|
||||
}
|
||||
|
||||
return sd_bus_message_close_container(reply);
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
ratbagd_resolution_get_maximum(sd_bus *bus,
|
||||
const char *path,
|
||||
const char *interface,
|
||||
const char *property,
|
||||
sd_bus_message *reply,
|
||||
void *userdata,
|
||||
sd_bus_error *error)
|
||||
ratbagd_resolution_set_report_rate(sd_bus *bus,
|
||||
const char *path,
|
||||
const char *interface,
|
||||
const char *property,
|
||||
sd_bus_message *m,
|
||||
void *userdata,
|
||||
sd_bus_error *error)
|
||||
{
|
||||
struct ratbagd_resolution *resolution = userdata;
|
||||
struct ratbag_resolution *lib_resolution = resolution->lib_resolution;
|
||||
int max;
|
||||
unsigned int rate;
|
||||
int r;
|
||||
|
||||
max = ratbag_resolution_get_dpi_maximum(lib_resolution);
|
||||
return sd_bus_message_append(reply, "u", max);
|
||||
r = sd_bus_message_read(m, "u", &rate);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
/* basic sanity check */
|
||||
if (rate > 5000)
|
||||
rate = 5000;
|
||||
else if (rate % 100)
|
||||
rate = rate - (rate % 100);
|
||||
|
||||
r = ratbag_resolution_set_report_rate(resolution->lib_resolution,
|
||||
rate);
|
||||
if (r == 0) {
|
||||
sd_bus *bus = sd_bus_message_get_bus(m);
|
||||
sd_bus_emit_properties_changed(bus,
|
||||
resolution->path,
|
||||
RATBAGD_NAME_ROOT ".Resolution",
|
||||
"ReportRate",
|
||||
NULL);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
const sd_bus_vtable ratbagd_resolution_vtable[] = {
|
||||
@@ -352,12 +395,12 @@ const sd_bus_vtable ratbagd_resolution_vtable[] = {
|
||||
ratbagd_resolution_get_resolution,
|
||||
ratbagd_resolution_set_resolution, 0,
|
||||
SD_BUS_VTABLE_UNPRIVILEGED|SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
|
||||
SD_BUS_PROPERTY("Resolutions", "au", ratbagd_resolution_get_resolutions, 0, SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
SD_BUS_WRITABLE_PROPERTY("ReportRate", "u",
|
||||
ratbagd_resolution_get_rate,
|
||||
ratbagd_resolution_get_report_rate,
|
||||
ratbagd_resolution_set_report_rate, 0,
|
||||
SD_BUS_VTABLE_UNPRIVILEGED|SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
|
||||
SD_BUS_PROPERTY("Maximum", "u", ratbagd_resolution_get_maximum, 0, SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
SD_BUS_PROPERTY("Minimum", "u", ratbagd_resolution_get_minimum, 0, SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
SD_BUS_PROPERTY("ReportRates", "au", ratbagd_resolution_get_report_rates, 0, SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
SD_BUS_METHOD("SetActive", "", "u", ratbagd_resolution_set_active, SD_BUS_VTABLE_UNPRIVILEGED),
|
||||
SD_BUS_METHOD("SetDefault", "", "u", ratbagd_resolution_set_default, SD_BUS_VTABLE_UNPRIVILEGED),
|
||||
SD_BUS_VTABLE_END,
|
||||
@@ -381,6 +424,7 @@ int ratbagd_resolution_new(struct ratbagd_resolution **out,
|
||||
if (!resolution)
|
||||
return -ENOMEM;
|
||||
|
||||
resolution->device = device;
|
||||
resolution->profile = profile;
|
||||
resolution->lib_resolution = lib_resolution;
|
||||
resolution->index = index;
|
||||
@@ -389,7 +433,7 @@ int ratbagd_resolution_new(struct ratbagd_resolution **out,
|
||||
sprintf(resolution_buffer, "r%u", index);
|
||||
r = sd_bus_path_encode_many(&resolution->path,
|
||||
RATBAGD_OBJ_ROOT "/resolution/%/%/%",
|
||||
ratbagd_device_get_name(device),
|
||||
ratbagd_device_get_sysname(device),
|
||||
profile_buffer,
|
||||
resolution_buffer);
|
||||
if (r < 0)
|
||||
|
||||
225
ratbagd/ratbagd-test.c
Normal file
@@ -0,0 +1,225 @@
|
||||
/*
|
||||
* Copyright © 2017 Red Hat, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the next
|
||||
* paragraph) shall be included in all copies or substantial portions of the
|
||||
* Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "ratbagd-test.h"
|
||||
|
||||
#ifdef RATBAG_DEVELOPER_EDITION
|
||||
|
||||
#include <linux/input.h>
|
||||
#include <systemd/sd-bus.h>
|
||||
#include <systemd/sd-event.h>
|
||||
|
||||
#include "libratbag-test.h"
|
||||
|
||||
/* A pre-setup sane device. Use for sanity testing by toggling the various
|
||||
* error conditions.
|
||||
*/
|
||||
static const struct ratbag_test_device ratbagd_test_device_descr = {
|
||||
.num_profiles = 4,
|
||||
.num_resolutions = 3,
|
||||
.num_buttons = 4,
|
||||
.num_leds = 3,
|
||||
.svg = "fallback.svg",
|
||||
.profiles = {
|
||||
{
|
||||
.buttons = {
|
||||
{ .button_type = RATBAG_BUTTON_TYPE_LEFT,
|
||||
.action_type = RATBAG_BUTTON_ACTION_TYPE_BUTTON,
|
||||
.button = 0 },
|
||||
{ .button_type = RATBAG_BUTTON_TYPE_MIDDLE,
|
||||
.action_type = RATBAG_BUTTON_ACTION_TYPE_KEY,
|
||||
.key = KEY_3 },
|
||||
{ .button_type = RATBAG_BUTTON_TYPE_RIGHT,
|
||||
.action_type = RATBAG_BUTTON_ACTION_TYPE_SPECIAL,
|
||||
.special = RATBAG_BUTTON_ACTION_SPECIAL_PROFILE_CYCLE_UP },
|
||||
{ .action_type = RATBAG_BUTTON_ACTION_TYPE_MACRO,
|
||||
.macro = {
|
||||
{ .type = RATBAG_MACRO_EVENT_KEY_PRESSED,
|
||||
.value = KEY_B },
|
||||
{ .type = RATBAG_MACRO_EVENT_KEY_RELEASED,
|
||||
.value = KEY_B },
|
||||
{ .type = RATBAG_MACRO_EVENT_WAIT,
|
||||
.value = 300 },
|
||||
},
|
||||
}
|
||||
},
|
||||
.resolutions = {
|
||||
{ .xres = 100, .yres = 200, .hz = 1000,
|
||||
.dpi_min = 50, .dpi_max = 5000,
|
||||
.report_rates = { 500, 1000 } },
|
||||
{ .xres = 200, .yres = 300, .hz = 1000, .active = true, .dflt = true },
|
||||
{ .xres = 300, .yres = 400, .hz = 1000 },
|
||||
},
|
||||
.active = true,
|
||||
.dflt = false,
|
||||
.leds = {
|
||||
{
|
||||
.mode = RATBAG_LED_OFF,
|
||||
.color = { .red = 255, .green = 0, .blue = 0 },
|
||||
.ms = 1000,
|
||||
.brightness = 20,
|
||||
.type = RATBAG_LED_TYPE_LOGO,
|
||||
},
|
||||
{
|
||||
.mode = RATBAG_LED_ON,
|
||||
.color = { .red = 255, .green = 0, .blue = 0 },
|
||||
.ms = 1000,
|
||||
.brightness = 20,
|
||||
.type = RATBAG_LED_TYPE_SIDE,
|
||||
},
|
||||
{
|
||||
.mode = RATBAG_LED_CYCLE,
|
||||
.color = { .red = 255, .green = 255, .blue = 0 },
|
||||
.ms = 333,
|
||||
.brightness = 40,
|
||||
.type = RATBAG_LED_TYPE_SIDE,
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
.buttons = {
|
||||
{ .action_type = RATBAG_BUTTON_ACTION_TYPE_KEY,
|
||||
.key = 4 },
|
||||
{ .action_type = RATBAG_BUTTON_ACTION_TYPE_KEY,
|
||||
.key = 5 },
|
||||
{ .action_type = RATBAG_BUTTON_ACTION_TYPE_KEY,
|
||||
.key = 6 },
|
||||
{ .action_type = RATBAG_BUTTON_ACTION_TYPE_KEY,
|
||||
.key = 7 },
|
||||
},
|
||||
.resolutions = {
|
||||
{ .xres = 1100, .yres = 1200, .hz = 2000, .caps = RATBAG_RESOLUTION_CAP_SEPARATE_XY_RESOLUTION },
|
||||
{ .xres = 1200, .yres = 1300, .hz = 2000, .dflt = true, .caps = RATBAG_RESOLUTION_CAP_SEPARATE_XY_RESOLUTION },
|
||||
{ .xres = 1300, .yres = 1400, .hz = 2000, .active = true, .caps = RATBAG_RESOLUTION_CAP_SEPARATE_XY_RESOLUTION },
|
||||
},
|
||||
.active = false,
|
||||
.dflt = true,
|
||||
.caps = { RATBAG_PROFILE_CAP_WRITABLE_NAME },
|
||||
},
|
||||
{
|
||||
.buttons = {
|
||||
{ .button_type = RATBAG_BUTTON_TYPE_LEFT,
|
||||
.action_type = RATBAG_BUTTON_ACTION_TYPE_SPECIAL,
|
||||
.special = RATBAG_BUTTON_ACTION_SPECIAL_PROFILE_CYCLE_UP },
|
||||
{ .action_type = RATBAG_BUTTON_ACTION_TYPE_MACRO,
|
||||
.macro = {
|
||||
{ .type = RATBAG_MACRO_EVENT_KEY_PRESSED,
|
||||
.value = KEY_A },
|
||||
{ .type = RATBAG_MACRO_EVENT_KEY_RELEASED,
|
||||
.value = KEY_A },
|
||||
{ .type = RATBAG_MACRO_EVENT_WAIT,
|
||||
.value = 150 },
|
||||
}
|
||||
},
|
||||
{ .action_type = RATBAG_BUTTON_ACTION_TYPE_BUTTON,
|
||||
.button = 2 },
|
||||
{ .action_type = RATBAG_BUTTON_ACTION_TYPE_BUTTON,
|
||||
.button = 3 },
|
||||
},
|
||||
.resolutions = {
|
||||
{ .xres = 2100, .yres = 2200, .hz = 3000, .active = true, .caps = RATBAG_RESOLUTION_CAP_SEPARATE_XY_RESOLUTION },
|
||||
{ .xres = 2200, .yres = 2300, .hz = 3000, .dflt = true, .caps = RATBAG_RESOLUTION_CAP_SEPARATE_XY_RESOLUTION },
|
||||
{ .xres = 2300, .yres = 2400, .hz = 3000, .caps = RATBAG_RESOLUTION_CAP_SEPARATE_XY_RESOLUTION },
|
||||
},
|
||||
.leds = {
|
||||
{
|
||||
.mode = RATBAG_LED_ON,
|
||||
.color = { .red = 255, .green = 0, .blue = 0 },
|
||||
.ms = 1000,
|
||||
.brightness = 20
|
||||
},
|
||||
{
|
||||
.mode = RATBAG_LED_CYCLE,
|
||||
.color = { .red = 255, .green = 255, .blue = 0 },
|
||||
.ms = 333,
|
||||
.brightness = 40
|
||||
}
|
||||
},
|
||||
.active = false,
|
||||
.dflt = false,
|
||||
},
|
||||
{
|
||||
.disabled = true,
|
||||
},
|
||||
},
|
||||
.destroyed = NULL,
|
||||
.destroyed_data = NULL,
|
||||
};
|
||||
|
||||
|
||||
int ratbagd_reset_test_device(sd_bus_message *m,
|
||||
void *userdata,
|
||||
sd_bus_error *error)
|
||||
{
|
||||
static struct ratbagd_device *ratbagd_test_device = NULL;
|
||||
struct ratbagd *ctx = userdata;
|
||||
struct ratbag_device *device;
|
||||
int r;
|
||||
|
||||
if (ratbagd_test_device) {
|
||||
ratbagd_device_unlink(ratbagd_test_device);
|
||||
ratbagd_device_free(ratbagd_test_device);
|
||||
|
||||
(void) sd_bus_emit_properties_changed(ctx->bus,
|
||||
RATBAGD_OBJ_ROOT,
|
||||
RATBAGD_NAME_ROOT ".Manager",
|
||||
"Devices",
|
||||
NULL);
|
||||
}
|
||||
|
||||
device = ratbag_device_new_test_device(ctx->lib_ctx, &ratbagd_test_device_descr);
|
||||
|
||||
r = ratbagd_device_new(&ratbagd_test_device, ctx, "test_device", device);
|
||||
|
||||
/* the ratbagd_device takes its own reference, drop ours */
|
||||
ratbag_device_unref(device);
|
||||
|
||||
if (r < 0) {
|
||||
log_error("Cannot track test device\n");
|
||||
return r;
|
||||
}
|
||||
|
||||
ratbagd_device_link(ratbagd_test_device);
|
||||
if (m) {
|
||||
sd_bus_reply_method_return(m, "u", r);
|
||||
(void) sd_bus_emit_properties_changed(ctx->bus,
|
||||
RATBAGD_OBJ_ROOT,
|
||||
RATBAGD_NAME_ROOT ".Manager",
|
||||
"Devices",
|
||||
NULL);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
void ratbagd_init_test_device(struct ratbagd *ctx)
|
||||
{
|
||||
#ifdef RATBAG_DEVELOPER_EDITION
|
||||
setenv("RATBAG_TEST", "1", 0);
|
||||
|
||||
ratbagd_reset_test_device(NULL, ctx, NULL);
|
||||
#endif
|
||||
}
|
||||
|
||||
35
ratbagd/ratbagd-test.h
Normal file
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
* Copyright © 2017 Red Hat, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the next
|
||||
* paragraph) shall be included in all copies or substantial portions of the
|
||||
* Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "libratbag-test.h"
|
||||
#include "ratbagd.h"
|
||||
|
||||
void ratbagd_init_test_device(struct ratbagd *ctx);
|
||||
|
||||
#ifdef RATBAG_DEVELOPER_EDITION
|
||||
int ratbagd_reset_test_device(sd_bus_message *m,
|
||||
void *userdata,
|
||||
sd_bus_error *error);
|
||||
#endif /* RATBAG_DEVELOPER_EDITION */
|
||||
@@ -33,13 +33,21 @@
|
||||
#include <libudev.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/resource.h>
|
||||
#include <systemd/sd-bus.h>
|
||||
#include <systemd/sd-event.h>
|
||||
#include "ratbagd.h"
|
||||
#include "shared-macro.h"
|
||||
#include "libratbag-util.h"
|
||||
|
||||
static bool verbose = false;
|
||||
#include "ratbagd-test.h"
|
||||
|
||||
enum log_level {
|
||||
LL_QUIET = 1,
|
||||
LL_INFO,
|
||||
LL_VERBOSE,
|
||||
LL_RAW,
|
||||
} log_level = LL_INFO;
|
||||
|
||||
static const char *SVG_THEMES[] = {
|
||||
"default",
|
||||
@@ -47,13 +55,23 @@ static const char *SVG_THEMES[] = {
|
||||
NULL
|
||||
};
|
||||
|
||||
void log_info(const char *fmt, ...)
|
||||
{
|
||||
va_list args;
|
||||
|
||||
va_start(args, fmt);
|
||||
if (log_level >= LL_INFO)
|
||||
vprintf(fmt, args);
|
||||
va_end(args);
|
||||
}
|
||||
|
||||
void log_verbose(const char *fmt, ...)
|
||||
{
|
||||
va_list args;
|
||||
|
||||
va_start(args, fmt);
|
||||
|
||||
if (verbose)
|
||||
if (log_level >= LL_VERBOSE)
|
||||
vprintf(fmt, args);
|
||||
va_end(args);
|
||||
}
|
||||
@@ -138,21 +156,18 @@ static int ratbagd_get_devices(sd_bus *bus,
|
||||
{
|
||||
struct ratbagd *ctx = userdata;
|
||||
struct ratbagd_device *device;
|
||||
int r;
|
||||
|
||||
r = sd_bus_message_open_container(reply, 'a', "o");
|
||||
if (r < 0)
|
||||
return r;
|
||||
CHECK_CALL(sd_bus_message_open_container(reply, 'a', "o"));
|
||||
|
||||
RATBAGD_DEVICE_FOREACH(device, ctx) {
|
||||
r = sd_bus_message_append(reply,
|
||||
"o",
|
||||
ratbagd_device_get_path(device));
|
||||
if (r < 0)
|
||||
return r;
|
||||
CHECK_CALL(sd_bus_message_append(reply,
|
||||
"o",
|
||||
ratbagd_device_get_path(device)));
|
||||
}
|
||||
|
||||
return sd_bus_message_close_container(reply);
|
||||
CHECK_CALL(sd_bus_message_close_container(reply));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ratbagd_get_themes(sd_bus *bus,
|
||||
@@ -165,214 +180,20 @@ static int ratbagd_get_themes(sd_bus *bus,
|
||||
{
|
||||
struct ratbagd *ctx = userdata;
|
||||
const char **theme;
|
||||
int r;
|
||||
|
||||
r = sd_bus_message_open_container(reply, 'a', "s");
|
||||
if (r < 0)
|
||||
return r;
|
||||
CHECK_CALL(sd_bus_message_open_container(reply, 'a', "s"));
|
||||
|
||||
theme = ctx->themes;
|
||||
while(*theme) {
|
||||
r = sd_bus_message_append(reply,
|
||||
"s",
|
||||
*theme);
|
||||
if (r < 0)
|
||||
return r;
|
||||
CHECK_CALL(sd_bus_message_append(reply, "s", *theme));
|
||||
theme++;
|
||||
}
|
||||
|
||||
return sd_bus_message_close_container(reply);
|
||||
}
|
||||
|
||||
#ifdef RATBAG_DEVELOPER_EDITION
|
||||
|
||||
#include "libratbag-test.h"
|
||||
|
||||
/* A pre-setup sane device. Use for sanity testing by toggling the various
|
||||
* error conditions.
|
||||
*/
|
||||
static const struct ratbag_test_device ratbagd_test_device_descr = {
|
||||
.num_profiles = 4,
|
||||
.num_resolutions = 3,
|
||||
.num_buttons = 4,
|
||||
.num_leds = 3,
|
||||
.svg = "logitech-g500.svg",
|
||||
.profiles = {
|
||||
{
|
||||
.buttons = {
|
||||
{ .button_type = RATBAG_BUTTON_TYPE_LEFT,
|
||||
.action_type = RATBAG_BUTTON_ACTION_TYPE_BUTTON,
|
||||
.button = 0 },
|
||||
{ .button_type = RATBAG_BUTTON_TYPE_MIDDLE,
|
||||
.action_type = RATBAG_BUTTON_ACTION_TYPE_KEY,
|
||||
.key = KEY_3 },
|
||||
{ .button_type = RATBAG_BUTTON_TYPE_RIGHT,
|
||||
.action_type = RATBAG_BUTTON_ACTION_TYPE_SPECIAL,
|
||||
.special = RATBAG_BUTTON_ACTION_SPECIAL_PROFILE_CYCLE_UP },
|
||||
{ .action_type = RATBAG_BUTTON_ACTION_TYPE_MACRO,
|
||||
.macro = {
|
||||
{ .type = RATBAG_MACRO_EVENT_KEY_PRESSED,
|
||||
.value = KEY_B },
|
||||
{ .type = RATBAG_MACRO_EVENT_KEY_RELEASED,
|
||||
.value = KEY_B },
|
||||
{ .type = RATBAG_MACRO_EVENT_WAIT,
|
||||
.value = 300 },
|
||||
},
|
||||
}
|
||||
},
|
||||
.resolutions = {
|
||||
{ .xres = 100, .yres = 200, .hz = 1000 },
|
||||
{ .xres = 200, .yres = 300, .hz = 1000, .active = true, .dflt = true },
|
||||
{ .xres = 300, .yres = 400, .hz = 1000 },
|
||||
},
|
||||
.active = true,
|
||||
.dflt = false,
|
||||
.leds = {
|
||||
{
|
||||
.mode = RATBAG_LED_OFF,
|
||||
.color = { .red = 255, .green = 0, .blue = 0 },
|
||||
.hz = 1,
|
||||
.brightness = 20
|
||||
},
|
||||
{
|
||||
.mode = RATBAG_LED_ON,
|
||||
.color = { .red = 255, .green = 0, .blue = 0 },
|
||||
.hz = 1,
|
||||
.brightness = 20
|
||||
},
|
||||
{
|
||||
.mode = RATBAG_LED_CYCLE,
|
||||
.color = { .red = 255, .green = 255, .blue = 0 },
|
||||
.hz = 3,
|
||||
.brightness = 40
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
.buttons = {
|
||||
{ .action_type = RATBAG_BUTTON_ACTION_TYPE_KEY,
|
||||
.key = 4 },
|
||||
{ .action_type = RATBAG_BUTTON_ACTION_TYPE_KEY,
|
||||
.key = 5 },
|
||||
{ .action_type = RATBAG_BUTTON_ACTION_TYPE_KEY,
|
||||
.key = 6 },
|
||||
{ .action_type = RATBAG_BUTTON_ACTION_TYPE_KEY,
|
||||
.key = 7 },
|
||||
},
|
||||
.resolutions = {
|
||||
{ .xres = 1100, .yres = 1200, .hz = 2000, .caps = RATBAG_RESOLUTION_CAP_SEPARATE_XY_RESOLUTION },
|
||||
{ .xres = 1200, .yres = 1300, .hz = 2000, .dflt = true, .caps = RATBAG_RESOLUTION_CAP_SEPARATE_XY_RESOLUTION },
|
||||
{ .xres = 1300, .yres = 1400, .hz = 2000, .active = true, .caps = RATBAG_RESOLUTION_CAP_SEPARATE_XY_RESOLUTION },
|
||||
},
|
||||
.active = false,
|
||||
.dflt = true,
|
||||
},
|
||||
{
|
||||
.buttons = {
|
||||
{ .button_type = RATBAG_BUTTON_TYPE_LEFT,
|
||||
.action_type = RATBAG_BUTTON_ACTION_TYPE_SPECIAL,
|
||||
.special = RATBAG_BUTTON_ACTION_SPECIAL_PROFILE_CYCLE_UP },
|
||||
{ .action_type = RATBAG_BUTTON_ACTION_TYPE_MACRO,
|
||||
.macro = {
|
||||
{ .type = RATBAG_MACRO_EVENT_KEY_PRESSED,
|
||||
.value = KEY_A },
|
||||
{ .type = RATBAG_MACRO_EVENT_KEY_RELEASED,
|
||||
.value = KEY_A },
|
||||
{ .type = RATBAG_MACRO_EVENT_WAIT,
|
||||
.value = 150 },
|
||||
}
|
||||
},
|
||||
{ .action_type = RATBAG_BUTTON_ACTION_TYPE_BUTTON,
|
||||
.button = 2 },
|
||||
{ .action_type = RATBAG_BUTTON_ACTION_TYPE_BUTTON,
|
||||
.button = 3 },
|
||||
},
|
||||
.resolutions = {
|
||||
{ .xres = 2100, .yres = 2200, .hz = 3000, .active = true, .caps = RATBAG_RESOLUTION_CAP_SEPARATE_XY_RESOLUTION },
|
||||
{ .xres = 2200, .yres = 2300, .hz = 3000, .dflt = true, .caps = RATBAG_RESOLUTION_CAP_SEPARATE_XY_RESOLUTION },
|
||||
{ .xres = 2300, .yres = 2400, .hz = 3000, .caps = RATBAG_RESOLUTION_CAP_SEPARATE_XY_RESOLUTION },
|
||||
},
|
||||
.leds = {
|
||||
{
|
||||
.mode = RATBAG_LED_ON,
|
||||
.color = { .red = 255, .green = 0, .blue = 0 },
|
||||
.hz = 1,
|
||||
.brightness = 20
|
||||
},
|
||||
{
|
||||
.mode = RATBAG_LED_CYCLE,
|
||||
.color = { .red = 255, .green = 255, .blue = 0 },
|
||||
.hz = 3,
|
||||
.brightness = 40
|
||||
}
|
||||
},
|
||||
.active = false,
|
||||
.dflt = false,
|
||||
},
|
||||
{
|
||||
.disabled = true,
|
||||
},
|
||||
},
|
||||
.destroyed = NULL,
|
||||
.destroyed_data = NULL,
|
||||
};
|
||||
|
||||
static int ratbagd_reset_test_device(sd_bus_message *m,
|
||||
void *userdata,
|
||||
sd_bus_error *error)
|
||||
{
|
||||
static struct ratbagd_device *ratbagd_test_device = NULL;
|
||||
struct ratbagd *ctx = userdata;
|
||||
struct ratbag_device *device;
|
||||
int r;
|
||||
|
||||
if (ratbagd_test_device) {
|
||||
ratbagd_device_unlink(ratbagd_test_device);
|
||||
ratbagd_device_free(ratbagd_test_device);
|
||||
|
||||
(void) sd_bus_emit_properties_changed(ctx->bus,
|
||||
RATBAGD_OBJ_ROOT,
|
||||
RATBAGD_NAME_ROOT ".Manager",
|
||||
"Devices",
|
||||
NULL);
|
||||
}
|
||||
|
||||
device = ratbag_device_new_test_device(ctx->lib_ctx, &ratbagd_test_device_descr);
|
||||
|
||||
r = ratbagd_device_new(&ratbagd_test_device, ctx, "test_device", device);
|
||||
|
||||
/* the ratbagd_device takes its own reference, drop ours */
|
||||
ratbag_device_unref(device);
|
||||
|
||||
if (r < 0) {
|
||||
log_error("Cannot track test device\n");
|
||||
return r;
|
||||
}
|
||||
|
||||
ratbagd_device_link(ratbagd_test_device);
|
||||
if (m) {
|
||||
sd_bus_reply_method_return(m, "u", r);
|
||||
(void) sd_bus_emit_properties_changed(ctx->bus,
|
||||
RATBAGD_OBJ_ROOT,
|
||||
RATBAGD_NAME_ROOT ".Manager",
|
||||
"Devices",
|
||||
NULL);
|
||||
}
|
||||
CHECK_CALL(sd_bus_message_close_container(reply));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void ratbagd_init_test_device(struct ratbagd *ctx)
|
||||
{
|
||||
setenv("RATBAG_TEST", "1", 0);
|
||||
|
||||
ratbagd_reset_test_device(NULL, ctx, NULL);
|
||||
}
|
||||
|
||||
#else /* RATBAG_DEVELOPER_EDITION */
|
||||
static inline void ratbagd_init_test_device(struct ratbagd *ctx) {}
|
||||
#endif /* RATBAG_DEVELOPER_EDITION */
|
||||
|
||||
static const sd_bus_vtable ratbagd_vtable[] = {
|
||||
SD_BUS_VTABLE_START(0),
|
||||
SD_BUS_PROPERTY("Devices", "ao", ratbagd_get_devices, 0, SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
|
||||
@@ -436,7 +257,7 @@ static void ratbagd_process_device(struct ratbagd *ctx,
|
||||
ratbag_device_unref(lib_device);
|
||||
|
||||
if (r < 0) {
|
||||
log_error("Cannot track device '%s'\n", name);
|
||||
log_error("%s: cannot track device\n", name);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -486,13 +307,15 @@ static const struct ratbag_interface ratbagd_lib_interface = {
|
||||
|
||||
static struct ratbagd *ratbagd_free(struct ratbagd *ctx)
|
||||
{
|
||||
struct ratbagd_device *device;
|
||||
struct ratbagd_device *device, *tmp;
|
||||
|
||||
if (!ctx)
|
||||
return NULL;
|
||||
|
||||
RATBAGD_DEVICE_FOREACH(device, ctx)
|
||||
RATBAGD_DEVICE_FOREACH_SAFE(device, tmp, ctx) {
|
||||
ratbagd_device_unlink(device);
|
||||
ratbagd_device_free(device);
|
||||
}
|
||||
|
||||
ctx->bus = sd_bus_flush_close_unref(ctx->bus);
|
||||
ctx->monitor_source = sd_event_source_unref(ctx->monitor_source);
|
||||
@@ -567,7 +390,10 @@ static int ratbagd_new(struct ratbagd **out)
|
||||
if (!ctx->lib_ctx)
|
||||
return -ENOMEM;
|
||||
|
||||
if (verbose)
|
||||
if (log_level >= LL_RAW)
|
||||
ratbag_log_set_priority(ctx->lib_ctx,
|
||||
RATBAG_LOG_PRIORITY_RAW);
|
||||
else if (log_level >= LL_VERBOSE)
|
||||
ratbag_log_set_priority(ctx->lib_ctx,
|
||||
RATBAG_LOG_PRIORITY_DEBUG);
|
||||
|
||||
@@ -663,6 +489,26 @@ exit:
|
||||
return r;
|
||||
}
|
||||
|
||||
static int on_timeout_cb(sd_event_source *s, uint64_t usec, void *userdata)
|
||||
{
|
||||
log_info("Exiting after idle\n");
|
||||
sd_event_exit(sd_event_source_get_event(s), 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int before_idle_cb(sd_event_source *s, void *userdata)
|
||||
{
|
||||
struct ratbagd *ctx = userdata;
|
||||
uint64_t usec;
|
||||
|
||||
sd_event_now(sd_event_source_get_event(s), CLOCK_MONOTONIC, &usec);
|
||||
#define min2us(us_) (us_ * 1000000 * 60)
|
||||
usec += min2us(20);
|
||||
sd_event_source_set_time(ctx->timeout_source, usec);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int sighandler(sd_event_source *source,
|
||||
const struct signalfd_siginfo *si,
|
||||
void *userdata)
|
||||
@@ -676,18 +522,6 @@ static int ratbagd_run(struct ratbagd *ctx)
|
||||
{
|
||||
int r;
|
||||
|
||||
/*
|
||||
* TODO: We should support exit-on-idle and bus-activation. Note that
|
||||
* we don't store any state on our own, hence, all we have to do
|
||||
* is to make sure we advertise device add/remove events via the
|
||||
* bus (in case there is a listener).
|
||||
* To track such events, we should store devices we already
|
||||
* advertised in /run/ratbagd/devices/ and read it out on
|
||||
* activation.
|
||||
* Note that this feature requires udev-activation, which might
|
||||
* not be possible, yet.
|
||||
*/
|
||||
|
||||
r = ratbagd_run_enumerate(ctx);
|
||||
if (r < 0)
|
||||
return r;
|
||||
@@ -698,6 +532,24 @@ static int ratbagd_run(struct ratbagd *ctx)
|
||||
sigprocmask(SIG_BLOCK, &sigset, NULL);
|
||||
sd_event_add_signal(ctx->event, NULL, SIGINT, sighandler, NULL);
|
||||
|
||||
/* exit-on-idle: we set up a timer to simply exit. Since we don't
|
||||
* store anything, it doesn't matter and we can just restart next
|
||||
* time someone wants us.
|
||||
*
|
||||
* since we don't want to monitor every single dbus call, we just
|
||||
* set up a post source that gets called before we go idle. That
|
||||
* resets the timer, so as long as something is happening, ratbagd
|
||||
* won't exit.
|
||||
*/
|
||||
sd_event_add_time(ctx->event,
|
||||
&ctx->timeout_source,
|
||||
CLOCK_MONOTONIC,
|
||||
-1, /* infinite, see before_idle_cb */
|
||||
min2us(1), /* accuracy doesn't matter */
|
||||
on_timeout_cb,
|
||||
ctx);
|
||||
sd_event_add_post(ctx->event, NULL, before_idle_cb, ctx);
|
||||
|
||||
return sd_event_loop(ctx->event);
|
||||
}
|
||||
|
||||
@@ -706,11 +558,24 @@ int main(int argc, char *argv[])
|
||||
struct ratbagd *ctx = NULL;
|
||||
int r;
|
||||
|
||||
#if DISABLE_COREDUMP
|
||||
const struct rlimit corelimit = { 0, 0 };
|
||||
|
||||
setrlimit(RLIMIT_CORE, &corelimit);
|
||||
#endif
|
||||
|
||||
if (argc > 1) {
|
||||
if (streq(argv[1], "--verbose")) {
|
||||
verbose = true;
|
||||
if (streq(argv[1], "--version")) {
|
||||
printf("%s\n", RATBAG_VERSION);
|
||||
return 0;
|
||||
} else if (streq(argv[1], "--quiet")) {
|
||||
log_level = LL_QUIET;
|
||||
} else if (streq(argv[1], "--verbose=raw")) {
|
||||
log_level = LL_RAW;
|
||||
} else if (streq(argv[1], "--verbose")) {
|
||||
log_level = LL_VERBOSE;
|
||||
} else {
|
||||
fprintf(stderr, "Usage: %s [--verbose]\n",
|
||||
fprintf(stderr, "Usage: %s [--version | --quiet | --verbose[=raw]]\n",
|
||||
program_invocation_short_name);
|
||||
r = -EINVAL;
|
||||
goto exit;
|
||||
@@ -729,10 +594,46 @@ exit:
|
||||
ratbagd_free(ctx);
|
||||
|
||||
if (r < 0) {
|
||||
errno = -r;
|
||||
log_error("Failed to start ratbagd: %m\n");
|
||||
if (r == -EEXIST) {
|
||||
log_error("Bus name is taken, another instance of ratbagd is already running.\n");
|
||||
} else {
|
||||
errno = -r;
|
||||
log_error("Failed to start ratbagd: %m\n");
|
||||
}
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
struct ratbagd_callback
|
||||
{
|
||||
ratbagd_callback_t callback;
|
||||
void *userdata;
|
||||
};
|
||||
|
||||
static int ratbagd_callback_handler(sd_event_source *s, void *userdata)
|
||||
{
|
||||
struct ratbagd_callback *cb = userdata;
|
||||
|
||||
cb->callback(cb->userdata);
|
||||
|
||||
sd_event_source_set_enabled(s, SD_EVENT_OFF);
|
||||
sd_event_source_unref(s);
|
||||
free(cb);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void ratbagd_schedule_task(struct ratbagd *ctx,
|
||||
ratbagd_callback_t callback,
|
||||
void *userdata)
|
||||
{
|
||||
struct ratbagd_callback *cb = zalloc(sizeof *cb);
|
||||
sd_event_source *source;
|
||||
|
||||
cb->callback = callback;
|
||||
cb->userdata = userdata;
|
||||
|
||||
sd_event_add_post(ctx->event, &source, ratbagd_callback_handler, cb);
|
||||
}
|
||||
|
||||
@@ -54,9 +54,20 @@ struct ratbagd_resolution;
|
||||
struct ratbagd_button;
|
||||
struct ratbagd_led;
|
||||
|
||||
void log_info(const char *fmt, ...) _printf_(1, 2);
|
||||
void log_verbose(const char *fmt, ...) _printf_(1, 2);
|
||||
void log_error(const char *fmt, ...) _printf_(1, 2);
|
||||
|
||||
#define CHECK_CALL(_call) \
|
||||
do { \
|
||||
int _r = _call; \
|
||||
if (_r < 0) { \
|
||||
log_error("%s: '%s' failed with: %s\n", __func__, #_call, strerror(-_r)); \
|
||||
return _r; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
|
||||
/*
|
||||
* Profiles
|
||||
*/
|
||||
@@ -89,6 +100,15 @@ int ratbagd_for_each_resolution_signal(sd_bus *bus,
|
||||
struct ratbagd_profile *profile,
|
||||
int (*func)(sd_bus *bus,
|
||||
struct ratbagd_resolution *resolution));
|
||||
int ratbagd_for_each_button_signal(sd_bus *bus,
|
||||
struct ratbagd_profile *profile,
|
||||
int (*func)(sd_bus *bus,
|
||||
struct ratbagd_button *button));
|
||||
int ratbagd_for_each_led_signal(sd_bus *bus,
|
||||
struct ratbagd_profile *profile,
|
||||
int (*func)(sd_bus *bus,
|
||||
struct ratbagd_led *led));
|
||||
int ratbagd_profile_resync(sd_bus *bus, struct ratbagd_profile *profile);
|
||||
|
||||
DEFINE_TRIVIAL_CLEANUP_FUNC(struct ratbagd_profile *, ratbagd_profile_free);
|
||||
|
||||
@@ -104,6 +124,7 @@ int ratbagd_resolution_new(struct ratbagd_resolution **out,
|
||||
unsigned int index);
|
||||
struct ratbagd_resolution *ratbagd_resolution_free(struct ratbagd_resolution *resolution);
|
||||
const char *ratbagd_resolution_get_path(struct ratbagd_resolution *resolution);
|
||||
int ratbagd_resolution_resync(sd_bus *bus, struct ratbagd_resolution *resolution);
|
||||
|
||||
DEFINE_TRIVIAL_CLEANUP_FUNC(struct ratbagd_resolution *, ratbagd_resolution_free);
|
||||
|
||||
@@ -119,6 +140,7 @@ int ratbagd_button_new(struct ratbagd_button **out,
|
||||
unsigned int index);
|
||||
struct ratbagd_button *ratbagd_button_free(struct ratbagd_button *button);
|
||||
const char *ratbagd_button_get_path(struct ratbagd_button *button);
|
||||
int ratbagd_button_resync(sd_bus *bus, struct ratbagd_button *button);
|
||||
|
||||
DEFINE_TRIVIAL_CLEANUP_FUNC(struct ratbagd_button *, ratbagd_button_free);
|
||||
|
||||
@@ -134,6 +156,7 @@ int ratbagd_led_new(struct ratbagd_led **out,
|
||||
unsigned int index);
|
||||
struct ratbagd_led *ratbagd_led_free(struct ratbagd_led *led);
|
||||
const char *ratbagd_led_get_path(struct ratbagd_led *led);
|
||||
int ratbagd_led_resync(sd_bus *bus, struct ratbagd_led *led);
|
||||
|
||||
DEFINE_TRIVIAL_CLEANUP_FUNC(struct ratbagd_led *, ratbagd_led_free);
|
||||
|
||||
@@ -148,10 +171,11 @@ int ratbagd_device_new(struct ratbagd_device **out,
|
||||
const char *name,
|
||||
struct ratbag_device *lib_device);
|
||||
struct ratbagd_device *ratbagd_device_free(struct ratbagd_device *device);
|
||||
const char *ratbagd_device_get_name(struct ratbagd_device *device);
|
||||
const char *ratbagd_device_get_sysname(struct ratbagd_device *device);
|
||||
const char *ratbagd_device_get_path(struct ratbagd_device *device);
|
||||
unsigned int ratbagd_device_get_num_buttons(struct ratbagd_device *device);
|
||||
unsigned int ratbagd_device_get_num_leds(struct ratbagd_device *device);
|
||||
int ratbagd_device_resync(struct ratbagd_device *device, sd_bus *bus);
|
||||
|
||||
bool ratbagd_device_linked(struct ratbagd_device *device);
|
||||
void ratbagd_device_link(struct ratbagd_device *device);
|
||||
@@ -169,6 +193,25 @@ struct ratbagd_device *ratbagd_device_next(struct ratbagd_device *device);
|
||||
(_device); \
|
||||
(_device) = ratbagd_device_next(_device))
|
||||
|
||||
#define RATBAGD_DEVICE_FOREACH_SAFE(_device, _safe, _ctx) \
|
||||
for (_device = ratbagd_device_first(_ctx), \
|
||||
_safe = (_device) ? ratbagd_device_next(_device) : NULL; \
|
||||
(_device); \
|
||||
_device = (_safe), \
|
||||
_safe = (_safe) ? ratbagd_device_next(_safe) : NULL)
|
||||
|
||||
/* Verify that _val is not -1. This traps DBus API errors where we end up
|
||||
* sending a valid-looking index across and then fail on the other side.
|
||||
*
|
||||
* do {} while(0) so we can terminate with a ; without the compiler
|
||||
* complaining about an empty statement;
|
||||
* */
|
||||
#define verify_unsigned_int(_val) \
|
||||
do { if ((int)_val == -1) { \
|
||||
log_error("%s:%d - %s: expected unsigned int, got -1\n", __FILE__, __LINE__, __func__); \
|
||||
return -EINVAL; \
|
||||
} } while(0)
|
||||
|
||||
/*
|
||||
* Context
|
||||
*/
|
||||
@@ -177,6 +220,7 @@ struct ratbagd {
|
||||
sd_event *event;
|
||||
struct ratbag *lib_ctx;
|
||||
struct udev_monitor *monitor;
|
||||
sd_event_source *timeout_source;
|
||||
sd_event_source *monitor_source;
|
||||
sd_bus *bus;
|
||||
|
||||
@@ -185,3 +229,9 @@ struct ratbagd {
|
||||
|
||||
const char **themes; /* NULL-terminated */
|
||||
};
|
||||
|
||||
typedef void (*ratbagd_callback_t)(void *userdata);
|
||||
|
||||
void ratbagd_schedule_task(struct ratbagd *ctx,
|
||||
ratbagd_callback_t callback,
|
||||
void *userdata);
|
||||
|
||||
@@ -324,78 +324,6 @@ etekcity_button_to_action(struct ratbag_profile *profile,
|
||||
return etekcity_raw_to_button_action(data);
|
||||
}
|
||||
|
||||
static void
|
||||
etekcity_read_profile(struct ratbag_profile *profile, unsigned int index)
|
||||
{
|
||||
struct ratbag_device *device = profile->device;
|
||||
struct etekcity_data *drv_data;
|
||||
struct ratbag_resolution *resolution;
|
||||
struct etekcity_settings_report *setting_report;
|
||||
uint8_t *buf;
|
||||
unsigned int report_rate;
|
||||
unsigned int i;
|
||||
int dpi_x, dpi_y, hz;
|
||||
int rc;
|
||||
|
||||
assert(index <= ETEKCITY_PROFILE_MAX);
|
||||
|
||||
drv_data = ratbag_get_drv_data(device);
|
||||
|
||||
setting_report = &drv_data->settings[index];
|
||||
buf = (uint8_t*)setting_report;
|
||||
etekcity_set_config_profile(device, index, ETEKCITY_CONFIG_SETTINGS);
|
||||
rc = ratbag_hidraw_raw_request(device, ETEKCITY_REPORT_ID_SETTINGS,
|
||||
buf, ETEKCITY_REPORT_SIZE_SETTINGS,
|
||||
HID_FEATURE_REPORT, HID_REQ_GET_REPORT);
|
||||
|
||||
if (rc < ETEKCITY_REPORT_SIZE_SETTINGS)
|
||||
return;
|
||||
|
||||
/* first retrieve the report rate, it is set per profile */
|
||||
switch (setting_report->report_rate) {
|
||||
case 0x00: report_rate = 125; break;
|
||||
case 0x01: report_rate = 250; break;
|
||||
case 0x02: report_rate = 500; break;
|
||||
case 0x03: report_rate = 1000; break;
|
||||
default:
|
||||
log_error(device->ratbag,
|
||||
"error while reading the report rate of the mouse (0x%02x)\n",
|
||||
buf[26]);
|
||||
report_rate = 0;
|
||||
}
|
||||
|
||||
for (i = 0; i < profile->resolution.num_modes; i++) {
|
||||
dpi_x = setting_report->xres[i] * 50;
|
||||
dpi_y = setting_report->yres[i] * 50;
|
||||
hz = report_rate;
|
||||
if (!(setting_report->dpi_mask & (1 << i))) {
|
||||
/* the profile is disabled, overwrite it */
|
||||
dpi_x = 0;
|
||||
dpi_y = 0;
|
||||
hz = 0;
|
||||
}
|
||||
resolution = ratbag_resolution_init(profile, i, dpi_x, dpi_y, hz);
|
||||
ratbag_resolution_set_cap(resolution,
|
||||
RATBAG_RESOLUTION_CAP_SEPARATE_XY_RESOLUTION);
|
||||
resolution->is_active = (i == setting_report->current_dpi);
|
||||
}
|
||||
|
||||
buf = drv_data->profiles[index];
|
||||
etekcity_set_config_profile(device, index, ETEKCITY_CONFIG_KEY_MAPPING);
|
||||
rc = ratbag_hidraw_raw_request(device, ETEKCITY_REPORT_ID_KEY_MAPPING,
|
||||
buf, ETEKCITY_REPORT_SIZE_PROFILE,
|
||||
HID_FEATURE_REPORT, HID_REQ_GET_REPORT);
|
||||
|
||||
msleep(10);
|
||||
|
||||
if (rc < ETEKCITY_REPORT_SIZE_PROFILE)
|
||||
return;
|
||||
|
||||
log_raw(device->ratbag, "profile: %d %s:%d\n",
|
||||
buf[2],
|
||||
__FILE__, __LINE__);
|
||||
}
|
||||
|
||||
static int
|
||||
etekcity_write_profile(struct ratbag_profile *profile)
|
||||
{
|
||||
@@ -440,7 +368,7 @@ etekcity_read_button(struct ratbag_button *button)
|
||||
|
||||
action = etekcity_button_to_action(button->profile, button->index);
|
||||
if (action)
|
||||
button->action = *action;
|
||||
ratbag_button_set_action(button, action);
|
||||
button->type = etekcity_raw_to_button_type(button->index);
|
||||
|
||||
ratbag_button_enable_action_type(button, RATBAG_BUTTON_ACTION_TYPE_BUTTON);
|
||||
@@ -490,6 +418,83 @@ etekcity_read_button(struct ratbag_button *button)
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
etekcity_read_profile(struct ratbag_profile *profile)
|
||||
{
|
||||
struct ratbag_device *device = profile->device;
|
||||
struct etekcity_data *drv_data;
|
||||
struct ratbag_resolution *resolution;
|
||||
struct ratbag_button *button;
|
||||
struct etekcity_settings_report *setting_report;
|
||||
uint8_t *buf;
|
||||
unsigned int report_rate;
|
||||
int dpi_x, dpi_y, hz;
|
||||
int rc;
|
||||
unsigned int report_rates[] = { 125, 250, 500, 1000 };
|
||||
|
||||
assert(profile->index <= ETEKCITY_PROFILE_MAX);
|
||||
|
||||
drv_data = ratbag_get_drv_data(device);
|
||||
|
||||
setting_report = &drv_data->settings[profile->index];
|
||||
buf = (uint8_t*)setting_report;
|
||||
etekcity_set_config_profile(device, profile->index, ETEKCITY_CONFIG_SETTINGS);
|
||||
rc = ratbag_hidraw_raw_request(device, ETEKCITY_REPORT_ID_SETTINGS,
|
||||
buf, ETEKCITY_REPORT_SIZE_SETTINGS,
|
||||
HID_FEATURE_REPORT, HID_REQ_GET_REPORT);
|
||||
|
||||
if (rc < ETEKCITY_REPORT_SIZE_SETTINGS)
|
||||
return;
|
||||
|
||||
/* first retrieve the report rate, it is set per profile */
|
||||
if (setting_report->report_rate < ARRAY_LENGTH(report_rates)) {
|
||||
report_rate = report_rates[setting_report->report_rate];
|
||||
} else {
|
||||
log_error(device->ratbag,
|
||||
"error while reading the report rate of the mouse (0x%02x)\n",
|
||||
buf[26]);
|
||||
report_rate = 0;
|
||||
}
|
||||
|
||||
ratbag_profile_for_each_resolution(profile, resolution) {
|
||||
dpi_x = setting_report->xres[resolution->index] * 50;
|
||||
dpi_y = setting_report->yres[resolution->index] * 50;
|
||||
hz = report_rate;
|
||||
if (!(setting_report->dpi_mask & (1 << resolution->index))) {
|
||||
/* the profile is disabled, overwrite it */
|
||||
dpi_x = 0;
|
||||
dpi_y = 0;
|
||||
hz = 0;
|
||||
}
|
||||
|
||||
ratbag_resolution_set_resolution(resolution, dpi_x, dpi_y, hz);
|
||||
ratbag_resolution_set_cap(resolution,
|
||||
RATBAG_RESOLUTION_CAP_SEPARATE_XY_RESOLUTION);
|
||||
resolution->is_active = (resolution->index == setting_report->current_dpi);
|
||||
|
||||
ratbag_resolution_set_report_rate_list(resolution, report_rates,
|
||||
ARRAY_LENGTH(report_rates));
|
||||
}
|
||||
|
||||
ratbag_profile_for_each_button(profile, button)
|
||||
etekcity_read_button(button);
|
||||
|
||||
buf = drv_data->profiles[profile->index];
|
||||
etekcity_set_config_profile(device, profile->index, ETEKCITY_CONFIG_KEY_MAPPING);
|
||||
rc = ratbag_hidraw_raw_request(device, ETEKCITY_REPORT_ID_KEY_MAPPING,
|
||||
buf, ETEKCITY_REPORT_SIZE_PROFILE,
|
||||
HID_FEATURE_REPORT, HID_REQ_GET_REPORT);
|
||||
|
||||
msleep(10);
|
||||
|
||||
if (rc < ETEKCITY_REPORT_SIZE_PROFILE)
|
||||
return;
|
||||
|
||||
log_raw(device->ratbag, "profile: %d %s:%d\n",
|
||||
buf[2],
|
||||
__FILE__, __LINE__);
|
||||
}
|
||||
|
||||
static int
|
||||
etekcity_write_macro(struct ratbag_button *button,
|
||||
const struct ratbag_button_action *action)
|
||||
@@ -594,7 +599,6 @@ etekcity_write_resolution_dpi(struct ratbag_resolution *resolution,
|
||||
struct ratbag_device *device = profile->device;
|
||||
struct etekcity_data *drv_data = ratbag_get_drv_data(device);
|
||||
struct etekcity_settings_report *settings_report;
|
||||
unsigned int index;
|
||||
uint8_t *buf;
|
||||
int rc;
|
||||
|
||||
@@ -605,13 +609,10 @@ etekcity_write_resolution_dpi(struct ratbag_resolution *resolution,
|
||||
|
||||
settings_report = &drv_data->settings[profile->index];
|
||||
|
||||
/* retrieve which resolution is asked to be changed */
|
||||
index = resolution - profile->resolution.modes;
|
||||
|
||||
settings_report->x_sensitivity = 0x0a;
|
||||
settings_report->y_sensitivity = 0x0a;
|
||||
settings_report->xres[index] = dpi_x / 50;
|
||||
settings_report->yres[index] = dpi_y / 50;
|
||||
settings_report->xres[resolution->index] = dpi_x / 50;
|
||||
settings_report->yres[resolution->index] = dpi_y / 50;
|
||||
|
||||
buf = (uint8_t*)settings_report;
|
||||
etekcity_set_config_profile(device, profile->index, ETEKCITY_CONFIG_SETTINGS);
|
||||
@@ -664,6 +665,9 @@ etekcity_probe(struct ratbag_device *device)
|
||||
ETEKCITY_BUTTON_MAX + 1,
|
||||
ETEKCITY_LED);
|
||||
|
||||
ratbag_device_for_each_profile(device, profile)
|
||||
etekcity_read_profile(profile);
|
||||
|
||||
ratbag_device_set_capability(device, RATBAG_DEVICE_CAP_BUTTON);
|
||||
ratbag_device_set_capability(device, RATBAG_DEVICE_CAP_BUTTON_MACROS);
|
||||
|
||||
@@ -709,10 +713,8 @@ struct ratbag_driver etekcity_driver = {
|
||||
.id = "etekcity",
|
||||
.probe = etekcity_probe,
|
||||
.remove = etekcity_remove,
|
||||
.read_profile = etekcity_read_profile,
|
||||
.write_profile = etekcity_write_profile,
|
||||
.set_active_profile = etekcity_set_current_profile,
|
||||
.read_button = etekcity_read_button,
|
||||
.write_button = etekcity_write_button,
|
||||
.write_resolution_dpi = etekcity_write_resolution_dpi,
|
||||
};
|
||||
|
||||