Dave Jarvis' Repositories

git clone https://repo.autonoma.ca/repo/kmcaster.git

Merge pull request #22 from DaveJarvis/1_fix_windows_issues Resolve Windows issues, upgrade look and feel

Author Dave Jarvis <email>
Date 2023-01-05 16:53:01 GMT-0800
Commit 02a77b4e6d6d561153959ae98faa2468482419e9
Parent b13dca7
README.md
* show all mouse clicks;
* show scrolling;
+* configurable traslucent background colour;
+* configurable gaps between keys;
* accurate modifier key states; and
* works with emulation software (e.g., [Sikuli](http://sikulix.com/)).
# Requirements
-[OpenJDK](https://bell-sw.com/pages/downloads/#/java-14-current) version 14.0.1 or newer.
+[OpenJDK](https://bell-sw.com/pages/downloads/#/java-19-current) version 19.0.1 or newer.
## Linux Java Version
-Depending on the Linux distribution, Java 14+ can be installed by issuing one of the following commands in a terminal:
+Depending on the Linux distribution, Java 19+ can be installed by issuing one of the following commands in a terminal:
```bash
-sudo apt install openjdk-17-jdk # tested on ubuntu 22.04
+sudo apt install openjdk-19-jdk
sudo pacman -S jdk-openjdk
```
Switching from earlier versions of Java can be accomplished by issuing one of the following commands in a terminal:
```
sudo update-alternatives --config java
-sudo archlinux-java set java-17-openjdk
+sudo archlinux-java set java-19-openjdk
```
Note: on some Linux operating systems you may need to add a repository.
On Ubuntu 18.04 run the following commands before trying to install Java 15, for example ([source](http://ubuntuhandbook.org/index.php/2020/03/install-oracle-java-14-ubuntu-18-04-20-04/)):
```
sudo add-apt-repository ppa:linuxuprising/java
-sudo apt install openjdk-15-jdk
+sudo apt install openjdk-19-jdk
```
build.gradle
group 'com.whitemagicsoftware'
-version '1.1'
+version '2.0'
repositories {
mavenCentral()
}
dependencies {
- // Command-line parsing
+ // Provides command-line parsing functionality.
implementation 'info.picocli:picocli:4.7.0'
- // SVG
+ // Provides operating system detection functionality.
+ implementation 'org.apache.commons:commons-lang3:3.12.0'
+
+ // Provides SVG parsing and rendering functionality.
implementation fileTree(include: ['**/*.jar'], dir: 'libs')
+ // Provides ability to detect keystrokes outside of JVM.
implementation 'com.github.kwhat:jnativehook:2.2.2'
+}
+
+compileJava.options.encoding = 'UTF-8'
+
+tasks.withType(JavaCompile).configureEach {
+ options.encoding = 'UTF-8'
}
src/main/java/com/whitemagicsoftware/kmcaster/EventHandler.java
*/
private static final Map<HardwareState, Color> KEY_COLOURS = Map.of(
- SWITCH_PRESSED, COLOUR_KEY_DN,
- SWITCH_RELEASED, COLOUR_KEY_UP
+ SWITCH_PRESSED, COLOUR_KEY_DN,
+ SWITCH_RELEASED, COLOUR_KEY_UP
);
/**
* This is used to temporarily set the mouse to the released state.
*/
- private static final HardwareSwitchState MOUSE_RELEASED =
- new HardwareSwitchState( MOUSE_EXTRA, SWITCH_RELEASED );
+ public static final HardwareSwitchState MOUSE_RELEASED =
+ new HardwareSwitchState( MOUSE_EXTRA, SWITCH_RELEASED );
private final HardwareImages mHardwareImages;
private final AutofitLabel[] mLabels = new AutofitLabel[ LabelConfig.size() ];
private final Map<HardwareSwitch, ResetTimer> mTimers = new HashMap<>();
private final Deque<HardwareSwitch> mMouseActions = new LinkedList<>();
private final ConsecutiveEventCounter<String> mKeyCounter;
public EventHandler(
- final HardwareImages hardwareImages, final Settings userSettings ) {
+ final HardwareImages hardwareImages, final Settings userSettings ) {
mHardwareImages = hardwareImages;
mKeyCounter = new ConsecutiveEventCounter<>( userSettings.getKeyCount() );
final var keyColour = KEY_COLOURS.get( SWITCH_PRESSED );
+ final var font = userSettings.createFont();
for( final var config : LabelConfig.values() ) {
- final var label = new AutofitLabel( config.toTitleCase(), LABEL_FONT );
+ final var label = new AutofitLabel( config.toTitleCase(), font );
label.setVerticalAlignment( config.getVerticalAlign() );
hwSwitch.ifPresentOrElse(
- s -> mHardwareImages.get( s ).add( label ),
- () -> mHardwareImages.get( KEY_REGULAR ).add( label )
+ s -> mHardwareImages.get( s ).add( label ),
+ () -> mHardwareImages.get( KEY_REGULAR ).add( label )
);
}
public void propertyChange( final PropertyChangeEvent e ) {
invokeLater(
- () -> {
- update( e );
+ () -> {
+ update( e );
- // Prevent collapsing multiple paint events.
- getDefaultToolkit().sync();
- }
+ // Prevent collapsing multiple paint events.
+ getDefaultToolkit().sync();
+ }
);
}
final var switchState = new HardwareSwitchState(
- hwSwitch, hwState, switchValue );
+ hwSwitch, hwState, switchValue );
// Get the mouse timer, modifier key timer, or non-modifier key timer.
final var timer = getTimer( hwSwitch );
timer.stop();
if( hwSwitch.isKeyboard() ) {
if( hwState == SWITCH_RELEASED ) {
timer.addActionListener(
- ( event ) -> updateKeyboardLabel( switchState )
+ ( event ) -> updateKeyboardLabel( switchState )
);
}
mMouseActions.remove( hwSwitch );
timer.addActionListener(
- ( event ) -> updateMouseStatus( switchState )
+ ( event ) -> updateMouseStatus( switchState )
);
}
if( hwSwitch.isScroll() ) {
timer.addActionListener(
- ( action ) -> {
- final var source = e.getSource();
- final var name = e.getPropertyName();
- final var event = new PropertyChangeEvent(
- source, name, true, false );
+ ( action ) -> {
+ final var source = e.getSource();
+ final var name = e.getPropertyName();
+ final var event = new PropertyChangeEvent(
+ source, name, true, false );
- update( event );
- }
+ update( event );
+ }
);
}
}
}
}
- protected void updateSwitchState( final HardwareSwitchState switchState ) {
+ private void updateSwitchState( final HardwareSwitchState switchState ) {
getHardwareComponent( switchState ).setState( switchState );
}
/**
* Changes the text on labels when the state of a key changes.
*
* @param state The key that has changed.
*/
- protected synchronized void updateKeyboardLabel(
- final HardwareSwitchState state ) {
+ private synchronized void updateKeyboardLabel(
+ final HardwareSwitchState state ) {
updateSwitchState( state );
final var hwState = state.getHardwareState();
final var component = getHardwareComponent( MOUSE_RELEASED );
- final var rm = currentManager( component );
+ final var repaintManager = currentManager( component );
component.setState( new HardwareSwitchState( hwSwitch, SWITCH_RELEASED ) );
- rm.paintDirtyRegions();
+ repaintManager.paintDirtyRegions();
for( final var action : mMouseActions ) {
component.setState( new HardwareSwitchState( action, SWITCH_PRESSED ) );
- rm.paintDirtyRegions();
+ repaintManager.paintDirtyRegions();
}
}
private HardwareComponent<HardwareSwitchState, Image> getHardwareComponent(
- final HardwareSwitchState state ) {
+ final HardwareSwitchState state ) {
return mHardwareImages.get( state.getHardwareSwitch() );
}
src/main/java/com/whitemagicsoftware/kmcaster/HardwareComponent.java
import java.util.Map;
+import static com.whitemagicsoftware.kmcaster.SvgRasterizer.RENDERING_HINTS;
+
/**
* Responsible for drawing an image based on a state; the state can be
* changed at any time.
*
* @param <S> The type of state associated with an image.
*/
-public final class HardwareComponent<S, I extends Image> extends JComponent {
+public final class HardwareComponent
+ <S extends HardwareSwitchState, I extends Image> extends JComponent {
private final Map<S, I> mStateImages = new HashMap<>();
/**
* Constructs a new {@link HardwareComponent} without an initial state. The
- * initial state must be set by calling {@link #setState(Object)}
- * or {@link #put(Object, Image)} before drawing the image.
+ * initial state must be set by calling {@link #setState(S)}
+ * or {@link #put(S, Image)} before drawing the image.
*
* @param insets The padding to use around the component so that letters
* can be drawn within a safe region, without extending beyond
* what we'd expected to see visually for key cap text.
*/
public HardwareComponent( final Insets insets ) {
assert insets != null;
mInsets = insets;
+ setOpaque( true );
}
@Override
public Dimension getPreferredSize() {
return mPreferredSize == null
- ? mPreferredSize = calcPreferredSize()
- : mPreferredSize;
+ ? mPreferredSize = calcPreferredSize()
+ : mPreferredSize;
}
@Override
public Insets getInsets() {
return mInsets;
}
+ /**
+ * Draws the current status of the hardware switch for this widget.
+ */
@Override
protected void paintComponent( final Graphics g ) {
- g.drawImage( getActiveImage(), 0, 0, this );
+ final var g2 = (Graphics2D) g.create();
+ g2.setRenderingHints( RENDERING_HINTS );
+ g2.setComposite( AlphaComposite.Src );
+ g2.drawImage( getActiveImage(), 0, 0, this );
+ g2.dispose();
}
/**
* Associates a new (or existing) state with the given image. This sets
* changes the current state to the given state.
*
- * @param state The state to associate with an image.
- * @param image The image to paint when the given state is selected.
+ * @param hwSwitch The state to associate with an image.
+ * @param image The image to paint when the given state is selected.
*/
- public void put( final S state, final I image ) {
- getStateImages().put( state, image );
+ public void put( final S hwSwitch, final I image ) {
+ getStateImages().put( hwSwitch, image );
// Change the state variable directly, no need to issue a repaint request.
- mState = state;
+ mState = hwSwitch;
}
/**
* Repaints this component by changing its mutable state. The new state
- * must have been previously registered via {@link #put(Object, Image)}.
+ * must have been previously registered via {@link #put(S, Image)}.
*
* @param state The new state.
return new Dimension(
- image.getWidth( null ), image.getHeight( null )
+ image.getWidth( null ), image.getHeight( null )
);
}
- private Image getActiveImage() {
+ private I getActiveImage() {
return getStateImages().get( getState() );
}
src/main/java/com/whitemagicsoftware/kmcaster/HardwareSwitch.java
private final static HardwareSwitch[] mMouseSwitches = {
- MOUSE_LEFT, MOUSE_MIDDLE, MOUSE_RIGHT, MOUSE_EXTRA,
+ MOUSE_EXTRA, MOUSE_LEFT, MOUSE_MIDDLE, MOUSE_RIGHT,
MOUSE_SCROLL_U, MOUSE_SCROLL_D, MOUSE_SCROLL_L, MOUSE_SCROLL_R
};
public boolean isScroll() {
return isPrefix( "MOUSE_SCROLL" );
+ }
+
+ /**
+ * Answers whether this hardware switch represents a mouse button (or scroll).
+ *
+ * @return {@code true} to indicate a mouse action occurred.
+ */
+ public boolean isMouse() {
+ return isPrefix( "MOUSE" );
}
src/main/java/com/whitemagicsoftware/kmcaster/HardwareSwitchState.java
/**
+ * Answers whether this is a mouse-related state change.
+ *
+ * @return {@code true} when this is a mouse state change.
+ */
+ public boolean isMouse() {
+ return mHardwareSwitch.isMouse();
+ }
+
+ /**
* Returns the physical switch containing its name.
*
public int hashCode() {
return 31 * mHardwareSwitch.hashCode() + mHardwareState.hashCode();
+ }
+
+ @Override
+ public String toString() {
+ return getClass().getSimpleName() + "{" +
+ "mHardwareSwitch=" + mHardwareSwitch +
+ ", mHardwareState=" + mHardwareState +
+ ", mValue='" + mValue + '\'' +
+ '}';
}
}
src/main/java/com/whitemagicsoftware/kmcaster/KmCaster.java
import javax.swing.*;
+import java.awt.*;
import java.beans.PropertyChangeListener;
import java.io.IOException;
import java.net.URISyntaxException;
import static com.github.kwhat.jnativehook.GlobalScreen.*;
-import static com.whitemagicsoftware.kmcaster.ui.Constants.TRANSLUCENT;
import static com.whitemagicsoftware.kmcaster.ui.FontLoader.initFonts;
+import static java.lang.Integer.valueOf;
import static java.util.logging.Level.OFF;
import static java.util.logging.Logger.getLogger;
*/
public final class KmCaster extends JFrame {
-
private final Settings mUserSettings = new Settings( this );
setUndecorated( true );
setAlwaysOnTop( true );
- setBackground( TRANSLUCENT );
+ setBackground( getUserBgColour() );
// Prevent tabbing to non-existent components.
setFocusTraversalKeysEnabled( false );
}
private void initWindowContents( final HardwareImages hardwareImages ) {
- final var panel = new TranslucentPanel();
+ final var hgap = getGapHorizontal();
+ final var vgap = getGapVertical();
+ final var panel = new TranslucentPanel( hgap, vgap );
for( final var hwSwitch : HardwareSwitch.values() ) {
keyboardListener.addPropertyChangeListener( listener );
keyboardListener.initModifiers();
+ }
+
+ @SuppressWarnings( "PointlessArithmeticExpression" )
+ private Color getUserBgColour() {
+ final var hex = getUserSettings().getBackgroundColour();
+ final var index = hex.startsWith( "#" ) ? 1 : 0;
+
+ try {
+ final var r = valueOf( hex.substring( index + 0, index + 2 ), 16 );
+ final var g = valueOf( hex.substring( index + 2, index + 4 ), 16 );
+ final var b = valueOf( hex.substring( index + 4, index + 6 ), 16 );
+ final var a = valueOf( hex.substring( index + 6, index + 8 ), 16 );
+
+ return new Color( r / 255.0f, g / 255.0f, b / 255.0f, a / 255.0f );
+ } catch( final Exception e ) {
+ e.printStackTrace();
+ }
+
+ return new Color( .2f, .2f, .2f, .5f );
+ }
+
+ private int getGapHorizontal() {
+ return getUserSettings().getGapHorizontal();
+ }
+
+ private int getGapVertical() {
+ return getUserSettings().getGapVertical();
}
src/main/java/com/whitemagicsoftware/kmcaster/Settings.java
import java.awt.*;
+import java.util.Map;
import java.util.concurrent.Callable;
+
+import static java.awt.Font.*;
+import static java.util.Map.entry;
+import static javax.swing.SwingUtilities.invokeLater;
@CommandLine.Command(
- name = "KmCaster",
- mixinStandardHelpOptions = true,
- description = "Displays key presses and mouse clicks on the screen."
+ name = "KmCaster",
+ mixinStandardHelpOptions = true,
+ description = "Displays key presses and mouse clicks on the screen."
)
-@SuppressWarnings({"FieldMayBeFinal", "CanBeFinal"})
+@SuppressWarnings( {"FieldMayBeFinal", "CanBeFinal"} )
public final class Settings implements Callable<Integer> {
/**
* Minimum application height, in pixels.
*/
private static final int MIN_HEIGHT_PX = 20;
+
+ /**
+ * Maps font styles to {@link Font} API equivalents.
+ */
+ private static Map<String, Integer> FONT_STYLES = Map.ofEntries(
+ entry( "plain", PLAIN ),
+ entry( "bold", BOLD ),
+ entry( "italic", ITALIC ),
+ entry( "bold+italic", BOLD + ITALIC )
+ );
/**
* Executable class.
*/
private final KmCaster mKmCaster;
+
+ /**
+ * Milliseconds to wait before releasing (clearing) a regular key.
+ */
+ @CommandLine.Option(
+ names = {"-a", "--delay-alphanum"},
+ description =
+ "Regular key release delay (${DEFAULT-VALUE} milliseconds)",
+ paramLabel = "ms",
+ defaultValue = "250"
+ )
+ private int mDelayKeyRegular = 250;
+
+ /**
+ * Milliseconds to wait before releasing (clearing) a mouse button.
+ */
+ @CommandLine.Option(
+ names = {"-b", "--delay-button"},
+ description =
+ "Mouse button release delay (${DEFAULT-VALUE} milliseconds)",
+ paramLabel = "ms",
+ defaultValue = "100"
+ )
+ private int mDelayMouseButton = 100;
+
+ /**
+ * Background colour.
+ */
+ @CommandLine.Option(
+ names = {"-c", "--colour"},
+ description =
+ "Background colour, including alpha transparency (${DEFAULT-VALUE} RGBA)",
+ paramLabel = "hex",
+ defaultValue = "30303077"
+ )
+ private String mBackgroundColour = "30303077";
/**
* Application height in pixels. Images are scaled to this height, maintaining
* aspect ratio. The height constrains the width, so as long as the width
* is large enough, the application's window will adjust to fit.
*/
@CommandLine.Option(
- names = {"-d", "--dimension"},
- description =
- "Application height (${DEFAULT-VALUE} pixels)",
- paramLabel = "pixels",
- defaultValue = "100"
+ names = {"-d", "--dimension"},
+ description =
+ "Application height (${DEFAULT-VALUE} pixels)",
+ paramLabel = "pixels",
+ defaultValue = "100"
)
private int mHeight = 100;
/**
- * Milliseconds to wait before releasing (clearing) a regular key.
+ * Application preferred font name.
*/
@CommandLine.Option(
- names = {"-a", "--delay-alphanum"},
- description =
- "Regular key release delay (${DEFAULT-VALUE} milliseconds)",
- paramLabel = "ms",
- defaultValue = "250"
+ names = {"-f", "--font-name"},
+ description =
+ "Font name (${DEFAULT-VALUE})",
+ paramLabel = "string",
+ defaultValue = "Inter"
)
- private int mDelayKeyRegular = 250;
+ private String mFontName = "Inter";
/**
- * Milliseconds to wait before releasing (clearing) any modifier key.
+ * Application preferred font style.
*/
@CommandLine.Option(
- names = {"-m", "--delay-modifier"},
- description =
- "Modifier key release delay (${DEFAULT-VALUE} milliseconds)",
- paramLabel = "ms",
- defaultValue = "150"
+ names = {"--font-style"},
+ description =
+ "plain, bold, italic, bold+italic (${DEFAULT-VALUE})",
+ paramLabel = "string",
+ defaultValue = "bold"
)
- private int mDelayKeyModifier = 150;
+ private String mFontStyle = "bold";
/**
- * Milliseconds to wait before releasing (clearing) a mouse button.
+ * Milliseconds to wait before releasing (clearing) any modifier key.
*/
@CommandLine.Option(
- names = {"-b", "--delay-button"},
- description =
- "Mouse button release delay (${DEFAULT-VALUE} milliseconds)",
- paramLabel = "ms",
- defaultValue = "100"
+ names = {"-m", "--delay-modifier"},
+ description =
+ "Modifier key release delay (${DEFAULT-VALUE} milliseconds)",
+ paramLabel = "ms",
+ defaultValue = "150"
)
- private int mDelayMouseButton = 100;
+ private int mDelayKeyModifier = 150;
/**
- * Milliseconds to wait before releasing (clearing) a mouse scroll event.
+ * Number of times to count a key press before displaying +.
*/
@CommandLine.Option(
- names = {"-c", "--key-counter"},
- description =
- "Count repeated key presses (${DEFAULT-VALUE} times)",
- paramLabel = "number",
- defaultValue = "9"
+ names = {"-k", "--key-counter"},
+ description =
+ "Count repeated key presses (${DEFAULT-VALUE} times)",
+ paramLabel = "number",
+ defaultValue = "9"
)
private int mKeyCount = 9;
/**
* Milliseconds to wait before releasing (clearing) a mouse scroll event.
*/
@CommandLine.Option(
- names = {"-s", "--delay-scroll"},
- description =
- "Mouse scroll release delay (${DEFAULT-VALUE} milliseconds)",
- paramLabel = "ms",
- defaultValue = "300"
+ names = {"-s", "--delay-scroll"},
+ description =
+ "Mouse scroll release delay (${DEFAULT-VALUE} milliseconds)",
+ paramLabel = "ms",
+ defaultValue = "300"
)
private int mDelayMouseScroll = 300;
+
+ /**
+ * Amount of padding above and below the frame.
+ */
+ @CommandLine.Option(
+ names = {"--gap-horizontal"},
+ description =
+ "Amount of padding above and below frame (${DEFAULT-VALUE} pixels)",
+ paramLabel = "pixels",
+ defaultValue = "5"
+ )
+ private int mGapHorizontal = 5;
+
+ /**
+ * Amount of padding between items in the frame.
+ */
+ @CommandLine.Option(
+ names = {"--gap-vertical"},
+ description =
+ "Amount of padding between switches (${DEFAULT-VALUE} pixels)",
+ paramLabel = "pixels",
+ defaultValue = "5"
+ )
+ private int mGapVertical = 5;
public Settings( final KmCaster kmCaster ) {
@Override
public Integer call() {
- mKmCaster.init();
+ invokeLater( mKmCaster::init );
return 0;
}
public int getKeyCount() {
return mKeyCount < 2 ? 2 : mKeyCount;
+ }
+
+ @SuppressWarnings( "MagicConstant" )
+ public Font createFont() {
+ final var style = FONT_STYLES.getOrDefault(
+ mFontStyle.toLowerCase(), BOLD
+ );
+
+ return new Font( mFontName, style, 100 );
}
private int getHeight() {
return mHeight < MIN_HEIGHT_PX ? MIN_HEIGHT_PX : mHeight;
+ }
+
+ public int getGapHorizontal() {
+ return mGapHorizontal;
+ }
+
+ public int getGapVertical() {
+ return mGapVertical;
+ }
+
+ public String getBackgroundColour() {
+ return mBackgroundColour;
}
}
src/main/java/com/whitemagicsoftware/kmcaster/SvgRasterizer.java
import static java.awt.RenderingHints.*;
import static java.awt.image.BufferedImage.TYPE_4BYTE_ABGR;
+import static java.util.Map.entry;
/**
* Responsible for converting SVG images into rasterized PNG images.
*/
public final class SvgRasterizer {
- private final static Map<Object, Object> RENDERING_HINTS = Map.of(
- KEY_ANTIALIASING,
- VALUE_ANTIALIAS_ON,
- KEY_ALPHA_INTERPOLATION,
- VALUE_ALPHA_INTERPOLATION_QUALITY,
- KEY_COLOR_RENDERING,
- VALUE_COLOR_RENDER_QUALITY,
- KEY_DITHERING,
- VALUE_DITHER_DISABLE,
- KEY_FRACTIONALMETRICS,
- VALUE_FRACTIONALMETRICS_ON,
- KEY_INTERPOLATION,
- VALUE_INTERPOLATION_BICUBIC,
- KEY_RENDERING,
- VALUE_RENDER_QUALITY,
- KEY_STROKE_CONTROL,
- VALUE_STROKE_PURE,
- KEY_TEXT_ANTIALIASING,
- VALUE_TEXT_ANTIALIAS_ON
+ public final static Map<Object, Object> RENDERING_HINTS = Map.ofEntries(
+ entry( KEY_ANTIALIASING, VALUE_ANTIALIAS_ON ),
+ entry( KEY_ALPHA_INTERPOLATION, VALUE_ALPHA_INTERPOLATION_QUALITY ),
+ entry( KEY_COLOR_RENDERING, VALUE_COLOR_RENDER_QUALITY ),
+ entry( KEY_DITHERING, VALUE_DITHER_DISABLE ),
+ entry( KEY_FRACTIONALMETRICS, VALUE_FRACTIONALMETRICS_ON ),
+ entry( KEY_INTERPOLATION, VALUE_INTERPOLATION_BILINEAR ),
+ entry( KEY_RENDERING, VALUE_RENDER_QUALITY ),
+ entry( KEY_STROKE_CONTROL, VALUE_STROKE_PURE ),
+ entry( KEY_TEXT_ANTIALIASING, VALUE_TEXT_ANTIALIAS_ON )
);
*/
public DimensionTuple calculateScale(
- final SVGDiagram diagram, final Dimension dstDim ) {
+ final SVGDiagram diagram, final Dimension dstDim ) {
final var srcDim = new ScalableDimension(
- (int) diagram.getWidth(), (int) diagram.getHeight()
+ (int) diagram.getWidth(), (int) diagram.getHeight()
);
final var scaled = srcDim.scale( dstDim );
*/
public BufferedImage rasterize(
- final SVGDiagram diagram, final DimensionTuple tuple )
- throws SVGException {
+ final SVGDiagram diagram, final DimensionTuple tuple )
+ throws SVGException {
final var scaled = tuple.getValue();
final var wScaled = (int) scaled.getWidth();
*/
public Image rasterize(
- final SVGDiagram diagram, final Dimension dstDim ) throws SVGException {
+ final SVGDiagram diagram, final Dimension dstDim ) throws SVGException {
return rasterize( diagram, calculateScale( diagram, dstDim ) );
}
src/main/java/com/whitemagicsoftware/kmcaster/TransparentFrame.java
+package com.whitemagicsoftware.kmcaster;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+
+import static java.awt.Color.WHITE;
+import static java.awt.Font.BOLD;
+import static javax.swing.SwingUtilities.invokeLater;
+
+public class TransparentFrame extends JFrame {
+ public static class TransparentLabel extends JLabel {
+ public TransparentLabel( final String text ) {
+ super( text );
+ }
+
+ @Override
+ protected void paintComponent( final Graphics g ) {
+ final var g2d = (Graphics2D) g.create();
+ g2d.clearRect( 0, 0, getWidth(), getHeight() );
+ g2d.dispose();
+
+ super.paintComponent( g );
+ }
+ }
+
+ private final JLabel mLabel = new TransparentLabel( "Begin Listening" );
+
+ public TransparentFrame() { }
+
+ public void init() {
+ setDefaultCloseOperation( EXIT_ON_CLOSE );
+ setLocationRelativeTo( null );
+ setUndecorated( true );
+ setAlwaysOnTop( true );
+ setSize( 600, 300 );
+ setFocusTraversalKeysEnabled( false );
+ setLayout( new FlowLayout() );
+ addMouseListener( new MouseAdapter() {
+ @Override
+ public void mousePressed( final MouseEvent e ) {
+ mLabel.setText( "Pressed" );
+ }
+
+ @Override
+ public void mouseReleased( final MouseEvent e ) {
+ mLabel.setText( "Released" );
+ }
+ } );
+
+ setBackground( new Color( .1f, .1f, .5f, .2f ) );
+
+ mLabel.setFont( new Font( "defaultFont", BOLD, 30 ) );
+ mLabel.setForeground( WHITE );
+
+ add( mLabel );
+
+ setResizable( false );
+ setLocationRelativeTo( null );
+ setVisible( true );
+ }
+
+ public static void main( String[] args ) {
+ final var frame = new TransparentFrame();
+ invokeLater( frame::init );
+ }
+}
src/main/java/com/whitemagicsoftware/kmcaster/listeners/FrameDragListener.java
*/
public final class FrameDragListener extends MouseAdapter {
- /**
- *
- */
private final static Cursor DRAGGING =
- getPredefinedCursor( MOVE_CURSOR );
+ getPredefinedCursor( MOVE_CURSOR );
/**
src/main/java/com/whitemagicsoftware/kmcaster/listeners/KeyboardListener.java
import java.util.HashMap;
-import java.util.Map;
-
-import static com.github.kwhat.jnativehook.keyboard.NativeKeyEvent.getKeyText;
-import static com.whitemagicsoftware.kmcaster.HardwareSwitch.*;
-import static java.util.Map.entry;
-
-/**
- * Responsible for sending property change events for keyboard state changes.
- */
-public final class KeyboardListener
- extends PropertyDispatcher<HardwareSwitch>
- implements NativeKeyListener {
- private final static String KEY_SPACE = "Space";
- private final static String KEY_BACKSPACE = "Back ⌫";
- private final static String KEY_TAB = "Tab ↹";
- private final static String KEY_ENTER = "Enter ⏎";
-
- /**
- * The key is the raw key code return from the {@link NativeKeyEvent}, the
- * value is the human-readable text to display on screen.
- */
- @SuppressWarnings("JavacQuirks")
- private final static Map<Integer, String> KEY_CODES =
- Map.ofEntries(
- entry( 32, KEY_SPACE ),
- entry( 33, "!" ),
- entry( 34, "\"" ),
- entry( 35, "#" ),
- entry( 36, "$" ),
- entry( 37, "%" ),
- entry( 38, "&" ),
- entry( 39, "'" ),
- entry( 40, "(" ),
- entry( 41, ")" ),
- entry( 42, "*" ),
- entry( 43, "+" ),
- entry( 44, "," ),
- entry( 45, "-" ),
- entry( 46, "." ),
- entry( 47, "/" ),
- entry( 58, ":" ),
- entry( 59, ";" ),
- entry( 60, "<" ),
- entry( 61, "=" ),
- entry( 62, ">" ),
- entry( 63, "?" ),
- entry( 64, "@" ),
- entry( 91, "[" ),
- entry( 92, "\\" ),
- entry( 93, "]" ),
- entry( 94, "^" ),
- entry( 95, "_" ),
- entry( 96, "`" ),
- entry( 97, "a" ),
- entry( 98, "b" ),
- entry( 99, "c" ),
- entry( 100, "d" ),
- entry( 101, "e" ),
- entry( 102, "f" ),
- entry( 103, "g" ),
- entry( 104, "h" ),
- entry( 105, "i" ),
- entry( 106, "j" ),
- entry( 107, "k" ),
- entry( 108, "l" ),
- entry( 109, "m" ),
- entry( 110, "n" ),
- entry( 111, "o" ),
- entry( 112, "p" ),
- entry( 113, "q" ),
- entry( 114, "r" ),
- entry( 115, "s" ),
- entry( 116, "t" ),
- entry( 117, "u" ),
- entry( 118, "v" ),
- entry( 119, "w" ),
- entry( 120, "x" ),
- entry( 121, "y" ),
- entry( 122, "z" ),
- entry( 123, "{" ),
- entry( 124, "|" ),
- entry( 125, "}" ),
- entry( 126, "~" ),
- entry( 65056, KEY_TAB ),
- entry( 65289, KEY_TAB ),
- entry( 65293, KEY_ENTER ),
- entry( 65288, KEY_BACKSPACE ),
- entry( 65301, "SysRq" ),
- entry( 65377, "Print" ),
- entry( 65361, "←" ),
- entry( 65362, "↑" ),
- entry( 65363, "→" ),
- entry( 65364, "↓" ),
- entry( 65307, "Esc" ),
- entry( 65365, "PgUp" ),
- entry( 65366, "PgDn" ),
- entry( 65379, "Ins" ),
- entry( 65535, "Del" ),
- entry( 65506, "Shift" ),
- entry( 65407, "Num" ),
- entry( 65421, "Num ⏎" ),
- entry( 65430, "Num ←" ),
- entry( 65431, "Num ↑" ),
- entry( 65432, "Num →" ),
- entry( 65433, "Num ↓" ),
- entry( 65429, "Num Home" ),
- entry( 65434, "Num PgUp" ),
- entry( 65435, "Num PgDn" ),
- entry( 65436, "Num End" ),
- entry( 65437, "Num Clear" ),
- entry( 65438, "Num Ins" ),
- entry( 65439, "Num Del" ),
- entry( 65450, "Num *" ),
- entry( 65451, "Num +" ),
- entry( 65452, "Num Sep" ),
- entry( 65453, "Num -" ),
- entry( 65454, "Num ." ),
- entry( 65455, "Num /" ),
- entry( 65456, "Num 0" ),
- entry( 65457, "Num 1" ),
- entry( 65458, "Num 2" ),
- entry( 65459, "Num 3" ),
- entry( 65460, "Num 4" ),
- entry( 65461, "Num 5" ),
- entry( 65462, "Num 6" ),
- entry( 65463, "Num 7" ),
- entry( 65464, "Num 8" ),
- entry( 65465, "Num 9" ),
- entry( 65300, "Scrl" ),
- entry( 65509, "Caps" )
- );
-
- /**
- * Whether a modifier key state is pressed or released depends on the state
- * of multiple keys (left and right). This map assigns the left and right
- * key codes to the same modifier key so that the physical state can be
- * represented by a single on-screen button (the logical state).
- * <p>
- * The 65511, 65512 are shifted alt key codes (a.k.a. the meta key).
- * </p>
- */
- private final Map<Integer, HardwareSwitch> mModifierCodes =
- Map.ofEntries(
- entry( 65505, KEY_SHIFT ),
- entry( 65506, KEY_SHIFT ),
- entry( 65507, KEY_CTRL ),
- entry( 65508, KEY_CTRL ),
- entry( 65511, KEY_ALT ),
- entry( 65512, KEY_ALT ),
- entry( 65513, KEY_ALT ),
- entry( 65514, KEY_ALT )
- );
-
- /**
- * Most recently pressed non-modifier key value, empty signifies release.
- */
- private String mRegularHeld = "";
-
- /**
- * Stores the state of modifier keys. The contents of the map reflect the
- * state of each switch, so the reference can be final but not its contents.
- * An integer is used because keyboards usually have two separate keys for
- * each modifier, both can be pressed and released independently.
- */
- private final Map<HardwareSwitch, Integer> mModifiers = new HashMap<>();
-
- /**
- * Creates a keyboard listener that publishes events when keys are either
- * pressed or released. The constructor initializes all modifier keys to
- * the released state because the native keyboard hook API does not offer
- * a way to query what keys are currently pressed.
- */
- public KeyboardListener() {
- for( final var key : modifierSwitches() ) {
- mModifiers.put( key, 0 );
- }
- }
-
- @Override
- public void nativeKeyPressed( final NativeKeyEvent e ) {
- final var modifierKey = getModifierKey( e );
-
- if( modifierKey == null ) {
- dispatchRegular( mRegularHeld, getDisplayText( e ) );
- }
- else {
- dispatchModifier( modifierKey, 1 );
- }
- }
-
- @Override
- public void nativeKeyReleased( final NativeKeyEvent e ) {
- final var modifierKey = getModifierKey( e );
-
- if( modifierKey == null ) {
- dispatchRegular( getDisplayText( e ), "" );
- }
- else {
- dispatchModifier( modifierKey, -1 );
- }
- }
-
- /**
- * Sets the initial state of the modifiers.
- */
- public void initModifiers() {
- for( final var key : mModifiers.keySet() ) {
- final var state = mModifiers.get( key );
-
- // All modifiers keys are "false" by default, so firing fake transition
- // events from "true" to "false" will cause the GUI to repaint with the
- // text label affixed to each key, drawn in the released state. This
- // happens before the frame is set to visible.
- tryFire( key, state == 0, state == 1 );
- }
- }
-
- /**
- * Notifies of any modifier state changes. There's a bug whereby this
- * method is never called by the native library when both Left/Right Ctrl
- * keys are pressed followed by pressing either Shift key. Similarly,
- * holding both Left/Right Shift keys followed by pressing either Ctrl key
- * fails to call this method.
- *
- * @param key Must be a modifier key.
- * @param increment {@code -1} means released, {@code 1} means pressed.
- */
- private void dispatchModifier( final HardwareSwitch key, final int increment ) {
- final var oldCount = mModifiers.get( key );
- final var newCount = oldCount + increment;
-
- // Only fire the event if the state has changed.
- tryFire( key, oldCount > 0, newCount > 0 );
- mModifiers.put( key, newCount );
- }
-
- /**
- * State for a regular (non-modifier) key has changed.
- *
- * @param o Previous key value.
- * @param n Current key value.
- */
- private void dispatchRegular( final String o, final String n ) {
- assert o != null;
- assert n != null;
-
- // Always fire the event, which permits double-key taps.
- fire( KEY_REGULAR, o, n );
- mRegularHeld = n;
- }
-
- /**
- * Looks up the key code for the given event. If the key code is not mapped,
- * this will return the default value from the native implementation.
- *
- * @param e The keyboard event that was triggered.
- * @return The human-readable name for the key relating to the event.
- */
- private String getDisplayText( final NativeKeyEvent e ) {
- return KEY_CODES.getOrDefault(
- e.getRawCode(), getKeyText( e.getKeyCode() )
- );
- }
-
- /**
- * Returns the modifier key that corresponds to the raw key code from
- * the given event. This is necessary to ensure that both left and right
- * modifier keys return the same {@link HardwareSwitch} value.
- *
- * @param e The event containing a raw key code to look up.
- * @return The switch matching the raw key code, or {@code null} if the
- * raw key code does not represent a modifier.
- */
- private HardwareSwitch getModifierKey( final NativeKeyEvent e ) {
- return mModifierCodes.get( e.getRawCode() );
- }
-
- /**
- * Unused. Key up and key down are tracked separately from a typed key.
- *
- * @param e Ignored.
- */
- @Override
- public void nativeKeyTyped( final NativeKeyEvent e ) {
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import static com.whitemagicsoftware.kmcaster.HardwareSwitch.*;
+import static com.whitemagicsoftware.kmcaster.listeners.KeyboardListener.HandedSwitch.*;
+import static java.lang.Boolean.FALSE;
+import static java.lang.Boolean.TRUE;
+import static java.util.Map.entry;
+import static org.apache.commons.lang3.SystemUtils.IS_OS_LINUX;
+import static org.apache.commons.lang3.SystemUtils.IS_OS_WINDOWS;
+
+/**
+ * Responsible for sending property change events for keyboard state changes.
+ */
+public final class KeyboardListener
+ extends PropertyDispatcher<HardwareSwitch>
+ implements NativeKeyListener {
+ private final static String KEY_SPACE = "Space";
+ private final static String KEY_BACKSPACE = "Back ⌫";
+ private final static String KEY_TAB = "Tab ↔";
+ private final static String KEY_ENTER = "Enter ⏎";
+ private static final String KEY_ESCAPE = "Esc";
+
+ private final static Map<Character, String> CHAR_CODES =
+ Map.ofEntries(
+ entry( '\b', KEY_BACKSPACE ),
+ entry( '\t', KEY_TAB ),
+ entry( '\r', KEY_ENTER ),
+ entry( '\u001B', KEY_ESCAPE ),
+ entry( ' ', KEY_SPACE )
+ );
+
+ /**
+ * Shortens text strings from the keyboard library to fit the UI key.
+ */
+ private static final Map<String, String> TRANSLATE = Map.ofEntries(
+ entry( "Caps Lock", "Caps" ),
+ entry( "Num Lock", "Num" ),
+ entry( "Scroll Lock", "Scrl" ),
+ entry( "Print Screen", "Print" ),
+ entry( "Up", "↑" ),
+ entry( "Down", "↓" ),
+ entry( "Left", "←" ),
+ entry( "Right", "→" )
+ );
+
+ /**
+ * The key is the raw key code return from the {@link NativeKeyEvent}, the
+ * value is the human-readable text to display on screen.
+ */
+ @SuppressWarnings( "JavacQuirks" )
+ private final static Map<Integer, String> RAW_CODES =
+ Map.ofEntries(
+ entry( 8, KEY_BACKSPACE ),
+ entry( 9, KEY_TAB ),
+ entry( 13, KEY_ENTER ),
+ entry( 27, KEY_ESCAPE ),
+ entry( 32, KEY_SPACE ),
+ entry( 33, "!" ),
+ entry( 34, "\"" ),
+ entry( 35, "#" ),
+ entry( 36, "$" ),
+ entry( 37, "%" ),
+ entry( 38, "&" ),
+ entry( 39, "'" ),
+ entry( 40, "(" ),
+ entry( 41, ")" ),
+ entry( 42, "*" ),
+ entry( 43, "+" ),
+ entry( 44, "," ),
+ entry( 45, "-" ),
+ entry( 46, "." ),
+ entry( 47, "/" ),
+ entry( 58, ":" ),
+ entry( 59, ";" ),
+ entry( 60, "<" ),
+ entry( 61, "=" ),
+ entry( 62, ">" ),
+ entry( 63, "?" ),
+ entry( 64, "@" ),
+ entry( 91, "[" ),
+ entry( 92, "\\" ),
+ entry( 93, "]" ),
+ entry( 94, "^" ),
+ entry( 95, "_" ),
+ entry( 96, "`" ),
+ entry( 97, "a" ),
+ entry( 98, "b" ),
+ entry( 99, "c" ),
+ entry( 100, "d" ),
+ entry( 101, "e" ),
+ entry( 102, "f" ),
+ entry( 103, "g" ),
+ entry( 104, "h" ),
+ entry( 105, "i" ),
+ entry( 106, "j" ),
+ entry( 107, "k" ),
+ entry( 108, "l" ),
+ entry( 109, "m" ),
+ entry( 110, "n" ),
+ entry( 111, "o" ),
+ entry( 112, "p" ),
+ entry( 113, "q" ),
+ entry( 114, "r" ),
+ entry( 115, "s" ),
+ entry( 116, "t" ),
+ entry( 117, "u" ),
+ entry( 118, "v" ),
+ entry( 119, "w" ),
+ entry( 120, "x" ),
+ entry( 121, "y" ),
+ entry( 122, "z" ),
+ entry( 123, "{" ),
+ entry( 124, "|" ),
+ entry( 125, "}" ),
+ entry( 126, "~" ),
+ entry( 65056, KEY_TAB ),
+ entry( 65288, KEY_BACKSPACE ),
+ entry( 65289, KEY_TAB ),
+ entry( 65293, KEY_ENTER ),
+ entry( 65299, "Pause" ),
+ entry( 65301, "SysRq" ),
+ entry( 65307, "Esc" ),
+ entry( 65360, "Home" ),
+ entry( 65361, "←" ),
+ entry( 65362, "↑" ),
+ entry( 65363, "→" ),
+ entry( 65364, "↓" ),
+ entry( 65365, "PgUp" ),
+ entry( 65366, "PgDn" ),
+ entry( 65367, "End" ),
+ entry( 65377, "Print" ),
+ entry( 65379, "Ins" ),
+ entry( 65387, "Break" ),
+ entry( 65535, "Del" ),
+ entry( 65506, "Shift" ),
+ entry( 65407, "Num" ),
+ entry( 65421, "Num ⏎" ),
+ entry( 65430, "Num ←" ),
+ entry( 65431, "Num ↑" ),
+ entry( 65432, "Num →" ),
+ entry( 65433, "Num ↓" ),
+ entry( 65429, "Num Home" ),
+ entry( 65434, "Num PgUp" ),
+ entry( 65435, "Num PgDn" ),
+ entry( 65436, "Num End" ),
+ entry( 65437, "Num Clear" ),
+ entry( 65438, "Num Ins" ),
+ entry( 65439, "Num Del" ),
+ entry( 65450, "Num *" ),
+ entry( 65451, "Num +" ),
+ entry( 65452, "Num Sep" ),
+ entry( 65453, "Num -" ),
+ entry( 65454, "Num ." ),
+ entry( 65455, "Num /" ),
+ entry( 65456, "Num 0" ),
+ entry( 65457, "Num 1" ),
+ entry( 65458, "Num 2" ),
+ entry( 65459, "Num 3" ),
+ entry( 65460, "Num 4" ),
+ entry( 65461, "Num 5" ),
+ entry( 65462, "Num 6" ),
+ entry( 65463, "Num 7" ),
+ entry( 65464, "Num 8" ),
+ entry( 65465, "Num 9" ),
+ entry( 65470, "F1" ),
+ entry( 65471, "F2" ),
+ entry( 65472, "F3" ),
+ entry( 65473, "F4" ),
+ entry( 65474, "F5" ),
+ entry( 65475, "F6" ),
+ entry( 65476, "F7" ),
+ entry( 65477, "F8" ),
+ entry( 65478, "F9" ),
+ entry( 65479, "F10" ),
+ entry( 65480, "F11" ),
+ entry( 65481, "F12" ),
+ entry( 65300, "Scrl" ),
+ entry( 65509, "Caps" )
+ );
+
+ /**
+ * Maps left and right switches to their on-screen representation. This
+ * allows the left and right keys to control whether the switch is active,
+ * independently.
+ */
+ enum HandedSwitch {
+ KEY_SHIFT_LEFT( KEY_SHIFT ),
+ KEY_SHIFT_RIGHT( KEY_SHIFT ),
+ KEY_CTRL_LEFT( KEY_CTRL ),
+ KEY_CTRL_RIGHT( KEY_CTRL ),
+ KEY_ALT_LEFT( KEY_ALT ),
+ KEY_ALT_RIGHT( KEY_ALT );
+
+ final HardwareSwitch mHwSwitch;
+
+ HandedSwitch( final HardwareSwitch hwSwitch ) {
+ assert hwSwitch != null;
+ mHwSwitch = hwSwitch;
+ }
+
+ public HardwareSwitch getHardwareSwitch() {
+ return mHwSwitch;
+ }
+ }
+
+ /**
+ * The key is the raw key code return from the {@link NativeKeyEvent}, the
+ * value is the human-readable text to display on screen.
+ */
+ private final static Map<Integer, HandedSwitch> MODIFIERS_WINDOWS =
+ Map.ofEntries(
+ entry( 160, KEY_SHIFT_LEFT ),
+ entry( 161, KEY_SHIFT_RIGHT ),
+ entry( 162, KEY_CTRL_LEFT ),
+ entry( 163, KEY_CTRL_RIGHT ),
+ entry( 164, KEY_ALT_LEFT ),
+ entry( 165, KEY_ALT_RIGHT )
+ );
+
+ /**
+ * Whether a modifier key state is pressed or released depends on the state
+ * of multiple keys (left and right). This map assigns the left and right
+ * key codes to the same modifier key so that the physical state can be
+ * represented by a single on-screen button (the logical state).
+ * <p>
+ * The 65511, 65512 are shifted alt key codes (a.k.a. the meta key).
+ * </p>
+ */
+ private final Map<Integer, HandedSwitch> MODIFIERS_LINUX =
+ Map.ofEntries(
+ entry( 65505, KEY_SHIFT_LEFT ),
+ entry( 65506, KEY_SHIFT_RIGHT ),
+ entry( 65507, KEY_CTRL_LEFT ),
+ entry( 65508, KEY_CTRL_RIGHT ),
+ entry( 65511, KEY_ALT_LEFT ),
+ entry( 65512, KEY_ALT_RIGHT ),
+ entry( 65513, KEY_ALT_LEFT ),
+ entry( 65514, KEY_ALT_RIGHT )
+ );
+
+ /**
+ * Most recently pressed non-modifier key value, empty signifies release.
+ */
+ private String mRegularHeld = "";
+
+ /**
+ * Stores the state of modifier keys. The contents of the map reflect the
+ * state of each switch, so the reference can be final but not its contents.
+ * An integer is used because keyboards usually have two separate keys for
+ * each modifier, both can be pressed and released independently.
+ */
+ private final Map<HardwareSwitch, Boolean> mModifiers = new HashMap<>();
+
+ private final Set<HandedSwitch> mHandedModifiers = new HashSet<>();
+
+ /**
+ * Creates a keyboard listener that publishes events when keys are either
+ * pressed or released. The constructor initializes all modifier keys to
+ * the released state because the native keyboard hook API does not offer
+ * a way to query what keys are currently pressed.
+ */
+ public KeyboardListener() {
+ for( final var key : modifierSwitches() ) {
+ mModifiers.put( key, FALSE );
+ }
+ }
+
+ /**
+ * Regular printable keys are passed into this method.
+ *
+ * @param e The native key event.
+ */
+ @Override
+ public void nativeKeyTyped( final NativeKeyEvent e ) {
+ if( isRegular( e ) ) {
+ String key = getDisplayText( e.getKeyChar() );
+
+ if( IS_OS_LINUX ) {
+ key = RAW_CODES.getOrDefault( e.getRawCode(), key );
+ }
+
+ dispatchRegular( mRegularHeld, key );
+ dispatchRegular( key, "" );
+ }
+ }
+
+ @Override
+ public void nativeKeyPressed( final NativeKeyEvent e ) {
+ dispatchModifiers( e, TRUE );
+
+ if( e.isActionKey() && isRegular( e ) && IS_OS_WINDOWS ) {
+ dispatchRegular( mRegularHeld, translate( e ) );
+ }
+ }
+
+ @Override
+ public void nativeKeyReleased( final NativeKeyEvent e ) {
+ dispatchModifiers( e, FALSE );
+
+ if( e.isActionKey() && isRegular( e ) && IS_OS_WINDOWS ) {
+ dispatchRegular( translate( e ), "" );
+ }
+ }
+
+ private String translate( final NativeKeyEvent e ) {
+ final var keyCode = e.getKeyCode();
+ final var text = NativeKeyEvent.getKeyText( keyCode );
+ return TRANSLATE.getOrDefault( text, text );
+ }
+
+ /**
+ * Sets the initial state of the modifiers.
+ */
+ public void initModifiers() {
+ for( final var key : mModifiers.keySet() ) {
+ final var state = mModifiers.get( key );
+
+ // All modifiers keys are "false" by default, so firing fake transition
+ // events from "true" to "false" will cause the GUI to repaint with the
+ // text label affixed to each key, drawn in the released state. This
+ // happens before the frame is set to visible.
+ tryFire( key, !state, state );
+ }
+ }
+
+ /**
+ * Dispatches the modifier key that corresponds to the raw key code from
+ * the given event. This is necessary to ensure that both left and right
+ * modifier keys return the same {@link HardwareSwitch} value.
+ *
+ * @param e The event containing a raw key code to look up.
+ */
+ private void dispatchModifiers(
+ final NativeKeyEvent e, final boolean pressed ) {
+ final var rawCode = e.getRawCode();
+ final Map<Integer, HandedSwitch> map;
+
+ if( IS_OS_WINDOWS ) {
+ map = MODIFIERS_WINDOWS;
+ }
+ else if( IS_OS_LINUX ) {
+ map = MODIFIERS_LINUX;
+ }
+ else {
+ return;
+ }
+
+ final var key = map.get( rawCode );
+
+ if( key != null ) {
+ if( pressed ) {
+ mHandedModifiers.add( key );
+ }
+ else {
+ mHandedModifiers.remove( key );
+ }
+
+ final var newHw = key.getHardwareSwitch();
+ final var counts = new HashMap<HardwareSwitch, Integer>();
+
+ mHandedModifiers.forEach(
+ modifier -> {
+ final var oldHw = modifier.getHardwareSwitch();
+ counts.put( oldHw, counts.getOrDefault( oldHw, 0 ) + 1 );
+ }
+ );
+
+ dispatchModifier( newHw, counts.get( newHw ) != null );
+ }
+ }
+
+ private boolean isRegular( final NativeKeyEvent e ) {
+ final var rawCode = e.getRawCode();
+
+ return !((MODIFIERS_LINUX.containsKey( rawCode ) && IS_OS_LINUX) ||
+ (MODIFIERS_WINDOWS.containsKey( rawCode ) && IS_OS_WINDOWS));
+ }
+
+ /**
+ * Notifies of any modifier state changes. There's a bug whereby this
+ * method is never called by the native library when both Left/Right Ctrl
+ * keys are pressed followed by pressing either Shift key. Similarly,
+ * holding both Left/Right Shift keys followed by pressing either Ctrl key
+ * fails to call this method.
+ *
+ * @param key Must be a modifier key.
+ * @param newState {@link Boolean#FALSE} means released, {@link Boolean#TRUE}
+ * means pressed.
+ */
+ private void dispatchModifier(
+ final HardwareSwitch key, final boolean newState ) {
+ final var oldState = mModifiers.get( key );
+
+ // Only fire the event if the state has changed.
+ tryFire( key, oldState, newState );
+ mModifiers.put( key, newState );
+ }
+
+ /**
+ * State for a regular (non-modifier) key has changed.
+ *
+ * @param o Previous key value.
+ * @param n Current key value.
+ */
+ private void dispatchRegular( final String o, final String n ) {
+ assert o != null;
+ assert n != null;
+
+ // Always fire the event, which permits double-key taps.
+ fire( KEY_REGULAR, o, n );
+ mRegularHeld = n;
+ }
+
+ private String getDisplayText( final char keyChar ) {
+ return CHAR_CODES.getOrDefault( keyChar, String.valueOf( keyChar ) );
}
}
src/main/java/com/whitemagicsoftware/kmcaster/listeners/MouseListener.java
*/
public final class MouseListener
- extends PropertyDispatcher<HardwareSwitch>
- implements NativeMouseInputListener, NativeMouseWheelListener {
+ extends PropertyDispatcher<HardwareSwitch>
+ implements NativeMouseInputListener, NativeMouseWheelListener {
private final static Map<Pair<Integer, Integer>, HardwareSwitch>
- SCROLL_CODES = Map.ofEntries(
- entry( new Pair<>( WHEEL_VERTICAL_DIRECTION, -1 ), MOUSE_SCROLL_U ),
- entry( new Pair<>( WHEEL_VERTICAL_DIRECTION, 1 ), MOUSE_SCROLL_D ),
- entry( new Pair<>( WHEEL_HORIZONTAL_DIRECTION, -1 ), MOUSE_SCROLL_L ),
- entry( new Pair<>( WHEEL_HORIZONTAL_DIRECTION, 1 ), MOUSE_SCROLL_R )
+ SCROLL_CODES = Map.ofEntries(
+ entry( new Pair<>( WHEEL_VERTICAL_DIRECTION, -1 ), MOUSE_SCROLL_U ),
+ entry( new Pair<>( WHEEL_VERTICAL_DIRECTION, 1 ), MOUSE_SCROLL_D ),
+ entry( new Pair<>( WHEEL_HORIZONTAL_DIRECTION, -1 ), MOUSE_SCROLL_L ),
+ entry( new Pair<>( WHEEL_HORIZONTAL_DIRECTION, 1 ), MOUSE_SCROLL_R )
);
}
- tryFire( scrollSwitch, mSwitches.get( scrollSwitch ), true );
- mSwitches.put( scrollSwitch, true );
+ if( scrollSwitch != null ) {
+ tryFire( scrollSwitch, mSwitches.get( scrollSwitch ), true );
+ mSwitches.put( scrollSwitch, true );
+ }
}
/**
* Called to send a mouse event to all listeners.
*
* @param e The mouse event that was most recently triggered.
* @param pressed {@code true} means pressed, {@code false} means released.
*/
private void dispatchButtonEvent(
- final NativeMouseEvent e, final boolean pressed ) {
+ final NativeMouseEvent e, final boolean pressed ) {
final var hwSwitch = getMouseSwitch( e );
* @param e Ignored.
*/
+ @Override
public void nativeMouseClicked( final NativeMouseEvent e ) {
}
/**
* Unused.
*
* @param e Ignored.
*/
+ @Override
public void nativeMouseMoved( final NativeMouseEvent e ) {
}
/**
* Unused.
*
* @param e Ignored.
*/
+ @Override
public void nativeMouseDragged( final NativeMouseEvent e ) {
}
src/main/java/com/whitemagicsoftware/kmcaster/ui/AutofitLabel.java
import javax.swing.*;
import java.awt.*;
+import java.awt.font.FontRenderContext;
+import java.awt.geom.AffineTransform;
import java.awt.geom.Rectangle2D;
-
-import static java.lang.Math.floor;
/**
public void transform( final int width, final int height ) {
setSize( width, height );
- setFont( computeScaledFont() );
+ setFont( computeScaledFontNew() );
final var bounds = getParentBounds();
transform( bounds.width, bounds.height );
}
-
- /**
- * Calculates a new {@link Font} size such that it fits within the bounds
- * of this label instance. This uses the label's current size, which must
- * be set prior to calling this method.
- *
- * @return A new {@link Font} instance that is guaranteed to write the given
- * string within the bounds of the given {@link Rectangle}.
- */
- private Font computeScaledFont() {
- final var g = getGraphics();
-
- if( g == null ) {
- return getFont();
- }
+ private Font computeScaledFontNew() {
+ final var font = getFont();
final var text = getText();
- final var dstWidthPx = getWidth();
- final var dstHeightPx = getHeight();
-
- // Derived using a binary search to minimize text width lookups.
- var scaledFont = getFont();
- var scaledPt = scaledFont.getSize();
- var minSizePt = 4;
- var maxSizePt = 100;
+ // Without the - 1 the word Esc fails to appear.
+ final var dstWidthPx = getWidth() - 1;
+ final var dstHeightPx = getHeight();
- while( maxSizePt - minSizePt > 1 ) {
- scaledFont = scaledFont.deriveFont( (float) scaledPt );
+ float shrink = 0;
- final var bounds = getTextExtents( text, scaledFont, g );
- final var fontWidthPx = (int) bounds.getWidth();
- final var fontHeightPx = (int) bounds.getHeight();
+ Rectangle2D newExtents;
+ Font newFont;
- if( (fontWidthPx > dstWidthPx) || (fontHeightPx > dstHeightPx) ) {
- maxSizePt = scaledPt;
- }
- else {
- minSizePt = scaledPt;
- }
+ do {
+ final var oldExtents = getTextExtents( text, font );
+ final var widthText = oldExtents.getWidth();
+ final var widthRatio = dstWidthPx / widthText;
+ final var widthFontSizeNew = (int) (font.getSize() * widthRatio);
+ final var widthFontSizeNorm =
+ (float) Math.min( widthFontSizeNew, dstHeightPx );
- scaledPt = (minSizePt + maxSizePt) / 2;
+ newFont = font.deriveFont( widthFontSizeNorm - shrink );
+ newExtents = getTextExtents( text, newFont );
+ shrink++;
}
-
- g.dispose();
-
- // Round down to guarantee fit.
- scaledFont = scaledFont.deriveFont( (float) floor( scaledPt ) );
-
- // Recompute the bounds of the label based on the text extents that fit.
- final var extents = getTextExtents( text, scaledFont, g );
- setSize( (int) extents.getWidth(), (int) extents.getHeight() );
+ while( newExtents.getHeight() > dstHeightPx );
- return scaledFont;
+ return newFont;
}
- /**
- * Helper method to determine the width and height of the text.
- *
- * @param text Text having a width and height to derive.
- * @param font Font used to render the next.
- * @param graphics Graphics context needed for calculating the text extents.
- * @return Text width and height.
- */
- private Rectangle2D getTextExtents(
- final String text, final Font font, final Graphics graphics ) {
- return getFontMetrics( font ).getStringBounds( text, graphics );
+ private Rectangle2D getTextExtents( final String text, final Font font ) {
+ final var transform = new AffineTransform();
+ final var context = new FontRenderContext( transform, true, true );
+ return font.getStringBounds( text, context );
}
return bounds == null
- ? mParentBounds = calculateBounds( getParent() )
- : bounds;
+ ? mParentBounds = calculateBounds( getParent() )
+ : bounds;
}
return new Rectangle(
- insets.left, insets.top,
- container.getWidth() - (insets.left + insets.right),
- container.getHeight() - (insets.top + insets.bottom)
+ insets.left, insets.top,
+ container.getWidth() - (insets.left + insets.right),
+ container.getHeight() - (insets.top + insets.bottom)
);
}
src/main/java/com/whitemagicsoftware/kmcaster/ui/Constants.java
import java.awt.*;
-import static java.awt.Font.BOLD;
-
/**
* Responsible for containing shared constants required by the GUI.
*/
public static final Color TRANSLUCENT = new Color( .2f, .2f, .2f, 0.5f );
-
- /**
- * DejaVu Sans is the only free, open, sans serif font that supports all
- * the Unicode blocks used by the application. The font size will be scaled
- * dynamically to the window size, but should be sufficiently large for the
- * autofit functionality to scale down as required.
- */
- public static final Font LABEL_FONT = new Font( "DejaVu Sans", BOLD, 100 );
/**
src/main/java/com/whitemagicsoftware/kmcaster/ui/TranslucentPanel.java
import java.awt.*;
-import static com.whitemagicsoftware.kmcaster.ui.Constants.TRANSLUCENT;
-import static com.whitemagicsoftware.kmcaster.ui.Constants.TRANSPARENT;
-
/**
* Renders a panel---and its borders---as a translucent colour.
*/
public final class TranslucentPanel extends JPanel {
- public TranslucentPanel() {
- setOpaque( true );
+ public TranslucentPanel( final int hgap, final int vgap ) {
+ final var layout = new FlowLayout();
+
+ layout.setHgap( hgap );
+ layout.setVgap( vgap );
+ setLayout( layout );
+ setOpaque( false );
}
- /**
- * An alpha composite is required so that the "resting" mouse image (i.e.,
- * no buttons pressed) will always be drawn such that any subsequent
- * button presses will be drawn on top.
- *
- * @param g The graphics context to draw the translucent border upon.
- */
@Override
public void paintComponent( final Graphics g ) {
- final var graphics = (Graphics2D) g;
- final var r = graphics.getClipBounds();
-
- // https://docs.oracle.com/javase/tutorial/2d/advanced/compositing.html
- graphics.setComposite( AlphaComposite.Src );
- graphics.setBackground( TRANSLUCENT );
- graphics.setColor( TRANSPARENT );
- graphics.fillRect( r.x, r.y, r.width, r.height );
+ final var g2 = (Graphics2D) g;
+ g2.setComposite( AlphaComposite.Clear );
+ g2.setColor( getBackground() );
+ final var r = g2.getClipBounds();
+ g2.fillRect( r.x, r.y, r.width, r.height );
+ super.paintComponent( g2 );
}
}
+
src/main/resources/fonts/DejaVuSans-Bold.ttf
Binary files differ
src/main/resources/fonts/DejaVuSans-BoldOblique.ttf
Binary files differ
src/main/resources/fonts/DejaVuSans-ExtraLight.ttf
Binary files differ
src/main/resources/fonts/DejaVuSans-Oblique.ttf
Binary files differ
src/main/resources/fonts/DejaVuSans.ttf
Binary files differ
src/main/resources/fonts/Inter.ttf
Binary files differ
src/main/resources/fonts/OFL.txt
+Copyright 2020 The Inter Project Authors (https://github.com/rsms/inter)
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
src/main/resources/images/key/dn/long.svg
-<svg height="60" viewBox="0 0 37.042 15.875" width="140" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><linearGradient id="a" gradientTransform="matrix(-.060888 0 0 .060336 56.497 -18.194)" gradientUnits="userSpaceOnUse" x1="338.63" x2="358.68" y1="522.48" y2="538.13"><stop offset="0" stop-color="#d6d6d6"/><stop offset="1" stop-color="#939393"/></linearGradient><linearGradient id="b" gradientTransform="matrix(.36493 0 0 .36162 -33.305 -67.568)" gradientUnits="userSpaceOnUse" x1="93.499" x2="97.32" y1="223.35" y2="225.96"><stop offset="0" stop-color="#656565"/><stop offset="1" stop-color="#939393"/></linearGradient><linearGradient id="c" gradientTransform="matrix(.36493 0 0 .36162 -33.305 -67.568)" gradientUnits="userSpaceOnUse" x1="186.6" x2="186.1" y1="190.18" y2="188.08"><stop offset="0" stop-color="#d6d6d6"/><stop offset="1" stop-color="#656565"/></linearGradient><linearGradient id="d" gradientTransform="matrix(.36493 0 0 .36162 -33.344 -67.568)" gradientUnits="userSpaceOnUse" x1="127.4" x2="167.04" y1="207.21" y2="207.21"><stop offset="0" stop-color="#d8d8d8"/><stop offset="1" stop-color="#b1b1b1"/></linearGradient><linearGradient id="e" gradientTransform="matrix(.36493 0 0 .36162 -33.344 -67.568)" gradientUnits="userSpaceOnUse" x1="97.58" x2="128.18" y1="202.35" y2="202.35"><stop offset="0" stop-color="#f1f1f1"/><stop offset="1" stop-color="#c1c1c1"/></linearGradient><g fill-rule="evenodd" stroke-width=".36327"><path d="m.84701 0h33.741c.46924 0 .84701.37434.84701.83932v10.724h-35.423l-.011539-10.724c-.0005474-.46498.37776-.83932.847-.83932z" fill="#656565"/><path d="m2.5208 13.795h31.832v2.0735h-31.832z" fill="#929292"/><path d="m32.91 1.1636h4.1317l.000004 10.408h-4.1317z" fill="#d6d6d6"/><path d="m33.878 11.228 3.1637.34396-.000004 3.0387c-.0015.78594-.63212 1.2375-1.2839 1.2647l-1.4053-.007-1.5509-3.5889z" fill="url(#a)"/><path d="m2.195 11.197-2.1835.36569-.011539 3.0474c.0016422.78594.63212 1.2375 1.2839 1.2647l1.4031-.01522.49205-3.5655z" fill="url(#b)"/><path d="m34.389 2.0256 2.653-.86194c-.10539-.82869-.6792-1.1252-1.4787-1.1421-.20536-.0043395-.37419-.01602-.59203-.019672-.21784-.0036886-.71487-.00035801-.71487-.00035801-.50121.097262-.89355.38179-1.1678.84836z" fill="url(#c)"/></g><rect fill="url(#d)" fill-rule="evenodd" height="12.812" ry=".97192" stroke="url(#e)" stroke-width=".26459" width="32.55" x="2.246" y=".95721"/><path d="m4.482 7.7355h2.4519v2.8124h3.065v-2.8147h2.4521l-3.9845-3.4309z" fill="none" stroke="#333" stroke-width=".77424"/></svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<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:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ height="60"
+ viewBox="0 0 37.042 15.875"
+ width="140"
+ version="1.1"
+ id="svg45"
+ sodipodi:docname="long.svg"
+ inkscape:version="1.0.1 (1.0.1+r73)">
+ <metadata
+ id="metadata51">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs49">
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient857"
+ id="radialGradient859"
+ cx="49.397331"
+ cy="30.762686"
+ fx="49.397331"
+ fy="30.762686"
+ r="26.048256"
+ gradientTransform="matrix(1.7285229,0,0,0.52396639,-67.45329,-7.9592963)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient857">
+ <stop
+ style="stop-color:#207bb3;stop-opacity:1;"
+ offset="0"
+ id="stop853" />
+ <stop
+ style="stop-color:#207bb3;stop-opacity:0;"
+ offset="1"
+ id="stop855" />
+ </linearGradient>
+ </defs>
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1371"
+ inkscape:window-height="906"
+ id="namedview47"
+ showgrid="false"
+ inkscape:zoom="6.0104076"
+ inkscape:cx="70.240313"
+ inkscape:cy="36.751365"
+ inkscape:window-x="226"
+ inkscape:window-y="76"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="svg45"
+ inkscape:document-rotation="0" />
+ <linearGradient
+ id="a"
+ gradientTransform="matrix(-.060888 0 0 .060336 56.497 -18.194)"
+ gradientUnits="userSpaceOnUse"
+ x1="338.63"
+ x2="358.68"
+ y1="522.48"
+ y2="538.13">
+ <stop
+ offset="0"
+ stop-color="#d6d6d6"
+ id="stop2" />
+ <stop
+ offset="1"
+ stop-color="#939393"
+ id="stop4" />
+ </linearGradient>
+ <linearGradient
+ id="b"
+ gradientTransform="matrix(.36493 0 0 .36162 -33.305 -67.568)"
+ gradientUnits="userSpaceOnUse"
+ x1="93.499"
+ x2="97.32"
+ y1="223.35"
+ y2="225.96">
+ <stop
+ offset="0"
+ stop-color="#656565"
+ id="stop7" />
+ <stop
+ offset="1"
+ stop-color="#939393"
+ id="stop9" />
+ </linearGradient>
+ <linearGradient
+ id="c"
+ gradientTransform="matrix(.36493 0 0 .36162 -33.305 -67.568)"
+ gradientUnits="userSpaceOnUse"
+ x1="186.6"
+ x2="186.1"
+ y1="190.18"
+ y2="188.08">
+ <stop
+ offset="0"
+ stop-color="#d6d6d6"
+ id="stop12" />
+ <stop
+ offset="1"
+ stop-color="#656565"
+ id="stop14" />
+ </linearGradient>
+ <linearGradient
+ id="d"
+ gradientTransform="matrix(.36493 0 0 .36162 -33.344 -67.568)"
+ gradientUnits="userSpaceOnUse"
+ x1="127.4"
+ x2="167.04"
+ y1="207.21"
+ y2="207.21">
+ <stop
+ offset="0"
+ stop-color="#d8d8d8"
+ id="stop17" />
+ <stop
+ offset="1"
+ stop-color="#b1b1b1"
+ id="stop19" />
+ </linearGradient>
+ <linearGradient
+ id="e"
+ gradientTransform="matrix(.36493 0 0 .36162 -33.344 -67.568)"
+ gradientUnits="userSpaceOnUse"
+ x1="97.58"
+ x2="128.18"
+ y1="202.35"
+ y2="202.35">
+ <stop
+ offset="0"
+ stop-color="#f1f1f1"
+ id="stop22" />
+ <stop
+ offset="1"
+ stop-color="#c1c1c1"
+ id="stop24" />
+ </linearGradient>
+ <rect
+ style="fill:#515151;fill-opacity:1;stroke:#191d22;stroke-width:0.381003;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke;stop-color:#000000"
+ id="rect1485"
+ width="34.603992"
+ height="14.324561"
+ x="1.263025"
+ y="0.72356796"
+ rx="1.2324586"
+ ry="1.2324586" />
+ <rect
+ style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:4.60133;stroke-linecap:round;stroke-linejoin:round;stop-color:#000000"
+ id="rect1489"
+ width="34.612663"
+ height="13.908047"
+ x="1.2190038"
+ y="1.1400833"
+ rx="1.2324586"
+ ry="1.2324586" />
+ <rect
+ style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:4.6062;stroke-linecap:round;stroke-linejoin:round;stop-color:#000000"
+ id="rect1487"
+ width="34.622524"
+ height="13.911588"
+ x="1.2190038"
+ y="0.72356796"
+ rx="1.2350657"
+ ry="1.2324586" />
+ <rect
+ style="fill:#38454f;fill-opacity:1;stroke:none;stroke-width:4.60133;stroke-linecap:round;stroke-linejoin:round;stop-color:#000000"
+ id="rect1487-3"
+ width="34.563709"
+ height="13.908046"
+ x="1.2848761"
+ y="1.1564845"
+ rx="1.2324585"
+ ry="1.2324585" />
+ <rect
+ style="fill:url(#radialGradient859);fill-opacity:1;stroke:none;stroke-width:4.60537;stroke-linecap:round;stroke-linejoin:round;stop-color:#000000"
+ id="rect851"
+ width="34.609047"
+ height="13.891645"
+ x="1.2226207"
+ y="1.1564845"
+ rx="1.2175721"
+ ry="1.2175721" />
+ <path
+ style="fill:none;stroke:#191d22;stroke-width:0.401112;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1"
+ d="M 6.7799304,9.5151136 V 5.5952191 l 1.290321,1.6110921"
+ id="path873" />
+ <path
+ style="fill:none;stroke:#191d22;stroke-width:0.401112;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1"
+ d="M 6.7799309,9.5151136 V 5.5952398 L 5.4896093,7.2063146"
+ id="path875" />
+ <circle
+ id="path854"
+ style="fill:#207bb3;stroke:#000000;stroke-width:0.264586"
+ cx="10.206966"
+ cy="-3.1620615"
+ r="0.0065741981" />
+</svg>
+
src/main/resources/images/key/dn/medium.svg
-<svg height="60" viewBox="0 0 100 60" width="100" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><linearGradient id="a" gradientTransform="matrix(14.788 0 0 6.0432 -.17414 -3.7931)" gradientUnits="userSpaceOnUse" x1="2.4162" x2="7.1659" y1="8.0492" y2="2.2273"><stop offset="0" stop-color="#cfcfcf"/><stop offset="1" stop-color="#efefef"/></linearGradient><linearGradient id="b" gradientTransform="matrix(-.22164 0 0 .22805 170.82 -68.757)" gradientUnits="userSpaceOnUse" x1="338.63" x2="358.68" y1="522.48" y2="538.13"><stop offset="0" stop-color="#d6d6d6"/><stop offset="1" stop-color="#939393"/></linearGradient><linearGradient id="c" gradientTransform="matrix(1.3284 0 0 1.3668 -262.48 -255.38)" gradientUnits="userSpaceOnUse" x1="199.83" x2="203.65" y1="223.35" y2="225.96"><stop offset="0" stop-color="#656565"/><stop offset="1" stop-color="#939393"/></linearGradient><linearGradient id="d" gradientTransform="matrix(1.3284 0 0 1.3668 -262.48 -255.38)" gradientUnits="userSpaceOnUse" x1="266.71" x2="266.2" y1="190.18" y2="188.08"><stop offset="0" stop-color="#d6d6d6"/><stop offset="1" stop-color="#656565"/></linearGradient><linearGradient id="e" gradientTransform="matrix(.47016 0 0 .68311 -202.03 -99.879)" gradientUnits="userSpaceOnUse" x1="506.55" x2="586.03" y1="186.96" y2="186.96"><stop offset="0" stop-color="#d8d8d8"/><stop offset="1" stop-color="#b1b1b1"/></linearGradient><linearGradient id="f" gradientTransform="matrix(.47016 0 0 .68311 -202.03 -99.879)" gradientUnits="userSpaceOnUse" x1="447.49" x2="524.77" y1="177.84" y2="177.84"><stop offset="0" stop-color="#f1f1f1"/><stop offset="1" stop-color="#c1c1c1"/></linearGradient><g fill-rule="evenodd"><path d="m11.25 3.6149h75.579c1.978 0 3.5702 1.6384 3.5702 3.6735v41.076c0 2.0352-1.5924 3.6734-3.5702 3.6734h-75.579c-1.978 0-3.5702-1.6384-3.5702-3.6734v-41.076c0-2.0352 1.5924-3.6735 3.5702-3.6735z" fill="url(#a)" stroke-width=".67197"/><path d="m3.0804.00658h86.838c1.7081 0 3.0832 1.4149 3.0832 3.1723v40.531h-92.963l-.041977-40.531c-.0013284-1.7574 1.3752-3.1723 3.0832-3.1723z" fill="#656565" stroke-width="1.3475"/><path d="m90.29 7.1823v41.112c0 1.719-1.2631 3.5587-2.9339 3.5587h-76.422v.75372h76.422c2.2851 0 3.8591-1.9614 3.8591-4.3125v-41.115h-.92518z" fill="#fff" stroke-width=".67197"/><g stroke-width="1.3475"><path d="m6.6406 52.136h83.766v7.837h-83.766z" fill="#929292"/><path d="m84.963 4.4077h15.04v39.338h-15.04z" fill="#d6d6d6"/><path d="m88.483 42.446 11.516 1.3v11.485c-.0066 2.9706-2.3011 4.6772-4.6737 4.78l-5.1153-.02651-5.6454-13.565z" fill="url(#b)"/><path d="m7.9955 42.323-7.9481 1.3821-.041977 11.518c.0053136 2.9706 2.3011 4.6772 4.6737 4.78l5.1076-.057542 1.7911-13.476z" fill="url(#c)"/><path d="m90.343 7.6607 9.6572-3.2578c-.38363-3.1322-2.4724-4.2529-5.3827-4.3166-.74758-.016402-1.3621-.060549-2.1551-.074354-.79296-.013941-2.6022-.0013531-2.6022-.0013531-1.8244.36761-3.2527 1.4431-4.251 3.2065z" fill="url(#d)"/></g><rect fill="url(#e)" height="48.531" ry="3.6816" stroke="url(#f)" width="84.092" x="7.9541" y="3.5739"/></g></svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<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:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ height="60"
+ viewBox="0 0 100 60"
+ width="100"
+ version="1.1"
+ id="svg2285"
+ sodipodi:docname="medium.svg"
+ inkscape:version="1.0.1 (1.0.1+r73)">
+ <metadata
+ id="metadata2291">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs2289">
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient857"
+ id="radialGradient859"
+ cx="40.950455"
+ cy="30.762686"
+ fx="40.950455"
+ fy="30.762686"
+ r="26.048256"
+ gradientTransform="matrix(2.129423,0,0,1.9804308,-37.347875,-30.083634)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient857">
+ <stop
+ style="stop-color:#207bb3;stop-opacity:1;"
+ offset="0"
+ id="stop853" />
+ <stop
+ style="stop-color:#207bb3;stop-opacity:0;"
+ offset="1"
+ id="stop855" />
+ </linearGradient>
+ </defs>
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1920"
+ inkscape:window-height="1007"
+ id="namedview2287"
+ showgrid="false"
+ inkscape:zoom="11.9"
+ inkscape:cx="51.554394"
+ inkscape:cy="31.903658"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg2285"
+ inkscape:document-rotation="0" />
+ <linearGradient
+ id="a"
+ gradientTransform="matrix(14.788 0 0 6.0432 -.17414 -3.7931)"
+ gradientUnits="userSpaceOnUse"
+ x1="2.4162"
+ x2="7.1659"
+ y1="8.0492"
+ y2="2.2273">
+ <stop
+ offset="0"
+ stop-color="#cfcfcf"
+ id="stop2233" />
+ <stop
+ offset="1"
+ stop-color="#efefef"
+ id="stop2235" />
+ </linearGradient>
+ <linearGradient
+ id="b"
+ gradientTransform="matrix(-.22164 0 0 .22805 170.82 -68.757)"
+ gradientUnits="userSpaceOnUse"
+ x1="338.63"
+ x2="358.68"
+ y1="522.48"
+ y2="538.13">
+ <stop
+ offset="0"
+ stop-color="#d6d6d6"
+ id="stop2238" />
+ <stop
+ offset="1"
+ stop-color="#939393"
+ id="stop2240" />
+ </linearGradient>
+ <linearGradient
+ id="c"
+ gradientTransform="matrix(1.3284 0 0 1.3668 -262.48 -255.38)"
+ gradientUnits="userSpaceOnUse"
+ x1="199.83"
+ x2="203.65"
+ y1="223.35"
+ y2="225.96">
+ <stop
+ offset="0"
+ stop-color="#656565"
+ id="stop2243" />
+ <stop
+ offset="1"
+ stop-color="#939393"
+ id="stop2245" />
+ </linearGradient>
+ <linearGradient
+ id="d"
+ gradientTransform="matrix(1.3284 0 0 1.3668 -262.48 -255.38)"
+ gradientUnits="userSpaceOnUse"
+ x1="266.71"
+ x2="266.2"
+ y1="190.18"
+ y2="188.08">
+ <stop
+ offset="0"
+ stop-color="#d6d6d6"
+ id="stop2248" />
+ <stop
+ offset="1"
+ stop-color="#656565"
+ id="stop2250" />
+ </linearGradient>
+ <linearGradient
+ id="e"
+ gradientTransform="matrix(.47016 0 0 .68311 -202.03 -99.879)"
+ gradientUnits="userSpaceOnUse"
+ x1="506.55"
+ x2="586.03"
+ y1="186.96"
+ y2="186.96">
+ <stop
+ offset="0"
+ stop-color="#d8d8d8"
+ id="stop2253" />
+ <stop
+ offset="1"
+ stop-color="#b1b1b1"
+ id="stop2255" />
+ </linearGradient>
+ <linearGradient
+ id="f"
+ gradientTransform="matrix(.47016 0 0 .68311 -202.03 -99.879)"
+ gradientUnits="userSpaceOnUse"
+ x1="447.49"
+ x2="524.77"
+ y1="177.84"
+ y2="177.84">
+ <stop
+ offset="0"
+ stop-color="#f1f1f1"
+ id="stop2258" />
+ <stop
+ offset="1"
+ stop-color="#c1c1c1"
+ id="stop2260" />
+ </linearGradient>
+ <rect
+ style="fill:#515151;fill-opacity:1;stroke:#191d22;stroke-width:1.44;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke;stop-color:#000000"
+ id="rect1485"
+ width="90.433556"
+ height="54.139587"
+ x="4.8561811"
+ y="2.7969778"
+ rx="4.6580687"
+ ry="4.6580687" />
+ <rect
+ style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:17.3907;stroke-linecap:round;stroke-linejoin:round;stop-color:#000000"
+ id="rect1489"
+ width="90.460846"
+ height="52.565369"
+ x="4.8561811"
+ y="2.7969778"
+ rx="4.6580687"
+ ry="4.6580687" />
+ <rect
+ style="fill:#38454f;fill-opacity:1;stroke:none;stroke-width:17.3907;stroke-linecap:round;stroke-linejoin:round;stop-color:#000000"
+ id="rect1487"
+ width="90.433556"
+ height="52.565369"
+ x="4.8561811"
+ y="4.3711963"
+ rx="4.6580687"
+ ry="4.6580687" />
+ <rect
+ style="fill:url(#radialGradient859);fill-opacity:1;stroke:none;stroke-width:17.3835;stroke-linecap:round;stroke-linejoin:round;stop-color:#000000"
+ id="rect851"
+ width="90.509346"
+ height="52.506119"
+ x="4.8561811"
+ y="4.3711963"
+ rx="4.9146519"
+ ry="4.9985018" />
+</svg>
+
src/main/resources/images/key/dn/short.svg
-<svg height="60" viewBox="0 0 66 60" width="66" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><linearGradient id="a" gradientTransform="matrix(1.3664 0 0 1.3668 -.000956 .000006)" gradientUnits="userSpaceOnUse" x1="42.147" x2="41.637" y1="3.3281" y2="1.2281"><stop offset="0" stop-color="#d6d6d6"/><stop offset="1" stop-color="#656565"/></linearGradient><linearGradient id="b" gradientTransform="matrix(1.3664 0 0 1.3668 -.000956 .000006)" gradientUnits="userSpaceOnUse" x1="2.228" x2="6.048" y1="36.498" y2="39.108"><stop offset="0" stop-color="#656565"/><stop offset="1" stop-color="#939393"/></linearGradient><linearGradient id="c" gradientTransform="matrix(-.22798 0 0 .22804 138.84 -68.763)" gradientUnits="userSpaceOnUse" x1="338.63" x2="358.68" y1="522.48" y2="538.13"><stop offset="0" stop-color="#d6d6d6"/><stop offset="1" stop-color="#939393"/></linearGradient><linearGradient id="d" gradientTransform="matrix(.48361 0 0 .68308 -207.56 -99.883)" gradientUnits="userSpaceOnUse" x1="461.97" x2="535.38" y1="186.96" y2="186.96"><stop offset="0" stop-color="#d8d8d8"/><stop offset="1" stop-color="#b1b1b1"/></linearGradient><linearGradient id="e" gradientTransform="matrix(.48361 0 0 .68308 -207.56 -99.883)" gradientUnits="userSpaceOnUse" x1="453.41" x2="483.79" y1="177.84" y2="177.84"><stop offset="0" stop-color="#f1f1f1"/><stop offset="1" stop-color="#c1c1c1"/></linearGradient><g fill-rule="evenodd"><g stroke-width="1.3666"><path d="m3.1712.00000553h56.527c1.7569 0 3.2896 1.4188 3.1714 3.1723v40.53h-62.826l-.043178-40.53c-.0013664-1.7574 1.4145-3.1723 3.1714-3.1723z" fill="#656565"/><path d="m6.823 52.131h50.636v7.8366h-50.636z" fill="#929292"/><path d="m50.529 4.3982h15.47v39.337h-15.47z" fill="#d6d6d6"/><path d="m54.154 42.435 11.846 1.3v11.485c-.0068 2.9705-2.3669 4.6771-4.8074 4.7798l-5.2615-.02652-5.8069-13.564z" fill="url(#c)"/><path d="m8.2184 42.32-8.1752 1.3821-.043178 11.518c.0054655 2.9705 2.3669 4.6771 4.8074 4.7798l5.2536-.05754 1.8423-13.476z" fill="url(#b)"/><path d="m56.066 7.6551 9.9332-3.2577c-.3946-3.1321-2.5431-4.2528-5.5366-4.3165-.76895-.016401-1.4011-.060548-2.2167-.07435-.81562-.013941-2.6766-.0013531-2.6766-.0013531-1.8766.3676-3.3457 1.443-4.3726 3.2064z" fill="url(#a)"/></g><rect fill="url(#d)" height="48.53" ry="3.6815" stroke="url(#e)" width="49.119" x="8.4405" y="3.5645"/></g></svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ height="60"
+ viewBox="0 0 66 60"
+ width="66"
+ version="1.1"
+ id="svg45"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <metadata
+ id="metadata51">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs49">
+ <linearGradient
+ id="linearGradient857">
+ <stop
+ style="stop-color:#207bb3;stop-opacity:1;"
+ offset="0"
+ id="stop853" />
+ <stop
+ style="stop-color:#207bb3;stop-opacity:0;"
+ offset="1"
+ id="stop855" />
+ </linearGradient>
+ <radialGradient
+ xlink:href="#linearGradient857"
+ id="radialGradient859"
+ cx="33.017212"
+ cy="30.762686"
+ fx="33.017212"
+ fy="30.762686"
+ r="26.048256"
+ gradientTransform="matrix(2.129423,0,0,1.9804308,-37.347875,-30.083634)"
+ gradientUnits="userSpaceOnUse" />
+ </defs>
+ <linearGradient
+ id="a"
+ gradientTransform="matrix(1.3664,0,0,1.3668,-9.56e-4,6e-6)"
+ gradientUnits="userSpaceOnUse"
+ x1="42.147"
+ x2="41.637"
+ y1="3.3281"
+ y2="1.2281">
+ <stop
+ offset="0"
+ stop-color="#d6d6d6"
+ id="stop2" />
+ <stop
+ offset="1"
+ stop-color="#656565"
+ id="stop4" />
+ </linearGradient>
+ <linearGradient
+ id="b"
+ gradientTransform="matrix(1.3664,0,0,1.3668,-9.56e-4,6e-6)"
+ gradientUnits="userSpaceOnUse"
+ x1="2.228"
+ x2="6.048"
+ y1="36.498"
+ y2="39.108">
+ <stop
+ offset="0"
+ stop-color="#656565"
+ id="stop7" />
+ <stop
+ offset="1"
+ stop-color="#939393"
+ id="stop9" />
+ </linearGradient>
+ <linearGradient
+ id="c"
+ gradientTransform="matrix(-0.22798,0,0,0.22804,138.84,-68.763)"
+ gradientUnits="userSpaceOnUse"
+ x1="338.63"
+ x2="358.68"
+ y1="522.48"
+ y2="538.13">
+ <stop
+ offset="0"
+ stop-color="#d6d6d6"
+ id="stop12" />
+ <stop
+ offset="1"
+ stop-color="#939393"
+ id="stop14" />
+ </linearGradient>
+ <linearGradient
+ id="d"
+ gradientTransform="matrix(0.48361,0,0,0.68308,-207.56,-99.883)"
+ gradientUnits="userSpaceOnUse"
+ x1="461.97"
+ x2="535.38"
+ y1="186.96"
+ y2="186.96">
+ <stop
+ offset="0"
+ stop-color="#d8d8d8"
+ id="stop17" />
+ <stop
+ offset="1"
+ stop-color="#b1b1b1"
+ id="stop19" />
+ </linearGradient>
+ <linearGradient
+ id="e"
+ gradientTransform="matrix(0.48361,0,0,0.68308,-207.56,-99.883)"
+ gradientUnits="userSpaceOnUse"
+ x1="453.41"
+ x2="483.79"
+ y1="177.84"
+ y2="177.84">
+ <stop
+ offset="0"
+ stop-color="#f1f1f1"
+ id="stop22" />
+ <stop
+ offset="1"
+ stop-color="#c1c1c1"
+ id="stop24" />
+ </linearGradient>
+ <rect
+ style="fill:#515151;fill-opacity:1;stroke:#191d22;stroke-width:1.44;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke;stop-color:#000000;font-variation-settings:normal;opacity:1;vector-effect:none;stroke-dashoffset:0;stop-opacity:1"
+ id="rect1485"
+ width="56.439072"
+ height="54.139587"
+ x="4.8561811"
+ y="2.796978"
+ rx="4.6580687"
+ ry="4.6580687" />
+ <rect
+ style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:17.3907;stroke-linecap:round;stroke-linejoin:round;stop-color:#000000"
+ id="rect1489"
+ width="56.439072"
+ height="52.565369"
+ x="4.8561811"
+ y="2.796978"
+ rx="4.6580687"
+ ry="4.6580687" />
+ <rect
+ style="fill:#38454f;fill-opacity:1;stroke:none;stroke-width:17.3907;stroke-linecap:round;stroke-linejoin:round;stop-color:#000000"
+ id="rect1487"
+ width="56.439072"
+ height="52.565369"
+ x="4.8561811"
+ y="4.3711967"
+ rx="4.6580687"
+ ry="4.6580687" />
+ <rect
+ style="fill:url(#radialGradient859);fill-opacity:1;stroke:none;stroke-width:17.3835;stroke-linecap:round;stroke-linejoin:round;stop-color:#000000"
+ id="rect851"
+ width="56.456268"
+ height="52.506119"
+ x="4.8561811"
+ y="4.3711967"
+ rx="4.9146519"
+ ry="4.9985018" />
+</svg>
+
src/main/resources/images/key/dn/sm-long.svg
-<svg height="60" viewBox="0 0 37.042 15.875" width="140" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><linearGradient id="a" gradientTransform="matrix(-.060888 0 0 .060336 56.497 -18.194)" gradientUnits="userSpaceOnUse" x1="338.63" x2="358.68" y1="522.48" y2="538.13"><stop offset="0" stop-color="#d6d6d6"/><stop offset="1" stop-color="#939393"/></linearGradient><linearGradient id="b" gradientTransform="matrix(.36493 0 0 .36162 -33.305 -67.568)" gradientUnits="userSpaceOnUse" x1="93.499" x2="97.32" y1="223.35" y2="225.96"><stop offset="0" stop-color="#656565"/><stop offset="1" stop-color="#939393"/></linearGradient><linearGradient id="c" gradientTransform="matrix(.36493 0 0 .36162 -33.305 -67.568)" gradientUnits="userSpaceOnUse" x1="186.6" x2="186.1" y1="190.18" y2="188.08"><stop offset="0" stop-color="#d6d6d6"/><stop offset="1" stop-color="#656565"/></linearGradient><linearGradient id="d" gradientTransform="matrix(.36493 0 0 .36162 -33.344 -67.568)" gradientUnits="userSpaceOnUse" x1="127.4" x2="167.04" y1="207.21" y2="207.21"><stop offset="0" stop-color="#d8d8d8"/><stop offset="1" stop-color="#b1b1b1"/></linearGradient><linearGradient id="e" gradientTransform="matrix(.36493 0 0 .36162 -33.344 -67.568)" gradientUnits="userSpaceOnUse" x1="97.58" x2="128.18" y1="202.35" y2="202.35"><stop offset="0" stop-color="#f1f1f1"/><stop offset="1" stop-color="#c1c1c1"/></linearGradient><g fill-rule="evenodd" stroke-width=".36327"><path d="m.84701 0h33.741c.46924 0 .84701.37434.84701.83932v10.724h-35.423l-.011539-10.724c-.0005474-.46498.37776-.83932.847-.83932z" fill="#656565"/><path d="m2.5208 13.795h31.832v2.0735h-31.832z" fill="#929292"/><path d="m32.91 1.1636h4.1317l.000004 10.408h-4.1317z" fill="#d6d6d6"/><path d="m33.878 11.228 3.1637.34396-.000004 3.0387c-.0015.78594-.63212 1.2375-1.2839 1.2647l-1.4053-.007-1.5509-3.5889z" fill="url(#a)"/><path d="m2.195 11.197-2.1835.36569-.011539 3.0474c.0016422.78594.63212 1.2375 1.2839 1.2647l1.4031-.01522.49205-3.5655z" fill="url(#b)"/><path d="m34.389 2.0256 2.653-.86194c-.10539-.82869-.6792-1.1252-1.4787-1.1421-.20536-.0043395-.37419-.01602-.59203-.019672-.21784-.0036886-.71487-.00035801-.71487-.00035801-.50121.097262-.89355.38179-1.1678.84836z" fill="url(#c)"/></g><rect fill="url(#d)" fill-rule="evenodd" height="12.812" ry=".97192" stroke="url(#e)" stroke-width=".26459" width="32.55" x="2.246" y=".95721"/><path d="m4.482 7.7355h2.4519v2.8124h3.065v-2.8147h2.4521l-3.9845-3.4309z" fill="none" stroke="#333" stroke-width=".77424"/></svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<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:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ height="60"
+ viewBox="0 0 37.042 15.875"
+ width="140"
+ version="1.1"
+ id="svg45"
+ sodipodi:docname="sm-long.svg"
+ inkscape:version="1.0.1 (1.0.1+r73)">
+ <metadata
+ id="metadata51">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs49">
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient857"
+ id="radialGradient859"
+ cx="49.397331"
+ cy="30.762686"
+ fx="49.397331"
+ fy="30.762686"
+ r="26.048256"
+ gradientTransform="matrix(1.7285229,0,0,0.52396639,-67.45329,-7.9592963)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient857">
+ <stop
+ style="stop-color:#207bb3;stop-opacity:1;"
+ offset="0"
+ id="stop853" />
+ <stop
+ style="stop-color:#207bb3;stop-opacity:0;"
+ offset="1"
+ id="stop855" />
+ </linearGradient>
+ </defs>
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1371"
+ inkscape:window-height="906"
+ id="namedview47"
+ showgrid="false"
+ inkscape:zoom="6.0104076"
+ inkscape:cx="70.240313"
+ inkscape:cy="36.751365"
+ inkscape:window-x="226"
+ inkscape:window-y="76"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="svg45"
+ inkscape:document-rotation="0" />
+ <linearGradient
+ id="a"
+ gradientTransform="matrix(-.060888 0 0 .060336 56.497 -18.194)"
+ gradientUnits="userSpaceOnUse"
+ x1="338.63"
+ x2="358.68"
+ y1="522.48"
+ y2="538.13">
+ <stop
+ offset="0"
+ stop-color="#d6d6d6"
+ id="stop2" />
+ <stop
+ offset="1"
+ stop-color="#939393"
+ id="stop4" />
+ </linearGradient>
+ <linearGradient
+ id="b"
+ gradientTransform="matrix(.36493 0 0 .36162 -33.305 -67.568)"
+ gradientUnits="userSpaceOnUse"
+ x1="93.499"
+ x2="97.32"
+ y1="223.35"
+ y2="225.96">
+ <stop
+ offset="0"
+ stop-color="#656565"
+ id="stop7" />
+ <stop
+ offset="1"
+ stop-color="#939393"
+ id="stop9" />
+ </linearGradient>
+ <linearGradient
+ id="c"
+ gradientTransform="matrix(.36493 0 0 .36162 -33.305 -67.568)"
+ gradientUnits="userSpaceOnUse"
+ x1="186.6"
+ x2="186.1"
+ y1="190.18"
+ y2="188.08">
+ <stop
+ offset="0"
+ stop-color="#d6d6d6"
+ id="stop12" />
+ <stop
+ offset="1"
+ stop-color="#656565"
+ id="stop14" />
+ </linearGradient>
+ <linearGradient
+ id="d"
+ gradientTransform="matrix(.36493 0 0 .36162 -33.344 -67.568)"
+ gradientUnits="userSpaceOnUse"
+ x1="127.4"
+ x2="167.04"
+ y1="207.21"
+ y2="207.21">
+ <stop
+ offset="0"
+ stop-color="#d8d8d8"
+ id="stop17" />
+ <stop
+ offset="1"
+ stop-color="#b1b1b1"
+ id="stop19" />
+ </linearGradient>
+ <linearGradient
+ id="e"
+ gradientTransform="matrix(.36493 0 0 .36162 -33.344 -67.568)"
+ gradientUnits="userSpaceOnUse"
+ x1="97.58"
+ x2="128.18"
+ y1="202.35"
+ y2="202.35">
+ <stop
+ offset="0"
+ stop-color="#f1f1f1"
+ id="stop22" />
+ <stop
+ offset="1"
+ stop-color="#c1c1c1"
+ id="stop24" />
+ </linearGradient>
+ <rect
+ style="fill:#515151;fill-opacity:1;stroke:#191d22;stroke-width:0.381003;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke;stop-color:#000000"
+ id="rect1485"
+ width="34.603992"
+ height="14.324561"
+ x="1.263025"
+ y="0.72356784"
+ rx="1.2324586"
+ ry="1.2324586" />
+ <rect
+ style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:4.60133;stroke-linecap:round;stroke-linejoin:round;stop-color:#000000"
+ id="rect1489"
+ width="34.612663"
+ height="13.908047"
+ x="1.2190038"
+ y="1.1400833"
+ rx="1.2324586"
+ ry="1.2324586" />
+ <rect
+ style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:4.6062;stroke-linecap:round;stroke-linejoin:round;stop-color:#000000"
+ id="rect1487"
+ width="34.622524"
+ height="13.911588"
+ x="1.2190038"
+ y="0.72356796"
+ rx="1.2350657"
+ ry="1.2324586" />
+ <rect
+ style="fill:#38454f;fill-opacity:1;stroke:none;stroke-width:4.60133;stroke-linecap:round;stroke-linejoin:round;stop-color:#000000"
+ id="rect1487-3"
+ width="34.563709"
+ height="13.908046"
+ x="1.2848761"
+ y="1.1564845"
+ rx="1.2324585"
+ ry="1.2324585" />
+ <rect
+ style="fill:url(#radialGradient859);fill-opacity:1;stroke:none;stroke-width:4.60537;stroke-linecap:round;stroke-linejoin:round;stop-color:#000000"
+ id="rect851"
+ width="34.609047"
+ height="13.891645"
+ x="1.2226207"
+ y="1.1564845"
+ rx="1.2175721"
+ ry="1.2175721" />
+ <path
+ style="fill:none;stroke:#191d22;stroke-width:0.401112;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1"
+ d="M 6.7799304,9.5151136 V 5.5952191 l 1.290321,1.6110921"
+ id="path873" />
+ <path
+ style="fill:none;stroke:#191d22;stroke-width:0.401112;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1"
+ d="M 6.7799309,9.5151136 V 5.5952398 L 5.4896093,7.2063146"
+ id="path875" />
+ <circle
+ id="path854"
+ style="fill:#207bb3;stroke:#000000;stroke-width:0.264586"
+ cx="10.206966"
+ cy="-3.1620615"
+ r="0.0065741981" />
+</svg>
+
src/main/resources/images/key/up/long.svg
-<svg height="60" viewBox="0 0 37.042 15.875" width="140" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><linearGradient id="a" gradientTransform="matrix(.36493 0 0 .36162 -33.344 -67.568)" gradientUnits="userSpaceOnUse" x1="97.58" x2="128.18" y1="202.35" y2="202.35"><stop offset="0" stop-color="#fafafa"/><stop offset="1" stop-color="#f1f1f1"/></linearGradient><g fill="#e5e5e5" fill-rule="evenodd" stroke-width=".36327"><path d="m.84701 0h33.741c.46924 0 .84701.37434.84701.83932v10.724h-35.423l-.011539-10.724c-.0005474-.46498.37776-.83932.847-.83932z"/><path d="m2.5208 13.795h31.832v2.0735h-31.832z"/><path d="m32.91 1.1636h4.1317l.000004 10.408h-4.1317z"/><path d="m33.878 11.228 3.1637.34396-.000004 3.0387c-.0015.78594-.63212 1.2375-1.2839 1.2647l-1.4053-.007-1.5509-3.5889z"/><path d="m2.195 11.197-2.1835.36569-.011539 3.0474c.0016422.78594.63212 1.2375 1.2839 1.2647l1.4031-.01522.49205-3.5655z"/><path d="m34.389 2.0256 2.653-.86194c-.10539-.82869-.6792-1.1252-1.4787-1.1421-.20536-.0043395-.37419-.01602-.59203-.019672-.21784-.0036886-.71487-.00035801-.71487-.00035801-.50121.097262-.89355.38179-1.1678.84836z"/></g><rect fill="#f8f8f8" fill-rule="evenodd" height="12.812" ry=".97192" stroke="url(#a)" stroke-width=".26459" width="32.55" x="2.246" y=".95721"/><path d="m4.482 7.7355h2.4519v2.8124h3.065v-2.8147h2.4521l-3.9845-3.4309z" fill="none" stroke="#e5e5e5" stroke-width=".77424"/></svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<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"
+ height="60"
+ viewBox="0 0 37.042 15.875"
+ width="140"
+ version="1.1"
+ id="svg25"
+ sodipodi:docname="long.svg"
+ inkscape:version="1.0.1 (1.0.1+r73)">
+ <metadata
+ id="metadata31">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs29" />
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1920"
+ inkscape:window-height="1007"
+ id="namedview27"
+ showgrid="false"
+ inkscape:zoom="6.0104076"
+ inkscape:cx="77.171317"
+ inkscape:cy="22.765944"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg25"
+ inkscape:document-rotation="0" />
+ <linearGradient
+ id="a"
+ gradientTransform="matrix(.36493 0 0 .36162 -33.344 -67.568)"
+ gradientUnits="userSpaceOnUse"
+ x1="97.58"
+ x2="128.18"
+ y1="202.35"
+ y2="202.35">
+ <stop
+ offset="0"
+ stop-color="#fafafa"
+ id="stop2" />
+ <stop
+ offset="1"
+ stop-color="#f1f1f1"
+ id="stop4" />
+ </linearGradient>
+ <g
+ id="g871"
+ transform="translate(-0.10116544)"
+ style="stroke-width:0.38100343;stroke-miterlimit:4;stroke-dasharray:none">
+ <rect
+ style="fill:#515151;fill-opacity:1;stroke:#191d22;stroke-width:0.38100343;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke;stop-color:#000000"
+ id="rect1485"
+ width="34.603992"
+ height="14.324561"
+ x="1.3201692"
+ y="0.72356796"
+ rx="1.2324586"
+ ry="1.2324586" />
+ <rect
+ style="fill:#546a79;fill-opacity:1;stroke:none;stroke-width:0.38100343;stroke-linecap:round;stroke-linejoin:round;stop-color:#000000;stroke-miterlimit:4;stroke-dasharray:none"
+ id="rect1489"
+ width="34.612663"
+ height="13.908047"
+ x="1.3201692"
+ y="1.1400833"
+ rx="1.2324586"
+ ry="1.2324586" />
+ <rect
+ style="fill:#38454f;fill-opacity:1;stroke:none;stroke-width:0.38100343;stroke-linecap:round;stroke-linejoin:round;stop-color:#000000;stroke-miterlimit:4;stroke-dasharray:none"
+ id="rect1487"
+ width="34.622524"
+ height="13.911588"
+ x="1.3201692"
+ y="0.72356796"
+ rx="1.2350657"
+ ry="1.2324586" />
+ </g>
+ <path
+ style="fill:none;stroke:#c2c2c2;stroke-width:0.40111194;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 6.7799306,9.5151139 V 5.5952192 l 1.2903209,1.611092"
+ id="path873" />
+ <path
+ style="fill:none;stroke:#c2c2c2;stroke-width:0.40111194;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 6.7799311,9.5151139 V 5.5952398 L 5.4896094,7.2063147"
+ id="path875" />
+</svg>
+
src/main/resources/images/key/up/medium.svg
-<svg height="60" viewBox="0 0 26.458 15.875" width="100" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><linearGradient id="a" gradientTransform="matrix(3.9124 0 0 1.5989 -.04718 -1.0031)" gradientUnits="userSpaceOnUse" x1="2.4162" x2="7.1659" y1="8.0492" y2="2.2273"><stop offset="0" stop-color="#cfcfcf"/><stop offset="1" stop-color="#efefef"/></linearGradient><linearGradient id="b" gradientTransform="matrix(.12439 0 0 .18074 -53.453 -26.428)" gradientUnits="userSpaceOnUse" x1="447.49" x2="524.77" y1="177.84" y2="177.84"><stop offset="0" stop-color="#fafafa"/><stop offset="1" stop-color="#f1f1f1"/></linearGradient><g fill-rule="evenodd"><path d="m2.9745.9572h19.997c.52333 0 .94461.43348.94461.97193v10.868c0 .53845-.4213.97191-.94461.97191h-19.997c-.52333 0-.94461-.43348-.94461-.97191v-10.868c0-.53845.4213-.97193.94461-.97193z" fill="url(#a)" stroke-width=".17779"/><path d="m.81575-.0000005h22.976c.45193 0 .81575.37434.81575.83932v10.724h-24.596l-.011106-10.724c-.00035147-.46498.36383-.83932.81575-.83932z" fill="#e5e5e5" stroke-width=".35651"/><path d="m23.89 1.8986v10.877c0 .45483-.33419.94156-.77625.94156h-20.219v.19942h20.219c.60458 0 1.021-.51892 1.021-1.141v-10.878h-.24478z" fill="#fff" stroke-width=".17779"/><g fill="#e5e5e5" stroke-width=".35651"><path d="m1.7551 13.795h22.163v2.0735h-22.163z"/><path d="m22.479 1.1636h3.9792v10.408h-3.9792z"/><path d="m23.411 11.228 3.047.34396v3.0387c-.0018.78594-.60881 1.2375-1.2366 1.2647l-1.3534-.007-1.4937-3.5889z"/><path d="m2.114 11.197-2.1029.36569-.011106 3.0474c.0014059.78594.6088 1.2375 1.2366 1.2647l1.3513-.01522.4739-3.5655z"/><path d="m23.903 2.0256 2.5551-.86194c-.1015-.82869-.65415-1.1252-1.4242-1.1421-.1978-.0043395-.3604-.01602-.5702-.019672-.2098-.0036886-.68849-.00035801-.68849-.00035801-.48272.097262-.86059.38179-1.1247.84836z"/></g><rect fill="#f8f8f8" height="12.84" ry=".97408" stroke="url(#b)" stroke-width=".26458" width="22.249" x="2.1045" y=".94301"/></g></svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<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"
+ height="60"
+ viewBox="0 0 26.458 15.875"
+ width="100"
+ version="1.1"
+ id="svg34"
+ sodipodi:docname="medium.svg"
+ inkscape:version="1.0.1 (1.0.1+r73)">
+ <metadata
+ id="metadata40">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs38" />
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1920"
+ inkscape:window-height="1007"
+ id="namedview36"
+ showgrid="false"
+ inkscape:zoom="5.95"
+ inkscape:cx="35.828494"
+ inkscape:cy="47.093793"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg34"
+ inkscape:document-rotation="0" />
+ <linearGradient
+ id="a"
+ gradientTransform="matrix(3.9124,0,0,1.5989,-0.04718,-1.0031)"
+ gradientUnits="userSpaceOnUse"
+ x1="2.4162"
+ x2="7.1659"
+ y1="8.0492"
+ y2="2.2273">
+ <stop
+ offset="0"
+ stop-color="#cfcfcf"
+ id="stop2" />
+ <stop
+ offset="1"
+ stop-color="#efefef"
+ id="stop4" />
+ </linearGradient>
+ <linearGradient
+ id="b"
+ gradientTransform="matrix(0.12439,0,0,0.18074,-53.453,-26.428)"
+ gradientUnits="userSpaceOnUse"
+ x1="447.49"
+ x2="524.77"
+ y1="177.84"
+ y2="177.84">
+ <stop
+ offset="0"
+ stop-color="#fafafa"
+ id="stop7" />
+ <stop
+ offset="1"
+ stop-color="#f1f1f1"
+ id="stop9" />
+ </linearGradient>
+ <rect
+ style="fill:#515151;fill-opacity:1;stroke:#191d22;stroke-width:0.381;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke;stop-color:#000000"
+ id="rect1485"
+ width="23.96541"
+ height="14.324432"
+ x="1.3443043"
+ y="0.74791998"
+ rx="1.2324474"
+ ry="1.2324474" />
+ <rect
+ style="fill:#546a79;fill-opacity:1;stroke:none;stroke-width:4.60129;stroke-linecap:round;stroke-linejoin:round;stop-color:#000000"
+ id="rect1489"
+ width="23.96541"
+ height="13.907921"
+ x="1.3443043"
+ y="1.1644316"
+ rx="1.2324474"
+ ry="1.2324474" />
+ <rect
+ style="fill:#38454f;fill-opacity:1;stroke:none;stroke-width:4.60615;stroke-linecap:round;stroke-linejoin:round;stop-color:#000000"
+ id="rect1487"
+ width="23.975403"
+ height="13.907921"
+ x="1.3443043"
+ y="0.74791998"
+ rx="1.2350546"
+ ry="1.2324474" />
+</svg>
+
src/main/resources/images/key/up/short.svg
-<svg height="60" viewBox="0 0 17.462 15.875" width="66" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><linearGradient id="a" gradientTransform="matrix(.12795 0 0 .18073 -54.916 -26.427)" gradientUnits="userSpaceOnUse" x1="479.34" x2="456.28" y1="177.84" y2="177.84"><stop offset="0" stop-color="#f1f1f1"/><stop offset="1" stop-color="#fafafa"/></linearGradient><g fill-rule="evenodd"><g fill="#e5e5e5" stroke-width=".36157"><path d="m.83906.00000146h14.956c.46485 0 .87037.3754.8391.83933v10.724h-16.623l-.011424-10.724c-.00036152-.46497.37425-.83933.83909-.83933z"/><path d="m1.8053 13.793h13.397v2.0734h-13.397z"/><path d="m13.369 1.1637h4.0932v10.408h-4.0932z"/><path d="m14.328 11.228 3.1342.34395v3.0386c-.0018.78595-.62623 1.2375-1.2719 1.2647l-1.3921-.007-1.5364-3.5889z"/><path d="m2.1745 11.197-2.163.36567-.011424 3.0474c.0014461.78595.62623 1.2375 1.2719 1.2647l1.39-.01522.48744-3.5655z"/><path d="m14.834 2.0254 2.6282-.86193c-.1044-.82869-.67287-1.1252-1.4649-1.1421-.20345-.0043395-.3707-.01602-.5865-.019672-.2158-.0036886-.70819-.000358-.70819-.000358-.49652.097262-.88522.3818-1.1569.84837z"/></g><rect fill="#f8f8f8" height="12.84" ry=".97407" stroke="url(#a)" stroke-width=".26458" width="12.996" x="2.233" y=".94311"/></g></svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<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:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ height="60"
+ viewBox="0 0 66 60"
+ width="66"
+ version="1.1"
+ id="svg45"
+ sodipodi:docname="short.svg"
+ inkscape:version="1.0.1 (1.0.1+r73)">
+ <metadata
+ id="metadata51">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs49" />
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1920"
+ inkscape:window-height="1007"
+ id="namedview47"
+ showgrid="false"
+ inkscape:zoom="6.0833333"
+ inkscape:cx="34.342776"
+ inkscape:cy="40.066267"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg45"
+ inkscape:document-rotation="0" />
+ <linearGradient
+ id="a"
+ gradientTransform="matrix(1.3664,0,0,1.3668,-9.56e-4,6e-6)"
+ gradientUnits="userSpaceOnUse"
+ x1="42.147"
+ x2="41.637"
+ y1="3.3281"
+ y2="1.2281">
+ <stop
+ offset="0"
+ stop-color="#d6d6d6"
+ id="stop2" />
+ <stop
+ offset="1"
+ stop-color="#656565"
+ id="stop4" />
+ </linearGradient>
+ <linearGradient
+ id="b"
+ gradientTransform="matrix(1.3664,0,0,1.3668,-9.56e-4,6e-6)"
+ gradientUnits="userSpaceOnUse"
+ x1="2.228"
+ x2="6.048"
+ y1="36.498"
+ y2="39.108">
+ <stop
+ offset="0"
+ stop-color="#656565"
+ id="stop7" />
+ <stop
+ offset="1"
+ stop-color="#939393"
+ id="stop9" />
+ </linearGradient>
+ <linearGradient
+ id="c"
+ gradientTransform="matrix(-0.22798,0,0,0.22804,138.84,-68.763)"
+ gradientUnits="userSpaceOnUse"
+ x1="338.63"
+ x2="358.68"
+ y1="522.48"
+ y2="538.13">
+ <stop
+ offset="0"
+ stop-color="#d6d6d6"
+ id="stop12" />
+ <stop
+ offset="1"
+ stop-color="#939393"
+ id="stop14" />
+ </linearGradient>
+ <linearGradient
+ id="d"
+ gradientTransform="matrix(0.48361,0,0,0.68308,-207.56,-99.883)"
+ gradientUnits="userSpaceOnUse"
+ x1="461.97"
+ x2="535.38"
+ y1="186.96"
+ y2="186.96">
+ <stop
+ offset="0"
+ stop-color="#d8d8d8"
+ id="stop17" />
+ <stop
+ offset="1"
+ stop-color="#b1b1b1"
+ id="stop19" />
+ </linearGradient>
+ <linearGradient
+ id="e"
+ gradientTransform="matrix(0.48361,0,0,0.68308,-207.56,-99.883)"
+ gradientUnits="userSpaceOnUse"
+ x1="453.41"
+ x2="483.79"
+ y1="177.84"
+ y2="177.84">
+ <stop
+ offset="0"
+ stop-color="#f1f1f1"
+ id="stop22" />
+ <stop
+ offset="1"
+ stop-color="#c1c1c1"
+ id="stop24" />
+ </linearGradient>
+ <image
+ width="320"
+ height="140.8"
+ preserveAspectRatio="none"
+ xlink:href="data:image/jpeg;base64,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 CxwiBhSwDwgBziAQzjDDDDDDDDAwwDDygByARgAjQxChTDiADzwwAzgzTAAwSSDjxizSAzCRCwjw wzDAAwwwwwwwwxDCAwyAzATCQiDRAwziSBCjDQxjyTDixRCwRjQgTCjhTCxyDjQwixTgTiCSizAw CSiARRAThCyhQTigQjCgxBChgAwDRTAhDRRTRyACgDhSSSACjhTBjywAwigxDzhDRgSDwiSRxxQT QggzzxzQDByQjABRDgzDQxyijzDDQRhjgRDAhxCQwTDRxgSBjCAwThAQjwRjzSQyDjCiiQByTiBh AAzQoByh7yDyYQihojBTSRDzDCCziSTjSDAyxjAhBCBizC6TBDbAxpogzZixhwxgBQAQhCgzRgRA BjDCQjSQDQiCQxxiRyziwziSDBiwCzigwyAjDQRTwDSCCQgDyBTwSTRSCTAxShBxDygDQCjhjChR hjSRjDygjgRBATDBzASARjyjiQDyySQTCzxiQgCxgTgzjgywxwwABRhDRRjTjCiBCARTAgjhSBxy wzQDAzTDCCSAwyDSQiSzr45TwzChyDhgTzxiQBSRARhyAxDSRwThjCDjDDjhAyQySADjCQBwjDDD RwSiDhQizSgzAyTQjSAQAiiwjRwAjCQzQSShRBggTSjDSTiRgDxwhiBSwDTjCxhjRTRzAjDBwSTD jAyBQCCDyDjgAzggwRCxxzwDzEHHgzw2yFkjgACQgAgRRzQgDQCxwiBAgDShDAATyoyhRQBDy7yy A4TzjyShAxSA1gSRFxED0DEA0wnyzBgADCQyzADwSxyxgBBSwDxQBgAiigzgASgAyzxQRQwACgzC HQg010ABUxDzmXhDCwhChDwygyiRjDBCQiTwAijyhzQRQwiiDxAhTSRShwADjDgxwgTzRwTBzzxD SBBTQATQhhBiCxzgQzQhwiDAhQzDgShCAwADwQDyhQAh3wmFQDEVTQjByyRCVQFl2ygxRDywhSiR RgQDhRSBiDz/0KAPEusKKHPOHIFOHJFPKGOLHSFCaOYJLIOEJHBLQIOCHKBEPIEBILLOKKFCGiDA KANKNCFADJPOFEMCBEPEPPDKPHMNHIAABIJMMGHICKOFPJJHMFEPOMGNCGIPJOANHAPFMFMCLECD FKJCMPPDNJPKEBJICFHAEKJAAHPFLXPOMDJPALHBIGJAJEOEADNFCKFAFCKPABIEJPLKFGPJfeMD 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 RNgXhEBUo4sWgNO6IZ0Y34lWinh9c//Z "
+ id="image1481"
+ x="-439.0166"
+ y="-55.616257" />
+ <rect
+ style="fill:#515151;fill-opacity:1;stroke:#191d22;stroke-width:1.44;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke;stop-color:#000000"
+ id="rect1485"
+ width="56.439072"
+ height="54.139587"
+ x="4.8561811"
+ y="2.796978"
+ rx="4.6580687"
+ ry="4.6580687" />
+ <rect
+ style="fill:#546a79;fill-opacity:1;stroke:none;stroke-width:17.3907;stroke-linecap:round;stroke-linejoin:round;stop-color:#000000"
+ id="rect1489"
+ width="56.439072"
+ height="52.565369"
+ x="4.8561811"
+ y="4.3711953"
+ rx="4.6580687"
+ ry="4.6580687" />
+ <rect
+ style="fill:#38454f;fill-opacity:1;stroke:none;stroke-width:17.3907;stroke-linecap:round;stroke-linejoin:round;stop-color:#000000"
+ id="rect1487"
+ width="56.439072"
+ height="52.565369"
+ x="4.8561811"
+ y="2.796978"
+ rx="4.6580687"
+ ry="4.6580687" />
+ <rect
+ style="fill:#515151;fill-opacity:1;stroke:#0b0b0b;stroke-width:3.93954;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke;stop-color:#000000"
+ id="rect3053"
+ width="56.439072"
+ height="54.139587"
+ x="4.8561811"
+ y="73.76429"
+ rx="4.6580687"
+ ry="4.6580687" />
+ <rect
+ style="fill:#525252;fill-opacity:1;stroke:none;stroke-width:17.3907;stroke-linecap:round;stroke-linejoin:round;stop-color:#000000"
+ id="rect3055"
+ width="56.439072"
+ height="52.565369"
+ x="4.8561811"
+ y="75.338509"
+ rx="4.6580687"
+ ry="4.6580687" />
+ <rect
+ style="fill:#3c3c3c;fill-opacity:1;stroke:none;stroke-width:17.3907;stroke-linecap:round;stroke-linejoin:round;stop-color:#000000"
+ id="rect3057"
+ width="56.439072"
+ height="52.565369"
+ x="4.8561811"
+ y="73.76429"
+ rx="4.6580687"
+ ry="4.6580687" />
+</svg>
+
src/main/resources/images/mouse/0.svg
-<?xml version="1.0" encoding="UTF-8"?>
-<svg version="1.1" viewBox="0 0 35 60" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
- <radialGradient id="a" cx="193.4" cy="181.62" r="68.141" gradientTransform="matrix(.13524 0 0 .34162 -6.0078 -47.415)" gradientUnits="userSpaceOnUse" spreadMethod="reflect" xlink:href="#b"/>
- <linearGradient id="b">
- <stop stop-color="#fff" offset="0"/>
- <stop stop-color="#666" offset="1"/>
- </linearGradient>
- <radialGradient id="c" cx="85.528" cy="170.14" r="252.08" gradientTransform="matrix(.14849 0 0 .25527 -6.4293 -35.807)" gradientUnits="userSpaceOnUse" spreadMethod="reflect" xlink:href="#b"/>
- <linearGradient id="d" x1="193.63" x2="193.63" y1="161.65" y2="162.42" gradientTransform="matrix(.13405 0 0 .2832 -6.2984 -36.608)" gradientUnits="userSpaceOnUse" spreadMethod="reflect">
- <stop stop-color="#333" offset="0"/>
- <stop stop-color="#fff" offset="1"/>
- </linearGradient>
- <radialGradient id="e" cx="158.03" cy="169.2" r="31.163" gradientTransform="matrix(.13493 0 0 .28136 -6.2984 -36.608)" gradientUnits="userSpaceOnUse" spreadMethod="reflect">
- <stop stop-color="#b3b3eb" stop-opacity="0" offset="0"/>
- <stop offset="1"/>
- </radialGradient>
- <path d="m17.503 59.729c-14.905 0-17.159-12.11-17.004-15.947 0.22946-3.6188 0.42034-18.176-0.23806-30.434 0.16776-13.396 11.35-13.076 17.24-13.076 5.8896 0 17.072-0.32021 17.24 13.076-0.65838 12.258-0.46751 26.815-0.23806 30.433 0.1542 3.8367-2.0993 15.947-17.004 15.947" fill="url(#c)" fill-rule="evenodd" stroke="#000" stroke-linejoin="round" stroke-opacity=".19772" stroke-width=".53116"/>
- <ellipse cx="17.498" cy="11.617" rx="3.1799" ry="8.0323" fill="url(#a)" fill-rule="evenodd"/>
- <g fill="none" stroke="#484848">
- <path d="m17.505 22.426c-8.1608 0-12.278 0.18287-14.374 0.37127-2.0963 0.1884-2.0388 0.39852-2.2514 0.40444" stroke-width=".53125"/>
- <path d="m17.504 22.426c8.1608 0 12.278 0.18287 14.374 0.37127 2.0963 0.1884 2.0388 0.39852 2.2514 0.40444" stroke-width=".53125"/>
- <path d="m17.498 0.54617v21.716" stroke-width=".53116"/>
- </g>
- <path d="m19.833 11.719a2.3354 4.9339 0 1 1-4.6708 0 2.3354 4.9339 0 1 1 4.6708 0z" fill="url(#d)" fill-rule="evenodd"/>
- <path d="m19.833 11.719a2.3354 4.9339 0 1 1-4.6708 0 2.3354 4.9339 0 1 1 4.6708 0z" fill="url(#e)" fill-rule="evenodd" stroke="#000" stroke-width=".10716"/>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ version="1.1"
+ viewBox="0 0 35 60"
+ id="svg35"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <metadata
+ id="metadata41">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs39">
+ <linearGradient
+ id="linearGradient857">
+ <stop
+ style="stop-color:#207bb3;stop-opacity:1;"
+ offset="0"
+ id="stop853" />
+ <stop
+ style="stop-color:#207bb3;stop-opacity:0;"
+ offset="1"
+ id="stop855" />
+ </linearGradient>
+ <radialGradient
+ xlink:href="#linearGradient857"
+ id="radialGradient859-3"
+ cx="49.397331"
+ cy="30.762686"
+ fx="49.397331"
+ fy="30.762686"
+ r="26.048256"
+ gradientTransform="matrix(6.5329411,0,0,1.9803276,-259.56016,-34.453032)"
+ gradientUnits="userSpaceOnUse" />
+ </defs>
+ <radialGradient
+ id="a"
+ cx="193.4"
+ cy="181.62"
+ r="68.141"
+ gradientTransform="matrix(0.13524,0,0,0.34162,53.700335,-47.415)"
+ gradientUnits="userSpaceOnUse"
+ spreadMethod="reflect"
+ xlink:href="#b" />
+ <linearGradient
+ id="b">
+ <stop
+ stop-color="#fff"
+ offset="0"
+ id="stop3" />
+ <stop
+ stop-color="#666"
+ offset="1"
+ id="stop5" />
+ </linearGradient>
+ <radialGradient
+ id="c"
+ cx="85.528"
+ cy="170.14"
+ r="252.08"
+ gradientTransform="matrix(0.14849,0,0,0.25527,53.278835,-35.807)"
+ gradientUnits="userSpaceOnUse"
+ spreadMethod="reflect"
+ xlink:href="#b" />
+ <linearGradient
+ id="d"
+ x1="193.63"
+ x2="193.63"
+ y1="161.65"
+ y2="162.42"
+ gradientTransform="matrix(0.13405,0,0,0.2832,53.409735,-36.608)"
+ gradientUnits="userSpaceOnUse"
+ spreadMethod="reflect">
+ <stop
+ stop-color="#333"
+ offset="0"
+ id="stop9" />
+ <stop
+ stop-color="#fff"
+ offset="1"
+ id="stop11" />
+ </linearGradient>
+ <radialGradient
+ id="e"
+ cx="158.03"
+ cy="169.2"
+ r="31.163"
+ gradientTransform="matrix(0.13493,0,0,0.28136,53.409735,-36.608)"
+ gradientUnits="userSpaceOnUse"
+ spreadMethod="reflect">
+ <stop
+ stop-color="#b3b3eb"
+ stop-opacity="0"
+ offset="0"
+ id="stop14" />
+ <stop
+ offset="1"
+ id="stop16" />
+ </radialGradient>
+ <g
+ id="g1768"
+ transform="translate(-0.14453,0.70410125)">
+ <path
+ id="path866"
+ style="font-variation-settings:normal;vector-effect:none;fill:#515151;fill-opacity:1;stroke:#191d22;stroke-width:1.44;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke;stop-color:#000000"
+ d="m 18.580078,1.7109375 c -0.561072,0 -0.935547,0.3725213 -0.935547,0.9335937 V 2.765625 C 15.016437,2.8575474 12.308826,3.2353258 9.5097656,3.9550781 6.6109774,4.3290905 4.3659808,6.571919 3.8984375,9.4707031 2.9633556,13.117512 4.4592025,18.261636 4.5527344,22.75 c 0.082543,2.867388 -0.2873906,5.732829 -1.0273438,8.507812 -0.748025,2.618302 -2.6193528,5.517231 -2.7128906,8.416016 0.009423,0.0046 0.0179461,0.0071 0.0273438,0.01172 C 0.8336548,39.806585 0.8125,39.92806 0.8125,40.048829 0.81238698,51.176316 7.6399338,56.88086 17.177734,56.88086 c 7.078461,0 13.168633,-4.950551 15.84375,-12.048828 0.01787,-0.0059 0.0328,-0.0096 0.05078,-0.01563 0.935085,-2.431242 1.404296,-5.14201 1.404296,-7.947265 0,-0.01577 -0.0019,-0.03111 -0.002,-0.04687 3.2e-5,-0.01581 0.002,-0.03106 0.002,-0.04687 0,-2.605335 -0.465425,-5.117256 -1.207031,-7.445313 L 33.728514,26.67774 C 34.08025,17.010956 34.337988,13.131238 33.353516,9.4707031 32.369044,5.8101685 30.443893,5.1706163 27.744141,3.9550781 25.105711,3.2075027 22.358885,2.8027241 19.513672,2.7460938 V 2.6445312 c 0,-0.5610724 -0.372521,-0.9335937 -0.933594,-0.9335937 z" />
+ <g
+ transform="matrix(0.10775349,0,0,0.10775349,0.52248818,1.8179189)"
+ id="g878">
+ <path
+ style="fill:#38454f"
+ d="M 167.576,77.102 V 7.678"
+ id="path874" />
+ </g>
+ <g
+ transform="matrix(0.10775349,0,0,0.10775349,0.52248818,3.972989)"
+ id="g884">
+ <path
+ style="fill:#38454f"
+ d="m 167.576,161.237 v 52.068"
+ id="path880" />
+ </g>
+ <g
+ id="g902"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g904"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g906"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g908"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g910"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g912"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g914"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g916"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g918"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g920"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g922"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g924"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g926"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g928"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g930"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <path
+ style="fill:#38454f;stroke-width:0.107753"
+ d="M 33.727694,26.676864 C 34.079428,17.010086 34.338262,13.131861 33.35379,9.4713259 32.369318,5.8107913 30.443033,5.1698857 27.743281,3.9543475 v 0 c -5.610507,-1.5896872 -11.688562,-1.6831098 -18.234043,0 v 0 C 6.610449,4.3283599 4.366268,6.5725418 3.898725,9.4713259 2.963643,13.118135 4.459799,18.261102 4.553331,22.749466 c 0.09353,2.898783 -0.187063,5.79746 -1.028613,8.602715 -0.748025,2.618193 -2.711725,5.704038 -2.711725,8.696244 -1.13e-4,11.127487 6.825969,16.831524 16.363769,16.831524 9.537793,0 17.298957,-8.976725 17.298957,-20.104213 0,-2.618193 -0.467542,-5.142965 -1.215567,-7.480677 z"
+ id="path875" />
+ <path
+ style="fill:#546a79;stroke-width:0.107753"
+ d="m 0.81288,39.674414 c 0.09354,-2.898785 1.9637,-5.797462 2.711725,-8.415764 0.748025,-2.805254 1.122144,-5.704039 1.028619,-8.602715 0,-0.09353 0,-0.18706 0,-0.18706 2.431131,8.883413 5.423444,21.694008 -3.740344,17.205539"
+ id="path877" />
+ <path
+ style="fill:#38454f;stroke-width:0.107753"
+ d="m 18.579387,21.346838 v 0 c 1.028613,0 1.870169,-0.841554 1.870169,-1.870169 v -7.480571 c 0,-1.028615 -0.841556,-1.870169 -1.870169,-1.870169 -1.028619,0 -1.870169,0.841554 -1.870169,1.870169 v 7.480678 c 0,1.028508 0.841657,1.870062 1.870169,1.870062"
+ id="path879" />
+ <path
+ id="path881"
+ style="fill:#546a79;stroke-width:0.107753"
+ d="m 18.580078,1.7109375 c -0.561073,0 -0.935547,0.3725213 -0.935547,0.9335937 v 6.7089844 c -1.104495,0.3729306 -1.871093,1.3852594 -1.871093,2.6425784 v 7.480468 c 0,1.257318 0.766598,2.269648 1.871093,2.642579 v 4.83789 c 0,0.561073 0.374475,0.935547 0.935547,0.935547 0.561073,0 0.933594,-0.374474 0.933594,-0.935547 v -4.83789 c 1.104495,-0.372927 1.871094,-1.385345 1.871094,-2.642579 v -7.480468 c 0,-1.257319 -0.766599,-2.2696478 -1.871094,-2.6425784 V 2.6445312 c 0,-0.5610724 -0.372522,-0.9335937 -0.933594,-0.9335937 z m 0,9.3496095 c 0.561069,0 0.933594,0.374475 0.933594,0.935547 v 7.480468 c 0,0.561074 -0.372525,0.935547 -0.933594,0.935547 -0.561075,0 -0.935547,-0.374473 -0.935547,-0.935547 v -7.480468 c 0,-0.561072 0.374472,-0.935547 0.935547,-0.935547 z" />
+ <path
+ style="fill:#38454f;stroke-width:0.107753"
+ d="M 18.579387,10.125928 V 2.6452502"
+ id="path883" />
+ <g
+ transform="matrix(0.10775349,0,0,0.10775349,0.522488,3.972989)"
+ id="g893">
+ <path
+ style="fill:#38454f"
+ d="m 167.576,161.237 v 52.068"
+ id="path889" />
+ </g>
+ <path
+ style="fill:#546a79;stroke-width:0.107753"
+ d="m 33.727694,26.676864 -0.187059,-0.18706 c -2.898786,6.358534 -10.753474,21.787432 -0.467543,18.327575 0.935085,-2.431242 1.402627,-5.142965 1.402627,-7.94822 0,-2.618194 -0.467542,-5.142966 -1.215567,-7.480679 z"
+ id="path895" />
+ </g>
</svg>
src/main/resources/images/mouse/1.svg
-<svg viewBox="0 0 35 60" xmlns="http://www.w3.org/2000/svg"><path d="m30.832-.1465c-5.9739.013925-15.673.51914-15.736 13.108.14454 3.3419.282 6.8965.38354 9.5863.49092-.11655-.000975-.74124 16.358-.74372v-5.7994c-1.1917-.19625-2.1301-2.3079-2.1301-4.8873s.93838-4.6911 2.1301-4.8873v-6.3763c-.32261-.00016042-.65533-.00082229-1.0057 0z" fill="#0093ff" fill-opacity=".25098" fill-rule="evenodd" transform="translate(-14.6 .6541)"/></svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ version="1.1"
+ viewBox="0 0 35 60"
+ id="svg35"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <metadata
+ id="metadata41">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs39">
+ <radialGradient
+ xlink:href="#linearGradient857"
+ id="radialGradient859"
+ cx="58.961323"
+ cy="40.84621"
+ fx="58.961323"
+ fy="40.84621"
+ r="26.048256"
+ gradientTransform="matrix(6.5329411,0,0,1.9803276,-295.30033,-77.26797)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ id="linearGradient857">
+ <stop
+ style="stop-color:#207bb3;stop-opacity:1;"
+ offset="0"
+ id="stop853" />
+ <stop
+ style="stop-color:#207bb3;stop-opacity:0;"
+ offset="1"
+ id="stop855" />
+ </linearGradient>
+ <radialGradient
+ xlink:href="#linearGradient857"
+ id="radialGradient859-3"
+ cx="49.397331"
+ cy="30.762686"
+ fx="49.397331"
+ fy="30.762686"
+ r="26.048256"
+ gradientTransform="matrix(6.5329411,0,0,1.9803276,-259.56016,-34.453032)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ xlink:href="#linearGradient857"
+ id="radialGradient2898"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-6.5329411,0,0,1.9803276,392.45854,-77.26797)"
+ cx="58.961323"
+ cy="40.84621"
+ fx="58.961323"
+ fy="40.84621"
+ r="26.048256" />
+ </defs>
+ <radialGradient
+ id="a"
+ cx="193.4"
+ cy="181.62"
+ r="68.141"
+ gradientTransform="matrix(0.13524,0,0,0.34162,53.700335,-47.415)"
+ gradientUnits="userSpaceOnUse"
+ spreadMethod="reflect"
+ xlink:href="#b" />
+ <linearGradient
+ id="b">
+ <stop
+ stop-color="#fff"
+ offset="0"
+ id="stop3" />
+ <stop
+ stop-color="#666"
+ offset="1"
+ id="stop5" />
+ </linearGradient>
+ <radialGradient
+ id="c"
+ cx="85.528"
+ cy="170.14"
+ r="252.08"
+ gradientTransform="matrix(0.14849,0,0,0.25527,53.278835,-35.807)"
+ gradientUnits="userSpaceOnUse"
+ spreadMethod="reflect"
+ xlink:href="#b" />
+ <linearGradient
+ id="d"
+ x1="193.63"
+ x2="193.63"
+ y1="161.65"
+ y2="162.42"
+ gradientTransform="matrix(0.13405,0,0,0.2832,53.409735,-36.608)"
+ gradientUnits="userSpaceOnUse"
+ spreadMethod="reflect">
+ <stop
+ stop-color="#333"
+ offset="0"
+ id="stop9" />
+ <stop
+ stop-color="#fff"
+ offset="1"
+ id="stop11" />
+ </linearGradient>
+ <radialGradient
+ id="e"
+ cx="158.03"
+ cy="169.2"
+ r="31.163"
+ gradientTransform="matrix(0.13493,0,0,0.28136,53.409735,-36.608)"
+ gradientUnits="userSpaceOnUse"
+ spreadMethod="reflect">
+ <stop
+ stop-color="#b3b3eb"
+ stop-opacity="0"
+ offset="0"
+ id="stop14" />
+ <stop
+ offset="1"
+ id="stop16" />
+ </radialGradient>
+ <g
+ id="g1768"
+ transform="translate(-0.14453,0.70410125)">
+ <path
+ id="path866"
+ style="font-variation-settings:normal;vector-effect:none;fill:#515151;fill-opacity:1;stroke:#191d22;stroke-width:1.44;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke;stop-color:#000000"
+ d="m 18.580078,1.7109375 c -0.561072,0 -0.935547,0.3725213 -0.935547,0.9335937 V 2.765625 C 15.016437,2.8575474 12.308826,3.2353258 9.5097656,3.9550781 6.6109774,4.3290905 4.3659808,6.571919 3.8984375,9.4707031 2.9633556,13.117512 4.4592025,18.261636 4.5527344,22.75 c 0.082543,2.867388 -0.2873906,5.732829 -1.0273438,8.507812 -0.748025,2.618302 -2.6193528,5.517231 -2.7128906,8.416016 0.009423,0.0046 0.0179461,0.0071 0.0273438,0.01172 C 0.8336548,39.806585 0.8125,39.92806 0.8125,40.048829 0.81238698,51.176316 7.6399338,56.88086 17.177734,56.88086 c 7.078461,0 13.168633,-4.950551 15.84375,-12.048828 0.01787,-0.0059 0.0328,-0.0096 0.05078,-0.01563 0.935085,-2.431242 1.404296,-5.14201 1.404296,-7.947265 0,-0.01577 -0.0019,-0.03111 -0.002,-0.04687 3.2e-5,-0.01581 0.002,-0.03106 0.002,-0.04687 0,-2.605335 -0.465425,-5.117256 -1.207031,-7.445313 L 33.728514,26.67774 C 34.08025,17.010956 34.337988,13.131238 33.353516,9.4707031 32.369044,5.8101685 30.443893,5.1706163 27.744141,3.9550781 25.105711,3.2075027 22.358885,2.8027241 19.513672,2.7460938 V 2.6445312 c 0,-0.5610724 -0.372521,-0.9335937 -0.933594,-0.9335937 z" />
+ <g
+ transform="matrix(0.10775349,0,0,0.10775349,0.52248818,1.8179189)"
+ id="g878">
+ <path
+ style="fill:#38454f"
+ d="M 167.576,77.102 V 7.678"
+ id="path874" />
+ </g>
+ <g
+ transform="matrix(0.10775349,0,0,0.10775349,0.52248818,3.972989)"
+ id="g884">
+ <path
+ style="fill:#38454f"
+ d="m 167.576,161.237 v 52.068"
+ id="path880" />
+ </g>
+ <g
+ id="g902-9"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g904-2"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g906-0"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g908-2"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g910-3"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g912-7"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g914-5"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g916-9"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g918-2"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g920-2"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g922-8"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g924-9"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g926-7"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g928-3"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g930-6"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <path
+ style="fill:#38454f;stroke-width:0.107753"
+ d="M 33.727694,26.676864 C 34.079428,17.010086 34.338262,13.131861 33.35379,9.4713259 32.369318,5.8107913 30.443033,5.1698857 27.743281,3.9543475 v 0 c -5.610507,-1.5896872 -11.688562,-1.6831098 -18.234043,0 v 0 C 6.610449,4.3283599 4.366268,6.5725418 3.898725,9.4713259 2.963643,13.118135 4.459799,18.261102 4.553331,22.749466 c 0.09353,2.898783 -0.187063,5.79746 -1.028613,8.602715 -0.748025,2.618193 -2.711725,5.704038 -2.711725,8.696244 -1.13e-4,11.127487 6.825969,16.831524 16.363769,16.831524 9.537793,0 17.298957,-8.976725 17.298957,-20.104213 0,-2.618193 -0.467542,-5.142965 -1.215567,-7.480677 z"
+ id="path875" />
+ <path
+ style="fill:#546a79;stroke-width:0.107753"
+ d="m 0.81288,39.674414 c 0.09354,-2.898785 1.9637,-5.797462 2.711725,-8.415764 0.748025,-2.805254 1.122144,-5.704039 1.028619,-8.602715 0,-0.09353 0,-0.18706 0,-0.18706 2.431131,8.883413 5.423444,21.694008 -3.740344,17.205539"
+ id="path877" />
+ <path
+ style="fill:#38454f;stroke-width:0.107753"
+ d="m 18.579387,21.346838 v 0 c 1.028613,0 1.870169,-0.841554 1.870169,-1.870169 v -7.480571 c 0,-1.028615 -0.841556,-1.870169 -1.870169,-1.870169 -1.028619,0 -1.870169,0.841554 -1.870169,1.870169 v 7.480678 c 0,1.028508 0.841657,1.870062 1.870169,1.870062"
+ id="path879" />
+ <path
+ id="path881"
+ style="fill:#546a79;stroke-width:0.107753"
+ d="m 18.580078,1.7109375 c -0.561073,0 -0.935547,0.3725213 -0.935547,0.9335937 v 6.7089844 c -1.104495,0.3729306 -1.871093,1.3852594 -1.871093,2.6425784 v 7.480468 c 0,1.257318 0.766598,2.269648 1.871093,2.642579 v 4.83789 c 0,0.561073 0.374475,0.935547 0.935547,0.935547 0.561073,0 0.933594,-0.374474 0.933594,-0.935547 v -4.83789 c 1.104495,-0.372927 1.871094,-1.385345 1.871094,-2.642579 v -7.480468 c 0,-1.257319 -0.766599,-2.2696478 -1.871094,-2.6425784 V 2.6445312 c 0,-0.5610724 -0.372522,-0.9335937 -0.933594,-0.9335937 z m 0,9.3496095 c 0.561069,0 0.933594,0.374475 0.933594,0.935547 v 7.480468 c 0,0.561074 -0.372525,0.935547 -0.933594,0.935547 -0.561075,0 -0.935547,-0.374473 -0.935547,-0.935547 v -7.480468 c 0,-0.561072 0.374472,-0.935547 0.935547,-0.935547 z" />
+ <path
+ style="fill:#38454f;stroke-width:0.107753"
+ d="M 18.579387,10.125928 V 2.6452502"
+ id="path883" />
+ <g
+ transform="matrix(0.10775349,0,0,0.10775349,0.522488,3.972989)"
+ id="g893">
+ <path
+ style="fill:#38454f"
+ d="m 167.576,161.237 v 52.068"
+ id="path889" />
+ </g>
+ <path
+ style="fill:#546a79;stroke-width:0.107753"
+ d="m 33.727694,26.676864 -0.187059,-0.18706 c -2.898786,6.358534 -10.753474,21.787432 -0.467543,18.327575 0.935085,-2.431242 1.402627,-5.142965 1.402627,-7.94822 0,-2.618194 -0.467542,-5.142966 -1.215567,-7.480679 z"
+ id="path895" />
+ </g>
+ <g
+ id="g902"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g904"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g906"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g908"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g910"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g912"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g914"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g916"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g918"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g920"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g922"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g924"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g926"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g928"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g930"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <path
+ id="path2896"
+ style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:url(#radialGradient2898);fill-opacity:1;stroke:none;stroke-width:17.406;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1"
+ d="m 17.601562,2.7675781 c -0.290297,0.010516 -0.576758,0.00745 -0.86914,0.025391 -0.02804,0.00131 -0.05597,0.00253 -0.08398,0.00391 -2.314589,0.1475445 -4.693632,0.5294835 -7.1386724,1.1582031 -0.061789,0.00797 -0.118504,0.029403 -0.1796875,0.039063 C 7.0748573,5.0056353 5.3673769,5.6568548 4.3085938,8.0488281 4.2603661,8.1704368 4.1995875,8.2849936 4.1582031,8.4101562 c -0.00176,0.00531 -0.00412,0.01031 -0.00586,0.015625 C 4.0417806,8.762961 3.956446,9.1110484 3.8984375,9.4707031 2.9633555,13.117512 4.4592024,18.261636 4.5527344,22.75 c 0.3500194,0.75344 1.0952029,3.878494 1.0952029,3.878494 3.9345381,0.804726 11.6830157,0.36855 11.9965937,-1.855056 v -2.595704 l -0.03125,-0.07227 c -1.086996,-0.381684 -1.839843,-1.384047 -1.839843,-2.628907 v -7.480468 c 0,-1.257319 0.766598,-2.2696478 1.871093,-2.6425784 V 6.9140625 Z" />
+</svg>
+
src/main/resources/images/mouse/2.svg
-<svg viewBox="0 0 35 60" xmlns="http://www.w3.org/2000/svg"><path d="m34.434 11.065a2.3354 4.9339 0 1 1 -4.6708 0 2.3354 4.9339 0 1 1 4.6708 0z" style="fill:#ff1400;fill-opacity:.50196;fill-rule:evenodd;stroke:#ff1400;stroke-opacity:.50196;stroke-width:.10716" transform="translate(-14.6 .6541)"/></svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ version="1.1"
+ viewBox="0 0 35 60"
+ id="svg35"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <metadata
+ id="metadata41">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs39">
+ <radialGradient
+ xlink:href="#linearGradient857"
+ id="radialGradient859"
+ cx="58.961323"
+ cy="40.84621"
+ fx="58.961323"
+ fy="40.84621"
+ r="26.048256"
+ gradientTransform="matrix(6.5329411,0,0,1.9803276,-355.30033,-77.26797)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ id="linearGradient857">
+ <stop
+ style="stop-color:#207bb3;stop-opacity:1;"
+ offset="0"
+ id="stop853" />
+ <stop
+ style="stop-color:#207bb3;stop-opacity:0;"
+ offset="1"
+ id="stop855" />
+ </linearGradient>
+ <radialGradient
+ xlink:href="#linearGradient857"
+ id="radialGradient859-3"
+ cx="49.397331"
+ cy="30.762686"
+ fx="49.397331"
+ fy="30.762686"
+ r="26.048256"
+ gradientTransform="matrix(6.5329411,0,0,1.9803276,-259.56016,-34.453032)"
+ gradientUnits="userSpaceOnUse" />
+ </defs>
+ <radialGradient
+ id="a"
+ cx="193.4"
+ cy="181.62"
+ r="68.141"
+ gradientTransform="matrix(0.13524,0,0,0.34162,53.700335,-47.415)"
+ gradientUnits="userSpaceOnUse"
+ spreadMethod="reflect"
+ xlink:href="#b" />
+ <linearGradient
+ id="b">
+ <stop
+ stop-color="#fff"
+ offset="0"
+ id="stop3" />
+ <stop
+ stop-color="#666"
+ offset="1"
+ id="stop5" />
+ </linearGradient>
+ <radialGradient
+ id="c"
+ cx="85.528"
+ cy="170.14"
+ r="252.08"
+ gradientTransform="matrix(0.14849,0,0,0.25527,53.278835,-35.807)"
+ gradientUnits="userSpaceOnUse"
+ spreadMethod="reflect"
+ xlink:href="#b" />
+ <linearGradient
+ id="d"
+ x1="193.63"
+ x2="193.63"
+ y1="161.65"
+ y2="162.42"
+ gradientTransform="matrix(0.13405,0,0,0.2832,53.409735,-36.608)"
+ gradientUnits="userSpaceOnUse"
+ spreadMethod="reflect">
+ <stop
+ stop-color="#333"
+ offset="0"
+ id="stop9" />
+ <stop
+ stop-color="#fff"
+ offset="1"
+ id="stop11" />
+ </linearGradient>
+ <radialGradient
+ id="e"
+ cx="158.03"
+ cy="169.2"
+ r="31.163"
+ gradientTransform="matrix(0.13493,0,0,0.28136,53.409735,-36.608)"
+ gradientUnits="userSpaceOnUse"
+ spreadMethod="reflect">
+ <stop
+ stop-color="#b3b3eb"
+ stop-opacity="0"
+ offset="0"
+ id="stop14" />
+ <stop
+ offset="1"
+ id="stop16" />
+ </radialGradient>
+ <g
+ id="g1768"
+ transform="translate(-0.14453,0.70410125)">
+ <path
+ id="path866"
+ style="font-variation-settings:normal;vector-effect:none;fill:#515151;fill-opacity:1;stroke:#191d22;stroke-width:1.44;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke;stop-color:#000000"
+ d="m 18.580078,1.7109375 c -0.561072,0 -0.935547,0.3725213 -0.935547,0.9335937 V 2.765625 C 15.016437,2.8575474 12.308826,3.2353258 9.5097656,3.9550781 6.6109774,4.3290905 4.3659808,6.571919 3.8984375,9.4707031 2.9633556,13.117512 4.4592025,18.261636 4.5527344,22.75 c 0.082543,2.867388 -0.2873906,5.732829 -1.0273438,8.507812 -0.748025,2.618302 -2.6193528,5.517231 -2.7128906,8.416016 0.009423,0.0046 0.0179461,0.0071 0.0273438,0.01172 C 0.8336548,39.806585 0.8125,39.92806 0.8125,40.048829 0.81238698,51.176316 7.6399338,56.88086 17.177734,56.88086 c 7.078461,0 13.168633,-4.950551 15.84375,-12.048828 0.01787,-0.0059 0.0328,-0.0096 0.05078,-0.01563 0.935085,-2.431242 1.404296,-5.14201 1.404296,-7.947265 0,-0.01577 -0.0019,-0.03111 -0.002,-0.04687 3.2e-5,-0.01581 0.002,-0.03106 0.002,-0.04687 0,-2.605335 -0.465425,-5.117256 -1.207031,-7.445313 L 33.728514,26.67774 C 34.08025,17.010956 34.337988,13.131238 33.353516,9.4707031 32.369044,5.8101685 30.443893,5.1706163 27.744141,3.9550781 25.105711,3.2075027 22.358885,2.8027241 19.513672,2.7460938 V 2.6445312 c 0,-0.5610724 -0.372521,-0.9335937 -0.933594,-0.9335937 z" />
+ <g
+ transform="matrix(0.10775349,0,0,0.10775349,0.52248818,1.8179189)"
+ id="g878">
+ <path
+ style="fill:#38454f"
+ d="M 167.576,77.102 V 7.678"
+ id="path874" />
+ </g>
+ <g
+ transform="matrix(0.10775349,0,0,0.10775349,0.52248818,3.972989)"
+ id="g884">
+ <path
+ style="fill:#38454f"
+ d="m 167.576,161.237 v 52.068"
+ id="path880" />
+ </g>
+ <g
+ id="g902-1"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g904-2"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g906-9"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g908-3"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g910-1"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g912-9"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g914-4"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g916-7"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g918-8"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g920-4"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g922-5"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g924-0"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g926-3"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g928-6"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g930-1"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <path
+ style="fill:#38454f;stroke-width:0.107753"
+ d="M 33.727694,26.676864 C 34.079428,17.010086 34.338262,13.131861 33.35379,9.4713259 32.369318,5.8107913 30.443033,5.1698857 27.743281,3.9543475 v 0 c -5.610507,-1.5896872 -11.688562,-1.6831098 -18.234043,0 v 0 C 6.610449,4.3283599 4.366268,6.5725418 3.898725,9.4713259 2.963643,13.118135 4.459799,18.261102 4.553331,22.749466 c 0.09353,2.898783 -0.187063,5.79746 -1.028613,8.602715 -0.748025,2.618193 -2.711725,5.704038 -2.711725,8.696244 -1.13e-4,11.127487 6.825969,16.831524 16.363769,16.831524 9.537793,0 17.298957,-8.976725 17.298957,-20.104213 0,-2.618193 -0.467542,-5.142965 -1.215567,-7.480677 z"
+ id="path875" />
+ <path
+ style="fill:#546a79;stroke-width:0.107753"
+ d="m 0.81288,39.674414 c 0.09354,-2.898785 1.9637,-5.797462 2.711725,-8.415764 0.748025,-2.805254 1.122144,-5.704039 1.028619,-8.602715 0,-0.09353 0,-0.18706 0,-0.18706 2.431131,8.883413 5.423444,21.694008 -3.740344,17.205539"
+ id="path877" />
+ <path
+ style="fill:#38454f;stroke-width:0.107753"
+ d="m 18.579387,21.346838 v 0 c 1.028613,0 1.870169,-0.841554 1.870169,-1.870169 v -7.480571 c 0,-1.028615 -0.841556,-1.870169 -1.870169,-1.870169 -1.028619,0 -1.870169,0.841554 -1.870169,1.870169 v 7.480678 c 0,1.028508 0.841657,1.870062 1.870169,1.870062"
+ id="path879" />
+ <path
+ id="path881"
+ style="fill:#546a79;stroke-width:0.107753"
+ d="m 18.580078,1.7109375 c -0.561073,0 -0.935547,0.3725213 -0.935547,0.9335937 v 6.7089844 c -1.104495,0.3729306 -1.871093,1.3852594 -1.871093,2.6425784 v 7.480468 c 0,1.257318 0.766598,2.269648 1.871093,2.642579 v 4.83789 c 0,0.561073 0.374475,0.935547 0.935547,0.935547 0.561073,0 0.933594,-0.374474 0.933594,-0.935547 v -4.83789 c 1.104495,-0.372927 1.871094,-1.385345 1.871094,-2.642579 v -7.480468 c 0,-1.257319 -0.766599,-2.2696478 -1.871094,-2.6425784 V 2.6445312 c 0,-0.5610724 -0.372522,-0.9335937 -0.933594,-0.9335937 z m 0,9.3496095 c 0.561069,0 0.933594,0.374475 0.933594,0.935547 v 7.480468 c 0,0.561074 -0.372525,0.935547 -0.933594,0.935547 -0.561075,0 -0.935547,-0.374473 -0.935547,-0.935547 v -7.480468 c 0,-0.561072 0.374472,-0.935547 0.935547,-0.935547 z" />
+ <path
+ style="fill:#38454f;stroke-width:0.107753"
+ d="M 18.579387,10.125928 V 2.6452502"
+ id="path883" />
+ <g
+ transform="matrix(0.10775349,0,0,0.10775349,0.522488,3.972989)"
+ id="g893">
+ <path
+ style="fill:#38454f"
+ d="m 167.576,161.237 v 52.068"
+ id="path889" />
+ </g>
+ <path
+ style="fill:#546a79;stroke-width:0.107753"
+ d="m 33.727694,26.676864 -0.187059,-0.18706 c -2.898786,6.358534 -10.753474,21.787432 -0.467543,18.327575 0.935085,-2.431242 1.402627,-5.142965 1.402627,-7.94822 0,-2.618194 -0.467542,-5.142966 -1.215567,-7.480679 z"
+ id="path895" />
+ </g>
+ <g
+ id="g902"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g904"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g906"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g908"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g910"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g912"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g914"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g916"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g918"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g920"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g922"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g924"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g926"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g928"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g930"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <path
+ id="path1596"
+ d="m 19.556641,2.7480469 -0.04297,4.1660156 v 2.4394531 c 1.104495,0.3729306 1.871094,1.3852594 1.871094,2.6425784 v 7.480468 c 0,1.24486 -0.752848,2.247223 -1.839844,2.628907 l -0.03125,0.07227 v 2.595704 c 0.414187,2.937032 13.836517,2.764166 14.257812,0.720703 C 34.095739,16.794984 34.291394,12.95799 33.353516,9.4707031 32.369044,5.8101685 30.443893,5.1706163 27.744141,3.9550781 25.119062,3.2112854 22.386416,2.8080152 19.556641,2.7480469 Z"
+ style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:url(#radialGradient859);fill-opacity:1;stroke:none;stroke-width:17.406;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1" />
+</svg>
+
src/main/resources/images/mouse/3.svg
-<svg viewBox="0 0 35 60" xmlns="http://www.w3.org/2000/svg"><path d="m33.358-.1465c5.9739.013925 15.673.51914 15.736 13.108-.14454 3.3419-.282 6.8965-.38354 9.5863-.49092-.11655.000975-.74124-16.358-.74372v-5.7994c1.1917-.19625 2.1301-2.3079 2.1301-4.8873s-.93838-4.6911-2.1301-4.8873v-6.3763c.32261-.00016042.65533-.00082229 1.0057 0z" fill="#40ff00" fill-opacity=".25098" fill-rule="evenodd" transform="translate(-14.6 .6541)"/></svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ version="1.1"
+ viewBox="0 0 35 60"
+ id="svg35"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <metadata
+ id="metadata41">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs39">
+ <linearGradient
+ id="linearGradient2970">
+ <stop
+ style="stop-color:#d62626;stop-opacity:0.99928355"
+ offset="0"
+ id="stop2966" />
+ <stop
+ style="stop-color:#207bb3;stop-opacity:0;"
+ offset="1"
+ id="stop2968" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient857">
+ <stop
+ style="stop-color:#207bb3;stop-opacity:1;"
+ offset="0"
+ id="stop853" />
+ <stop
+ style="stop-color:#207bb3;stop-opacity:0;"
+ offset="1"
+ id="stop855" />
+ </linearGradient>
+ <radialGradient
+ xlink:href="#linearGradient857"
+ id="radialGradient859-3"
+ cx="49.397331"
+ cy="30.762686"
+ fx="49.397331"
+ fy="30.762686"
+ r="26.048256"
+ gradientTransform="matrix(6.5329411,0,0,1.9803276,-259.56016,-34.453032)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ xlink:href="#linearGradient2970"
+ id="radialGradient2898"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-0.33598175,0,0,1.9803276,37.867384,-77.26797)"
+ cx="57.220184"
+ cy="46.302219"
+ fx="57.220184"
+ fy="46.302219"
+ r="26.048256" />
+ <radialGradient
+ xlink:href="#linearGradient857"
+ id="radialGradient2898-3"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-6.5329411,0,0,1.9803276,388.86635,-80.035548)"
+ cx="58.961323"
+ cy="40.84621"
+ fx="58.961323"
+ fy="40.84621"
+ r="26.048256" />
+ </defs>
+ <radialGradient
+ id="a"
+ cx="193.4"
+ cy="181.62"
+ r="68.141"
+ gradientTransform="matrix(0.13524,0,0,0.34162,53.700335,-47.415)"
+ gradientUnits="userSpaceOnUse"
+ spreadMethod="reflect"
+ xlink:href="#b" />
+ <linearGradient
+ id="b">
+ <stop
+ stop-color="#fff"
+ offset="0"
+ id="stop3" />
+ <stop
+ stop-color="#666"
+ offset="1"
+ id="stop5" />
+ </linearGradient>
+ <radialGradient
+ id="c"
+ cx="85.528"
+ cy="170.14"
+ r="252.08"
+ gradientTransform="matrix(0.14849,0,0,0.25527,53.278835,-35.807)"
+ gradientUnits="userSpaceOnUse"
+ spreadMethod="reflect"
+ xlink:href="#b" />
+ <linearGradient
+ id="d"
+ x1="193.63"
+ x2="193.63"
+ y1="161.65"
+ y2="162.42"
+ gradientTransform="matrix(0.13405,0,0,0.2832,53.409735,-36.608)"
+ gradientUnits="userSpaceOnUse"
+ spreadMethod="reflect">
+ <stop
+ stop-color="#333"
+ offset="0"
+ id="stop9" />
+ <stop
+ stop-color="#fff"
+ offset="1"
+ id="stop11" />
+ </linearGradient>
+ <radialGradient
+ id="e"
+ cx="158.03"
+ cy="169.2"
+ r="31.163"
+ gradientTransform="matrix(0.13493,0,0,0.28136,53.409735,-36.608)"
+ gradientUnits="userSpaceOnUse"
+ spreadMethod="reflect">
+ <stop
+ stop-color="#b3b3eb"
+ stop-opacity="0"
+ offset="0"
+ id="stop14" />
+ <stop
+ offset="1"
+ id="stop16" />
+ </radialGradient>
+ <g
+ id="g1768"
+ transform="translate(-0.14453,0.70410125)">
+ <path
+ id="path866"
+ style="font-variation-settings:normal;vector-effect:none;fill:#515151;fill-opacity:1;stroke:#191d22;stroke-width:1.44;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke;stop-color:#000000"
+ d="m 18.580078,1.7109375 c -0.561072,0 -0.935547,0.3725213 -0.935547,0.9335937 V 2.765625 C 15.016437,2.8575474 12.308826,3.2353258 9.5097656,3.9550781 6.6109774,4.3290905 4.3659808,6.571919 3.8984375,9.4707031 2.9633556,13.117512 4.4592025,18.261636 4.5527344,22.75 c 0.082543,2.867388 -0.2873906,5.732829 -1.0273438,8.507812 -0.748025,2.618302 -2.6193528,5.517231 -2.7128906,8.416016 0.009423,0.0046 0.0179461,0.0071 0.0273438,0.01172 C 0.8336548,39.806585 0.8125,39.92806 0.8125,40.048829 0.81238698,51.176316 7.6399338,56.88086 17.177734,56.88086 c 7.078461,0 13.168633,-4.950551 15.84375,-12.048828 0.01787,-0.0059 0.0328,-0.0096 0.05078,-0.01563 0.935085,-2.431242 1.404296,-5.14201 1.404296,-7.947265 0,-0.01577 -0.0019,-0.03111 -0.002,-0.04687 3.2e-5,-0.01581 0.002,-0.03106 0.002,-0.04687 0,-2.605335 -0.465425,-5.117256 -1.207031,-7.445313 L 33.728514,26.67774 C 34.08025,17.010956 34.337988,13.131238 33.353516,9.4707031 32.369044,5.8101685 30.443893,5.1706163 27.744141,3.9550781 25.105711,3.2075027 22.358885,2.8027241 19.513672,2.7460938 V 2.6445312 c 0,-0.5610724 -0.372521,-0.9335937 -0.933594,-0.9335937 z" />
+ <g
+ transform="matrix(0.10775349,0,0,0.10775349,0.52248818,1.8179189)"
+ id="g878-0">
+ <path
+ style="fill:#38454f"
+ d="M 167.576,77.102 V 7.678"
+ id="path874-6" />
+ </g>
+ <g
+ transform="matrix(0.10775349,0,0,0.10775349,0.52248818,3.972989)"
+ id="g884-3">
+ <path
+ style="fill:#38454f"
+ d="m 167.576,161.237 v 52.068"
+ id="path880-2" />
+ </g>
+ <g
+ id="g902-0"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g904-6"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g906-1"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g908-5"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g910-5"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g912-4"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g914-7"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g916-6"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g918-5"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g920-6"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g922-9"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g924-3"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g926-7"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g928-4"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g930-5"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <path
+ style="fill:#38454f;stroke-width:0.107753"
+ d="M 33.727694,26.676864 C 34.079428,17.010086 34.338262,13.131861 33.35379,9.4713259 32.369318,5.8107913 30.443033,5.1698857 27.743281,3.9543475 v 0 c -5.610507,-1.5896872 -11.688562,-1.6831098 -18.234043,0 v 0 C 6.610449,4.3283599 4.366268,6.5725418 3.898725,9.4713259 2.963643,13.118135 4.459799,18.261102 4.553331,22.749466 c 0.09353,2.898783 -0.187063,5.79746 -1.028613,8.602715 -0.748025,2.618193 -2.711725,5.704038 -2.711725,8.696244 -1.13e-4,11.127487 6.825969,16.831524 16.363769,16.831524 9.537793,0 17.298957,-8.976725 17.298957,-20.104213 0,-2.618193 -0.467542,-5.142965 -1.215567,-7.480677 z"
+ id="path875" />
+ <path
+ style="fill:#546a79;stroke-width:0.107753"
+ d="m 0.81288,39.674414 c 0.09354,-2.898785 1.9637,-5.797462 2.711725,-8.415764 0.748025,-2.805254 1.122144,-5.704039 1.028619,-8.602715 0,-0.09353 0,-0.18706 0,-0.18706 2.431131,8.883413 5.423444,21.694008 -3.740344,17.205539"
+ id="path877" />
+ <path
+ style="fill:#38454f;stroke-width:0.107753"
+ d="m 18.579387,21.346838 v 0 c 1.028613,0 1.870169,-0.841554 1.870169,-1.870169 v -7.480571 c 0,-1.028615 -0.841556,-1.870169 -1.870169,-1.870169 -1.028619,0 -1.870169,0.841554 -1.870169,1.870169 v 7.480678 c 0,1.028508 0.841657,1.870062 1.870169,1.870062"
+ id="path879-2" />
+ <path
+ id="path881"
+ style="fill:#546a79;stroke-width:0.107753"
+ d="m 18.580078,1.7109375 c -0.561073,0 -0.935547,0.3725213 -0.935547,0.9335937 v 6.7089844 c -1.104495,0.3729306 -1.871093,1.3852594 -1.871093,2.6425784 v 7.480468 c 0,1.257318 0.766598,2.269648 1.871093,2.642579 v 4.83789 c 0,0.561073 0.374475,0.935547 0.935547,0.935547 0.561073,0 0.933594,-0.374474 0.933594,-0.935547 v -4.83789 c 1.104495,-0.372927 1.871094,-1.385345 1.871094,-2.642579 v -7.480468 c 0,-1.257319 -0.766599,-2.2696478 -1.871094,-2.6425784 V 2.6445312 c 0,-0.5610724 -0.372522,-0.9335937 -0.933594,-0.9335937 z m 0,9.3496095 c 0.561069,0 0.933594,0.374475 0.933594,0.935547 v 7.480468 c 0,0.561074 -0.372525,0.935547 -0.933594,0.935547 -0.561075,0 -0.935547,-0.374473 -0.935547,-0.935547 v -7.480468 c 0,-0.561072 0.374472,-0.935547 0.935547,-0.935547 z" />
+ <path
+ style="fill:#38454f;stroke-width:0.107753"
+ d="M 18.579387,10.125928 V 2.6452502"
+ id="path883-5" />
+ <g
+ transform="matrix(0.10775349,0,0,0.10775349,0.522488,3.972989)"
+ id="g893-4">
+ <path
+ style="fill:#38454f"
+ d="m 167.576,161.237 v 52.068"
+ id="path889-7" />
+ </g>
+ <path
+ style="fill:#546a79;stroke-width:0.107753"
+ d="m 33.727694,26.676864 -0.187059,-0.18706 c -2.898786,6.358534 -10.753474,21.787432 -0.467543,18.327575 0.935085,-2.431242 1.402627,-5.142965 1.402627,-7.94822 0,-2.618194 -0.467542,-5.142966 -1.215567,-7.480679 z"
+ id="path895" />
+ </g>
+ <g
+ transform="matrix(0.10775349,0,0,0.10775349,0.52248818,1.8179189)"
+ id="g878">
+ <path
+ style="fill:#38454f"
+ d="M 167.576,77.102 V 7.678"
+ id="path874" />
+ </g>
+ <g
+ transform="matrix(0.10775349,0,0,0.10775349,0.52248818,3.972989)"
+ id="g884">
+ <path
+ style="fill:#38454f"
+ d="m 167.576,161.237 v 52.068"
+ id="path880" />
+ </g>
+ <g
+ id="g902"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g904"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g906"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g908"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g910"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g912"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g914"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g916"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g918"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g920"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g922"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g924"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g926"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g928"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g930"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <path
+ style="fill:#38454f;stroke-width:0.107753"
+ d="m 18.579387,21.346838 v 0 c 1.028613,0 1.870169,-0.841554 1.870169,-1.870169 v -7.480571 c 0,-1.028615 -0.841556,-1.870169 -1.870169,-1.870169 -1.028619,0 -1.870169,0.841554 -1.870169,1.870169 v 7.480678 c 0,1.028508 0.841657,1.870062 1.870169,1.870062"
+ id="path879" />
+ <path
+ style="fill:#38454f;stroke-width:0.107753"
+ d="M 18.579387,10.125928 V 2.6452502"
+ id="path883" />
+ <g
+ transform="matrix(0.10775349,0,0,0.10775349,0.522488,3.972989)"
+ id="g893">
+ <path
+ style="fill:#38454f"
+ d="m 167.576,161.237 v 52.068"
+ id="path889" />
+ </g>
+ <path
+ style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:url(#radialGradient2898);fill-opacity:1;stroke:none;stroke-width:17.406;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1"
+ d="m 18.579387,21.346838 v 0 c 1.028613,0 1.870169,-0.841554 1.870169,-1.870169 v -7.480571 c 0,-1.028615 -0.841556,-1.870169 -1.870169,-1.870169 -1.028619,0 -1.870169,0.841554 -1.870169,1.870169 v 7.480678 c 0,1.028508 0.841657,1.870062 1.870169,1.870062"
+ id="path870" />
+</svg>
+
src/main/resources/images/mouse/d.svg
-<svg viewBox="0 0 35 60" xmlns="http://www.w3.org/2000/svg"><path d="m9.4655 10.991h4.9429v-5.6695h6.1788v5.6743h4.9432l-8.0327 6.9166z" fill="#333" fill-opacity=".8"/></svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ version="1.1"
+ viewBox="0 0 35 60"
+ id="svg35"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <metadata
+ id="metadata41">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs39">
+ <linearGradient
+ id="linearGradient857">
+ <stop
+ style="stop-color:#207bb3;stop-opacity:1;"
+ offset="0"
+ id="stop853" />
+ <stop
+ style="stop-color:#207bb3;stop-opacity:0;"
+ offset="1"
+ id="stop855" />
+ </linearGradient>
+ <radialGradient
+ xlink:href="#linearGradient857"
+ id="radialGradient859-3"
+ cx="49.397331"
+ cy="30.762686"
+ fx="49.397331"
+ fy="30.762686"
+ r="26.048256"
+ gradientTransform="matrix(6.5329411,0,0,1.9803276,-259.56016,-34.453032)"
+ gradientUnits="userSpaceOnUse" />
+ </defs>
+ <radialGradient
+ id="a"
+ cx="193.4"
+ cy="181.62"
+ r="68.141"
+ gradientTransform="matrix(0.13524,0,0,0.34162,53.700335,-47.415)"
+ gradientUnits="userSpaceOnUse"
+ spreadMethod="reflect"
+ xlink:href="#b" />
+ <linearGradient
+ id="b">
+ <stop
+ stop-color="#fff"
+ offset="0"
+ id="stop3" />
+ <stop
+ stop-color="#666"
+ offset="1"
+ id="stop5" />
+ </linearGradient>
+ <radialGradient
+ id="c"
+ cx="85.528"
+ cy="170.14"
+ r="252.08"
+ gradientTransform="matrix(0.14849,0,0,0.25527,53.278835,-35.807)"
+ gradientUnits="userSpaceOnUse"
+ spreadMethod="reflect"
+ xlink:href="#b" />
+ <linearGradient
+ id="d"
+ x1="193.63"
+ x2="193.63"
+ y1="161.65"
+ y2="162.42"
+ gradientTransform="matrix(0.13405,0,0,0.2832,53.409735,-36.608)"
+ gradientUnits="userSpaceOnUse"
+ spreadMethod="reflect">
+ <stop
+ stop-color="#333"
+ offset="0"
+ id="stop9" />
+ <stop
+ stop-color="#fff"
+ offset="1"
+ id="stop11" />
+ </linearGradient>
+ <radialGradient
+ id="e"
+ cx="158.03"
+ cy="169.2"
+ r="31.163"
+ gradientTransform="matrix(0.13493,0,0,0.28136,53.409735,-36.608)"
+ gradientUnits="userSpaceOnUse"
+ spreadMethod="reflect">
+ <stop
+ stop-color="#b3b3eb"
+ stop-opacity="0"
+ offset="0"
+ id="stop14" />
+ <stop
+ offset="1"
+ id="stop16" />
+ </radialGradient>
+ <g
+ id="g1768"
+ transform="translate(-0.14453,0.70410125)">
+ <path
+ id="path866"
+ style="font-variation-settings:normal;vector-effect:none;fill:#515151;fill-opacity:1;stroke:#191d22;stroke-width:1.44;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke;stop-color:#000000"
+ d="m 18.580078,1.7109375 c -0.561072,0 -0.935547,0.3725213 -0.935547,0.9335937 V 2.765625 C 15.016437,2.8575474 12.308826,3.2353258 9.5097656,3.9550781 6.6109774,4.3290905 4.3659808,6.571919 3.8984375,9.4707031 2.9633556,13.117512 4.4592025,18.261636 4.5527344,22.75 c 0.082543,2.867388 -0.2873906,5.732829 -1.0273438,8.507812 -0.748025,2.618302 -2.6193528,5.517231 -2.7128906,8.416016 0.009423,0.0046 0.0179461,0.0071 0.0273438,0.01172 C 0.8336548,39.806585 0.8125,39.92806 0.8125,40.048829 0.81238698,51.176316 7.6399338,56.88086 17.177734,56.88086 c 7.078461,0 13.168633,-4.950551 15.84375,-12.048828 0.01787,-0.0059 0.0328,-0.0096 0.05078,-0.01563 0.935085,-2.431242 1.404296,-5.14201 1.404296,-7.947265 0,-0.01577 -0.0019,-0.03111 -0.002,-0.04687 3.2e-5,-0.01581 0.002,-0.03106 0.002,-0.04687 0,-2.605335 -0.465425,-5.117256 -1.207031,-7.445313 L 33.728514,26.67774 C 34.08025,17.010956 34.337988,13.131238 33.353516,9.4707031 32.369044,5.8101685 30.443893,5.1706163 27.744141,3.9550781 25.105711,3.2075027 22.358885,2.8027241 19.513672,2.7460938 V 2.6445312 c 0,-0.5610724 -0.372521,-0.9335937 -0.933594,-0.9335937 z" />
+ <g
+ transform="matrix(0.10775349,0,0,0.10775349,0.52248818,1.8179189)"
+ id="g878">
+ <path
+ style="fill:#38454f"
+ d="M 167.576,77.102 V 7.678"
+ id="path874" />
+ </g>
+ <g
+ transform="matrix(0.10775349,0,0,0.10775349,0.52248818,3.972989)"
+ id="g884-4">
+ <path
+ style="fill:#38454f"
+ d="m 167.576,161.237 v 52.068"
+ id="path880-4" />
+ </g>
+ <g
+ id="g902-3"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g904-0"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g906-7"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g908-8"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g910-6"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g912-8"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g914-8"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g916-4"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g918-3"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g920-1"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g922-4"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g924-9"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g926-2"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g928-0"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g930-6"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <path
+ style="fill:#38454f;stroke-width:0.107753"
+ d="M 33.727694,26.676864 C 34.079428,17.010086 34.338262,13.131861 33.35379,9.4713259 32.369318,5.8107913 30.443033,5.1698857 27.743281,3.9543475 v 0 c -5.610507,-1.5896872 -11.688562,-1.6831098 -18.234043,0 v 0 C 6.610449,4.3283599 4.366268,6.5725418 3.898725,9.4713259 2.963643,13.118135 4.459799,18.261102 4.553331,22.749466 c 0.09353,2.898783 -0.187063,5.79746 -1.028613,8.602715 -0.748025,2.618193 -2.711725,5.704038 -2.711725,8.696244 -1.13e-4,11.127487 6.825969,16.831524 16.363769,16.831524 9.537793,0 17.298957,-8.976725 17.298957,-20.104213 0,-2.618193 -0.467542,-5.142965 -1.215567,-7.480677 z"
+ id="path875" />
+ <path
+ style="fill:#546a79;stroke-width:0.107753"
+ d="m 0.81288,39.674414 c 0.09354,-2.898785 1.9637,-5.797462 2.711725,-8.415764 0.748025,-2.805254 1.122144,-5.704039 1.028619,-8.602715 0,-0.09353 0,-0.18706 0,-0.18706 2.431131,8.883413 5.423444,21.694008 -3.740344,17.205539"
+ id="path877" />
+ <path
+ style="fill:#38454f;stroke-width:0.107753"
+ d="m 18.579387,21.346838 v 0 c 1.028613,0 1.870169,-0.841554 1.870169,-1.870169 v -7.480571 c 0,-1.028615 -0.841556,-1.870169 -1.870169,-1.870169 -1.028619,0 -1.870169,0.841554 -1.870169,1.870169 v 7.480678 c 0,1.028508 0.841657,1.870062 1.870169,1.870062"
+ id="path879" />
+ <path
+ id="path881"
+ style="fill:#546a79;stroke-width:0.107753"
+ d="m 18.580078,1.7109375 c -0.561073,0 -0.935547,0.3725213 -0.935547,0.9335937 v 6.7089844 c -1.104495,0.3729306 -1.871093,1.3852594 -1.871093,2.6425784 v 7.480468 c 0,1.257318 0.766598,2.269648 1.871093,2.642579 v 4.83789 c 0,0.561073 0.374475,0.935547 0.935547,0.935547 0.561073,0 0.933594,-0.374474 0.933594,-0.935547 v -4.83789 c 1.104495,-0.372927 1.871094,-1.385345 1.871094,-2.642579 v -7.480468 c 0,-1.257319 -0.766599,-2.2696478 -1.871094,-2.6425784 V 2.6445312 c 0,-0.5610724 -0.372522,-0.9335937 -0.933594,-0.9335937 z m 0,9.3496095 c 0.561069,0 0.933594,0.374475 0.933594,0.935547 v 7.480468 c 0,0.561074 -0.372525,0.935547 -0.933594,0.935547 -0.561075,0 -0.935547,-0.374473 -0.935547,-0.935547 v -7.480468 c 0,-0.561072 0.374472,-0.935547 0.935547,-0.935547 z" />
+ <path
+ style="fill:#38454f;stroke-width:0.107753"
+ d="M 18.579387,10.125928 V 2.6452502"
+ id="path883" />
+ <g
+ transform="matrix(0.10775349,0,0,0.10775349,0.522488,3.972989)"
+ id="g893-8">
+ <path
+ style="fill:#38454f"
+ d="m 167.576,161.237 v 52.068"
+ id="path889-9" />
+ </g>
+ <path
+ style="fill:#546a79;stroke-width:0.107753"
+ d="m 33.727694,26.676864 -0.187059,-0.18706 c -2.898786,6.358534 -10.753474,21.787432 -0.467543,18.327575 0.935085,-2.431242 1.402627,-5.142965 1.402627,-7.94822 0,-2.618194 -0.467542,-5.142966 -1.215567,-7.480679 z"
+ id="path895" />
+ </g>
+ <g
+ transform="matrix(0.10775349,0,0,0.10775349,0.52248818,3.972989)"
+ id="g884">
+ <path
+ style="fill:#38454f"
+ d="m 167.576,161.237 v 52.068"
+ id="path880" />
+ </g>
+ <g
+ id="g902"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g904"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g906"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g908"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g910"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g912"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g914"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g916"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g918"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g920"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g922"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g924"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g926"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g928"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g930"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ transform="matrix(0.10775349,0,0,0.10775349,0.522488,3.972989)"
+ id="g893">
+ <path
+ style="fill:#38454f"
+ d="m 167.576,161.237 v 52.068"
+ id="path889" />
+ </g>
+ <g
+ id="g3839"
+ transform="matrix(1,0,0,-1,0,31.407507)">
+ <path
+ style="fill:none;fill-opacity:1;stroke:#c2c2c2;stroke-width:1.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 18.556422,11.330809 V 5.5472936 l 2.963814,3.125984"
+ id="path3835" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#c2c2c2;stroke-width:1.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 18.556423,11.356828 v -5.80947 l -2.89745,3.0570842"
+ id="path3837" />
+ </g>
+</svg>
src/main/resources/images/mouse/extra.svg
-<svg viewBox="0 0 35 60" xmlns="http://www.w3.org/2000/svg"><path d="m17.502 59.388c-14.667 0-16.886-11.917-16.733-15.693.2258-3.5611.06598-20.108.06598-20.108s-.03406-.98114 16.665-.98698c16.626 0 16.665.98698 16.665.98698s-.15981 16.547.06598 20.107c.15174 3.7756-2.0658 15.693-16.733 15.693" fill="#feff00" fill-opacity=".25098" fill-rule="evenodd"/></svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ version="1.1"
+ viewBox="0 0 35 60"
+ id="svg35"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <metadata
+ id="metadata41">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs39">
+ <linearGradient
+ id="linearGradient4456">
+ <stop
+ style="stop-color:#2ab320;stop-opacity:1"
+ offset="0"
+ id="stop4452" />
+ <stop
+ style="stop-color:#207bb3;stop-opacity:0;"
+ offset="1"
+ id="stop4454" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient857">
+ <stop
+ style="stop-color:#207bb3;stop-opacity:1;"
+ offset="0"
+ id="stop853" />
+ <stop
+ style="stop-color:#207bb3;stop-opacity:0;"
+ offset="1"
+ id="stop855" />
+ </linearGradient>
+ <radialGradient
+ xlink:href="#linearGradient857"
+ id="radialGradient859-3"
+ cx="49.397331"
+ cy="30.762686"
+ fx="49.397331"
+ fy="30.762686"
+ r="26.048256"
+ gradientTransform="matrix(6.5329411,0,0,1.9803276,-259.56016,-34.453032)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ xlink:href="#linearGradient4456"
+ id="radialGradient859-7"
+ cx="57.185425"
+ cy="40.55204"
+ fx="57.185425"
+ fy="40.55204"
+ r="26.048256"
+ gradientTransform="matrix(6.5329411,0,0,-1.9803276,-355.72136,137.9498)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ xlink:href="#linearGradient857"
+ id="radialGradient859-3-3"
+ cx="49.397331"
+ cy="30.762686"
+ fx="49.397331"
+ fy="30.762686"
+ r="26.048256"
+ gradientTransform="matrix(6.5329411,0,0,1.9803276,-259.56016,-34.453032)"
+ gradientUnits="userSpaceOnUse" />
+ </defs>
+ <radialGradient
+ id="a"
+ cx="193.4"
+ cy="181.62"
+ r="68.141"
+ gradientTransform="matrix(0.13524,0,0,0.34162,53.700335,-47.415)"
+ gradientUnits="userSpaceOnUse"
+ spreadMethod="reflect"
+ xlink:href="#b" />
+ <linearGradient
+ id="b">
+ <stop
+ stop-color="#fff"
+ offset="0"
+ id="stop3" />
+ <stop
+ stop-color="#666"
+ offset="1"
+ id="stop5" />
+ </linearGradient>
+ <radialGradient
+ id="c"
+ cx="85.528"
+ cy="170.14"
+ r="252.08"
+ gradientTransform="matrix(0.14849,0,0,0.25527,53.278835,-35.807)"
+ gradientUnits="userSpaceOnUse"
+ spreadMethod="reflect"
+ xlink:href="#b" />
+ <linearGradient
+ id="d"
+ x1="193.63"
+ x2="193.63"
+ y1="161.65"
+ y2="162.42"
+ gradientTransform="matrix(0.13405,0,0,0.2832,53.409735,-36.608)"
+ gradientUnits="userSpaceOnUse"
+ spreadMethod="reflect">
+ <stop
+ stop-color="#333"
+ offset="0"
+ id="stop9" />
+ <stop
+ stop-color="#fff"
+ offset="1"
+ id="stop11" />
+ </linearGradient>
+ <radialGradient
+ id="e"
+ cx="158.03"
+ cy="169.2"
+ r="31.163"
+ gradientTransform="matrix(0.13493,0,0,0.28136,53.409735,-36.608)"
+ gradientUnits="userSpaceOnUse"
+ spreadMethod="reflect">
+ <stop
+ stop-color="#b3b3eb"
+ stop-opacity="0"
+ offset="0"
+ id="stop14" />
+ <stop
+ offset="1"
+ id="stop16" />
+ </radialGradient>
+ <g
+ id="g1768"
+ transform="translate(-0.14453,0.70410125)">
+ <path
+ id="path866"
+ style="font-variation-settings:normal;vector-effect:none;fill:#515151;fill-opacity:1;stroke:#191d22;stroke-width:1.44;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke;stop-color:#000000"
+ d="m 18.580078,1.7109375 c -0.561072,0 -0.935547,0.3725213 -0.935547,0.9335937 V 2.765625 C 15.016437,2.8575474 12.308826,3.2353258 9.5097656,3.9550781 6.6109774,4.3290905 4.3659808,6.571919 3.8984375,9.4707031 2.9633556,13.117512 4.4592025,18.261636 4.5527344,22.75 c 0.082543,2.867388 -0.2873906,5.732829 -1.0273438,8.507812 -0.748025,2.618302 -2.6193528,5.517231 -2.7128906,8.416016 0.009423,0.0046 0.0179461,0.0071 0.0273438,0.01172 C 0.8336548,39.806585 0.8125,39.92806 0.8125,40.048829 0.81238698,51.176316 7.6399338,56.88086 17.177734,56.88086 c 7.078461,0 13.168633,-4.950551 15.84375,-12.048828 0.01787,-0.0059 0.0328,-0.0096 0.05078,-0.01563 0.935085,-2.431242 1.404296,-5.14201 1.404296,-7.947265 0,-0.01577 -0.0019,-0.03111 -0.002,-0.04687 3.2e-5,-0.01581 0.002,-0.03106 0.002,-0.04687 0,-2.605335 -0.465425,-5.117256 -1.207031,-7.445313 L 33.728514,26.67774 C 34.08025,17.010956 34.337988,13.131238 33.353516,9.4707031 32.369044,5.8101685 30.443893,5.1706163 27.744141,3.9550781 25.105711,3.2075027 22.358885,2.8027241 19.513672,2.7460938 V 2.6445312 c 0,-0.5610724 -0.372521,-0.9335937 -0.933594,-0.9335937 z" />
+ <g
+ transform="matrix(0.10775349,0,0,0.10775349,0.52248818,1.8179189)"
+ id="g878">
+ <path
+ style="fill:#38454f"
+ d="M 167.576,77.102 V 7.678"
+ id="path874" />
+ </g>
+ <g
+ transform="matrix(0.10775349,0,0,0.10775349,0.52248818,3.972989)"
+ id="g884">
+ <path
+ style="fill:#38454f"
+ d="m 167.576,161.237 v 52.068"
+ id="path880" />
+ </g>
+ <g
+ id="g902-26"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g904-6"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g906-4"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g908-95"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g910-0"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g912-4"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g914-8"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g916-7"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g918-1"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g920-7"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g922-2"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g924-7"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g926-2"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g928-2"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g930-6"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <path
+ style="fill:#38454f;stroke-width:0.107753"
+ d="M 33.727694,26.676864 C 34.079428,17.010086 34.338262,13.131861 33.35379,9.4713259 32.369318,5.8107913 30.443033,5.1698857 27.743281,3.9543475 v 0 c -5.610507,-1.5896872 -11.688562,-1.6831098 -18.234043,0 v 0 C 6.610449,4.3283599 4.366268,6.5725418 3.898725,9.4713259 2.963643,13.118135 4.459799,18.261102 4.553331,22.749466 c 0.09353,2.898783 -0.187063,5.79746 -1.028613,8.602715 -0.748025,2.618193 -2.711725,5.704038 -2.711725,8.696244 -1.13e-4,11.127487 6.825969,16.831524 16.363769,16.831524 9.537793,0 17.298957,-8.976725 17.298957,-20.104213 0,-2.618193 -0.467542,-5.142965 -1.215567,-7.480677 z"
+ id="path875" />
+ <path
+ style="fill:#546a79;stroke-width:0.107753"
+ d="m 0.81288,39.674414 c 0.09354,-2.898785 1.9637,-5.797462 2.711725,-8.415764 0.748025,-2.805254 1.122144,-5.704039 1.028619,-8.602715 0,-0.09353 0,-0.18706 0,-0.18706 2.431131,8.883413 5.423444,21.694008 -3.740344,17.205539"
+ id="path877" />
+ <path
+ style="fill:#38454f;stroke-width:0.107753"
+ d="m 18.579387,21.346838 v 0 c 1.028613,0 1.870169,-0.841554 1.870169,-1.870169 v -7.480571 c 0,-1.028615 -0.841556,-1.870169 -1.870169,-1.870169 -1.028619,0 -1.870169,0.841554 -1.870169,1.870169 v 7.480678 c 0,1.028508 0.841657,1.870062 1.870169,1.870062"
+ id="path879" />
+ <path
+ id="path881"
+ style="fill:#546a79;stroke-width:0.107753"
+ d="m 18.580078,1.7109375 c -0.561073,0 -0.935547,0.3725213 -0.935547,0.9335937 v 6.7089844 c -1.104495,0.3729306 -1.871093,1.3852594 -1.871093,2.6425784 v 7.480468 c 0,1.257318 0.766598,2.269648 1.871093,2.642579 v 4.83789 c 0,0.561073 0.374475,0.935547 0.935547,0.935547 0.561073,0 0.933594,-0.374474 0.933594,-0.935547 v -4.83789 c 1.104495,-0.372927 1.871094,-1.385345 1.871094,-2.642579 v -7.480468 c 0,-1.257319 -0.766599,-2.2696478 -1.871094,-2.6425784 V 2.6445312 c 0,-0.5610724 -0.372522,-0.9335937 -0.933594,-0.9335937 z m 0,9.3496095 c 0.561069,0 0.933594,0.374475 0.933594,0.935547 v 7.480468 c 0,0.561074 -0.372525,0.935547 -0.933594,0.935547 -0.561075,0 -0.935547,-0.374473 -0.935547,-0.935547 v -7.480468 c 0,-0.561072 0.374472,-0.935547 0.935547,-0.935547 z" />
+ <path
+ style="fill:#38454f;stroke-width:0.107753"
+ d="M 18.579387,10.125928 V 2.6452502"
+ id="path883" />
+ <g
+ transform="matrix(0.10775349,0,0,0.10775349,0.522488,3.972989)"
+ id="g893">
+ <path
+ style="fill:#38454f"
+ d="m 167.576,161.237 v 52.068"
+ id="path889" />
+ </g>
+ <path
+ style="fill:#546a79;stroke-width:0.107753"
+ d="m 33.727694,26.676864 -0.187059,-0.18706 c -2.898786,6.358534 -10.753474,21.787432 -0.467543,18.327575 0.935085,-2.431242 1.402627,-5.142965 1.402627,-7.94822 0,-2.618194 -0.467542,-5.142966 -1.215567,-7.480679 z"
+ id="path895" />
+ </g>
+ <g
+ id="g902"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g904"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g906"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g908"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g910"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g912"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g914"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g916"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g918"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g920"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g922"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g924"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g926"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g928"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g930"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g902-2"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g904-2"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g906-8"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g908-9"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g910-7"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g912-3"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g914-6"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g916-1"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g918-2"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g920-9"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g922-3"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g924-1"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g926-9"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g928-4"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g930-7"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <path
+ id="path1596-6"
+ style="font-variation-settings:normal;vector-effect:none;fill:url(#radialGradient859-7);fill-opacity:1;stroke:none;stroke-width:17.406;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000"
+ d="M 18.705078 29.177734 C 13.326986 29.118397 8.233993 30.704512 6.9394531 33.943359 C 7.3727034 38.947825 6.2056965 42.303816 0.83398438 39.683594 C 0.82767449 39.805382 0.8125 39.927322 0.8125 40.048828 C 0.812387 51.176315 7.6399348 56.880859 17.177734 56.880859 C 24.253817 56.880859 30.334965 51.929407 33.009766 44.833984 C 25.463458 47.33207 27.803176 39.549355 30.699219 32.763672 C 27.871837 30.428628 23.196369 29.227288 18.705078 29.177734 z " />
+</svg>
+
src/main/resources/images/mouse/l.svg
-<svg viewBox="0 0 35 60" xmlns="http://www.w3.org/2000/svg"><path d="m18.124 19.65v-4.9429h5.6695v-6.1788h-5.6743v-4.9432l-6.9166 8.0327z" fill="#333" fill-opacity=".8"/></svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ version="1.1"
+ viewBox="0 0 35 60"
+ id="svg35"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <metadata
+ id="metadata41">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs39">
+ <linearGradient
+ id="linearGradient857">
+ <stop
+ style="stop-color:#207bb3;stop-opacity:1;"
+ offset="0"
+ id="stop853" />
+ <stop
+ style="stop-color:#207bb3;stop-opacity:0;"
+ offset="1"
+ id="stop855" />
+ </linearGradient>
+ <radialGradient
+ xlink:href="#linearGradient857"
+ id="radialGradient859-3"
+ cx="49.397331"
+ cy="30.762686"
+ fx="49.397331"
+ fy="30.762686"
+ r="26.048256"
+ gradientTransform="matrix(6.5329411,0,0,1.9803276,-259.56016,-34.453032)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ xlink:href="#linearGradient857"
+ id="radialGradient859-3-3"
+ cx="49.397331"
+ cy="30.762686"
+ fx="49.397331"
+ fy="30.762686"
+ r="26.048256"
+ gradientTransform="matrix(6.5329411,0,0,1.9803276,-259.56016,-34.453032)"
+ gradientUnits="userSpaceOnUse" />
+ </defs>
+ <radialGradient
+ id="a"
+ cx="193.4"
+ cy="181.62"
+ r="68.141"
+ gradientTransform="matrix(0.13524,0,0,0.34162,53.700335,-47.415)"
+ gradientUnits="userSpaceOnUse"
+ spreadMethod="reflect"
+ xlink:href="#b" />
+ <linearGradient
+ id="b">
+ <stop
+ stop-color="#fff"
+ offset="0"
+ id="stop3" />
+ <stop
+ stop-color="#666"
+ offset="1"
+ id="stop5" />
+ </linearGradient>
+ <radialGradient
+ id="c"
+ cx="85.528"
+ cy="170.14"
+ r="252.08"
+ gradientTransform="matrix(0.14849,0,0,0.25527,53.278835,-35.807)"
+ gradientUnits="userSpaceOnUse"
+ spreadMethod="reflect"
+ xlink:href="#b" />
+ <linearGradient
+ id="d"
+ x1="193.63"
+ x2="193.63"
+ y1="161.65"
+ y2="162.42"
+ gradientTransform="matrix(0.13405,0,0,0.2832,53.409735,-36.608)"
+ gradientUnits="userSpaceOnUse"
+ spreadMethod="reflect">
+ <stop
+ stop-color="#333"
+ offset="0"
+ id="stop9" />
+ <stop
+ stop-color="#fff"
+ offset="1"
+ id="stop11" />
+ </linearGradient>
+ <radialGradient
+ id="e"
+ cx="158.03"
+ cy="169.2"
+ r="31.163"
+ gradientTransform="matrix(0.13493,0,0,0.28136,53.409735,-36.608)"
+ gradientUnits="userSpaceOnUse"
+ spreadMethod="reflect">
+ <stop
+ stop-color="#b3b3eb"
+ stop-opacity="0"
+ offset="0"
+ id="stop14" />
+ <stop
+ offset="1"
+ id="stop16" />
+ </radialGradient>
+ <g
+ id="g1768"
+ transform="translate(-0.14453,0.70410125)">
+ <path
+ id="path866"
+ style="font-variation-settings:normal;vector-effect:none;fill:#515151;fill-opacity:1;stroke:#191d22;stroke-width:1.44;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke;stop-color:#000000"
+ d="m 18.580078,1.7109375 c -0.561072,0 -0.935547,0.3725213 -0.935547,0.9335937 V 2.765625 C 15.016437,2.8575474 12.308826,3.2353258 9.5097656,3.9550781 6.6109774,4.3290905 4.3659808,6.571919 3.8984375,9.4707031 2.9633556,13.117512 4.4592025,18.261636 4.5527344,22.75 c 0.082543,2.867388 -0.2873906,5.732829 -1.0273438,8.507812 -0.748025,2.618302 -2.6193528,5.517231 -2.7128906,8.416016 0.009423,0.0046 0.0179461,0.0071 0.0273438,0.01172 C 0.8336548,39.806585 0.8125,39.92806 0.8125,40.048829 0.81238698,51.176316 7.6399338,56.88086 17.177734,56.88086 c 7.078461,0 13.168633,-4.950551 15.84375,-12.048828 0.01787,-0.0059 0.0328,-0.0096 0.05078,-0.01563 0.935085,-2.431242 1.404296,-5.14201 1.404296,-7.947265 0,-0.01577 -0.0019,-0.03111 -0.002,-0.04687 3.2e-5,-0.01581 0.002,-0.03106 0.002,-0.04687 0,-2.605335 -0.465425,-5.117256 -1.207031,-7.445313 L 33.728514,26.67774 C 34.08025,17.010956 34.337988,13.131238 33.353516,9.4707031 32.369044,5.8101685 30.443893,5.1706163 27.744141,3.9550781 25.105711,3.2075027 22.358885,2.8027241 19.513672,2.7460938 V 2.6445312 c 0,-0.5610724 -0.372521,-0.9335937 -0.933594,-0.9335937 z" />
+ <g
+ transform="matrix(0.10775349,0,0,0.10775349,0.52248818,1.8179189)"
+ id="g878">
+ <path
+ style="fill:#38454f"
+ d="M 167.576,77.102 V 7.678"
+ id="path874" />
+ </g>
+ <g
+ transform="matrix(0.10775349,0,0,0.10775349,0.52248818,3.972989)"
+ id="g884">
+ <path
+ style="fill:#38454f"
+ d="m 167.576,161.237 v 52.068"
+ id="path880" />
+ </g>
+ <g
+ id="g902-1"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g904-0"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g906-6"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g908-1"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g910-5"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g912-9"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g914-4"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g916-9"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g918-0"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g920-91"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g922-7"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g924-7"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g926-1"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g928-1"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g930-5"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <path
+ style="fill:#38454f;stroke-width:0.107753"
+ d="M 33.727694,26.676864 C 34.079428,17.010086 34.338262,13.131861 33.35379,9.4713259 32.369318,5.8107913 30.443033,5.1698857 27.743281,3.9543475 v 0 c -5.610507,-1.5896872 -11.688562,-1.6831098 -18.234043,0 v 0 C 6.610449,4.3283599 4.366268,6.5725418 3.898725,9.4713259 2.963643,13.118135 4.459799,18.261102 4.553331,22.749466 c 0.09353,2.898783 -0.187063,5.79746 -1.028613,8.602715 -0.748025,2.618193 -2.711725,5.704038 -2.711725,8.696244 -1.13e-4,11.127487 6.825969,16.831524 16.363769,16.831524 9.537793,0 17.298957,-8.976725 17.298957,-20.104213 0,-2.618193 -0.467542,-5.142965 -1.215567,-7.480677 z"
+ id="path875" />
+ <path
+ style="fill:#546a79;stroke-width:0.107753"
+ d="m 0.81288,39.674414 c 0.09354,-2.898785 1.9637,-5.797462 2.711725,-8.415764 0.748025,-2.805254 1.122144,-5.704039 1.028619,-8.602715 0,-0.09353 0,-0.18706 0,-0.18706 2.431131,8.883413 5.423444,21.694008 -3.740344,17.205539"
+ id="path877" />
+ <path
+ style="fill:#38454f;stroke-width:0.107753"
+ d="m 18.579387,21.346838 v 0 c 1.028613,0 1.870169,-0.841554 1.870169,-1.870169 v -7.480571 c 0,-1.028615 -0.841556,-1.870169 -1.870169,-1.870169 -1.028619,0 -1.870169,0.841554 -1.870169,1.870169 v 7.480678 c 0,1.028508 0.841657,1.870062 1.870169,1.870062"
+ id="path879" />
+ <path
+ id="path881"
+ style="fill:#546a79;stroke-width:0.107753"
+ d="m 18.580078,1.7109375 c -0.561073,0 -0.935547,0.3725213 -0.935547,0.9335937 v 6.7089844 c -1.104495,0.3729306 -1.871093,1.3852594 -1.871093,2.6425784 v 7.480468 c 0,1.257318 0.766598,2.269648 1.871093,2.642579 v 4.83789 c 0,0.561073 0.374475,0.935547 0.935547,0.935547 0.561073,0 0.933594,-0.374474 0.933594,-0.935547 v -4.83789 c 1.104495,-0.372927 1.871094,-1.385345 1.871094,-2.642579 v -7.480468 c 0,-1.257319 -0.766599,-2.2696478 -1.871094,-2.6425784 V 2.6445312 c 0,-0.5610724 -0.372522,-0.9335937 -0.933594,-0.9335937 z m 0,9.3496095 c 0.561069,0 0.933594,0.374475 0.933594,0.935547 v 7.480468 c 0,0.561074 -0.372525,0.935547 -0.933594,0.935547 -0.561075,0 -0.935547,-0.374473 -0.935547,-0.935547 v -7.480468 c 0,-0.561072 0.374472,-0.935547 0.935547,-0.935547 z" />
+ <path
+ style="fill:#38454f;stroke-width:0.107753"
+ d="M 18.579387,10.125928 V 2.6452502"
+ id="path883" />
+ <g
+ transform="matrix(0.10775349,0,0,0.10775349,0.522488,3.972989)"
+ id="g893">
+ <path
+ style="fill:#38454f"
+ d="m 167.576,161.237 v 52.068"
+ id="path889" />
+ </g>
+ <path
+ style="fill:#546a79;stroke-width:0.107753"
+ d="m 33.727694,26.676864 -0.187059,-0.18706 c -2.898786,6.358534 -10.753474,21.787432 -0.467543,18.327575 0.935085,-2.431242 1.402627,-5.142965 1.402627,-7.94822 0,-2.618194 -0.467542,-5.142966 -1.215567,-7.480679 z"
+ id="path895" />
+ </g>
+ <g
+ id="g902"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g904"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g906"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g908"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g910"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g912"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g914"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g916"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g918"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g920"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g922"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g924"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g926"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g928"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g930"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g902-2"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g904-2"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g906-8"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g908-9"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g910-7"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g912-3"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g914-6"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g916-1"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g918-2"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g920-9"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g922-3"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g924-1"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g926-9"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g928-4"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g930-7"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g4217"
+ transform="matrix(0,1,1,0,1.8941224,-2.690887)">
+ <path
+ style="fill:none;fill-opacity:1;stroke:#c2c2c2;stroke-width:1.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 18.556422,11.330809 V 5.5472936 l 2.963814,3.125984"
+ id="path4213" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#c2c2c2;stroke-width:1.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 18.556423,11.356828 v -5.80947 l -2.89745,3.0570842"
+ id="path4215" />
+ </g>
+</svg>
src/main/resources/images/mouse/r.svg
-<svg viewBox="0 0 35 60" xmlns="http://www.w3.org/2000/svg"><path d="m16.872 19.65v-4.9429h-5.6695v-6.1788h5.6743v-4.9432l6.9166 8.0327z" fill="#333" fill-opacity=".8"/></svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ version="1.1"
+ viewBox="0 0 35 60"
+ id="svg35"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <metadata
+ id="metadata41">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs39">
+ <linearGradient
+ id="linearGradient857">
+ <stop
+ style="stop-color:#207bb3;stop-opacity:1;"
+ offset="0"
+ id="stop853" />
+ <stop
+ style="stop-color:#207bb3;stop-opacity:0;"
+ offset="1"
+ id="stop855" />
+ </linearGradient>
+ <radialGradient
+ xlink:href="#linearGradient857"
+ id="radialGradient859-3"
+ cx="49.397331"
+ cy="30.762686"
+ fx="49.397331"
+ fy="30.762686"
+ r="26.048256"
+ gradientTransform="matrix(6.5329411,0,0,1.9803276,-259.56016,-34.453032)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ xlink:href="#linearGradient857"
+ id="radialGradient859-3-3"
+ cx="49.397331"
+ cy="30.762686"
+ fx="49.397331"
+ fy="30.762686"
+ r="26.048256"
+ gradientTransform="matrix(6.5329411,0,0,1.9803276,-259.56016,-34.453032)"
+ gradientUnits="userSpaceOnUse" />
+ </defs>
+ <radialGradient
+ id="a"
+ cx="193.4"
+ cy="181.62"
+ r="68.141"
+ gradientTransform="matrix(0.13524,0,0,0.34162,53.700335,-47.415)"
+ gradientUnits="userSpaceOnUse"
+ spreadMethod="reflect"
+ xlink:href="#b" />
+ <linearGradient
+ id="b">
+ <stop
+ stop-color="#fff"
+ offset="0"
+ id="stop3" />
+ <stop
+ stop-color="#666"
+ offset="1"
+ id="stop5" />
+ </linearGradient>
+ <radialGradient
+ id="c"
+ cx="85.528"
+ cy="170.14"
+ r="252.08"
+ gradientTransform="matrix(0.14849,0,0,0.25527,53.278835,-35.807)"
+ gradientUnits="userSpaceOnUse"
+ spreadMethod="reflect"
+ xlink:href="#b" />
+ <linearGradient
+ id="d"
+ x1="193.63"
+ x2="193.63"
+ y1="161.65"
+ y2="162.42"
+ gradientTransform="matrix(0.13405,0,0,0.2832,53.409735,-36.608)"
+ gradientUnits="userSpaceOnUse"
+ spreadMethod="reflect">
+ <stop
+ stop-color="#333"
+ offset="0"
+ id="stop9" />
+ <stop
+ stop-color="#fff"
+ offset="1"
+ id="stop11" />
+ </linearGradient>
+ <radialGradient
+ id="e"
+ cx="158.03"
+ cy="169.2"
+ r="31.163"
+ gradientTransform="matrix(0.13493,0,0,0.28136,53.409735,-36.608)"
+ gradientUnits="userSpaceOnUse"
+ spreadMethod="reflect">
+ <stop
+ stop-color="#b3b3eb"
+ stop-opacity="0"
+ offset="0"
+ id="stop14" />
+ <stop
+ offset="1"
+ id="stop16" />
+ </radialGradient>
+ <g
+ id="g1768"
+ transform="translate(-0.14453,0.70410125)">
+ <path
+ id="path866"
+ style="font-variation-settings:normal;vector-effect:none;fill:#515151;fill-opacity:1;stroke:#191d22;stroke-width:1.44;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke;stop-color:#000000"
+ d="m 18.580078,1.7109375 c -0.561072,0 -0.935547,0.3725213 -0.935547,0.9335937 V 2.765625 C 15.016437,2.8575474 12.308826,3.2353258 9.5097656,3.9550781 6.6109774,4.3290905 4.3659808,6.571919 3.8984375,9.4707031 2.9633556,13.117512 4.4592025,18.261636 4.5527344,22.75 c 0.082543,2.867388 -0.2873906,5.732829 -1.0273438,8.507812 -0.748025,2.618302 -2.6193528,5.517231 -2.7128906,8.416016 0.009423,0.0046 0.0179461,0.0071 0.0273438,0.01172 C 0.8336548,39.806585 0.8125,39.92806 0.8125,40.048829 0.81238698,51.176316 7.6399338,56.88086 17.177734,56.88086 c 7.078461,0 13.168633,-4.950551 15.84375,-12.048828 0.01787,-0.0059 0.0328,-0.0096 0.05078,-0.01563 0.935085,-2.431242 1.404296,-5.14201 1.404296,-7.947265 0,-0.01577 -0.0019,-0.03111 -0.002,-0.04687 3.2e-5,-0.01581 0.002,-0.03106 0.002,-0.04687 0,-2.605335 -0.465425,-5.117256 -1.207031,-7.445313 L 33.728514,26.67774 C 34.08025,17.010956 34.337988,13.131238 33.353516,9.4707031 32.369044,5.8101685 30.443893,5.1706163 27.744141,3.9550781 25.105711,3.2075027 22.358885,2.8027241 19.513672,2.7460938 V 2.6445312 c 0,-0.5610724 -0.372521,-0.9335937 -0.933594,-0.9335937 z" />
+ <g
+ transform="matrix(0.10775349,0,0,0.10775349,0.52248818,1.8179189)"
+ id="g878">
+ <path
+ style="fill:#38454f"
+ d="M 167.576,77.102 V 7.678"
+ id="path874" />
+ </g>
+ <g
+ transform="matrix(0.10775349,0,0,0.10775349,0.52248818,3.972989)"
+ id="g884">
+ <path
+ style="fill:#38454f"
+ d="m 167.576,161.237 v 52.068"
+ id="path880" />
+ </g>
+ <g
+ id="g902-9"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g904-7"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g906-7"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g908-6"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g910-73"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g912-6"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g914-5"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g916-6"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g918-3"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g920-94"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g922-8"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g924-12"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g926-93"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g928-9"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g930-0"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <path
+ style="fill:#38454f;stroke-width:0.107753"
+ d="M 33.727694,26.676864 C 34.079428,17.010086 34.338262,13.131861 33.35379,9.4713259 32.369318,5.8107913 30.443033,5.1698857 27.743281,3.9543475 v 0 c -5.610507,-1.5896872 -11.688562,-1.6831098 -18.234043,0 v 0 C 6.610449,4.3283599 4.366268,6.5725418 3.898725,9.4713259 2.963643,13.118135 4.459799,18.261102 4.553331,22.749466 c 0.09353,2.898783 -0.187063,5.79746 -1.028613,8.602715 -0.748025,2.618193 -2.711725,5.704038 -2.711725,8.696244 -1.13e-4,11.127487 6.825969,16.831524 16.363769,16.831524 9.537793,0 17.298957,-8.976725 17.298957,-20.104213 0,-2.618193 -0.467542,-5.142965 -1.215567,-7.480677 z"
+ id="path875" />
+ <path
+ style="fill:#546a79;stroke-width:0.107753"
+ d="m 0.81288,39.674414 c 0.09354,-2.898785 1.9637,-5.797462 2.711725,-8.415764 0.748025,-2.805254 1.122144,-5.704039 1.028619,-8.602715 0,-0.09353 0,-0.18706 0,-0.18706 2.431131,8.883413 5.423444,21.694008 -3.740344,17.205539"
+ id="path877" />
+ <path
+ style="fill:#38454f;stroke-width:0.107753"
+ d="m 18.579387,21.346838 v 0 c 1.028613,0 1.870169,-0.841554 1.870169,-1.870169 v -7.480571 c 0,-1.028615 -0.841556,-1.870169 -1.870169,-1.870169 -1.028619,0 -1.870169,0.841554 -1.870169,1.870169 v 7.480678 c 0,1.028508 0.841657,1.870062 1.870169,1.870062"
+ id="path879" />
+ <path
+ id="path881"
+ style="fill:#546a79;stroke-width:0.107753"
+ d="m 18.580078,1.7109375 c -0.561073,0 -0.935547,0.3725213 -0.935547,0.9335937 v 6.7089844 c -1.104495,0.3729306 -1.871093,1.3852594 -1.871093,2.6425784 v 7.480468 c 0,1.257318 0.766598,2.269648 1.871093,2.642579 v 4.83789 c 0,0.561073 0.374475,0.935547 0.935547,0.935547 0.561073,0 0.933594,-0.374474 0.933594,-0.935547 v -4.83789 c 1.104495,-0.372927 1.871094,-1.385345 1.871094,-2.642579 v -7.480468 c 0,-1.257319 -0.766599,-2.2696478 -1.871094,-2.6425784 V 2.6445312 c 0,-0.5610724 -0.372522,-0.9335937 -0.933594,-0.9335937 z m 0,9.3496095 c 0.561069,0 0.933594,0.374475 0.933594,0.935547 v 7.480468 c 0,0.561074 -0.372525,0.935547 -0.933594,0.935547 -0.561075,0 -0.935547,-0.374473 -0.935547,-0.935547 v -7.480468 c 0,-0.561072 0.374472,-0.935547 0.935547,-0.935547 z" />
+ <path
+ style="fill:#38454f;stroke-width:0.107753"
+ d="M 18.579387,10.125928 V 2.6452502"
+ id="path883" />
+ <g
+ transform="matrix(0.10775349,0,0,0.10775349,0.522488,3.972989)"
+ id="g893">
+ <path
+ style="fill:#38454f"
+ d="m 167.576,161.237 v 52.068"
+ id="path889" />
+ </g>
+ <path
+ style="fill:#546a79;stroke-width:0.107753"
+ d="m 33.727694,26.676864 -0.187059,-0.18706 c -2.898786,6.358534 -10.753474,21.787432 -0.467543,18.327575 0.935085,-2.431242 1.402627,-5.142965 1.402627,-7.94822 0,-2.618194 -0.467542,-5.142966 -1.215567,-7.480679 z"
+ id="path895" />
+ </g>
+ <g
+ id="g902"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g904"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g906"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g908"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g910"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g912"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g914"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g916"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g918"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g920"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g922"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g924"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g926"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g928"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g930"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g902-2"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g904-2"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g906-8"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g908-9"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g910-7"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g912-3"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g914-6"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g916-1"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g918-2"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g920-9"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g922-3"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g924-1"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g926-9"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g928-4"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g930-7"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g4055"
+ transform="rotate(90,18.992089,16.301202)">
+ <path
+ style="fill:none;fill-opacity:1;stroke:#c2c2c2;stroke-width:1.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 18.556422,11.330809 V 5.5472936 l 2.963814,3.125984"
+ id="path873" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#c2c2c2;stroke-width:1.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 18.556423,11.356828 v -5.80947 l -2.89745,3.0570842"
+ id="path875-1" />
+ </g>
+</svg>
src/main/resources/images/mouse/u.svg
-<svg viewBox="0 0 35 60" xmlns="http://www.w3.org/2000/svg"><path d="m9.4655 12.243h4.9429v5.6695h6.1788v-5.6743h4.9432l-8.0327-6.9166z" fill="#333" fill-opacity=".8"/></svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ version="1.1"
+ viewBox="0 0 35 60"
+ id="svg35"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <metadata
+ id="metadata41">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs39">
+ <linearGradient
+ id="linearGradient857">
+ <stop
+ style="stop-color:#207bb3;stop-opacity:1;"
+ offset="0"
+ id="stop853" />
+ <stop
+ style="stop-color:#207bb3;stop-opacity:0;"
+ offset="1"
+ id="stop855" />
+ </linearGradient>
+ <radialGradient
+ xlink:href="#linearGradient857"
+ id="radialGradient859-3"
+ cx="49.397331"
+ cy="30.762686"
+ fx="49.397331"
+ fy="30.762686"
+ r="26.048256"
+ gradientTransform="matrix(6.5329411,0,0,1.9803276,-259.56016,-34.453032)"
+ gradientUnits="userSpaceOnUse" />
+ </defs>
+ <radialGradient
+ id="a"
+ cx="193.4"
+ cy="181.62"
+ r="68.141"
+ gradientTransform="matrix(0.13524,0,0,0.34162,53.700335,-47.415)"
+ gradientUnits="userSpaceOnUse"
+ spreadMethod="reflect"
+ xlink:href="#b" />
+ <linearGradient
+ id="b">
+ <stop
+ stop-color="#fff"
+ offset="0"
+ id="stop3" />
+ <stop
+ stop-color="#666"
+ offset="1"
+ id="stop5" />
+ </linearGradient>
+ <radialGradient
+ id="c"
+ cx="85.528"
+ cy="170.14"
+ r="252.08"
+ gradientTransform="matrix(0.14849,0,0,0.25527,53.278835,-35.807)"
+ gradientUnits="userSpaceOnUse"
+ spreadMethod="reflect"
+ xlink:href="#b" />
+ <linearGradient
+ id="d"
+ x1="193.63"
+ x2="193.63"
+ y1="161.65"
+ y2="162.42"
+ gradientTransform="matrix(0.13405,0,0,0.2832,53.409735,-36.608)"
+ gradientUnits="userSpaceOnUse"
+ spreadMethod="reflect">
+ <stop
+ stop-color="#333"
+ offset="0"
+ id="stop9" />
+ <stop
+ stop-color="#fff"
+ offset="1"
+ id="stop11" />
+ </linearGradient>
+ <radialGradient
+ id="e"
+ cx="158.03"
+ cy="169.2"
+ r="31.163"
+ gradientTransform="matrix(0.13493,0,0,0.28136,53.409735,-36.608)"
+ gradientUnits="userSpaceOnUse"
+ spreadMethod="reflect">
+ <stop
+ stop-color="#b3b3eb"
+ stop-opacity="0"
+ offset="0"
+ id="stop14" />
+ <stop
+ offset="1"
+ id="stop16" />
+ </radialGradient>
+ <g
+ id="g1768"
+ transform="translate(-0.14453,0.70410125)">
+ <path
+ id="path866"
+ style="font-variation-settings:normal;vector-effect:none;fill:#515151;fill-opacity:1;stroke:#191d22;stroke-width:1.44;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke;stop-color:#000000"
+ d="m 18.580078,1.7109375 c -0.561072,0 -0.935547,0.3725213 -0.935547,0.9335937 V 2.765625 C 15.016437,2.8575474 12.308826,3.2353258 9.5097656,3.9550781 6.6109774,4.3290905 4.3659808,6.571919 3.8984375,9.4707031 2.9633556,13.117512 4.4592025,18.261636 4.5527344,22.75 c 0.082543,2.867388 -0.2873906,5.732829 -1.0273438,8.507812 -0.748025,2.618302 -2.6193528,5.517231 -2.7128906,8.416016 0.009423,0.0046 0.0179461,0.0071 0.0273438,0.01172 C 0.8336548,39.806585 0.8125,39.92806 0.8125,40.048829 0.81238698,51.176316 7.6399338,56.88086 17.177734,56.88086 c 7.078461,0 13.168633,-4.950551 15.84375,-12.048828 0.01787,-0.0059 0.0328,-0.0096 0.05078,-0.01563 0.935085,-2.431242 1.404296,-5.14201 1.404296,-7.947265 0,-0.01577 -0.0019,-0.03111 -0.002,-0.04687 3.2e-5,-0.01581 0.002,-0.03106 0.002,-0.04687 0,-2.605335 -0.465425,-5.117256 -1.207031,-7.445313 L 33.728514,26.67774 C 34.08025,17.010956 34.337988,13.131238 33.353516,9.4707031 32.369044,5.8101685 30.443893,5.1706163 27.744141,3.9550781 25.105711,3.2075027 22.358885,2.8027241 19.513672,2.7460938 V 2.6445312 c 0,-0.5610724 -0.372521,-0.9335937 -0.933594,-0.9335937 z" />
+ <g
+ transform="matrix(0.10775349,0,0,0.10775349,0.52248818,1.8179189)"
+ id="g878-3">
+ <path
+ style="fill:#38454f"
+ d="M 167.576,77.102 V 7.678"
+ id="path874-6" />
+ </g>
+ <g
+ transform="matrix(0.10775349,0,0,0.10775349,0.52248818,3.972989)"
+ id="g884-7">
+ <path
+ style="fill:#38454f"
+ d="m 167.576,161.237 v 52.068"
+ id="path880-5" />
+ </g>
+ <g
+ id="g902-3"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g904-5"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g906-6"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g908-2"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g910-9"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g912-1"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g914-2"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g916-7"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g918-0"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g920-9"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g922-3"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g924-6"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g926-0"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g928-6"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g930-2"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <path
+ style="fill:#38454f;stroke-width:0.107753"
+ d="M 33.727694,26.676864 C 34.079428,17.010086 34.338262,13.131861 33.35379,9.4713259 32.369318,5.8107913 30.443033,5.1698857 27.743281,3.9543475 v 0 c -5.610507,-1.5896872 -11.688562,-1.6831098 -18.234043,0 v 0 C 6.610449,4.3283599 4.366268,6.5725418 3.898725,9.4713259 2.963643,13.118135 4.459799,18.261102 4.553331,22.749466 c 0.09353,2.898783 -0.187063,5.79746 -1.028613,8.602715 -0.748025,2.618193 -2.711725,5.704038 -2.711725,8.696244 -1.13e-4,11.127487 6.825969,16.831524 16.363769,16.831524 9.537793,0 17.298957,-8.976725 17.298957,-20.104213 0,-2.618193 -0.467542,-5.142965 -1.215567,-7.480677 z"
+ id="path875-6" />
+ <path
+ style="fill:#546a79;stroke-width:0.107753"
+ d="m 0.81288,39.674414 c 0.09354,-2.898785 1.9637,-5.797462 2.711725,-8.415764 0.748025,-2.805254 1.122144,-5.704039 1.028619,-8.602715 0,-0.09353 0,-0.18706 0,-0.18706 2.431131,8.883413 5.423444,21.694008 -3.740344,17.205539"
+ id="path877" />
+ <path
+ style="fill:#38454f;stroke-width:0.107753"
+ d="m 18.579387,21.346838 v 0 c 1.028613,0 1.870169,-0.841554 1.870169,-1.870169 v -7.480571 c 0,-1.028615 -0.841556,-1.870169 -1.870169,-1.870169 -1.028619,0 -1.870169,0.841554 -1.870169,1.870169 v 7.480678 c 0,1.028508 0.841657,1.870062 1.870169,1.870062"
+ id="path879" />
+ <path
+ id="path881"
+ style="fill:#546a79;stroke-width:0.107753"
+ d="m 18.580078,1.7109375 c -0.561073,0 -0.935547,0.3725213 -0.935547,0.9335937 v 6.7089844 c -1.104495,0.3729306 -1.871093,1.3852594 -1.871093,2.6425784 v 7.480468 c 0,1.257318 0.766598,2.269648 1.871093,2.642579 v 4.83789 c 0,0.561073 0.374475,0.935547 0.935547,0.935547 0.561073,0 0.933594,-0.374474 0.933594,-0.935547 v -4.83789 c 1.104495,-0.372927 1.871094,-1.385345 1.871094,-2.642579 v -7.480468 c 0,-1.257319 -0.766599,-2.2696478 -1.871094,-2.6425784 V 2.6445312 c 0,-0.5610724 -0.372522,-0.9335937 -0.933594,-0.9335937 z m 0,9.3496095 c 0.561069,0 0.933594,0.374475 0.933594,0.935547 v 7.480468 c 0,0.561074 -0.372525,0.935547 -0.933594,0.935547 -0.561075,0 -0.935547,-0.374473 -0.935547,-0.935547 v -7.480468 c 0,-0.561072 0.374472,-0.935547 0.935547,-0.935547 z" />
+ <path
+ style="fill:#38454f;stroke-width:0.107753"
+ d="M 18.579387,10.125928 V 2.6452502"
+ id="path883-1" />
+ <g
+ transform="matrix(0.10775349,0,0,0.10775349,0.522488,3.972989)"
+ id="g893-8">
+ <path
+ style="fill:#38454f"
+ d="m 167.576,161.237 v 52.068"
+ id="path889-7" />
+ </g>
+ <path
+ style="fill:#546a79;stroke-width:0.107753"
+ d="m 33.727694,26.676864 -0.187059,-0.18706 c -2.898786,6.358534 -10.753474,21.787432 -0.467543,18.327575 0.935085,-2.431242 1.402627,-5.142965 1.402627,-7.94822 0,-2.618194 -0.467542,-5.142966 -1.215567,-7.480679 z"
+ id="path895" />
+ </g>
+ <g
+ transform="matrix(0.10775349,0,0,0.10775349,0.52248818,1.8179189)"
+ id="g878">
+ <path
+ style="fill:#38454f"
+ d="M 167.576,77.102 V 7.678"
+ id="path874" />
+ </g>
+ <g
+ transform="matrix(0.10775349,0,0,0.10775349,0.52248818,3.972989)"
+ id="g884">
+ <path
+ style="fill:#38454f"
+ d="m 167.576,161.237 v 52.068"
+ id="path880" />
+ </g>
+ <g
+ id="g902"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g904"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g906"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g908"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g910"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g912"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g914"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g916"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g918"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g920"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g922"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g924"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g926"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g928"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <g
+ id="g930"
+ transform="matrix(0.33453025,0,0,0.33453025,-207.02037,-30.298323)" />
+ <path
+ style="fill:#38454f;stroke-width:0.107753"
+ d="M 18.579387,10.125928 V 2.6452502"
+ id="path883" />
+ <g
+ transform="matrix(0.10775349,0,0,0.10775349,0.522488,3.972989)"
+ id="g893">
+ <path
+ style="fill:#38454f"
+ d="m 167.576,161.237 v 52.068"
+ id="path889" />
+ </g>
+ <path
+ style="fill:none;fill-opacity:1;stroke:#c2c2c2;stroke-width:1.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 18.556422,11.330809 0,-5.7835154 2.963814,3.125984"
+ id="path873" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#c2c2c2;stroke-width:1.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 18.556423,11.356828 0,-5.80947 -2.89745,3.0570842"
+ id="path875" />
+</svg>
Delta 4838 lines added, 555 lines removed, 4283-line increase