Dave Jarvis' Repositories

git clone https://repo.autonoma.ca/repo/kmcaster.git
.gitignore
+build
.idea/compiler.xml
-
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="CompilerConfiguration">
+ <bytecodeTargetLevel target="14" />
+ </component>
+</project>
.idea/gradle.xml
-
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="GradleSettings">
+ <option name="linkedExternalProjectsSettings">
+ <GradleProjectSettings>
+ <option name="delegatedBuild" value="true" />
+ <option name="testRunner" value="GRADLE" />
+ <option name="distributionType" value="LOCAL" />
+ <option name="externalProjectPath" value="$PROJECT_DIR$" />
+ <option name="gradleHome" value="/opt/gradle" />
+ <option name="gradleJvm" value="14" />
+ <option name="modules">
+ <set>
+ <option value="$PROJECT_DIR$" />
+ </set>
+ </option>
+ <option name="useQualifiedModuleNames" value="true" />
+ </GradleProjectSettings>
+ </option>
+ </component>
+</project>
.idea/jarRepositories.xml
-
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="RemoteRepositoriesConfiguration">
+ <remote-repository>
+ <option name="id" value="central" />
+ <option name="name" value="Maven Central repository" />
+ <option name="url" value="https://repo1.maven.org/maven2" />
+ </remote-repository>
+ <remote-repository>
+ <option name="id" value="jboss.community" />
+ <option name="name" value="JBoss Community repository" />
+ <option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
+ </remote-repository>
+ <remote-repository>
+ <option name="id" value="MavenRepo" />
+ <option name="name" value="MavenRepo" />
+ <option name="url" value="https://repo.maven.apache.org/maven2/" />
+ </remote-repository>
+ <remote-repository>
+ <option name="id" value="BintrayJCenter" />
+ <option name="name" value="BintrayJCenter" />
+ <option name="url" value="https://jcenter.bintray.com/" />
+ </remote-repository>
+ </component>
+</project>
.idea/misc.xml
-
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="ExternalStorageConfigurationManager" enabled="true" />
+ <component name="ProjectRootManager" version="2" languageLevel="JDK_14" default="true" project-jdk-name="14" project-jdk-type="JavaSDK" />
+</project>
.idea/uiDesigner.xml
-
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="Palette2">
+ <group name="Swing">
+ <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
+ <default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
+ </item>
+ <item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
+ <default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
+ </item>
+ <item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
+ <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
+ </item>
+ <item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
+ <default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
+ </item>
+ <item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
+ <default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
+ <initial-values>
+ <property name="text" value="Button" />
+ </initial-values>
+ </item>
+ <item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
+ <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+ <initial-values>
+ <property name="text" value="RadioButton" />
+ </initial-values>
+ </item>
+ <item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
+ <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+ <initial-values>
+ <property name="text" value="CheckBox" />
+ </initial-values>
+ </item>
+ <item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
+ <default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
+ <initial-values>
+ <property name="text" value="Label" />
+ </initial-values>
+ </item>
+ <item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+ <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+ <preferred-size width="150" height="-1" />
+ </default-constraints>
+ </item>
+ <item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+ <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+ <preferred-size width="150" height="-1" />
+ </default-constraints>
+ </item>
+ <item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+ <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+ <preferred-size width="150" height="-1" />
+ </default-constraints>
+ </item>
+ <item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
+ <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+ <preferred-size width="150" height="50" />
+ </default-constraints>
+ </item>
+ <item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
+ <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+ <preferred-size width="150" height="50" />
+ </default-constraints>
+ </item>
+ <item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
+ <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+ <preferred-size width="150" height="50" />
+ </default-constraints>
+ </item>
+ <item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
+ <default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
+ </item>
+ <item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
+ <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+ <preferred-size width="150" height="50" />
+ </default-constraints>
+ </item>
+ <item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
+ <default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
+ <preferred-size width="150" height="50" />
+ </default-constraints>
+ </item>
+ <item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
+ <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+ <preferred-size width="150" height="50" />
+ </default-constraints>
+ </item>
+ <item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
+ <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+ <preferred-size width="200" height="200" />
+ </default-constraints>
+ </item>
+ <item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
+ <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+ <preferred-size width="200" height="200" />
+ </default-constraints>
+ </item>
+ <item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
+ <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+ </item>
+ <item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
+ <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+ </item>
+ <item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
+ <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
+ </item>
+ <item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
+ <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
+ </item>
+ <item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
+ <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
+ <preferred-size width="-1" height="20" />
+ </default-constraints>
+ </item>
+ <item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
+ <default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
+ </item>
+ <item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
+ <default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
+ </item>
+ </group>
+ </component>
+</project>
.idea/vcs.xml
-
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="VcsDirectoryMappings">
+ <mapping directory="" vcs="Git" />
+ </component>
+</project>
.idea/workspace.xml
-
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="ChangeListManager">
+ <list default="true" id="be1819c5-28d3-4984-9634-0b266734e13c" name="Default Changelist" comment="">
+ <change afterPath="$PROJECT_DIR$/.gitignore" afterDir="false" />
+ <change afterPath="$PROJECT_DIR$/.idea/compiler.xml" afterDir="false" />
+ <change afterPath="$PROJECT_DIR$/.idea/gradle.xml" afterDir="false" />
+ <change afterPath="$PROJECT_DIR$/.idea/jarRepositories.xml" afterDir="false" />
+ <change afterPath="$PROJECT_DIR$/.idea/misc.xml" afterDir="false" />
+ <change afterPath="$PROJECT_DIR$/.idea/uiDesigner.xml" afterDir="false" />
+ <change afterPath="$PROJECT_DIR$/.idea/vcs.xml" afterDir="false" />
+ <change afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
+ <change afterPath="$PROJECT_DIR$/README.md" afterDir="false" />
+ <change afterPath="$PROJECT_DIR$/build.gradle" afterDir="false" />
+ <change afterPath="$PROJECT_DIR$/images/keys.svg" afterDir="false" />
+ <change afterPath="$PROJECT_DIR$/settings.gradle" afterDir="false" />
+ <change afterPath="$PROJECT_DIR$/src/main/com/whitemagicsoftware/kmcaster/KmCaster.java" afterDir="false" />
+ </list>
+ <option name="SHOW_DIALOG" value="false" />
+ <option name="HIGHLIGHT_CONFLICTS" value="true" />
+ <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
+ <option name="LAST_RESOLUTION" value="IGNORE" />
+ </component>
+ <component name="ExternalProjectsData">
+ <projectState path="$PROJECT_DIR$">
+ <ProjectState />
+ </projectState>
+ </component>
+ <component name="ExternalProjectsManager">
+ <system id="GRADLE">
+ <state>
+ <projects_view>
+ <tree_state>
+ <expand>
+ <path>
+ <item name="" type="6a2764b6:ExternalProjectsStructure$RootNode" />
+ <item name="kmcaster" type="f1a62948:ProjectNode" />
+ </path>
+ </expand>
+ <select />
+ </tree_state>
+ </projects_view>
+ </state>
+ </system>
+ </component>
+ <component name="Git.Settings">
+ <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
+ </component>
+ <component name="ProjectId" id="1ekBeNU4c094edVfyTkiboUOdYP" />
+ <component name="ProjectLevelVcsManager">
+ <ConfirmationsSetting value="2" id="Add" />
+ </component>
+ <component name="ProjectViewState">
+ <option name="hideEmptyMiddlePackages" value="true" />
+ <option name="showLibraryContents" value="true" />
+ </component>
+ <component name="PropertiesComponent">
+ <property name="ASKED_ADD_EXTERNAL_FILES" value="true" />
+ <property name="RunOnceActivity.OpenProjectViewOnStart" value="true" />
+ <property name="RunOnceActivity.ShowReadmeOnStart" value="true" />
+ <property name="last_opened_file_path" value="$PROJECT_DIR$" />
+ <property name="settings.editor.selected.configurable" value="reference.settingsdialog.project.gradle" />
+ <property name="show.unlinked.gradle.project.popup" value="true" />
+ </component>
+ <component name="SvnConfiguration">
+ <configuration />
+ </component>
+ <component name="TaskManager">
+ <task active="true" id="Default" summary="Default task">
+ <changelist id="be1819c5-28d3-4984-9634-0b266734e13c" name="Default Changelist" comment="" />
+ <created>1594855804356</created>
+ <option name="number" value="Default" />
+ <option name="presentableId" value="Default" />
+ <updated>1594855804356</updated>
+ </task>
+ <servers />
+ </component>
+ <component name="VcsManagerConfiguration">
+ <option name="ADD_EXTERNAL_FILES_SILENTLY" value="true" />
+ </component>
+ <component name="WindowStateProjectService">
+ <state x="813" y="683" width="218" height="250" key="#Notifications" timestamp="1594856235998">
+ <screen x="0" y="28" width="2560" height="1529" />
+ </state>
+ <state x="813" y="683" width="218" height="250" key="#Notifications/0.28.2560.1529@0.28.2560.1529" timestamp="1594856235998" />
+ <state x="710" y="704" width="425" height="207" key="DetectedRootsChooserDialog" timestamp="1594855895029">
+ <screen x="0" y="28" width="2560" height="1529" />
+ </state>
+ <state x="710" y="704" width="425" height="207" key="DetectedRootsChooserDialog/0.28.2560.1529@0.28.2560.1529" timestamp="1594855895029" />
+ <state x="423" y="444" key="SettingsEditor" timestamp="1594855824250">
+ <screen x="0" y="28" width="2560" height="1529" />
+ </state>
+ <state x="423" y="444" key="SettingsEditor/0.28.2560.1529@0.28.2560.1529" timestamp="1594855824250" />
+ </component>
+</project>
README.md
+# Introduction
+
+Java-based on-screen display (OSD) for keyboard and mouse events.
+
+This program captures keyboard and mouse events for the purpose of screencasting. While a plethora of software already exists, none meet all the following criteria:
+
+* cross-platform;
+* small display size;
+* easily positioned;
+* show single events;
+* show all mouse clicks;
+* show scrolling;
+* release modifier keys when typing quickly;
+* and traps emulation software (e.g., [Sikuli](http://sikulix.com/)).
+
build.gradle
+plugins {
+ id 'application'
+}
+
+group 'com.whitemagicsoftware'
+version '1.0'
+
+repositories {
+ mavenCentral()
+ jcenter()
+}
+
+dependencies {
+ implementation 'com.1stleg:jnativehook:2.1.0'
+}
+
+sourceSets {
+ main {
+ java {
+ srcDirs = ["src/main"]
+ }
+ }
+}
+
+compileJava {
+ options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
+}
+
+application {
+ applicationName = 'kmcaster'
+ mainClassName = "com.whitemagicsoftware.${applicationName}.KmCast"
+}
+
+jar {
+ duplicatesStrategy = DuplicatesStrategy.EXCLUDE
+
+ manifest {
+ attributes 'Main-Class': mainClassName
+ }
+
+ from {
+ (configurations.runtimeClasspath.findAll { !it.path.endsWith(".pom") }).collect {
+ it.isDirectory() ? it : zipTree(it)
+ }
+ }
+
+ archiveFileName = "${applicationName}.jar"
+
+ exclude 'META-INF/*.RSA', 'META-INF/*.SF', 'META-INF/*.DSA'
+}
images/keys.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="207.95166"
+ width="589.68787"
+ inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ version="1.1"
+ sodipodi:version="0.32"
+ viewBox="0 0 589.68784 207.95165"
+ sodipodi:docname="keys.svg"
+ id="svg2">
+ <defs
+ id="defs4">
+ <linearGradient
+ id="linearGradient9345">
+ <stop
+ id="stop9341"
+ offset="0"
+ style="stop-color:#d6d6d6;stop-opacity:1" />
+ <stop
+ id="stop9343"
+ offset="1"
+ style="stop-color:#656565;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient8190">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1"
+ offset="0"
+ id="stop8186" />
+ <stop
+ style="stop-color:#f1f1f1;stop-opacity:1"
+ offset="1"
+ id="stop8188" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient8130">
+ <stop
+ id="stop8126"
+ offset="0"
+ style="stop-color:#f1f1f1;stop-opacity:1" />
+ <stop
+ id="stop8128"
+ offset="1"
+ style="stop-color:#b1b1b1;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient8096">
+ <stop
+ id="stop8092"
+ style="stop-color:#d8d8d8;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop8094"
+ style="stop-color:#b1b1b1;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient607">
+ <stop
+ offset="0"
+ style="stop-color:#cfcfcf"
+ id="stop608" />
+ <stop
+ offset="1"
+ style="stop-color:#efefef"
+ id="stop609" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient565">
+ <stop
+ offset="0"
+ style="stop-color:#9d9d9f"
+ id="stop566" />
+ <stop
+ offset="1"
+ style="stop-color:#e5e5e5"
+ id="stop567" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ x1="2.4161999"
+ y1="8.0492001"
+ gradientTransform="matrix(22.322,0,0,8.8661,264.96,140.57)"
+ x2="7.1659002"
+ gradientUnits="userSpaceOnUse"
+ xlink:href="#linearGradient607"
+ y2="2.2272999"
+ id="linearGradient50930" />
+ <linearGradient
+ id="linearGradient3296">
+ <stop
+ style="stop-color:#d6d6d6;stop-opacity:1;"
+ offset="0"
+ id="stop3298" />
+ <stop
+ style="stop-color:#656565;stop-opacity:1;"
+ offset="1"
+ id="stop3300" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3276">
+ <stop
+ id="stop3278"
+ offset="0"
+ style="stop-color:#d6d6d6;stop-opacity:1;" />
+ <stop
+ id="stop3280"
+ offset="1"
+ style="stop-color:#939393;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3262">
+ <stop
+ style="stop-color:#656565;stop-opacity:1;"
+ offset="0"
+ id="stop3264" />
+ <stop
+ style="stop-color:#939393;stop-opacity:1;"
+ offset="1"
+ id="stop3266" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3248">
+ <stop
+ style="stop-color:#d8d8d8;stop-opacity:1;"
+ offset="0"
+ id="stop3250" />
+ <stop
+ style="stop-color:#b1b1b1;stop-opacity:1;"
+ offset="1"
+ id="stop3252" />
+ </linearGradient>
+ <linearGradient
+ gradientTransform="translate(-1.4723687)"
+ y2="219.35825"
+ x2="533.71136"
+ y1="154.2484"
+ x1="533.71136"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient8124"
+ xlink:href="#linearGradient8130"
+ inkscape:collect="always" />
+ <linearGradient
+ gradientTransform="translate(-1.4723687)"
+ y2="186.9615"
+ x2="586.02765"
+ y1="186.9615"
+ x1="506.54913"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient8134"
+ xlink:href="#linearGradient3248"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="538.1333"
+ x2="358.67578"
+ y1="522.47595"
+ x1="338.63031"
+ gradientTransform="matrix(-0.33457443,0,0,0.33457443,743.0521,45.243368)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient8138"
+ xlink:href="#linearGradient3276"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="535.99042"
+ x2="355.81863"
+ y1="520.33307"
+ x1="332.91602"
+ gradientTransform="matrix(0.33457443,0,0,0.33457443,325.70313,45.243374)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient8142"
+ xlink:href="#linearGradient3262"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="321.36786"
+ x2="526.08197"
+ y1="333.99472"
+ x1="529.11237"
+ gradientTransform="matrix(0.33457443,0,0,0.33457443,446.75458,41.075862)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient8146"
+ xlink:href="#linearGradient3296"
+ inkscape:collect="always" />
+ <linearGradient
+ gradientTransform="translate(-1.4723306,-97.978267)"
+ y2="219.35825"
+ x2="533.71136"
+ y1="154.2484"
+ x1="533.71136"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient8176"
+ xlink:href="#linearGradient8190"
+ inkscape:collect="always" />
+ <linearGradient
+ gradientTransform="matrix(0.70971768,0,0,1.0022158,-39.280779,-0.41428039)"
+ y2="186.9615"
+ x2="586.02765"
+ y1="186.9615"
+ x1="506.54913"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient8218"
+ xlink:href="#linearGradient3248"
+ inkscape:collect="always" />
+ <linearGradient
+ gradientTransform="matrix(0.70971768,0,0,1.0022158,-39.280779,-0.41428039)"
+ y2="219.35825"
+ x2="533.71136"
+ y1="154.2484"
+ x1="533.71136"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient8220"
+ xlink:href="#linearGradient8130"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="321.36786"
+ x2="526.08197"
+ y1="333.99472"
+ x1="529.11237"
+ gradientTransform="matrix(0.33457443,0,0,0.33457443,226.79142,41.075862)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient8222"
+ xlink:href="#linearGradient3296"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="535.99042"
+ x2="355.81863"
+ y1="520.33307"
+ x1="332.91602"
+ gradientTransform="matrix(0.33457443,0,0,0.33457443,158.32466,45.243374)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient8224"
+ xlink:href="#linearGradient3262"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="538.1333"
+ x2="358.67578"
+ y1="522.47595"
+ x1="338.63031"
+ gradientTransform="matrix(-0.33457443,0,0,0.33457443,523.0889,45.243368)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient8226"
+ xlink:href="#linearGradient3276"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="219.35825"
+ x2="533.71136"
+ y1="154.2484"
+ x1="533.71136"
+ gradientTransform="matrix(0.70971768,0,0,1.0022158,-39.280779,-100.33605)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient8268"
+ xlink:href="#linearGradient8190"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="2.2272999"
+ x2="7.1659002"
+ y1="8.0492001"
+ x1="2.4161999"
+ gradientTransform="matrix(22.322,0,0,8.8661,264.96,40.648232)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient8276"
+ xlink:href="#linearGradient607"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="186.9615"
+ x2="586.02765"
+ y1="186.9615"
+ x1="506.54913"
+ gradientTransform="matrix(0.38517289,0,0,1.0061356,106.27413,100.97685)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient8315"
+ xlink:href="#linearGradient3248"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="219.35825"
+ x2="533.71136"
+ y1="154.2484"
+ x1="533.71136"
+ gradientTransform="matrix(0.38517289,0,0,1.0061356,106.27413,100.97685)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient8317"
+ xlink:href="#linearGradient8130"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="321.36786"
+ x2="526.08197"
+ y1="333.99472"
+ x1="529.11237"
+ gradientTransform="matrix(0.33457443,0,0,0.33457443,170.275,143.19984)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient8319"
+ xlink:href="#linearGradient3296"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="535.99042"
+ x2="355.81863"
+ y1="520.33307"
+ x1="332.91602"
+ gradientTransform="matrix(0.33457443,0,0,0.33457443,159.06736,147.36735)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient8321"
+ xlink:href="#linearGradient3262"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="538.1333"
+ x2="358.67578"
+ y1="522.47595"
+ x1="338.63031"
+ gradientTransform="matrix(-0.33457443,0,0,0.33457443,466.57248,147.36735)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient8323"
+ xlink:href="#linearGradient3276"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="219.35825"
+ x2="533.71136"
+ y1="154.2484"
+ x1="533.71136"
+ gradientTransform="matrix(0.38517289,0,0,1.0061356,-19.83415,-104.25445)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient8460"
+ xlink:href="#linearGradient8190"
+ inkscape:collect="always" />
+ <linearGradient
+ gradientTransform="matrix(0.62157053,0,0,0.62157053,236.5924,104.88597)"
+ gradientUnits="userSpaceOnUse"
+ y2="142.72151"
+ x2="788.83728"
+ y1="142.72151"
+ x1="705.59235"
+ id="linearGradient9331"
+ xlink:href="#linearGradient9345"
+ inkscape:collect="always" />
+ <linearGradient
+ gradientTransform="matrix(0.62157053,0,0,0.62157053,236.5924,104.88597)"
+ gradientUnits="userSpaceOnUse"
+ y2="104.82201"
+ x2="755.68341"
+ y1="104.82201"
+ x1="736.89771"
+ id="linearGradient9339"
+ xlink:href="#linearGradient3276"
+ inkscape:collect="always" />
+ </defs>
+ <sodipodi:namedview
+ fit-margin-bottom="10"
+ fit-margin-right="10"
+ fit-margin-left="10"
+ fit-margin-top="10"
+ inkscape:snap-global="true"
+ inkscape:snap-others="true"
+ inkscape:snap-nodes="true"
+ inkscape:document-rotation="0"
+ inkscape:document-units="px"
+ inkscape:pageopacity="0.0"
+ inkscape:window-width="674"
+ inkscape:cy="138.60774"
+ inkscape:cx="331.8911"
+ inkscape:current-layer="layer1"
+ borderopacity="1.0"
+ showgrid="false"
+ inkscape:window-height="645"
+ inkscape:window-x="0"
+ inkscape:zoom="1.4142136"
+ inkscape:window-maximized="0"
+ pagecolor="#ffffff"
+ inkscape:window-y="0"
+ inkscape:pageshadow="2"
+ bordercolor="#666666"
+ id="base" />
+ <g
+ transform="translate(-56.459776,-36.21034)"
+ inkscape:groupmode="layer"
+ inkscape:label="Camada 1"
+ id="layer1">
+ <g
+ id="g9405">
+ <path
+ id="rect8152"
+ style="fill:#656565;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.07946;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 437.26182,146.13211 h 185.40164 c 2.57843,0 4.65421,2.07578 4.65421,4.65421 v 59.46422 H 432.67102 l -0.0634,-59.46422 c -0.003,-2.57843 2.07577,-4.65421 4.6542,-4.65421 z"
+ sodipodi:nodetypes="sssccss" />
+ <rect
+ ry="0"
+ rx="0"
+ y="222.62529"
+ x="446.4592"
+ height="11.497757"
+ width="174.91151"
+ id="rect8150"
+ style="fill:#929292;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.501862;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ id="rect8148"
+ style="fill:#d6d6d6;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.562353;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 613.44462,152.58473 h 22.70299 l 2e-5,57.71427 h -22.70301 z"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:url(#linearGradient8138);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.501862;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 618.76318,208.3917 17.38445,1.9073 -2e-5,16.8501 c -0.009,4.35818 -3.47345,6.86209 -7.05514,7.0129 l -7.72176,-0.0389 -8.52199,-19.90136 z"
+ id="path8136"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ sodipodi:nodetypes="ccccccc"
+ id="path8140"
+ d="m 444.669,208.22271 -11.99798,2.02783 -0.0634,16.89856 c 0.009,4.35818 3.47346,6.86209 7.05515,7.0129 l 7.70997,-0.0845 2.70377,-19.77131 z"
+ style="fill:url(#linearGradient8142);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.501862;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="ccszccc"
+ id="path8144"
+ d="m 621.56972,157.36436 14.57789,-4.77963 c -0.5791,-4.59526 -3.73214,-6.23962 -8.12538,-6.33301 -1.12844,-0.024 -2.05615,-0.0888 -3.25316,-0.10917 -1.19701,-0.0204 -3.92813,-0.002 -3.92813,-0.002 -2.75412,0.53934 -4.90998,2.11709 -6.41705,4.70431 z"
+ style="fill:url(#linearGradient8146);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.501862;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ id="rect46615"
+ style="fill:url(#linearGradient8134);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient8124);stroke-opacity:1"
+ ry="5.3895001"
+ height="71.042999"
+ width="178.86"
+ y="151.44"
+ x="445.15762" />
+ <path
+ id="path47954"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccc"
+ style="fill:none;fill-opacity:1;stroke:#333333;stroke-width:4.2922;stroke-opacity:1"
+ d="m 456.84763,188.842 h 13.649 v 15.527 c 5.68733,0 11.37467,0 17.062,0 v -15.54 h 13.65 l -22.181,-18.94184 z" />
+ </g>
+ <g
+ transform="translate(-3.7684709e-5,-1.9434985)"
+ id="g8497">
+ <path
+ sodipodi:nodetypes="sssccss"
+ d="M 437.26186,48.153839 H 622.6635 c 2.57843,0 4.65421,2.07578 4.65421,4.65421 V 112.27227 H 432.67106 l -0.0634,-59.464221 c -0.003,-2.57843 2.07577,-4.65421 4.6542,-4.65421 z"
+ style="fill:#e5e5e5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.07946;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path8158" />
+ <rect
+ style="fill:#e5e5e5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.501862;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect8160"
+ width="174.91151"
+ height="11.497757"
+ x="446.45923"
+ y="124.64703"
+ rx="0"
+ ry="0" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ d="m 613.44466,54.606459 h 22.70299 l 2e-5,57.714271 h -22.70301 z"
+ style="fill:#e5e5e5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.562353;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path8162" />
+ <path
+ sodipodi:nodetypes="ccccccc"
+ id="path8164"
+ d="m 618.76322,110.41343 17.38445,1.9073 -2e-5,16.8501 c -0.009,4.35818 -3.47345,6.86209 -7.05514,7.0129 l -7.72176,-0.0389 -8.52199,-19.90136 z"
+ style="fill:#e5e5e5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.501862;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ style="fill:#e5e5e5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.501862;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 444.66904,110.24444 -11.99798,2.02783 -0.0634,16.89856 c 0.009,4.35818 3.47346,6.86209 7.05515,7.0129 l 7.70997,-0.0845 2.70377,-19.77131 z"
+ id="path8166"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:#e5e5e5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.501862;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 621.56976,59.386089 14.57789,-4.77963 c -0.5791,-4.59526 -3.73214,-6.23962 -8.12538,-6.33301 -1.12844,-0.024 -2.05615,-0.0888 -3.25316,-0.10917 -1.19701,-0.0204 -3.92813,-0.002 -3.92813,-0.002 -2.75412,0.53934 -4.90998,2.11709 -6.41705,4.70431 z"
+ id="path8168"
+ sodipodi:nodetypes="ccszccc" />
+ <rect
+ x="445.15765"
+ y="53.461731"
+ width="178.86"
+ height="71.042999"
+ ry="5.3895001"
+ style="fill:#f8f8f8;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient8176);stroke-opacity:1"
+ id="rect8170" />
+ <path
+ d="m 456.84767,90.863729 h 13.649 v 15.527001 c 5.68733,0 11.37467,0 17.062,0 V 90.850729 h 13.65 l -22.181,-18.94184 z"
+ style="fill:none;fill-opacity:1;stroke:#e5e5e5;stroke-width:4.2922;stroke-opacity:1"
+ sodipodi:nodetypes="cccccccc"
+ inkscape:connector-curvature="0"
+ id="path8172" />
+ </g>
+ <g
+ transform="translate(-7.6231146)"
+ id="g8406">
+ <path
+ id="rect49938"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccc"
+ style="fill:url(#linearGradient50930);fill-rule:evenodd"
+ d="m 282.2,151.44 h 114.09 c 2.9858,0 5.3894,2.4037 5.3894,5.3895 v 60.264 c 0,2.9858 -2.4037,5.3894 -5.3894,5.3894 H 282.2 c -2.9858,0 -5.3894,-2.4037 -5.3894,-5.3894 v -60.264 c 0,-2.9858 2.4037,-5.3895 5.3894,-5.3895 z" />
+ <path
+ sodipodi:nodetypes="sssccss"
+ d="m 269.88335,146.13211 h 131.08484 c 2.57843,0 4.65421,2.07578 4.65421,4.65421 v 59.46422 H 265.29255 l -0.0634,-59.46422 c -0.003,-2.57843 2.07577,-4.65421 4.6542,-4.65421 z"
+ style="fill:#656565;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.07946;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path8375" />
+ <path
+ id="path49946"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccc"
+ style="fill:#ffffff;fill-rule:evenodd"
+ d="m 401.53,156.66 v 60.317 c 0,2.5221 -1.9067,5.2211 -4.4288,5.2211 h -115.36 v 1.1058 h 115.36 c 3.4494,0 5.8255,-2.8775 5.8255,-6.3269 v -60.32 h -1.3966 z" />
+ <rect
+ style="fill:#929292;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.426708;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect8194"
+ width="126.4479"
+ height="11.497757"
+ x="275.2428"
+ y="222.62529"
+ rx="0"
+ ry="0" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ d="m 393.4815,152.58473 h 22.703 V 210.299 h -22.703 z"
+ style="fill:#d6d6d6;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.562353;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path8196" />
+ <path
+ sodipodi:nodetypes="ccccccc"
+ id="path8198"
+ d="m 398.8,208.3917 17.3845,1.9073 v 16.8501 c -0.01,4.35818 -3.4735,6.86209 -7.0552,7.0129 l -7.7217,-0.0389 -8.522,-19.90136 z"
+ style="fill:url(#linearGradient8226);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.501862;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ style="fill:url(#linearGradient8224);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.501862;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 277.29053,208.22271 -11.99798,2.02783 -0.0634,16.89856 c 0.009,4.35818 3.47346,6.86209 7.05515,7.0129 l 7.70997,-0.0845 2.70377,-19.77131 z"
+ id="path8200"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:url(#linearGradient8222);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.501862;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 401.6066,157.36436 14.5779,-4.77963 c -0.5791,-4.59526 -3.7322,-6.23962 -8.1254,-6.33301 -1.1285,-0.024 -2.0562,-0.0888 -3.2532,-0.10917 -1.197,-0.0204 -3.9281,-0.002 -3.9281,-0.002 -2.7541,0.53934 -4.91,2.11709 -6.4171,4.70431 z"
+ id="path8202"
+ sodipodi:nodetypes="ccszccc" />
+ <rect
+ x="277.70044"
+ y="151.3613"
+ width="126.94011"
+ height="71.200417"
+ ry="5.4014425"
+ style="fill:url(#linearGradient8218);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient8220);stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect8204" />
+ </g>
+ <g
+ transform="translate(-7.6231146)"
+ id="g8487">
+ <path
+ d="m 282.2,51.518232 h 114.09 c 2.9858,0 5.3894,2.4037 5.3894,5.3895 v 60.263998 c 0,2.9858 -2.4037,5.3894 -5.3894,5.3894 H 282.2 c -2.9858,0 -5.3894,-2.4037 -5.3894,-5.3894 V 56.907732 c 0,-2.9858 2.4037,-5.3895 5.3894,-5.3895 z"
+ style="fill:url(#linearGradient8276);fill-rule:evenodd"
+ sodipodi:nodetypes="ccccccccc"
+ inkscape:connector-curvature="0"
+ id="path8248" />
+ <path
+ id="path8386"
+ style="fill:#e5e5e5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.07946;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 270.06712,46.210342 h 131.08484 c 2.57843,0 4.65421,2.07578 4.65421,4.65421 V 110.32877 H 265.47632 l -0.0634,-59.464218 c -0.003,-2.57843 2.07577,-4.65421 4.6542,-4.65421 z"
+ sodipodi:nodetypes="sssccss" />
+ <path
+ d="m 401.53,56.738232 v 60.316998 c 0,2.5221 -1.9067,5.2211 -4.4288,5.2211 h -115.36 v 1.1058 h 115.36 c 3.4494,0 5.8255,-2.8775 5.8255,-6.3269 V 56.735232 h -1.3966 z"
+ style="fill:#ffffff;fill-rule:evenodd"
+ sodipodi:nodetypes="ccccccccc"
+ inkscape:connector-curvature="0"
+ id="path8250" />
+ <rect
+ ry="0"
+ rx="0"
+ y="122.70352"
+ x="275.2428"
+ height="11.497757"
+ width="126.4479"
+ id="rect8254"
+ style="fill:#e5e5e5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.426708;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ id="path8256"
+ style="fill:#e5e5e5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.562353;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 393.4815,52.662962 h 22.703 v 57.714268 h -22.703 z"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#e5e5e5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.501862;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 398.8,108.46993 17.3845,1.9073 v 16.8501 c -0.01,4.35818 -3.4735,6.86209 -7.0552,7.0129 l -7.7217,-0.0389 -8.522,-19.90136 z"
+ id="path8258"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ sodipodi:nodetypes="ccccccc"
+ id="path8260"
+ d="m 277.29053,108.30094 -11.99798,2.02783 -0.0634,16.89856 c 0.009,4.35818 3.47346,6.86209 7.05515,7.0129 l 7.70997,-0.0845 2.70377,-19.77131 z"
+ style="fill:#e5e5e5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.501862;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="ccszccc"
+ id="path8262"
+ d="m 401.6066,57.442592 14.5779,-4.77963 c -0.5791,-4.59526 -3.7322,-6.23962 -8.1254,-6.33301 -1.1285,-0.024 -2.0562,-0.0888 -3.2532,-0.10917 -1.197,-0.0204 -3.9281,-0.002 -3.9281,-0.002 -2.7541,0.53934 -4.91,2.11709 -6.4171,4.70431 z"
+ style="fill:#e5e5e5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.501862;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ id="rect8264"
+ style="fill:#f8f8f8;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient8268);stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ ry="5.4014425"
+ height="71.200417"
+ width="126.94011"
+ y="51.439529"
+ x="277.70044" />
+ </g>
+ <g
+ transform="translate(-126.10828,-102.12398)"
+ id="g8395">
+ <path
+ sodipodi:nodetypes="sssccss"
+ d="m 270.62605,248.25609 h 74.48877 c 2.57843,0 4.65421,2.07578 4.65421,4.65421 v 59.46422 h -83.73378 l -0.0634,-59.46422 c -0.003,-2.57843 2.07577,-4.65421 4.6542,-4.65421 z"
+ style="fill:#656565;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.07946;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path8364" />
+ <rect
+ ry="0"
+ rx="0"
+ y="324.74927"
+ x="271.8403"
+ height="11.497757"
+ width="74.104309"
+ id="rect8303"
+ style="opacity:1;fill:#929292;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.32666;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ id="path8305"
+ style="opacity:1;fill:#d6d6d6;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.562353;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 336.96508,254.70871 h 22.703 v 57.71427 h -22.703 z"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="opacity:1;fill:url(#linearGradient8323);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.501862;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 342.28358,310.51568 17.3845,1.9073 v 16.8501 c -0.01,4.35818 -3.4735,6.86209 -7.0552,7.0129 l -7.7217,-0.0389 -8.522,-19.90136 z"
+ id="path8307"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ sodipodi:nodetypes="ccccccc"
+ id="path8309"
+ d="m 278.03323,310.34669 -11.99798,2.02783 -0.0634,16.89856 c 0.009,4.35818 3.47346,6.86209 7.05515,7.0129 l 7.70997,-0.0845 2.70377,-19.77131 z"
+ style="opacity:1;fill:url(#linearGradient8321);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.501862;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="ccszccc"
+ id="path8311"
+ d="m 345.09018,259.48834 14.5779,-4.77963 c -0.5791,-4.59526 -3.7322,-6.23962 -8.1254,-6.33301 -1.1285,-0.024 -2.0562,-0.0888 -3.2532,-0.10917 -1.197,-0.0204 -3.9281,-0.002 -3.9281,-0.002 -2.7541,0.53934 -4.91,2.11709 -6.4171,4.70431 z"
+ style="opacity:1;fill:url(#linearGradient8319);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.501862;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ id="rect8313"
+ style="fill:url(#linearGradient8315);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient8317);stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ ry="5.4225683"
+ height="71.478889"
+ width="68.892021"
+ y="253.34604"
+ x="278.30389" />
+ </g>
+ <g
+ transform="translate(0,3.1855495)"
+ id="g8476">
+ <path
+ id="path8436"
+ style="fill:#e5e5e5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.07946;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 144.51777,43.024793 h 74.48877 c 2.57843,0 4.65421,2.07578 4.65421,4.65421 v 59.464217 h -83.73378 l -0.0634,-59.464217 c -0.003,-2.57843 2.07577,-4.65421 4.6542,-4.65421 z"
+ sodipodi:nodetypes="sssccss" />
+ <rect
+ style="fill:#e5e5e5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.32666;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect8438"
+ width="74.104309"
+ height="11.497757"
+ x="145.73203"
+ y="119.51796"
+ rx="0"
+ ry="0" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ d="m 210.8568,49.477413 h 22.703 v 57.714267 h -22.703 z"
+ style="fill:#e5e5e5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.562353;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path8440" />
+ <path
+ sodipodi:nodetypes="ccccccc"
+ id="path8442"
+ d="m 216.1753,105.28438 17.3845,1.9073 v 16.8501 c -0.01,4.35818 -3.4735,6.86209 -7.0552,7.0129 l -7.7217,-0.0389 -8.522,-19.90136 z"
+ style="fill:#e5e5e5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.501862;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ style="fill:#e5e5e5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.501862;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 151.92495,105.11539 -11.99798,2.02783 -0.0634,16.89856 c 0.009,4.35818 3.47346,6.86209 7.05515,7.0129 l 7.70997,-0.0845 2.70377,-19.77131 z"
+ id="path8444"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:#e5e5e5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.501862;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 218.9819,54.257043 14.5779,-4.77963 c -0.5791,-4.59526 -3.7322,-6.23962 -8.1254,-6.33301 -1.1285,-0.024 -2.0562,-0.0888 -3.2532,-0.10917 -1.197,-0.0204 -3.9281,-0.002 -3.9281,-0.002 -2.7541,0.53934 -4.91,2.11709 -6.4171,4.70431 z"
+ id="path8446"
+ sodipodi:nodetypes="ccszccc" />
+ <rect
+ x="152.19562"
+ y="48.114742"
+ width="68.892021"
+ height="71.478889"
+ ry="5.4225683"
+ style="fill:#f8f8f8;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient8460);stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect8448" />
+ </g>
+ <g
+ transform="matrix(0.83513795,0,0,0.83513795,-494.92828,28.466477)"
+ id="g9415">
+ <path
+ style="fill:url(#linearGradient9331);fill-opacity:1;stroke:none;stroke-width:1.24314;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path2818"
+ d="m 728.71927,191.15556 c 0,25.31414 -12.65005,45.83532 -28.25465,45.83532 -15.6046,0 -28.25465,-20.52118 -28.25465,-45.83532 0,-25.31414 12.87203,-40.95154 28.47664,-40.95154 15.6046,0 28.03266,15.6374 28.03266,40.95154 z" />
+ <path
+ style="fill:none;stroke:#333333;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2824"
+ d="m 700.46462,150.76421 v 38.00227"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#333333;stroke-width:1;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2822"
+ d="m 727.85189,184.1953 c -16.7914,6.29576 -36.32862,6.68664 -54.76049,0" />
+ <rect
+ style="fill:url(#linearGradient9339);fill-opacity:1;fill-rule:evenodd;stroke:#333333;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3699"
+ y="157.27585"
+ x="695.24786"
+ ry="5.216753"
+ rx="5.216753"
+ height="25.528791"
+ width="10.433506" />
+ </g>
+ </g>
+ <metadata
+ id="metadata41">
+ <rdf:RDF>
+ <cc:Work>
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <cc:license
+ rdf:resource="http://creativecommons.org/publicdomain/zero/1.0/" />
+ <dc:publisher>
+ <cc:Agent
+ rdf:about="http://openclipart.org/">
+ <dc:title>Openclipart</dc:title>
+ </cc:Agent>
+ </dc:publisher>
+ <dc:title></dc:title>
+ </cc:Work>
+ <cc:License
+ rdf:about="http://creativecommons.org/publicdomain/zero/1.0/">
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#Reproduction" />
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#Distribution" />
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
+ </cc:License>
+ </rdf:RDF>
+ </metadata>
+</svg>
settings.gradle
+rootProject.name = 'kmcaster'
src/main/com/whitemagicsoftware/kmcaster/KmCaster.java
+/*
+ * Copyright 2020 White Magic Software, Ltd.
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package com.whitemagicsoftware.kmcaster;
+
+import org.jnativehook.NativeHookException;
+import org.jnativehook.mouse.NativeMouseEvent;
+import org.jnativehook.mouse.NativeMouseInputListener;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.awt.geom.RoundRectangle2D;
+
+import static org.jnativehook.GlobalScreen.*;
+
+/**
+ * This class is responsible for logging key presses and mouse clicks on the
+ * screen. While there is a plethora of software out here that does this,
+ * none meet all the following criteria: small size, easily positioned,
+ * show single key stroke or chord, shows left/right mouse clicks, shows
+ * release of modifier keys when quickly typing, and traps all keys typed
+ * from within Sikuli.
+ * <p>
+ * When using the XFCE Window Manager, enable compositing as follows:
+ * </p>
+ * <ol>
+ * <li>Open the Xfce Applications Menu.</li>
+ * <li>Click Settings, Settings Editor.</li>
+ * <li>Select xfwm4, near the bottom left.</li>
+ * <li>Check the value column for use_compositing.</li>
+ * </ol>
+ */
+@SuppressWarnings("unused")
+public class KmCaster {
+ private static final float ARC = 8;
+ private static final int FRAME_WIDTH = 380;
+ private static final int FRAME_HEIGHT = 60;
+
+ public static class MouseListener implements NativeMouseInputListener {
+ public void nativeMouseClicked( NativeMouseEvent e ) {
+// System.out.println( "Mouse Clicked: " + e.getClickCount() );
+ }
+
+ public void nativeMousePressed( NativeMouseEvent e ) {
+// System.out.println( "Mouse Pressed: " + e.getButton() );
+ }
+
+ public void nativeMouseReleased( NativeMouseEvent e ) {
+// System.out.println( "Mouse Released: " + e.getButton() );
+ }
+
+ public void nativeMouseMoved( NativeMouseEvent e ) {
+// System.out.println( "Mouse Moved: " + e.getX() + ", " + e.getY() );
+ }
+
+ public void nativeMouseDragged( NativeMouseEvent e ) {
+// System.out.println( "Mouse Dragged: " + e.getX() + ", " + e.getY() );
+ }
+ }
+
+ public static class FrameDragListener extends MouseAdapter {
+ private final JFrame mFrame;
+ private Point mInitCoordinates;
+
+ public FrameDragListener( final JFrame frame ) {
+ mFrame = frame;
+ }
+
+ public void mouseReleased( final MouseEvent e ) {
+ mInitCoordinates = null;
+ }
+
+ public void mousePressed( final MouseEvent e ) {
+ mInitCoordinates = e.getPoint();
+ }
+
+ public void mouseDragged( final MouseEvent e ) {
+ final Point dragCoordinates = e.getLocationOnScreen();
+ mFrame.setLocation( dragCoordinates.x - mInitCoordinates.x,
+ dragCoordinates.y - mInitCoordinates.y );
+ }
+ }
+
+ private static class EventFrame extends JFrame {
+ public EventFrame() {
+ setUndecorated( true );
+ setAlwaysOnTop( true );
+ setBackground( new Color( .2f, .2f, .2f, 0.5f ) );
+
+ setLocationRelativeTo( null );
+ setSize( FRAME_WIDTH, FRAME_HEIGHT );
+ setShape( new RoundRectangle2D.Double(
+ 0, 0, getWidth(), getHeight(), ARC, ARC ) );
+
+ FrameDragListener frameDragListener = new FrameDragListener( this );
+ addMouseListener( frameDragListener );
+ addMouseMotionListener( frameDragListener );
+ }
+ }
+
+ private final EventFrame mFrame = new EventFrame();
+
+ public KmCaster() {
+ final MouseListener mouseListener = new MouseListener();
+
+ // Add the appropriate listeners.
+ addNativeMouseListener( mouseListener );
+ addNativeMouseMotionListener( mouseListener );
+ }
+
+ public void show() {
+ mFrame.setVisible( true );
+ }
+
+ public static void main( final String[] args ) {
+ try {
+ registerNativeHook();
+
+ final var kc = new KmCaster();
+ kc.show();
+ } catch( final NativeHookException ex ) {
+ ex.printStackTrace();
+ }
+ }
+}

Initial project check-in

Author Dave Jarvis <email>
Date 2020-07-15 16:39:42 GMT-0700
Commit fddce17e763c952ca5ed58d1bb8c8e94e49c671c
Parent 492f6fe
Delta 1250 lines added, 7 lines removed, 1243-line increase