Compare commits
1 Commits
1.14.1
...
repeat-sen
Author | SHA1 | Date | |
---|---|---|---|
8662f3afd4 |
43
.github/workflows/make-apk.yml
vendored
@ -9,45 +9,26 @@ jobs:
|
||||
Build-Apk:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Cache fontforge and extra dependencies
|
||||
uses: actions/cache@v2
|
||||
- name: Install nix
|
||||
uses: cachix/install-nix-action@v15
|
||||
with:
|
||||
path: /usr/local/bin
|
||||
key: usr-local-bin
|
||||
- name: Install latest FontForge version (using AppImage)
|
||||
run: |
|
||||
# Get most recent version of FontForge
|
||||
# Using AppImage there is no dependecy problem, it is the latest version and it's easier to cache
|
||||
cd /usr/local/bin
|
||||
sudo wget -c -N https://github.com/fontforge/fontforge/releases/download/20220308/FontForge-2022-03-08-582bd41-x86_64.AppImage
|
||||
sudo chmod +x ./FontForge-2022-03-08-582bd41-x86_64.AppImage
|
||||
sudo ln --symbolic --force /usr/local/bin/FontForge-2022-03-08-582bd41-x86_64.AppImage /usr/local/bin/fontforge
|
||||
- uses: actions/setup-java@v2
|
||||
nix_path: nixpkgs=channel:nixos-unstable
|
||||
- uses: cachix/cachix-action@v10
|
||||
with:
|
||||
distribution: 'zulu' # See 'Supported distributions' for available options
|
||||
java-version: '11'
|
||||
- name: Checkout repo
|
||||
name: julow
|
||||
signingKey: '${{ secrets.CACHIX_SIGNING_KEY }}'
|
||||
- name: Checkout Repo
|
||||
uses: actions/checkout@v2
|
||||
- name: Cache debug certificate
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: _build/debug.keystore
|
||||
key: debug-keystore
|
||||
- name: Restore debug keystore from github Secrets
|
||||
run: |
|
||||
mkdir -p _build
|
||||
cd "$GITHUB_WORKSPACE/_build"
|
||||
# Check if exist and use the secret named DEBUG_KEYSTORE
|
||||
# The contents of the secret can be obtained -
|
||||
# from the debug.keystore.asc from you local _build folder
|
||||
if [[ ! "${{ secrets.DEBUG_KEYSTORE }}" == "" ]]; then
|
||||
echo "${{ secrets.DEBUG_KEYSTORE }}" > "debug.keystore.asc"
|
||||
if [[ -s "debug.keystore.asc" ]]; then
|
||||
gpg -d --passphrase "debug0" --batch "debug.keystore.asc" > "debug.keystore"
|
||||
fi
|
||||
fi
|
||||
- name: Build
|
||||
run: make
|
||||
- name: Run nix-shell and Make
|
||||
uses: ZenithalHourlyRate/nix-shell-action@v4
|
||||
with:
|
||||
file: shell.nix
|
||||
script: make
|
||||
- name: Save debug apk
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
|
1
.gitignore
vendored
@ -1,4 +1,3 @@
|
||||
*.keystore
|
||||
*.keystore.asc
|
||||
_build
|
||||
/*-keystore.conf
|
||||
|
@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="juloo.keyboard2" android:versionCode="20" android:versionName="1.14.1" android:hardwareAccelerated="false">
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="juloo.keyboard2" android:versionCode="18" android:versionName="1.13.1" android:hardwareAccelerated="false">
|
||||
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="30"/>
|
||||
<application android:label="@string/app_name" android:allowBackup="true" android:icon="@drawable/ic_launcher" android:hardwareAccelerated="false">
|
||||
<service android:name="juloo.keyboard2.Keyboard2" android:label="@string/app_name" android:permission="android.permission.BIND_INPUT_METHOD">
|
||||
|
@ -23,24 +23,6 @@ make
|
||||
If the build succeed, the debug apk is located in
|
||||
`_build/juloo.keyboard2.debug.apk`.
|
||||
|
||||
## Using the local debug.keystore on the Github CI actions
|
||||
|
||||
It's possible to save the local debug.keystore into a github secret, so the same keystore is utilized to build the debug apk in the CI github actions.
|
||||
Doing this, they wil have the same signature, thus the debug apk can be updated without having to uninstall it first.
|
||||
|
||||
After you sucessfully run `make`, (thus a debug.keystore exists) you can use this second command to generate a base64 stringified version of it
|
||||
|
||||
```sh
|
||||
cd _build
|
||||
gpg -c --armor --pinentry-mode loopback --passphrase debug0 --yes "debug.keystore"
|
||||
```
|
||||
|
||||
A file will be generated inside the local `_build/` folder, called `debug.keystore.asc`
|
||||
|
||||
You can copy the content of this file, and with that, paste it into a new github secret in your repo settings.
|
||||
|
||||
The secret must be named `DEBUG_KEYSTORE`
|
||||
|
||||
## Debugging on your phone
|
||||
|
||||
First [Enable adb debugging on your device](https://developer.android.com/studio/command-line/adb#Enabling).
|
||||
|
20
Makefile
@ -6,6 +6,7 @@ ANDROID_PLATFORM_VERSION = android-30
|
||||
JAVA_VERSION = 1.8
|
||||
|
||||
SRC_DIR = srcs
|
||||
ASSETS_DIR = assets
|
||||
RES_DIR = res
|
||||
|
||||
EXTRA_JARS =
|
||||
@ -20,7 +21,7 @@ installd: _build/$(PACKAGE_NAME).debug.apk
|
||||
|
||||
clean:
|
||||
rm -rf _build/*.dex _build/class _build/gen _build/*.apk _build/*.unsigned-apk \
|
||||
_build/*.idsig _build/assets
|
||||
_build/*.idsig
|
||||
|
||||
.PHONY: release debug installd clean
|
||||
|
||||
@ -45,6 +46,7 @@ JAVAC_FLAGS = -source $(JAVA_VERSION) -target $(JAVA_VERSION) -encoding utf8
|
||||
MANIFEST_FILE = AndroidManifest.xml
|
||||
JAVA_FILES = $(shell find $(SRC_DIR) -name '*.java')
|
||||
RES_FILES = $(shell find $(RES_DIR) -type f)
|
||||
ASSETS_FILES = $(shell find $(ASSETS_DIR) -type f 2>/dev/null)
|
||||
|
||||
# Debug signing
|
||||
|
||||
@ -78,12 +80,11 @@ _build/%.apk: _build/%.unsigned-apk %-keystore.conf
|
||||
_build/%.unsigned-apk: _build/%.unaligned-apk
|
||||
$(ANDROID_BUILD_TOOLS)/zipalign -fp 4 "$<" "$@"
|
||||
|
||||
APK_EXTRA_FILES = classes.dex assets/special_font.ttf
|
||||
|
||||
_build/%.unaligned-apk: $(addprefix _build/,$(APK_EXTRA_FILES)) $(MANIFEST_FILE)
|
||||
_build/%.unaligned-apk: _build/classes.dex $(MANIFEST_FILE) $(ASSETS_FILES)
|
||||
$(ANDROID_BUILD_TOOLS)/aapt package -f -M $(MANIFEST_FILE) -S $(RES_DIR) \
|
||||
-I $(ANDROID_PLATFORM)/android.jar -F "$@" $(AAPT_PACKAGE_FLAGS)
|
||||
cd $(@D) && $(ANDROID_BUILD_TOOLS)/aapt add $(@F) $(APK_EXTRA_FILES)
|
||||
[ -z "$(ASSETS_FILES)" ] || $(ANDROID_BUILD_TOOLS)/aapt add "$@" $(ASSETS_FILES)
|
||||
cd $(@D) && $(ANDROID_BUILD_TOOLS)/aapt add $(@F) classes.dex
|
||||
|
||||
# R.java
|
||||
|
||||
@ -95,15 +96,6 @@ $(R_FILE): $(RES_FILES) $(MANIFEST_FILE)
|
||||
$(ANDROID_BUILD_TOOLS)/aapt package -f -m -S $(RES_DIR) -J $(GEN_DIR) \
|
||||
-M $(MANIFEST_FILE) -I $(ANDROID_PLATFORM)/android.jar
|
||||
|
||||
# Special font
|
||||
|
||||
SPECIAL_FONT_GLYPHS = $(wildcard $(CURDIR)/srcs/special_font/*.svg)
|
||||
SPECIAL_FONT_SCRIPT = $(CURDIR)/srcs/special_font/build.pe
|
||||
|
||||
_build/assets/special_font.ttf: $(SPECIAL_FONT_SCRIPT) $(SPECIAL_FONT_GLYPHS)
|
||||
mkdir -p $(@D)
|
||||
fontforge -lang=ff -script $(SPECIAL_FONT_SCRIPT) $(CURDIR)/$@ $(SPECIAL_FONT_GLYPHS)
|
||||
|
||||
# Compile java classes and build classes.dex
|
||||
|
||||
OBJ_DIR = _build/class
|
||||
|
15
assets/fonts/README.md
Normal file
@ -0,0 +1,15 @@
|
||||
# Fonts
|
||||
|
||||
The glyphs from this font are made by:
|
||||
|
||||
- Home and End
|
||||
Author: @sdrapha
|
||||
|
||||
- Cog
|
||||
Copyright (C) 2016 by Dave Gandy
|
||||
Author: Dave Gandy
|
||||
License: SIL ()
|
||||
|
||||
- Emoticon, PageUp and PageDown
|
||||
IcoMoon-Free is a free vector icon pack by Keyamoon.
|
||||
License: Attribution 4.0 International (CC BY 4.0)
|
BIN
assets/fonts/keys.ttf
Normal file
@ -1,21 +0,0 @@
|
||||
Translations: Brazilian portuguese (@igorSilCar), Chinese-Simplified (@9-2-1), Korean (@notnickid)
|
||||
New layouts: Swedish (@thabubble), Korean (@notnickid)
|
||||
|
||||
Improved computation of the swipe gesture and fix unstoppable key-repeat on
|
||||
some devices.
|
||||
|
||||
Moved keys away from the edges of the screen and other improvements to the layouts.
|
||||
|
||||
Improved rendering of some symbols.
|
||||
|
||||
Added more characters to the keyboard:
|
||||
- New combinations to Fn (@ArenaL5)
|
||||
- Currency symbols
|
||||
- Added arrow and box symbols (@sdrapha)
|
||||
- F11 and F12.
|
||||
|
||||
Option for making modifiers lockable. (@sdrapha)
|
||||
Fixes to the Spanish layout and other fixes. (@ArenaL5)
|
||||
Many other fixes.
|
||||
|
||||
Huge thanks to the contributors: @igorSilCar, @sdrapha, @ArenaL5, @notnickid, @9-2-1, @thabubble
|
@ -1,25 +0,0 @@
|
||||
Quick fix release.
|
||||
|
||||
Previously:
|
||||
|
||||
Translations: Brazilian portuguese (@igorSilCar), Chinese-Simplified (@9-2-1), Korean (@notnickid)
|
||||
New layouts: Swedish (@thabubble), Korean (@notnickid)
|
||||
|
||||
Improved computation of the swipe gesture and fix unstoppable key-repeat on
|
||||
some devices.
|
||||
|
||||
Moved keys away from the edges of the screen and other improvements to the layouts.
|
||||
|
||||
Improved rendering of some symbols.
|
||||
|
||||
Added more characters to the keyboard:
|
||||
- New combinations to Fn (@ArenaL5)
|
||||
- Currency symbols
|
||||
- Added arrow and box symbols (@sdrapha)
|
||||
- F11 and F12.
|
||||
|
||||
Option for making modifiers lockable. (@sdrapha)
|
||||
Fixes to the Spanish layout and other fixes. (@ArenaL5)
|
||||
Many other fixes.
|
||||
|
||||
Huge thanks to the contributors: @igorSilCar, @sdrapha, @ArenaL5, @notnickid, @9-2-1, @thabubble
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 56 KiB |
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 64 KiB |
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 46 KiB |
@ -1,18 +0,0 @@
|
||||
이 앱은 안드로이드용 가상 키보드입니다. 주요 기능은 스와이프 제스처를 사용하여 모든 ASCII 문자를 쉽게 입력할 수 있다는 점과 악센트 및 수정자 키를 위한 데드 키와 특수 키(tab, esc, 방향키 등)이 있다는 것입니다.
|
||||
|
||||
키보드는 각 키의 모서리에 최대 4개의 추가 문자를 표시합니다. 이러한 추가 문자는 키에서 손가락을 스와이프하여 적중됩니다.
|
||||
|
||||
일부 하이라이트 기능:
|
||||
|
||||
- PC 키보드에서 사용할 수 있는 모든 문자 및 특수 키를 사요 가능합니다. 이것은 Termux와 같은 앱을 사용하는 데 효과적입니다.
|
||||
|
||||
- 여기에는 Tab, Esc, 방향키 및 function 키뿐만이 아닌 Ctrl 및 Alt 키도 포함되어 있습니다 !
|
||||
|
||||
- 악센트 키는 데드 키를 사용하여 액세스할 수 있습니다. 먼저 악센트 키를 활성화한 다음 악센트 문자를 입력합니다.
|
||||
|
||||
- 매우 가볍고 빠릅니다. Google 키보드보다 500배, 기본 키보드보다 15배 적은 공간을 사용합니다. 광고와 사용 기록 추적 없음.
|
||||
|
||||
- 다중 레이아웃: QWERTY, QWERTZ, AZERTY. 다양한 테마: White, Dark, OLED Black. 또한 다른 많은 옵션들.
|
||||
|
||||
다른 가상 키보드와 마찬가지로 시스템 설정에서 활성화해야 합니다. 시스템 설정을 열고 다음으로 이동합니다.
|
||||
시스템 > 언어 및 입력 > 키보드 > 키보드 관리.
|
@ -1 +0,0 @@
|
||||
개발자들을 위한 가벼운 가상 키보드.
|
@ -1 +0,0 @@
|
||||
Unexpected Keyboard
|
@ -11,7 +11,7 @@
|
||||
<string name="pref_accents_e_none">Ocultar acentos</string>
|
||||
<string name="pref_category_typing">Escribiendo</string>
|
||||
<string name="pref_swipe_dist_title">Distancia para deslizar</string>
|
||||
<string name="pref_swipe_dist_summary">Distancia de caracteres en las esquinas de las letras (%s)</string>
|
||||
<string name="pref_swipe_dist_summary">Distancia de caractéres en las esquinas de las letras (%s)</string>
|
||||
<string name="pref_long_timeout_title">Tiempo de espera de repetición de tecla</string>
|
||||
<string name="pref_long_interval_title">Intervalo de repetición de tecla</string>
|
||||
<string name="pref_category_vibrate">Vibración</string>
|
||||
@ -20,14 +20,12 @@
|
||||
<string name="pref_vibrate_duration_title">Duración</string>
|
||||
<string name="pref_precise_repeat_title">Movimientos de cursor preciso</string>
|
||||
<string name="pref_precise_repeat_summary">Modular la velocidad de repetición de teclas según si se desliza más o menos</string>
|
||||
<string name="pref_lockable_keys_title">Bloqueo de teclas modificadoras</string>
|
||||
<string name="pref_lockable_keys_summary">Teclas modificadoras que se pueden bloquear pulsándolas dos veces</string>
|
||||
<string name="pref_category_style">Estilo</string>
|
||||
<string name="pref_margin_bottom_title">Margen del pie</string>
|
||||
<string name="pref_keyboard_height_title">Altura del teclado</string>
|
||||
<string name="pref_horizontal_margin_title">Margen horizontal</string>
|
||||
<string name="pref_character_size_title">Tamaño de etiqueta</string>
|
||||
<string name="pref_character_size_summary">Tamaño de caracteres mostrados en el teclado (%.2fx)</string>
|
||||
<string name="pref_character_size_summary">Tamaño de caractéres mostrados en el teclado (%.2fx)</string>
|
||||
<string name="pref_theme">Tema</string>
|
||||
<string name="pref_theme_e_system">Ajustes de sistema</string>
|
||||
<string name="pref_theme_e_dark">Oscuro</string>
|
||||
|
@ -1,47 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="settings_activity_label">Unexpected Keyboard 설정</string>
|
||||
<string name="pref_category_layout">레이아웃</string>
|
||||
<string name="pref_layout_title">키보드 레이아웃 변경</string>
|
||||
<string name="pref_layout_e_system">시스템 세팅</string>
|
||||
<string name="pref_accents_title">악센트</string>
|
||||
<string name="pref_accents_e_all_installed">설치된 모든 언어의 악센트 표시</string>
|
||||
<string name="pref_accents_e_selected">선택한 언어의 악센트만 표시</string>
|
||||
<string name="pref_accents_e_all">모든 언어의 악센트 표시</string>
|
||||
<string name="pref_accents_e_none">모든 언어의 악센트 숨기기</string>
|
||||
<string name="pref_category_typing">타자</string>
|
||||
<string name="pref_swipe_dist_title">스와이프 범위</string>
|
||||
<string name="pref_swipe_dist_summary">키 모서리 문자의 입력 범위 (%s)</string>
|
||||
<string name="pref_long_timeout_title">키 길게 누르기 지연</string>
|
||||
<string name="pref_long_interval_title">키 반복 간격</string>
|
||||
<string name="pref_category_vibrate">진동</string>
|
||||
<string name="pref_vibrate_title">진동</string>
|
||||
<string name="pref_vibrate_summary">키 누를 때 진동 키거/끄기</string>
|
||||
<string name="pref_vibrate_duration_title">지속 시간</string>
|
||||
<string name="pref_precise_repeat_title">정확한 커서 움직임</string>
|
||||
<string name="pref_precise_repeat_summary">더 많거나 적은 스와이프로 키 반복 조절</string>
|
||||
<string name="pref_category_style">스타일</string>
|
||||
<string name="pref_margin_bottom_title">아래 넓이</string>
|
||||
<string name="pref_keyboard_height_title">키보드 높이</string>
|
||||
<string name="pref_horizontal_margin_title">양 옆 넓이</string>
|
||||
<string name="pref_character_size_title">폰트 크기</string>
|
||||
<string name="pref_character_size_summary">키보드의 표시되는 폰트 크기 (%.2fx)</string>
|
||||
<string name="pref_theme">테마</string>
|
||||
<string name="pref_theme_e_system">시스템 테마</string>
|
||||
<string name="pref_theme_e_dark">Dark</string>
|
||||
<string name="pref_theme_e_light">Light</string>
|
||||
<string name="pref_theme_e_black">Black</string>
|
||||
<string name="pref_swipe_dist_e_very_short">매우 짧음</string>
|
||||
<string name="pref_swipe_dist_e_short">짧음</string>
|
||||
<string name="pref_swipe_dist_e_default">보통</string>
|
||||
<string name="pref_swipe_dist_e_far">넓음</string>
|
||||
<string name="pref_swipe_dist_e_very_far">매우 넓음</string>
|
||||
<string name="pref_key_horizontal_space">키보드 양 옆 간격</string>
|
||||
<string name="pref_key_vertical_space">키보드 세로 간격</string>
|
||||
<string name="key_action_next">다음</string>
|
||||
<string name="key_action_done">확인</string>
|
||||
<string name="key_action_go">Go</string>
|
||||
<string name="key_action_prev">이전</string>
|
||||
<string name="key_action_search">검색</string>
|
||||
<string name="key_action_send">보내기</string>
|
||||
</resources>
|
@ -1,51 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name" product="debug">Unexpected Keyboard (debug)</string>
|
||||
<string name="app_name" product="default">Unexpected Keyboard</string>
|
||||
<string name="settings_activity_label">Unexpected Keyboard 设置</string>
|
||||
<string name="pref_category_layout">布局</string>
|
||||
<string name="pref_layout_title">改变键盘布局</string>
|
||||
<string name="pref_layout_e_system">系统设置</string>
|
||||
<string name="pref_accents_title">声调</string>
|
||||
<string name="pref_accents_e_all_installed">显示所有安装的语言的声调符号</string>
|
||||
<string name="pref_accents_e_selected">只显示选择的语言的声调符号</string>
|
||||
<string name="pref_accents_e_all">显示所有声调符号</string>
|
||||
<string name="pref_accents_e_none">隐藏声调符号</string>
|
||||
<string name="pref_category_typing">输入</string>
|
||||
<string name="pref_swipe_dist_title">滑动触发距离</string>
|
||||
<string name="pref_swipe_dist_summary">输入按键四角的符号需要滑动的距离 (%s)</string>
|
||||
<string name="pref_long_timeout_title">长按到开始重复输入的时间</string>
|
||||
<string name="pref_long_interval_title">长按后每次重复输入的时间间隔</string>
|
||||
<string name="pref_category_vibrate">振动</string>
|
||||
<string name="pref_vibrate_title">振动</string>
|
||||
<string name="pref_vibrate_summary">启用或者禁用按下按键时振动</string>
|
||||
<string name="pref_vibrate_duration_title">每次振动持续的时间</string>
|
||||
<string name="pref_precise_repeat_title">精确控制光标移速</string>
|
||||
<string name="pref_precise_repeat_summary">按键重复按下速度由手指滑动的距离决定</string>
|
||||
<string name="pref_lockable_keys_title">组合键锁定</string>
|
||||
<string name="pref_lockable_keys_summary">可以通过输入两次锁定任何组合键(Ctrl, Alt, Fn, 声调符号等)</string>
|
||||
<string name="pref_category_style">样式</string>
|
||||
<string name="pref_margin_bottom_title">键盘下边距</string>
|
||||
<string name="pref_keyboard_height_title">键盘高度</string>
|
||||
<string name="pref_horizontal_margin_title">键盘左右边距</string>
|
||||
<string name="pref_character_size_title">字符大小</string>
|
||||
<string name="pref_character_size_summary">按键上显示的字符的大小 (%.2fx)</string>
|
||||
<string name="pref_theme">主题</string>
|
||||
<string name="pref_theme_e_system">跟随系统设置</string>
|
||||
<string name="pref_theme_e_dark">暗色</string>
|
||||
<string name="pref_theme_e_light">亮色</string>
|
||||
<string name="pref_theme_e_black">黑色</string>
|
||||
<string name="pref_swipe_dist_e_very_short">非常短</string>
|
||||
<string name="pref_swipe_dist_e_short">短</string>
|
||||
<string name="pref_swipe_dist_e_default">中(默认)</string>
|
||||
<string name="pref_swipe_dist_e_far">长</string>
|
||||
<string name="pref_swipe_dist_e_very_far">非常长</string>
|
||||
<string name="pref_key_horizontal_space">按键的左右边距</string>
|
||||
<string name="pref_key_vertical_space">按键的上下边距</string>
|
||||
<string name="key_action_next">下一项</string>
|
||||
<string name="key_action_done">完成</string>
|
||||
<string name="key_action_go">前往</string>
|
||||
<string name="key_action_prev">前一项</string>
|
||||
<string name="key_action_search">搜索</string>
|
||||
<string name="key_action_send">发送</string>
|
||||
</resources>
|
@ -6,7 +6,6 @@
|
||||
<item>qwerty</item>
|
||||
<item>qwerty_pt</item>
|
||||
<item>qwerty_es</item>
|
||||
<item>qwerty_ko</item>
|
||||
<item>qwerty_lv</item>
|
||||
<item>qwerty_sv_se</item>
|
||||
<item>ru_jcuken</item>
|
||||
@ -20,7 +19,6 @@
|
||||
<item>QWERTY</item>
|
||||
<item>QWERTY (Brasileiro)</item>
|
||||
<item>QWERTY (Español)</item>
|
||||
<item>QWERTY (Korean)</item>
|
||||
<item>QWERTY (Latvian)</item>
|
||||
<item>QWERTY (Swedish)</item>
|
||||
<item>ЙЦУКЕН (Русский)</item>
|
||||
@ -28,16 +26,6 @@
|
||||
<item>Bulgarian (Phonetic Traditional)</item>
|
||||
<item>Dvorak</item>
|
||||
</string-array>
|
||||
<string-array name="pref_programming_layout_values">
|
||||
<item>none</item>
|
||||
<item>qwerty</item>
|
||||
<item>dvorak</item>
|
||||
</string-array>
|
||||
<string-array name="pref_programming_layout_entries">
|
||||
<item>@string/pref_programming_layout_none</item>
|
||||
<item>QWERTY</item>
|
||||
<item>Dvorak</item>
|
||||
</string-array>
|
||||
<string-array name="pref_accents_entries">
|
||||
<item>@string/pref_accents_e_all_installed</item>
|
||||
<item>@string/pref_accents_e_selected</item>
|
||||
|
@ -11,8 +11,6 @@
|
||||
<string name="pref_accents_e_selected">Only show accents for the selected language</string>
|
||||
<string name="pref_accents_e_all">Show all accents</string>
|
||||
<string name="pref_accents_e_none">Hide accents</string>
|
||||
<string name="pref_programming_layout_title">Keyboard layout for programming</string>
|
||||
<string name="pref_programming_layout_none">None</string>
|
||||
<string name="pref_category_typing">Typing</string>
|
||||
<string name="pref_swipe_dist_title">Swiping distance</string>
|
||||
<string name="pref_swipe_dist_summary">Distance of characters in the corners of the keys (%s)</string>
|
||||
@ -25,7 +23,7 @@
|
||||
<string name="pref_precise_repeat_title">Precise cursor movements</string>
|
||||
<string name="pref_precise_repeat_summary">Modulate key repeat speed by swiping more or less</string>
|
||||
<string name="pref_lockable_keys_title">Lockable modifiers</string>
|
||||
<string name="pref_lockable_keys_summary">Modifiers that can be locked by typing them twice</string>
|
||||
<string name="pref_lockable_keys_summary">Modifier that can be locked by typing them twice</string>
|
||||
<string name="pref_category_style">Style</string>
|
||||
<string name="pref_margin_bottom_title">Margin bottom</string>
|
||||
<string name="pref_keyboard_height_title">Keyboard height</string>
|
||||
|
@ -15,4 +15,5 @@
|
||||
<dimen name="extra_horizontal_margin">0dp</dimen>
|
||||
<bool name="debug_logs" product="debug">true</bool>
|
||||
<bool name="debug_logs" product="default">false</bool>
|
||||
<dimen name="pointer_too_close">10dp</dimen>
|
||||
</resources>
|
||||
|
@ -1,19 +1,19 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<keyboard>
|
||||
<row>
|
||||
<key key0="a" key2="1" key4="esc"/>
|
||||
<key key0="z" key2="2" key3="&" key4="~"/>
|
||||
<key key0="a" key1="esc" key2="1" key3="&"/>
|
||||
<key key0="z" key2="2" key4="~"/>
|
||||
<key key0="e" key2="3" key3=""" key4="\#"/>
|
||||
<key key0="r" key2="4" key3="'"/>
|
||||
<key key0="t" key2="5" key3="(" key4=")"/>
|
||||
<key key0="y" key2="6" key3="-" key4="|"/>
|
||||
<key key0="u" key2="7" key4="`"/>
|
||||
<key key0="i" key2="8" key3="_" key4="\\"/>
|
||||
<key key0="o" key2="9" key3="\@" key4="f11_placeholder"/>
|
||||
<key key0="p" key1="0" key3="f12_placeholder"/>
|
||||
<key key0="o" key2="9"/>
|
||||
<key key0="p" key2="0" key4="\@"/>
|
||||
</row>
|
||||
<row>
|
||||
<key key0="q" key2="tab"/>
|
||||
<key key0="q" key1="tab"/>
|
||||
<key key0="s" key1="accent_ring" key3="ß"/>
|
||||
<key key0="d" key1="accent_grave" key3="accent_aigu"/>
|
||||
<key key0="f" key3="{" key4="}"/>
|
||||
@ -22,7 +22,7 @@
|
||||
<key key0="j" key1="accent_trema" key2="accent_circonflexe" key3="^"/>
|
||||
<key key0="k" key2="€" key3="$" key4="£"/>
|
||||
<key key0="l" key2="%"/>
|
||||
<key key0="m" key3="*"/>
|
||||
<key key0="m" key4="*"/>
|
||||
</row>
|
||||
<row>
|
||||
<key width="2.0" key0="shift"/>
|
||||
|
@ -1,8 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<row height="0.95">
|
||||
<key width="1.8" key0="ctrl" key2="meta" key4="switch_numeric"/>
|
||||
<key width="1.2" key0="fn" key1="alt" key2="change_method" key3="switch_emoji" key4="config"/>
|
||||
<key width="4.0" key0="space" key1="switch_programming" edgekeys="true"/>
|
||||
<key width="1.8" key0="ctrl" key2="meta" key3="switch_numeric"/>
|
||||
<key width="1.2" key0="alt" key1="fn" key2="change_method" key3="switch_emoji" key4="config"/>
|
||||
<key width="4.0" key0="space"/>
|
||||
<key width="1.2" key1="up" key2="right" key3="left" key4="down" edgekeys="true"/>
|
||||
<key width="1.8" key0="enter" key2="action"/>
|
||||
</row>
|
||||
|
@ -1,9 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<keyboard>
|
||||
<row>
|
||||
<key key0="shift" width="1.5" key2="esc" key4="tab"/>
|
||||
<key key0="p" key1="accent_ring" key2="." key3="<" key4="f11_placeholder"/>
|
||||
<key key0="y" key1="accent_grave" key2="," key3=">" key4="f12_placeholder"/>
|
||||
<key key0="shift" width="1.5" key1="esc" key2="tab"/>
|
||||
<key key0="p" key1="accent_ring" key2="." key3="<"/>
|
||||
<key key0="y" key1="accent_grave" key2="," key3=">"/>
|
||||
<key key0="f" key4="€"/>
|
||||
<key key0="g" key2="\\" key3="|"/>
|
||||
<key key0="c" key1="accent_trema" key2="accent_circonflexe" key3="{" key4="}"/>
|
||||
@ -12,7 +12,7 @@
|
||||
<key key0="backspace" key2="delete" width="1.5"/>
|
||||
</row>
|
||||
<row>
|
||||
<key key0="a" key2="1" key4="!"/>
|
||||
<key key0="a" key2="1" key3="!"/>
|
||||
<key key0="o" key1="accent_macron" key2="2" key3="\@"/>
|
||||
<key key0="e" key1="accent_caron" key2="3" key3="\#"/>
|
||||
<key key0="u" key2="4" key3="$"/>
|
||||
@ -21,7 +21,7 @@
|
||||
<key key0="h" key2="7" key3="&"/>
|
||||
<key key0="t" key2="8" key3="*"/>
|
||||
<key key0="n" key2="9" key3="(" key4=")"/>
|
||||
<key key0="s" key1="0" key3="ß"/>
|
||||
<key key0="s" key2="0" key3="ß"/>
|
||||
</row>
|
||||
<row>
|
||||
<key key0="q" shift="0.5" key1="accent_tilde" key2="`" key3="~"/>
|
||||
|
@ -1,8 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<keyboard>
|
||||
<row>
|
||||
<key key0="я" key2="1" key4="esc"/>
|
||||
<key key0="в" key1="!" key2="2" key3="\@" key4="ч"/>
|
||||
<key key0="я" key1="esc" key2="1" key3="ч" key4="!"/>
|
||||
<key key0="в" key2="2" key3="\@"/>
|
||||
<key key0="е" key2="3" key3="\#" key4="№"/>
|
||||
<key key0="р" key2="4" key3="$"/>
|
||||
<key key0="т" key2="5" key3="%"/>
|
||||
@ -10,7 +10,7 @@
|
||||
<key key0="у" key2="7" key3="&" key4="§"/>
|
||||
<key key0="и" key2="8" key3="*"/>
|
||||
<key key0="о" key1="accent_macron" key2="9" key3="(" key4=")"/>
|
||||
<key key0="п" key1="0" key3="f11_placeholder" key4="f12_placeholder"/>
|
||||
<key key0="п" key2="0" key3="ш" key4="щ"/>
|
||||
</row>
|
||||
<row>
|
||||
<key shift="0.5" key0="а" key1="tab" key2="`"/>
|
||||
@ -20,8 +20,8 @@
|
||||
<key key0="г" key1="accent_caron" key2="-" key3="_"/>
|
||||
<key key0="х" key2="=" key3="+"/>
|
||||
<key key0="й" key1="accent_trema" key2="accent_circonflexe" key4="}" key3="{"/>
|
||||
<key key0="к" key2="ш" key3="[" key4="]"/>
|
||||
<key key0="л" key1="щ" key2="|" key3="\\" key4="ю"/>
|
||||
<key key0="к" key3="[" key4="]"/>
|
||||
<key key0="л" key2="|" key3="\\" key4="ю"/>
|
||||
</row>
|
||||
<row>
|
||||
<key width="1.5" key0="shift"/>
|
||||
|
@ -1,9 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<keyboard>
|
||||
<row>
|
||||
<key key0="й" key2="1" key4="esc"/>
|
||||
<key key0="ц" key2="2" key3="\@" key4="~"/>
|
||||
<key key0="у" key2="3" key3="\#" key4="!"/>
|
||||
<key key0="й" key1="esc" key2="1" key3="~" key4="!"/>
|
||||
<key key0="ц" key2="2" key3="\@"/>
|
||||
<key key0="у" key2="3" key3="\#"/>
|
||||
<key key0="к" key2="4" key3="$"/>
|
||||
<key key0="е" key1="ё" key2="5" key3="%"/>
|
||||
<key key0="н" key2="6" key3="^"/>
|
||||
@ -11,8 +11,8 @@
|
||||
<key key0="ш" key2="8" key3="*"/>
|
||||
<key key0="щ" key2="9" key3="(" key4=")"/>
|
||||
<key key0="з" key2="0"/>
|
||||
<key key0="х" key1="{" key2="}" key4="f11_placeholder"/>
|
||||
<key key0="ъ" key1="[" key2="]" key4="f12_placeholder"/>
|
||||
<key key0="х" key1="{" key2="}"/>
|
||||
<key key0="ъ" key1="[" key2="]" />
|
||||
</row>
|
||||
<row>
|
||||
<key shift="0.5" key0="ф" key1="tab" key2="`"/>
|
||||
|
@ -7,7 +7,6 @@
|
||||
<subtype android:label="%s" android:languageTag="es" android:imeSubtypeLocale="es_ES" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="default_layout=qwerty_es,extra_keys=accent_grave|accent_aigu|accent_tilde|accent_trema|€"/>
|
||||
<subtype android:label="%s" android:languageTag="fr" android:imeSubtypeLocale="fr_FR" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="default_layout=azerty,extra_keys=accent_grave|accent_aigu|accent_circonflexe|accent_cedille|accent_trema|€"/>
|
||||
<subtype android:label="%s" android:languageTag="it" android:imeSubtypeLocale="it_IT" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="default_layout=qwerty,extra_keys=accent_grave|accent_aigu|€"/>
|
||||
<subtype android:label="%s" android:languageTag="ko" android:imeSubtypeLocale="ko_KR" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="default_layout=qwerty_ko"/>
|
||||
<subtype android:label="%s" android:languageTag="lv" android:imeSubtypeLocale="lv_LV" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="default_layout=qwerty_lv,extra_keys=accent_caron|accent_cedille|accent_macron|€"/>
|
||||
<subtype android:label="%s" android:languageTag="pt" android:imeSubtypeLocale="pt_BR" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="default_layout=qwerty_pt,extra_keys=accent_aigu|accent_cedille|accent_circonflexe|accent_grave|accent_tilde|€"/>
|
||||
<subtype android:label="%s" android:languageTag="ru" android:imeSubtypeLocale="ru_RU" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="default_layout=ru_jcuken"/>
|
||||
|
@ -3,20 +3,20 @@
|
||||
<row>
|
||||
<key width="0.75" key0="esc" key2="~" key4="!"/>
|
||||
<key width="0.75" key0="(" key2="[" key4="{"/>
|
||||
<key key0="7" key1="<" key2=">"/>
|
||||
<key key0="7" key3="<" key4=">"/>
|
||||
<key key0="8" key2="∞"/>
|
||||
<key key0="9" key2="π"/>
|
||||
<key width="0.75" key0="*" key1="√" key2="×"/>
|
||||
<key width="0.75" key0="/" key1="%" key3="÷"/>
|
||||
</row>
|
||||
<row>
|
||||
<key width="0.75" key0="tab" key2="|" key4="\\"/>
|
||||
<key width="0.75" key0="tab" key1=";" key2="|" key4="\\"/>
|
||||
<key width="0.75" key0=")" key2="]" key4="}"/>
|
||||
<key key0="4" key1="box" key3="arrows"/>
|
||||
<key key0="4"/>
|
||||
<key key0="5" key1="up" key2="right" key3="left" key4="down" edgekeys="true"/>
|
||||
<key key0="6"/>
|
||||
<key width="0.75" key0="+" key1="Σ" key2="$"/>
|
||||
<key width="0.75" key0="-" key1="^"/>
|
||||
<key width="0.75" key0="-" key2="^"/>
|
||||
</row>
|
||||
<row>
|
||||
<key shift="0.35" width="1.15" key0="shift" key2="fn" key4="alt"/>
|
||||
@ -26,9 +26,9 @@
|
||||
<key width="1.15" key0="backspace" key2="delete"/>
|
||||
</row>
|
||||
<row height="0.95">
|
||||
<key width="1.5" key0="switch_text" key2="ctrl"/>
|
||||
<key width="1.5" key0="0" key3="f11_placeholder" key4="f12_placeholder"/>
|
||||
<key width="0.75" key0="." key1=":" key2="," key3=";"/>
|
||||
<key width="1.5" key0="ctrl" key3="switch_text"/>
|
||||
<key width="1.5" key0="0"/>
|
||||
<key width="0.75" key0="." key1=":" key2=","/>
|
||||
<key width="0.75" key0="space" key1=""" key2="'" key4="_"/>
|
||||
<key width="1.5" key0="enter" key1="±" key2="action" key3="="/>
|
||||
</row>
|
||||
|
@ -1,16 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<keyboard>
|
||||
<row>
|
||||
<key key0="q" key2="1" key4="esc"/>
|
||||
<key key0="w" key1="~" key2="2" key3="\@"/>
|
||||
<key key0="e" key1="!" key2="3" key3="\#" key4="€"/>
|
||||
<key key0="q" key1="esc" key2="1" key3="~" key4="!"/>
|
||||
<key key0="w" key2="2" key3="\@"/>
|
||||
<key key0="e" key2="3" key3="\#" key4="€"/>
|
||||
<key key0="r" key2="4" key3="$"/>
|
||||
<key key0="t" key2="5" key3="%"/>
|
||||
<key key0="y" key2="6" key3="^"/>
|
||||
<key key0="u" key2="7" key3="&"/>
|
||||
<key key0="i" key2="8" key3="*"/>
|
||||
<key key0="o" key1="accent_macron" key2="9" key3="(" key4=")"/>
|
||||
<key key0="p" key1="0" key3="f11_placeholder" key4="f12_placeholder"/>
|
||||
<key key0="p" key2="0"/>
|
||||
</row>
|
||||
<row>
|
||||
<key shift="0.5" key0="a" key1="tab" key2="`"/>
|
||||
|
@ -1,20 +1,20 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<keyboard>
|
||||
<row>
|
||||
<key key0="q" key2="1" key4="esc"/>
|
||||
<key key0="w" key1="~" key2="2" key3="\@"/>
|
||||
<key key0="e" key1="!" key2="3" key3="\#" key4="€"/>
|
||||
<key key0="q" key1="esc" key2="1" key3="~" key4="!"/>
|
||||
<key key0="w" key2="2" key3="\@"/>
|
||||
<key key0="e" key2="3" key3="\#" key4="€"/>
|
||||
<key key0="r" key2="4" key3="$"/>
|
||||
<key key0="t" key2="5" key3="%"/>
|
||||
<key key0="y" key2="6" key3="^"/>
|
||||
<key key0="u" key2="7" key3="&"/>
|
||||
<key key0="i" key2="8" key3="*"/>
|
||||
<key key0="o" key1="accent_macron" key2="9" key3="(" key4=")"/>
|
||||
<key key0="p" key1="0" key3="f11_placeholder" key4="f12_placeholder"/>
|
||||
<key key0="o" key2="9" key3="(" key4=")"/>
|
||||
<key key0="p" key2="0"/>
|
||||
</row>
|
||||
<row>
|
||||
<key key0="a" key2="tab" key4="`"/>
|
||||
<key key0="s" key1="accent_ring" key2="¡" key3="ß"/>
|
||||
<key key0="a" key2="`" key3="tab" key4="¡"/>
|
||||
<key key0="s" key1="accent_ring" key3="ß"/>
|
||||
<key key0="d" key1="accent_grave" key2="£" key3="accent_aigu"/>
|
||||
<key key0="f"/>
|
||||
<key key0="g" key1="accent_caron" key2="-" key3="_"/>
|
||||
@ -22,7 +22,7 @@
|
||||
<key key0="j" key1="accent_trema" key2="accent_circonflexe" key4="}" key3="{"/>
|
||||
<key key0="k" key3="[" key4="]"/>
|
||||
<key key0="l" key2="|" key3="\\"/>
|
||||
<key key0="ñ" key1="·" key3="ç" />
|
||||
<key key0="ñ"/>
|
||||
</row>
|
||||
<row>
|
||||
<key width="1.5" key0="shift"/>
|
||||
|
@ -1,37 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<keyboard>
|
||||
<row>
|
||||
<key key0="ㅂ" key2="1" key4="esc"/>
|
||||
<key key0="ㅈ" key1="~" key2="2" key3="\@"/>
|
||||
<key key0="ㄷ" key1="!" key2="3" key3="\#" key4="€"/>
|
||||
<key key0="ㄱ" key2="4" key3="$"/>
|
||||
<key key0="ㅅ" key2="5" key3="%"/>
|
||||
<key key0="ㅛ" key2="6" key3="^"/>
|
||||
<key key0="ㅕ" key2="7" key3="&"/>
|
||||
<key key0="ㅑ" key2="8" key3="*"/>
|
||||
<key key0="ㅐ" key2="9" key3="(" key4=")"/>
|
||||
<key key0="ㅔ" key1="0" key3="f11_placeholder" key4="f12_placeholder"/>
|
||||
</row>
|
||||
<row>
|
||||
<key shift="0.5" key0="ㅁ" key1="tab" key2="`"/>
|
||||
<key key0="ㄴ" key3="ß"/>
|
||||
<key key0="ㅇ" key2="£"/>
|
||||
<key key0="ㄹ"/>
|
||||
<key key0="ㅎ" key2="-" key3="_"/>
|
||||
<key key0="ㅗ" key2="=" key3="+"/>
|
||||
<key key0="ㅓ" key4="}" key3="{"/>
|
||||
<key key0="ㅏ" key3="[" key4="]"/>
|
||||
<key key0="ㅣ" key2="|" key3="\\"/>
|
||||
</row>
|
||||
<row>
|
||||
<key width="1.5" key0="shift"/>
|
||||
<key key0="ㅋ"/>
|
||||
<key key0="ㅌ"/>
|
||||
<key key0="ㅊ" key2="<" key3="."/>
|
||||
<key key0="ㅍ" key2=">" key3=","/>
|
||||
<key key0="ㅠ" key2="\?" key3="/"/>
|
||||
<key key0="ㅜ" key2=":" key3=";"/>
|
||||
<key key0="ㅡ" key2=""" key3="'"/>
|
||||
<key width="1.5" key0="backspace" key2="delete"/>
|
||||
</row>
|
||||
</keyboard>
|
@ -1,19 +1,19 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<keyboard>
|
||||
<row>
|
||||
<key key0="q" key2="1" key4="esc"/>
|
||||
<key key0="w" key1="~" key2="2" key3="\@" key4="!"/>
|
||||
<key key0="q" key1="esc" key2="1" key3="~" key4="!"/>
|
||||
<key key0="w" key2="2" key3="\@"/>
|
||||
<key key0="e" key1="ē" key2="3" key3="\#" key4="€"/>
|
||||
<key key0="r" key1="ŗ" key2="4" key3="$" key4="f11_placeholder"/>
|
||||
<key key0="t" key2="5" key3="%" key4="f12_placeholder"/>
|
||||
<key key0="r" key1="ŗ" key2="4" key3="$"/>
|
||||
<key key0="t" key2="5" key3="%"/>
|
||||
<key key0="y" key2="6" key3="^"/>
|
||||
<key key0="u" key1="ū" key2="7" key3="&" key4="*"/>
|
||||
<key key0="i" key1="ī" key2="8" key3="(" key4=")"/>
|
||||
<key key0="o" key1="ō" key2="9" key3="{" key4="}"/>
|
||||
<key key0="p" key1="0"/>
|
||||
<key key0="u" key1="ū" key2="7" key3="&"/>
|
||||
<key key0="i" key1="ī" key2="8" key3="*"/>
|
||||
<key key0="o" key1="ō" key2="9" key3="(" key4=")"/>
|
||||
<key key0="p" key2="0" key3="{" key4="}"/>
|
||||
</row>
|
||||
<row>
|
||||
<key shift="0.5" key0="a" key1="ā" key2="tab"/>
|
||||
<key shift="0.5" key0="a" key1="ā"/>
|
||||
<key key0="s" key1="š" key3="ß"/>
|
||||
<key key0="d" key2="£"/>
|
||||
<key key0="f"/>
|
||||
@ -24,7 +24,7 @@
|
||||
<key key0="l" key1="ļ" key2="|" key3="/" key4="\\"/>
|
||||
</row>
|
||||
<row>
|
||||
<key width="1.5" key0="shift"/>
|
||||
<key width="1.5" key0="shift" key1="tab"/>
|
||||
<key key0="z" key1="ž"/>
|
||||
<key key0="x"/>
|
||||
<key key0="c" key1="č"/>
|
||||
|
@ -1,28 +1,28 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<keyboard>
|
||||
<row>
|
||||
<key key0="q" key2="1" key4="esc"/>
|
||||
<key key0="w" key1="~" key2="2" key3="\@" key4="!"/>
|
||||
<key key0="q" key1="esc" key2="1" key3="~" key4="!"/>
|
||||
<key key0="w" key2="2" key3="\@"/>
|
||||
<key key0="e" key1="£" key2="3" key3="\#" key4="€"/>
|
||||
<key key0="r" key2="4" key3="$" key4="f11_placeholder"/>
|
||||
<key key0="t" key2="5" key3="%" key4="f12_placeholder"/>
|
||||
<key key0="r" key2="4" key3="$"/>
|
||||
<key key0="t" key2="5" key3="%"/>
|
||||
<key key0="y" key1="accent_caron" key2="6" key3="^" key4="accent_trema"/>
|
||||
<key key0="u" key2="7" key3="&"/>
|
||||
<key key0="i" key2="8" key3="*"/>
|
||||
<key key0="o" key2="9" key3="(" key4=")"/>
|
||||
<key key0="p" key1="0" key3="\\"/>
|
||||
<key key0="p" key2="0" key3="\\" key4="|"/>
|
||||
</row>
|
||||
<row>
|
||||
<key key0="a" key2="tab" key4="`"/>
|
||||
<key key0="s" key1="'" key3="ß" key4="accent_cedille"/>
|
||||
<key key0="d" key1=""" key2="accent_ring"/>
|
||||
<key key0="f" key2="accent_caron"/>
|
||||
<key key0="a" key1="tab" key2="'" key3="`" key4="""/>
|
||||
<key key0="s" key1="accent_ring" key2="accent_caron" key3="ß" key4="accent_cedille"/>
|
||||
<key key0="d"/>
|
||||
<key key0="f"/>
|
||||
<key key0="g"/>
|
||||
<key key0="h"/>
|
||||
<key key0="j" key1="-" key2="=" key4="+" key3="_"/>
|
||||
<key key0="k" key1="accent_grave" key2="accent_aigu" key3="accent_tilde" key4="accent_circonflexe"/>
|
||||
<key key0="l" key1="[" key2="]" key3="{" key4="}"/>
|
||||
<key key0="ç" key1="|"/>
|
||||
<key key0="ç"/>
|
||||
</row>
|
||||
<row>
|
||||
<key width="1.5" key0="shift"/>
|
||||
|
@ -1,41 +1,42 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<keyboard>
|
||||
<row>
|
||||
<key key0="q" key4="esc" key2="1"/>
|
||||
<key key0="w" key2="2" key3="`" key4="\@"/>
|
||||
<key key0="q" key1="esc" key2="1"/>
|
||||
<key key0="w" key2="2" key4="\@"/>
|
||||
<key key0="e" key2="3" key4="\#" key3="€"/>
|
||||
<key key0="r" key2="4" key4="$"/>
|
||||
<key key0="t" key2="5" key3="&" key4="|"/>
|
||||
<key key0="t" key2="5" key3="&" key4="|" />
|
||||
<key key0="y" key2="6" key3="^" key4="%"/>
|
||||
<key key0="u" key2="7" key3="~" key4="\\"/>
|
||||
<key key0="i" key2="8" key3="*" key4="/"/>
|
||||
<key key0="u" key2="7" key3="~" key4="\\" />
|
||||
<key key0="i" key2="8" key3="*" key4="/" />
|
||||
<key key0="o" key2="9" key3="+" key4="-"/>
|
||||
<key key0="p" key2="0" key3="=" key4="f11_placeholder"/>
|
||||
<key key0="å" key1="\?" key3="!" key4="f12_placeholder"/>
|
||||
<key key0="p" key2="0" key3="=" />
|
||||
<key key0="å" key1="\?" key3="!" key2="`" />
|
||||
</row>
|
||||
<row>
|
||||
<key key0="a" key2="tab"/>
|
||||
<key key0="a" key1="tab" />
|
||||
<key key0="s" key1="accent_ring" key2="accent_cedille" key3="ß" key4="accent_tilde"/>
|
||||
<key key0="d" key1="accent_grave" key2="accent_caron" key3="accent_aigu"/>
|
||||
<key key0="f" key1="accent_trema" key2="accent_circonflexe"/>
|
||||
<key key0="g"/>
|
||||
<key key0="h"/>
|
||||
<key key0="j" key1="{" key4="}"/>
|
||||
<key key0="k" key1="[" key4="]"/>
|
||||
<key key0="l" key1="(" key4=")"/>
|
||||
<key key0="ö" key1="<" key4=">"/>
|
||||
<key key0="g" />
|
||||
<key key0="h" />
|
||||
<key key0="j" key1="{" key4="}" />
|
||||
<key key0="k" key1="[" key4="]" />
|
||||
<key key0="l" key1="(" key4=")" />
|
||||
<key key0="ö" key1="<" key4=">" />
|
||||
<key key0="ä" key1="'" key3="""/>
|
||||
|
||||
</row>
|
||||
<row>
|
||||
<key width="1.5" key0="shift"/>
|
||||
<key key0="z"/>
|
||||
<key key0="x"/>
|
||||
<key key0="c"/>
|
||||
<key key0="v"/>
|
||||
<key key0="z" />
|
||||
<key key0="x" />
|
||||
<key key0="c" />
|
||||
<key key0="v" />
|
||||
<key key0="b" key2=";" key4=","/>
|
||||
<key key0="n" key2=":" key4="."/>
|
||||
<key key0="m" key2="-" key4="_"/>
|
||||
<key width="1.0" key0="." key1="!" key2="\?" key3="'" key4=","/>
|
||||
<key width="1.0" key0="." key1="!" key2="\?" key3="'" key4="," />
|
||||
<key width="1.5" key0="backspace" key2="delete"/>
|
||||
</row>
|
||||
</keyboard>
|
||||
|
@ -1,16 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<keyboard>
|
||||
<row>
|
||||
<key key0="q" key2="1" key4="esc"/>
|
||||
<key key0="w" key1="^" key2="2" key3=""" key4="\@"/>
|
||||
<key key0="e" key1="§" key2="3" key3="!" key4="€"/>
|
||||
<key key0="r" key2="4" key3="$" key4="f11_placeholder"/>
|
||||
<key key0="t" key2="5" key3="%" key4="f12_placeholder"/>
|
||||
<key key0="q" key1="esc" key2="1" key3="\@" key4="!"/>
|
||||
<key key0="w" key1="^" key2="2" key3="""/>
|
||||
<key key0="e" key1="§" key2="3" key4="€"/>
|
||||
<key key0="r" key2="4" key3="$"/>
|
||||
<key key0="t" key2="5" key3="%"/>
|
||||
<key key0="z" key2="6" key3="&" key4="{"/>
|
||||
<key key0="u" key2="7" key3="ü" key4="}"/>
|
||||
<key key0="i" key1="(" key2="8" key3="[" key4="]"/>
|
||||
<key key0="o" key1=")" key2="9" key3="ö" key4="="/>
|
||||
<key key0="p" key1="0" key3="\?"/>
|
||||
<key key0="i" key1="(" key2="8" key4="["/>
|
||||
<key key0="o" key1=")" key2="9" key3="ö" key4="]"/>
|
||||
<key key0="p" key1="=" key2="0" key3="\?"/>
|
||||
</row>
|
||||
<row>
|
||||
<key shift="0.5" key0="a" key1="tab" key2="`" key3="ä"/>
|
||||
|
@ -3,7 +3,6 @@
|
||||
<PreferenceCategory android:title="@string/pref_category_layout">
|
||||
<ListPreference android:key="layout" android:title="@string/pref_layout_title" android:summary="%s" android:defaultValue="system" android:entries="@array/pref_layout_entries" android:entryValues="@array/pref_layout_values"/>
|
||||
<ListPreference android:key="accents" android:title="@string/pref_accents_title" android:summary="%s" android:defaultValue="1" android:entries="@array/pref_accents_entries" android:entryValues="@array/pref_accents_values"/>
|
||||
<ListPreference android:key="programming_layout" android:title="@string/pref_programming_layout_title" android:summary="%s" android:defaultValue="none" android:entries="@array/pref_programming_layout_entries" android:entryValues="@array/pref_programming_layout_values"/>
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory android:title="@string/pref_category_typing">
|
||||
<ListPreference android:key="swipe_dist" android:title="@string/pref_swipe_dist_title" android:summary="@string/pref_swipe_dist_summary" android:defaultValue="15" android:entries="@array/pref_swipe_dist_entries" android:entryValues="@array/pref_swipe_dist_values"/>
|
||||
@ -18,12 +17,11 @@
|
||||
<CheckBoxPreference android:key="lockable_meta" android:title="Meta" android:defaultValue="false"/>
|
||||
<CheckBoxPreference android:key="lockable_sup" android:title="Sup" android:defaultValue="false"/>
|
||||
<CheckBoxPreference android:key="lockable_sub" android:title="Sub" android:defaultValue="false"/>
|
||||
<CheckBoxPreference android:key="lockable_box" android:title="Box" android:defaultValue="false"/>
|
||||
</PreferenceScreen>
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory android:title="@string/pref_category_vibrate">
|
||||
<CheckBoxPreference android:key="vibrate_enabled" android:title="@string/pref_vibrate_title" android:summary="@string/pref_vibrate_summary" android:defaultValue="true"/>
|
||||
<juloo.common.IntSlideBarPreference android:key="vibrate_duration" android:title="@string/pref_vibrate_duration_title" android:summary="%sms" android:defaultValue="20" min="5" max="100"/>
|
||||
<juloo.common.IntSlideBarPreference android:key="vibrate_duration" android:title="@string/pref_vibrate_duration_title" android:summary="%sms" android:defaultValue="20" min="5" max="50"/>
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory android:title="@string/pref_category_style">
|
||||
<ListPreference android:key="theme" android:title="@string/pref_theme" android:summary="%s" android:defaultValue="system" android:entries="@array/pref_theme_entries" android:entryValues="@array/pref_theme_values"/>
|
||||
|
@ -14,6 +14,6 @@ let
|
||||
|
||||
in
|
||||
pkgs.mkShell {
|
||||
buildInputs = [ pkgs.findutils jdk android.androidsdk pkgs.fontforge ];
|
||||
buildInputs = [ pkgs.findutils jdk android.androidsdk ];
|
||||
ANDROID_HOME = "${android.androidsdk}/libexec/android-sdk";
|
||||
}
|
||||
|
@ -95,10 +95,6 @@ public class IntSlideBarPreference extends DialogPreference
|
||||
{
|
||||
if (positiveResult)
|
||||
persistInt(_seekBar.getProgress() + _min);
|
||||
else
|
||||
_seekBar.setProgress(getPersistedInt(_min) - _min);
|
||||
|
||||
updateText();
|
||||
}
|
||||
|
||||
protected View onCreateDialogView()
|
||||
|
@ -99,10 +99,6 @@ public class SlideBarPreference extends DialogPreference
|
||||
{
|
||||
if (positiveResult)
|
||||
persistFloat(_value);
|
||||
else
|
||||
_seekBar.setProgress((int)((getPersistedFloat(_min) - _min) * STEPS / (_max - _min)));
|
||||
|
||||
updateText();
|
||||
}
|
||||
|
||||
protected View onCreateDialogView()
|
||||
|
@ -17,13 +17,14 @@ final class Config
|
||||
// From resources
|
||||
public final float marginTop;
|
||||
public final float keyPadding;
|
||||
|
||||
public final float labelTextSize;
|
||||
public final float sublabelTextSize;
|
||||
/** Presses within this radius of an other pointer are ignored */
|
||||
public final float pointerTooClose;
|
||||
|
||||
// From preferences
|
||||
public int layout; // Or '-1' for the system defaults
|
||||
public int programming_layout; // Or '-1' for none
|
||||
private float swipe_dist_dp;
|
||||
public float swipe_dist_px;
|
||||
public boolean vibrateEnabled;
|
||||
public long vibrateDuration;
|
||||
@ -42,7 +43,6 @@ final class Config
|
||||
|
||||
// Dynamically set
|
||||
public boolean shouldOfferSwitchingToNextInputMethod;
|
||||
public boolean shouldOfferSwitchingToProgramming;
|
||||
public String actionLabel; // Might be 'null'
|
||||
public int actionId; // Meaningful only when 'actionLabel' isn't 'null'
|
||||
public boolean swapEnterActionKey; // Swap the "enter" and "action" keys
|
||||
@ -56,11 +56,11 @@ final class Config
|
||||
// static values
|
||||
marginTop = res.getDimension(R.dimen.margin_top);
|
||||
keyPadding = res.getDimension(R.dimen.key_padding);
|
||||
labelTextSize = Float.valueOf(res.getString(R.integer.label_text_size));
|
||||
sublabelTextSize = Float.valueOf(res.getString(R.integer.sublabel_text_size));
|
||||
labelTextSize = res.getFloat(R.integer.label_text_size);
|
||||
sublabelTextSize = res.getFloat(R.integer.sublabel_text_size);
|
||||
pointerTooClose = res.getDimension(R.dimen.pointer_too_close);
|
||||
// default values
|
||||
layout = -1;
|
||||
programming_layout = -1;
|
||||
vibrateEnabled = true;
|
||||
vibrateDuration = 20;
|
||||
longPressTimeout = 600;
|
||||
@ -77,7 +77,6 @@ final class Config
|
||||
refresh(context);
|
||||
// initialized later
|
||||
shouldOfferSwitchingToNextInputMethod = false;
|
||||
shouldOfferSwitchingToProgramming = false;
|
||||
actionLabel = null;
|
||||
actionId = 0;
|
||||
swapEnterActionKey = false;
|
||||
@ -105,15 +104,9 @@ final class Config
|
||||
{
|
||||
keyboardHeightPercent = prefs.getInt("keyboard_height", 35);
|
||||
}
|
||||
String layout_s = prefs.getString("layout", "system");
|
||||
layout = layout_s.equals("system") ? -1 : layoutId_of_string(layout_s);
|
||||
String prog_layout_s = prefs.getString("programming_layout", "none");
|
||||
programming_layout = prog_layout_s.equals("none") ? -1 : layoutId_of_string(prog_layout_s);
|
||||
// The swipe distance is defined relatively to the "exact physical pixels
|
||||
// per inch of the screen", which isn't affected by the scaling settings.
|
||||
// Take the mean of both dimensions as an approximation of the diagonal.
|
||||
float physical_scaling = (dm.widthPixels + dm.heightPixels) / (dm.xdpi + dm.ydpi);
|
||||
swipe_dist_px = Float.valueOf(prefs.getString("swipe_dist", "15")) * physical_scaling;;
|
||||
layout = layoutId_of_string(prefs.getString("layout", "system"));
|
||||
swipe_dist_dp = Float.valueOf(prefs.getString("swipe_dist", "15"));
|
||||
swipe_dist_px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, swipe_dist_dp, dm);
|
||||
vibrateEnabled = prefs.getBoolean("vibrate_enabled", vibrateEnabled);
|
||||
vibrateDuration = prefs.getInt("vibrate_duration", (int)vibrateDuration);
|
||||
longPressTimeout = prefs.getInt("longpress_timeout", (int)longPressTimeout);
|
||||
@ -133,8 +126,7 @@ final class Config
|
||||
| (prefs.getBoolean("lockable_fn", false) ? KeyValue.FLAG_FN : 0)
|
||||
| (prefs.getBoolean("lockable_meta", false) ? KeyValue.FLAG_META : 0)
|
||||
| (prefs.getBoolean("lockable_sup", false) ? KeyValue.FLAG_ACCENT_SUPERSCRIPT : 0)
|
||||
| (prefs.getBoolean("lockable_sub", false) ? KeyValue.FLAG_ACCENT_SUBSCRIPT : 0)
|
||||
| (prefs.getBoolean("lockable_box", false) ? KeyValue.FLAG_ACCENT_BOX : 0);
|
||||
| (prefs.getBoolean("lockable_sub", false) ? KeyValue.FLAG_ACCENT_SUBSCRIPT : 0);
|
||||
characterSize = prefs.getFloat("character_size", characterSize);
|
||||
accents = Integer.valueOf(prefs.getString("accents", "1"));
|
||||
theme = getThemeId(res, prefs.getString("theme", ""));
|
||||
@ -163,8 +155,6 @@ final class Config
|
||||
case KeyValue.EVENT_ACTION:
|
||||
return (swapEnterActionKey && action_key != null) ?
|
||||
KeyValue.getKeyByName("enter") : action_key;
|
||||
case KeyValue.EVENT_SWITCH_PROGRAMMING:
|
||||
return shouldOfferSwitchingToProgramming ? key : null;
|
||||
default:
|
||||
if (key.flags != 0)
|
||||
{
|
||||
@ -216,14 +206,13 @@ final class Config
|
||||
case "bgph1": return R.xml.local_bgph1;
|
||||
case "dvorak": return R.xml.dvorak;
|
||||
case "qwerty_es": return R.xml.qwerty_es;
|
||||
case "qwerty_ko": return R.xml.qwerty_ko;
|
||||
case "qwerty_lv": return R.xml.qwerty_lv;
|
||||
case "qwerty_pt": return R.xml.qwerty_pt;
|
||||
case "qwerty": return R.xml.qwerty;
|
||||
case "qwerty_sv_se": return R.xml.qwerty_sv_se;
|
||||
case "qwertz": return R.xml.qwertz;
|
||||
case "ru_jcuken": return R.xml.local_ru_jcuken;
|
||||
default: return R.xml.qwerty; // The config might store an invalid layout, don't crash
|
||||
case "system": default: return -1;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -13,18 +13,18 @@ class KeyEventHandler implements Config.IKeyEventHandler
|
||||
|
||||
public void handleKeyUp(KeyValue key, int flags)
|
||||
{
|
||||
key = KeyModifier.handleFlags(key, flags);
|
||||
if (key == null || (key.flags & KeyValue.FLAG_NOCHAR) != 0)
|
||||
return;
|
||||
switch (key.eventCode)
|
||||
{
|
||||
case KeyValue.EVENT_CONFIG: _recv.showKeyboardConfig(); return;
|
||||
case KeyValue.EVENT_SWITCH_TEXT: _recv.switchMain(); return;
|
||||
case KeyValue.EVENT_SWITCH_NUMERIC: _recv.switchNumeric(); return;
|
||||
case KeyValue.EVENT_SWITCH_TEXT: _recv.setLayout(-1); return;
|
||||
case KeyValue.EVENT_SWITCH_NUMERIC: _recv.setLayout(R.xml.numeric); return;
|
||||
case KeyValue.EVENT_SWITCH_EMOJI: _recv.setPane_emoji(); return;
|
||||
case KeyValue.EVENT_SWITCH_BACK_EMOJI: _recv.setPane_normal(); return;
|
||||
case KeyValue.EVENT_CHANGE_METHOD: _recv.switchToNextInputMethod(); return;
|
||||
case KeyValue.EVENT_ACTION: _recv.performAction(); return;
|
||||
case KeyValue.EVENT_SWITCH_PROGRAMMING: _recv.switchProgramming(); return;
|
||||
default:
|
||||
if ((flags & (KeyValue.FLAG_CTRL | KeyValue.FLAG_ALT | KeyValue.FLAG_META)) != 0)
|
||||
handleKeyUpWithModifier(key, flags);
|
||||
@ -92,9 +92,8 @@ class KeyEventHandler implements Config.IKeyEventHandler
|
||||
public void showKeyboardConfig();
|
||||
public void performAction();
|
||||
|
||||
public void switchMain();
|
||||
public void switchNumeric();
|
||||
public void switchProgramming();
|
||||
/** 'res_id' is '-1' for the currently selected layout. */
|
||||
public void setLayout(int res_id);
|
||||
|
||||
public void sendKeyEvent(int eventAction, int eventCode, int meta);
|
||||
|
||||
|
@ -7,29 +7,27 @@ import java.util.HashMap;
|
||||
|
||||
class KeyModifier
|
||||
{
|
||||
/** Cache key is KeyValue's name */
|
||||
/* Cache key is KeyValue's name */
|
||||
private static HashMap<String, SparseArray<KeyValue>> _cache =
|
||||
new HashMap<String, SparseArray<KeyValue>>();
|
||||
|
||||
/** Represents a removed key, because a cache entry can't be [null]. */
|
||||
private static final KeyValue removed_key = KeyValue.getKeyByName("removed");
|
||||
|
||||
/** Modify a key according to modifiers. */
|
||||
/* Modify a key according to modifiers. */
|
||||
public static KeyValue handleFlags(KeyValue k, int flags)
|
||||
{
|
||||
if (k == null)
|
||||
return null;
|
||||
if (k == null || flags == 0) // No modifier
|
||||
return k;
|
||||
SparseArray<KeyValue> ks = cacheEntry(k);
|
||||
KeyValue r = ks.get(flags);
|
||||
if (r == null) // Cold cache
|
||||
{
|
||||
r = k;
|
||||
r = handleFn(r, flags);
|
||||
if (r != null) // Found in cache
|
||||
return r;
|
||||
r = k;
|
||||
r = handleFn(r, flags);
|
||||
if (r != null)
|
||||
r = handleShift(r, flags);
|
||||
if (r != null)
|
||||
r = handleAccents(r, flags);
|
||||
ks.put(flags, r);
|
||||
}
|
||||
return (r == removed_key) ? null : r;
|
||||
ks.put(flags, r);
|
||||
return r;
|
||||
}
|
||||
|
||||
private static KeyValue handleAccents(KeyValue k, int flags)
|
||||
@ -49,8 +47,16 @@ class KeyModifier
|
||||
char c = k.char_;
|
||||
if (k.char_ != KeyValue.CHAR_NONE)
|
||||
c = Character.toUpperCase(c);
|
||||
if (c == k.char_) // Used to have more rules if toUpperCase() did nothing
|
||||
return k;
|
||||
if (c == k.char_) // More rules if toUpperCase() did nothing
|
||||
switch (k.symbol)
|
||||
{
|
||||
case "→": c = '⇒'; break;
|
||||
case "←": c = '⇐'; break;
|
||||
case "<": c = '«'; break;
|
||||
case ">": c = '»'; break;
|
||||
case "“": c = '”'; break;
|
||||
default: return k;
|
||||
}
|
||||
return k.withCharAndSymbol(c);
|
||||
}
|
||||
|
||||
@ -61,21 +67,54 @@ class KeyModifier
|
||||
case KeyValue.FLAG_ACCENT1:
|
||||
return (char)KeyCharacterMap.getDeadChar('\u02CB', c);
|
||||
case KeyValue.FLAG_ACCENT2:
|
||||
return (char)KeyCharacterMap.getDeadChar('\u00B4', c);
|
||||
switch (c)
|
||||
{
|
||||
case '`': return '´';
|
||||
case '<': return '‘';
|
||||
case '>': return '‘';
|
||||
default: return (char)KeyCharacterMap.getDeadChar('\u00B4', c);
|
||||
}
|
||||
case KeyValue.FLAG_ACCENT3:
|
||||
return (char)KeyCharacterMap.getDeadChar('\u02C6', c);
|
||||
case KeyValue.FLAG_ACCENT4:
|
||||
return (char)KeyCharacterMap.getDeadChar('\u02DC', c);
|
||||
switch (c)
|
||||
{
|
||||
case '?': return '¿';
|
||||
case '!': return '¡';
|
||||
default: return (char)KeyCharacterMap.getDeadChar('\u02DC', c);
|
||||
}
|
||||
case KeyValue.FLAG_ACCENT5:
|
||||
return (char)KeyCharacterMap.getDeadChar('\u00B8', c);
|
||||
switch (c)
|
||||
{
|
||||
case 'u': return 'µ';
|
||||
case '"': return '„';
|
||||
case '\'': return '’';
|
||||
case '-': return '¬';
|
||||
case 'a': return 'æ';
|
||||
case 'o': return 'œ';
|
||||
default: return (char)KeyCharacterMap.getDeadChar('\u00B8', c);
|
||||
}
|
||||
case KeyValue.FLAG_ACCENT6:
|
||||
return (char)KeyCharacterMap.getDeadChar('\u00A8', c);
|
||||
switch (c)
|
||||
{
|
||||
case '-': return '÷';
|
||||
default: return (char)KeyCharacterMap.getDeadChar('\u00A8', c);
|
||||
}
|
||||
case KeyValue.FLAG_ACCENT_CARON:
|
||||
return (char)KeyCharacterMap.getDeadChar('\u02C7', c);
|
||||
switch (c)
|
||||
{
|
||||
default: return (char)KeyCharacterMap.getDeadChar('\u02C7', c);
|
||||
}
|
||||
case KeyValue.FLAG_ACCENT_RING:
|
||||
return (char)KeyCharacterMap.getDeadChar('\u02DA', c);
|
||||
switch (c)
|
||||
{
|
||||
default: return (char)KeyCharacterMap.getDeadChar('\u02DA', c);
|
||||
}
|
||||
case KeyValue.FLAG_ACCENT_MACRON:
|
||||
return (char)KeyCharacterMap.getDeadChar('\u00AF', c);
|
||||
switch (c)
|
||||
{
|
||||
default: return (char)KeyCharacterMap.getDeadChar('\u00AF', c);
|
||||
}
|
||||
case KeyValue.FLAG_ACCENT_ORDINAL:
|
||||
switch (c)
|
||||
{
|
||||
@ -139,74 +178,6 @@ class KeyModifier
|
||||
case 'o': return 'ₒ';
|
||||
default: return c;
|
||||
}
|
||||
case KeyValue.FLAG_ACCENT_ARROWS:
|
||||
if ((flags & KeyValue.FLAG_SHIFT) == 0)
|
||||
{
|
||||
switch (c)
|
||||
{
|
||||
case '1': return '↙';
|
||||
case '2': return '↓';
|
||||
case '3': return '↘';
|
||||
case '4': return '←';
|
||||
case '6': return '→';
|
||||
case '7': return '↖';
|
||||
case '8': return '↑';
|
||||
case '9': return '↗';
|
||||
default: return c;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (c)
|
||||
{
|
||||
case '1': return '⇙';
|
||||
case '2': return '⇓';
|
||||
case '3': return '⇘';
|
||||
case '4': return '⇐';
|
||||
case '6': return '⇒';
|
||||
case '7': return '⇖';
|
||||
case '8': return '⇑';
|
||||
case '9': return '⇗';
|
||||
default: return c;
|
||||
}
|
||||
}
|
||||
case KeyValue.FLAG_ACCENT_BOX:
|
||||
if ((flags & KeyValue.FLAG_SHIFT) == 0)
|
||||
{
|
||||
switch (c)
|
||||
{
|
||||
case '1': return '└';
|
||||
case '2': return '┴';
|
||||
case '3': return '┘';
|
||||
case '4': return '├';
|
||||
case '5': return '┼';
|
||||
case '6': return '┤';
|
||||
case '7': return '┌';
|
||||
case '8': return '┬';
|
||||
case '9': return '┐';
|
||||
case '0': return '─';
|
||||
case '.': return '│';
|
||||
default: return c;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (c)
|
||||
{
|
||||
case '1': return '╚';
|
||||
case '2': return '╩';
|
||||
case '3': return '╝';
|
||||
case '4': return '╠';
|
||||
case '5': return '╬';
|
||||
case '6': return '╣';
|
||||
case '7': return '╔';
|
||||
case '8': return '╦';
|
||||
case '9': return '╗';
|
||||
case '0': return '═';
|
||||
case '.': return '║';
|
||||
default: return c;
|
||||
}
|
||||
}
|
||||
default: return c; // Can't happen
|
||||
}
|
||||
}
|
||||
@ -214,15 +185,7 @@ class KeyModifier
|
||||
private static KeyValue handleFn(KeyValue k, int flags)
|
||||
{
|
||||
if ((flags & KeyValue.FLAG_FN) == 0)
|
||||
{
|
||||
switch (k.name)
|
||||
{
|
||||
// Remove some keys when Fn is *not* activated
|
||||
case "f11_placeholder":
|
||||
case "f12_placeholder": return removed_key;
|
||||
default: return k;
|
||||
}
|
||||
}
|
||||
return k;
|
||||
String name;
|
||||
switch (k.name)
|
||||
{
|
||||
@ -236,54 +199,21 @@ class KeyModifier
|
||||
case "8": name = "f8"; break;
|
||||
case "9": name = "f9"; break;
|
||||
case "0": name = "f10"; break;
|
||||
case "f11_placeholder": name = "f11"; break;
|
||||
case "f12_placeholder": name = "f12"; break;
|
||||
case "up": name = "page_up"; break;
|
||||
case "down": name = "page_down"; break;
|
||||
case "left": name = "home"; break;
|
||||
case "right": name = "end"; break;
|
||||
case "<": name = "«"; break;
|
||||
case ">": name = "»"; break;
|
||||
case "{": name = "‹"; break;
|
||||
case "}": name = "›"; break;
|
||||
case "[": name = "‘"; break;
|
||||
case "]": name = "’"; break;
|
||||
case "(": name = "“"; break;
|
||||
case ")": name = "”"; break;
|
||||
case "'": name = "‚"; break;
|
||||
case "\"": name = "„"; break;
|
||||
case ">": name = "→"; break;
|
||||
case "<": name = "←"; break;
|
||||
case "\"": name = "“"; break;
|
||||
case "-": name = "–"; break;
|
||||
case "_": name = "—"; break;
|
||||
case "^": name = "¬"; break;
|
||||
case "%": name = "‰"; break;
|
||||
case "=": name = "≈"; break;
|
||||
case "u": name = "µ"; break;
|
||||
case "a": name = "æ"; break;
|
||||
case "o": name = "œ"; break;
|
||||
case "esc": name = "insert"; break;
|
||||
case "$": name = "€"; break;
|
||||
case "#": name = "£"; break;
|
||||
case "*": name = "°"; break;
|
||||
case ".": name = "…"; break;
|
||||
case ",": name = "·"; break;
|
||||
case "!": name = "¡"; break;
|
||||
case "?": name = "¿"; break;
|
||||
case "tab": name = "\\t"; break;
|
||||
case "space": name = "nbsp"; break;
|
||||
case "↖": name = "⇖"; break;
|
||||
case "↑": name = "⇑"; break;
|
||||
case "↗": name = "⇗"; break;
|
||||
case "←": name = "⇐"; break;
|
||||
case "→": name = "⇒"; break;
|
||||
case "↙": name = "⇙"; break;
|
||||
case "↓": name = "⇓"; break;
|
||||
case "↘": name = "⇘"; break;
|
||||
// Currency symbols
|
||||
case "e": name = "€"; break;
|
||||
case "l": name = "£"; break;
|
||||
case "r": name = "₹"; break;
|
||||
case "y": name = "¥"; break;
|
||||
case "c": name = "¢"; break;
|
||||
case "p": name = "₱"; break;
|
||||
case "€": case "£": return removed_key; // Avoid showing these twice
|
||||
case "€": case "£": return null; // Avoid showing these twice
|
||||
default: return k;
|
||||
}
|
||||
return KeyValue.getKeyByName(name);
|
||||
|
@ -14,7 +14,6 @@ class KeyValue
|
||||
public static final int EVENT_SWITCH_BACK_EMOJI = -6;
|
||||
public static final int EVENT_CHANGE_METHOD = -7;
|
||||
public static final int EVENT_ACTION = -8;
|
||||
public static final int EVENT_SWITCH_PROGRAMMING = -9;
|
||||
public static final char CHAR_NONE = '\0';
|
||||
|
||||
// Behavior flags
|
||||
@ -51,14 +50,11 @@ class KeyValue
|
||||
public static final int FLAG_ACCENT_CARON = (1 << 26);
|
||||
public static final int FLAG_ACCENT_MACRON = (1 << 27);
|
||||
public static final int FLAG_ACCENT_ORDINAL = (1 << 28);
|
||||
public static final int FLAG_ACCENT_ARROWS = (1 << 29);
|
||||
public static final int FLAG_ACCENT_BOX = (1 << 30);
|
||||
|
||||
public static final int FLAGS_ACCENTS = FLAG_ACCENT1 | FLAG_ACCENT2 |
|
||||
FLAG_ACCENT3 | FLAG_ACCENT4 | FLAG_ACCENT5 | FLAG_ACCENT6 |
|
||||
FLAG_ACCENT_CARON | FLAG_ACCENT_MACRON | FLAG_ACCENT_SUPERSCRIPT |
|
||||
FLAG_ACCENT_SUBSCRIPT | FLAG_ACCENT_ORDINAL | FLAG_ACCENT_ARROWS |
|
||||
FLAG_ACCENT_BOX | FLAG_ACCENT_RING;
|
||||
FLAG_ACCENT_SUBSCRIPT | FLAG_ACCENT_ORDINAL | FLAG_ACCENT_RING;
|
||||
|
||||
// Language specific keys that are removed from the keyboard by default
|
||||
public static final int FLAG_LOCALIZED = (1 << 25);
|
||||
@ -156,26 +152,24 @@ class KeyValue
|
||||
|
||||
static
|
||||
{
|
||||
addModifierKey("shift", "\n", // Can't write u000A because Java is stupid
|
||||
addModifierKey("shift", "\uE808",
|
||||
FLAG_SHIFT | FLAG_KEY_FONT | FLAG_SMALLER_FONT);
|
||||
addModifierKey("ctrl", "Ctrl", FLAG_CTRL | FLAG_SMALLER_FONT);
|
||||
addModifierKey("alt", "Alt", FLAG_ALT | FLAG_SMALLER_FONT);
|
||||
addModifierKey("accent_aigu", "\u0050", FLAG_ACCENT2 | FLAG_KEY_FONT | FLAG_LOCALIZED);
|
||||
addModifierKey("accent_caron", "\u0051", FLAG_ACCENT_CARON | FLAG_KEY_FONT | FLAG_LOCALIZED);
|
||||
addModifierKey("accent_cedille", "\u0052", FLAG_ACCENT5 | FLAG_KEY_FONT | FLAG_LOCALIZED);
|
||||
addModifierKey("accent_circonflexe", "\u0053", FLAG_ACCENT3 | FLAG_KEY_FONT | FLAG_LOCALIZED);
|
||||
addModifierKey("accent_grave", "\u0054", FLAG_ACCENT1 | FLAG_KEY_FONT | FLAG_LOCALIZED);
|
||||
addModifierKey("accent_macron", "\u0055", FLAG_ACCENT_MACRON | FLAG_KEY_FONT | FLAG_LOCALIZED);
|
||||
addModifierKey("accent_ring", "\u0056", FLAG_ACCENT_RING | FLAG_KEY_FONT | FLAG_LOCALIZED);
|
||||
addModifierKey("accent_tilde", "\u0057", FLAG_ACCENT4 | FLAG_KEY_FONT | FLAG_LOCALIZED);
|
||||
addModifierKey("accent_trema", "\u0058", FLAG_ACCENT6 | FLAG_KEY_FONT | FLAG_LOCALIZED);
|
||||
addModifierKey("accent_aigu", "◌́", FLAG_ACCENT2 | FLAG_LOCALIZED);
|
||||
addModifierKey("accent_caron", "◌̌", FLAG_ACCENT_CARON | FLAG_LOCALIZED);
|
||||
addModifierKey("accent_cedille", "◌̧", FLAG_ACCENT5 | FLAG_LOCALIZED);
|
||||
addModifierKey("accent_circonflexe", "◌̂", FLAG_ACCENT3 | FLAG_LOCALIZED);
|
||||
addModifierKey("accent_grave", "◌̀", FLAG_ACCENT1 | FLAG_LOCALIZED);
|
||||
addModifierKey("accent_macron", "◌̄", FLAG_ACCENT_MACRON | FLAG_LOCALIZED);
|
||||
addModifierKey("accent_tilde", "◌̃", FLAG_ACCENT4 | FLAG_LOCALIZED);
|
||||
addModifierKey("accent_trema", "◌̈", FLAG_ACCENT6 | FLAG_LOCALIZED);
|
||||
addModifierKey("accent_ring", "◌̊", FLAG_ACCENT_RING | FLAG_LOCALIZED);
|
||||
addModifierKey("superscript", "Sup", FLAG_ACCENT_SUPERSCRIPT | FLAG_SMALLER_FONT);
|
||||
addModifierKey("subscript", "Sub", FLAG_ACCENT_SUBSCRIPT | FLAG_SMALLER_FONT);
|
||||
addModifierKey("ordinal", "Ord", FLAG_ACCENT_ORDINAL | FLAG_SMALLER_FONT);
|
||||
addModifierKey("arrows", "Arr", FLAG_ACCENT_ARROWS | FLAG_SMALLER_FONT);
|
||||
addModifierKey("box", "Box", FLAG_ACCENT_BOX | FLAG_SMALLER_FONT);
|
||||
addModifierKey("fn", "Fn", FLAG_FN | FLAG_SMALLER_FONT);
|
||||
addModifierKey("meta", "Meta", FLAG_META | FLAG_SMALLER_FONT);
|
||||
addModifierKey("meta", "◆", FLAG_META);
|
||||
|
||||
addCharKey('a', KeyEvent.KEYCODE_A);
|
||||
addCharKey('b', KeyEvent.KEYCODE_B);
|
||||
@ -234,27 +228,26 @@ class KeyValue
|
||||
addCharKey('€', EVENT_NONE, FLAG_LOCALIZED);
|
||||
addCharKey('£', EVENT_NONE, FLAG_LOCALIZED);
|
||||
|
||||
addSpecialKey("config", "\u0004", EVENT_CONFIG, FLAG_KEY_FONT | FLAG_SMALLER_FONT);
|
||||
addSpecialKey("switch_text", "ABC", EVENT_SWITCH_TEXT, FLAG_SMALLER_FONT);
|
||||
addSpecialKey("switch_numeric", "123+", EVENT_SWITCH_NUMERIC, FLAG_SMALLER_FONT);
|
||||
addSpecialKey("switch_emoji", "\u0001" , EVENT_SWITCH_EMOJI, FLAG_KEY_FONT | FLAG_SMALLER_FONT);
|
||||
addSpecialKey("config", "\uE806", EVENT_CONFIG, FLAG_KEY_FONT | FLAG_SMALLER_FONT);
|
||||
addSpecialKey("switch_text", "ABC", EVENT_SWITCH_TEXT);
|
||||
addSpecialKey("switch_numeric", "123+", EVENT_SWITCH_NUMERIC);
|
||||
addSpecialKey("switch_emoji", "\uE812" , EVENT_SWITCH_EMOJI, FLAG_KEY_FONT | FLAG_SMALLER_FONT);
|
||||
addSpecialKey("switch_back_emoji", "ABC", EVENT_SWITCH_BACK_EMOJI);
|
||||
addSpecialKey("switch_programming", "Prog", EVENT_SWITCH_PROGRAMMING, FLAG_SMALLER_FONT);
|
||||
addSpecialKey("change_method", "\u0009", EVENT_CHANGE_METHOD, FLAG_KEY_FONT | FLAG_SMALLER_FONT);
|
||||
addSpecialKey("change_method", "\ue807", EVENT_CHANGE_METHOD, FLAG_KEY_FONT | FLAG_SMALLER_FONT);
|
||||
addSpecialKey("action", "Action", EVENT_ACTION, FLAG_SMALLER_FONT); // Will always be replaced
|
||||
|
||||
addEventKey("esc", "Esc", KeyEvent.KEYCODE_ESCAPE, FLAG_SMALLER_FONT);
|
||||
addEventKey("enter", "\u000E", KeyEvent.KEYCODE_ENTER, FLAG_KEY_FONT);
|
||||
addEventKey("up", "\u0005", KeyEvent.KEYCODE_DPAD_UP, FLAG_KEY_FONT | FLAG_PRECISE_REPEAT);
|
||||
addEventKey("right", "\u0006", KeyEvent.KEYCODE_DPAD_RIGHT, FLAG_KEY_FONT | FLAG_PRECISE_REPEAT);
|
||||
addEventKey("down", "\u0007", KeyEvent.KEYCODE_DPAD_DOWN, FLAG_KEY_FONT | FLAG_PRECISE_REPEAT);
|
||||
addEventKey("left", "\u0008", KeyEvent.KEYCODE_DPAD_LEFT, FLAG_KEY_FONT | FLAG_PRECISE_REPEAT);
|
||||
addEventKey("page_up", "\u0002", KeyEvent.KEYCODE_PAGE_UP, FLAG_KEY_FONT);
|
||||
addEventKey("page_down", "\u0003", KeyEvent.KEYCODE_PAGE_DOWN, FLAG_KEY_FONT);
|
||||
addEventKey("home", "\u000B", KeyEvent.KEYCODE_MOVE_HOME, FLAG_KEY_FONT);
|
||||
addEventKey("end", "\u000C", KeyEvent.KEYCODE_MOVE_END, FLAG_KEY_FONT);
|
||||
addEventKey("backspace", "\u0011", KeyEvent.KEYCODE_DEL, FLAG_KEY_FONT);
|
||||
addEventKey("delete", "\u0010", KeyEvent.KEYCODE_FORWARD_DEL, FLAG_KEY_FONT);
|
||||
addEventKey("enter", "\ue800", KeyEvent.KEYCODE_ENTER, FLAG_KEY_FONT);
|
||||
addEventKey("up", "\uE80B", KeyEvent.KEYCODE_DPAD_UP, FLAG_KEY_FONT | FLAG_PRECISE_REPEAT);
|
||||
addEventKey("right", "\uE80C", KeyEvent.KEYCODE_DPAD_RIGHT, FLAG_KEY_FONT | FLAG_PRECISE_REPEAT);
|
||||
addEventKey("down", "\uE809", KeyEvent.KEYCODE_DPAD_DOWN, FLAG_KEY_FONT | FLAG_PRECISE_REPEAT);
|
||||
addEventKey("left", "\uE80A", KeyEvent.KEYCODE_DPAD_LEFT, FLAG_KEY_FONT | FLAG_PRECISE_REPEAT);
|
||||
addEventKey("page_up", "\uE810", KeyEvent.KEYCODE_PAGE_UP, FLAG_KEY_FONT);
|
||||
addEventKey("page_down", "\uE811", KeyEvent.KEYCODE_PAGE_DOWN, FLAG_KEY_FONT);
|
||||
addEventKey("home", "\uE80E", KeyEvent.KEYCODE_MOVE_HOME, FLAG_KEY_FONT);
|
||||
addEventKey("end", "\uE80F", KeyEvent.KEYCODE_MOVE_END, FLAG_KEY_FONT);
|
||||
addEventKey("backspace", "⌫", KeyEvent.KEYCODE_DEL, FLAG_SMALLER_FONT);
|
||||
addEventKey("delete", "⌦", KeyEvent.KEYCODE_FORWARD_DEL, FLAG_SMALLER_FONT);
|
||||
addEventKey("insert", "Ins", KeyEvent.KEYCODE_INSERT, FLAG_SMALLER_FONT);
|
||||
addEventKey("f1", "F1", KeyEvent.KEYCODE_F1);
|
||||
addEventKey("f2", "F2", KeyEvent.KEYCODE_F2);
|
||||
@ -266,12 +259,9 @@ class KeyValue
|
||||
addEventKey("f8", "F8", KeyEvent.KEYCODE_F8);
|
||||
addEventKey("f9", "F9", KeyEvent.KEYCODE_F9);
|
||||
addEventKey("f10", "F10", KeyEvent.KEYCODE_F10);
|
||||
addEventKey("f11", "F11", KeyEvent.KEYCODE_F11, FLAG_SMALLER_FONT);
|
||||
addEventKey("f12", "F12", KeyEvent.KEYCODE_F12, FLAG_SMALLER_FONT);
|
||||
addEventKey("tab", "\u000F", KeyEvent.KEYCODE_TAB, FLAG_KEY_FONT | FLAG_SMALLER_FONT);
|
||||
addEventKey("tab", "↹", KeyEvent.KEYCODE_TAB);
|
||||
|
||||
addKey("\\t", "\\t", '\t', EVENT_NONE, 0); // Send the tab character
|
||||
addKey("space", "\r", ' ', KeyEvent.KEYCODE_SPACE, FLAG_KEY_FONT);
|
||||
addKey("nbsp", "\u237d", '\u00a0', EVENT_NONE, FLAG_KEY_FONT | FLAG_SMALLER_FONT);
|
||||
addKey("space", "\ue80d", ' ', KeyEvent.KEYCODE_SPACE, FLAG_KEY_FONT | FLAG_SMALLER_FONT);
|
||||
}
|
||||
}
|
||||
|
@ -92,12 +92,11 @@ public class Keyboard2 extends InputMethodService
|
||||
private void refreshAccentsOption(InputMethodManager imm, InputMethodSubtype subtype)
|
||||
{
|
||||
HashSet<String> extra_keys = new HashSet<String>();
|
||||
List<InputMethodSubtype> enabled_subtypes = getEnabledSubtypes(imm);
|
||||
switch (_config.accents)
|
||||
{
|
||||
case 1:
|
||||
extra_keys_of_subtype(extra_keys, subtype);
|
||||
for (InputMethodSubtype s : enabled_subtypes)
|
||||
for (InputMethodSubtype s : getEnabledSubtypes(imm))
|
||||
extra_keys_of_subtype(extra_keys, s);
|
||||
break;
|
||||
case 2:
|
||||
@ -108,8 +107,6 @@ public class Keyboard2 extends InputMethodService
|
||||
default: throw new IllegalArgumentException();
|
||||
}
|
||||
_config.extra_keys = extra_keys;
|
||||
if (enabled_subtypes.size() > 1)
|
||||
_config.shouldOfferSwitchingToNextInputMethod = true;
|
||||
}
|
||||
|
||||
private void refreshSubtypeLegacyFallback()
|
||||
@ -139,9 +136,6 @@ public class Keyboard2 extends InputMethodService
|
||||
refreshSubtypeLayout(subtype);
|
||||
refreshAccentsOption(imm, subtype);
|
||||
}
|
||||
_config.shouldOfferSwitchingToProgramming =
|
||||
_config.programming_layout != -1 &&
|
||||
_currentTextLayout != _config.programming_layout;
|
||||
}
|
||||
|
||||
private String actionLabel_of_imeAction(int action)
|
||||
@ -279,27 +273,11 @@ public class Keyboard2 extends InputMethodService
|
||||
conn.performEditorAction(_config.actionId);
|
||||
}
|
||||
|
||||
public void switchMain()
|
||||
public void setLayout(int res_id)
|
||||
{
|
||||
_keyboardView.setKeyboard(getLayout(_currentTextLayout));
|
||||
}
|
||||
|
||||
public void switchNumeric()
|
||||
{
|
||||
_keyboardView.setKeyboard(getLayout(R.xml.numeric));
|
||||
}
|
||||
|
||||
public void switchProgramming()
|
||||
{
|
||||
if (_config.programming_layout == -1)
|
||||
return;
|
||||
KeyboardData layout =
|
||||
getLayout(_config.programming_layout).replaceKeys(key -> {
|
||||
if (key != null && key.eventCode == KeyValue.EVENT_SWITCH_PROGRAMMING)
|
||||
return KeyValue.getKeyByName("switch_text");
|
||||
return key;
|
||||
});
|
||||
_keyboardView.setKeyboard(layout);
|
||||
if (res_id == -1)
|
||||
res_id = _currentTextLayout;
|
||||
_keyboardView.setKeyboard(getLayout(res_id));
|
||||
}
|
||||
|
||||
public void sendKeyEvent(int eventAction, int eventCode, int meta)
|
||||
|
@ -67,27 +67,26 @@ public class Keyboard2View extends View
|
||||
invalidate();
|
||||
}
|
||||
|
||||
public KeyValue onPointerDown(KeyValue k)
|
||||
public void onPointerDown(KeyValue k)
|
||||
{
|
||||
k = KeyModifier.handleFlags(k, _flags);
|
||||
updateFlags();
|
||||
invalidate();
|
||||
if (k != null)
|
||||
vibrate();
|
||||
return k;
|
||||
}
|
||||
|
||||
public KeyValue onPointerSwipe(KeyValue k)
|
||||
public void onPointerSwipe(KeyValue k)
|
||||
{
|
||||
k = KeyModifier.handleFlags(k, _flags);
|
||||
updateFlags();
|
||||
invalidate();
|
||||
if (k != null)
|
||||
vibrate();
|
||||
return k;
|
||||
}
|
||||
|
||||
public void onPointerUp(KeyValue k)
|
||||
{
|
||||
_config.handler.handleKeyUp(k, _flags);
|
||||
updateFlags();
|
||||
invalidate();
|
||||
}
|
||||
|
||||
@ -98,6 +97,7 @@ public class Keyboard2View extends View
|
||||
|
||||
public void onPointerFlagsChanged()
|
||||
{
|
||||
updateFlags();
|
||||
invalidate();
|
||||
}
|
||||
|
||||
@ -202,7 +202,6 @@ public class Keyboard2View extends View
|
||||
@Override
|
||||
protected void onDraw(Canvas canvas)
|
||||
{
|
||||
updateFlags();
|
||||
float y = _config.marginTop + _config.keyVerticalInterval / 2;
|
||||
for (KeyboardData.Row row : _keyboard.rows)
|
||||
{
|
||||
|
@ -194,18 +194,6 @@ class KeyboardData
|
||||
{
|
||||
return new Key(key0, key1, key2, key3, key4, width * s, shift, edgekeys);
|
||||
}
|
||||
|
||||
public KeyValue getValue(int index)
|
||||
{
|
||||
switch (index)
|
||||
{
|
||||
case 1: return key1;
|
||||
case 2: return key2;
|
||||
case 3: return key3;
|
||||
case 4: return key4;
|
||||
default: case 0: return key0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static abstract interface MapKeys extends Function<KeyValue, KeyValue> { }
|
||||
|
@ -52,10 +52,8 @@ public final class Pointers implements Handler.Callback
|
||||
*/
|
||||
public int getKeyFlags(KeyValue kv)
|
||||
{
|
||||
// Use physical equality because the key might have been modified.
|
||||
String name = kv.name;
|
||||
for (Pointer p : _ptrs)
|
||||
if (p.value != null && p.value.name == name)
|
||||
if (p.value != null && p.value.name == kv.name) // Physical equality
|
||||
return p.flags;
|
||||
return -1;
|
||||
}
|
||||
@ -68,7 +66,7 @@ public final class Pointers implements Handler.Callback
|
||||
if (ptr == null)
|
||||
return;
|
||||
stopKeyRepeat(ptr);
|
||||
Pointer latched = getLatched(ptr);
|
||||
Pointer latched = getLatched(ptr.value);
|
||||
if (latched != null) // Already latched
|
||||
{
|
||||
removePtr(ptr); // Remove dupplicate
|
||||
@ -109,16 +107,16 @@ public final class Pointers implements Handler.Callback
|
||||
|
||||
public void onTouchDown(float x, float y, int pointerId, KeyboardData.Key key)
|
||||
{
|
||||
// Ignore new presses while a modulated key is active. On some devices,
|
||||
// ghost touch events can happen while the pointer travels on top of other
|
||||
// keys.
|
||||
if (isModulatedKeyPressed())
|
||||
// Ignore new pointers that are too close to an existing pointer. This
|
||||
// might be glitches.
|
||||
if (isPointerNearby(x, y))
|
||||
return;
|
||||
KeyValue value = _handler.onPointerDown(key.key0);
|
||||
Pointer ptr = new Pointer(pointerId, key, 0, value, x, y);
|
||||
KeyValue value = key.key0;
|
||||
Pointer ptr = new Pointer(pointerId, key, value, x, y);
|
||||
_ptrs.add(ptr);
|
||||
if (value != null && (value.flags & KeyValue.FLAG_NOREPEAT) == 0)
|
||||
startKeyRepeat(ptr);
|
||||
_handler.onPointerDown(value);
|
||||
}
|
||||
|
||||
public void onTouchMove(float x, float y, int pointerId)
|
||||
@ -129,42 +127,42 @@ public final class Pointers implements Handler.Callback
|
||||
float dx = x - ptr.downX;
|
||||
float dy = y - ptr.downY;
|
||||
float dist = Math.abs(dx) + Math.abs(dy);
|
||||
ptr.ptrDist = dist;
|
||||
int newIndex;
|
||||
ptr.ptrDistX = dx;
|
||||
ptr.ptrDistY = dy;
|
||||
KeyValue newValue;
|
||||
if (dist < _config.swipe_dist_px)
|
||||
{
|
||||
newIndex = 0;
|
||||
newValue = ptr.key.key0;
|
||||
}
|
||||
else if (ptr.key.edgekeys)
|
||||
{
|
||||
if (Math.abs(dy) > Math.abs(dx)) // vertical swipe
|
||||
newIndex = (dy < 0) ? 1 : 4;
|
||||
newValue = (dy < 0) ? ptr.key.key1 : ptr.key.key4;
|
||||
else // horizontal swipe
|
||||
newIndex = (dx < 0) ? 3 : 2;
|
||||
newValue = (dx < 0) ? ptr.key.key3 : ptr.key.key2;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (dx < 0) // left side
|
||||
newIndex = (dy < 0) ? 1 : 3;
|
||||
newValue = (dy < 0) ? ptr.key.key1 : ptr.key.key3;
|
||||
else // right side
|
||||
newIndex = (dy < 0) ? 2 : 4;
|
||||
newValue = (dy < 0) ? ptr.key.key2 : ptr.key.key4;
|
||||
}
|
||||
if (newIndex != ptr.value_index)
|
||||
if (newValue != null && newValue != ptr.value)
|
||||
{
|
||||
ptr.value_index = newIndex;
|
||||
KeyValue newValue = _handler.onPointerSwipe(ptr.key.getValue(newIndex));
|
||||
if (newValue != null)
|
||||
int old_flags = (ptr.value != null) ? ptr.value.flags : 0;
|
||||
ptr.value = newValue;
|
||||
ptr.flags = newValue.flags;
|
||||
if ((old_flags & newValue.flags & KeyValue.FLAG_PRECISE_REPEAT) != 0)
|
||||
{
|
||||
int old_flags = ptr.flags;
|
||||
ptr.value = newValue;
|
||||
ptr.flags = newValue.flags;
|
||||
// Keep the keyrepeat going between modulated keys.
|
||||
if ((old_flags & newValue.flags & KeyValue.FLAG_PRECISE_REPEAT) == 0)
|
||||
{
|
||||
stopKeyRepeat(ptr);
|
||||
if ((newValue.flags & KeyValue.FLAG_NOREPEAT) == 0)
|
||||
startKeyRepeat(ptr);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
stopKeyRepeat(ptr);
|
||||
if ((newValue.flags & KeyValue.FLAG_NOREPEAT) == 0)
|
||||
startKeyRepeat(ptr);
|
||||
_handler.onPointerSwipe(newValue);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -184,12 +182,10 @@ public final class Pointers implements Handler.Callback
|
||||
_ptrs.remove(ptr);
|
||||
}
|
||||
|
||||
private Pointer getLatched(Pointer target)
|
||||
private Pointer getLatched(KeyValue kv)
|
||||
{
|
||||
KeyboardData.Key k = target.key;
|
||||
int vi = target.value_index;
|
||||
for (Pointer p : _ptrs)
|
||||
if (p.key == k && p.value_index == vi && p.pointerId == -1)
|
||||
if (p.value == kv && p.pointerId == -1)
|
||||
return p;
|
||||
return null;
|
||||
}
|
||||
@ -208,11 +204,15 @@ public final class Pointers implements Handler.Callback
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isModulatedKeyPressed()
|
||||
/** Check if a pointer is within a radius of 'pointerTooClose' */
|
||||
private boolean isPointerNearby(float x, float y)
|
||||
{
|
||||
for (Pointer ptr : _ptrs)
|
||||
for (Pointer p : _ptrs)
|
||||
{
|
||||
if ((ptr.flags & KeyValue.FLAG_PRECISE_REPEAT) != 0)
|
||||
float dx = p.downX + p.ptrDistX - x;
|
||||
float dy = p.downY + p.ptrDistY - y;
|
||||
float d = Math.abs(dx) + Math.abs(dy);
|
||||
if (d < _config.pointerTooClose)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@ -269,12 +269,13 @@ public final class Pointers implements Handler.Callback
|
||||
|
||||
private float modulatePreciseRepeat(Pointer ptr)
|
||||
{
|
||||
float ptrDist = Math.abs(ptr.ptrDistX) + Math.abs(ptr.ptrDistY);
|
||||
if (ptr.repeatingPtrDist < 0.f)
|
||||
ptr.repeatingPtrDist = ptr.ptrDist; // First repeat
|
||||
if (ptr.ptrDist > ptr.repeatingPtrDist * 2.f)
|
||||
ptr.repeatingPtrDist = ptr.ptrDist / 2.f; // Large swipe, move the middle point
|
||||
ptr.repeatingPtrDist = ptrDist; // First repeat
|
||||
if (ptrDist > ptr.repeatingPtrDist * 2.f)
|
||||
ptr.repeatingPtrDist = ptrDist / 2.f; // Large swipe, move the middle point
|
||||
float left = ptr.repeatingPtrDist / 2.f;
|
||||
float accel = (ptr.ptrDist - left) / (ptr.repeatingPtrDist - left);
|
||||
float accel = (ptrDist - left) / (ptr.repeatingPtrDist - left);
|
||||
return Math.min(8.f, Math.max(0.1f, accel));
|
||||
}
|
||||
|
||||
@ -282,29 +283,28 @@ public final class Pointers implements Handler.Callback
|
||||
{
|
||||
/** -1 when latched. */
|
||||
public int pointerId;
|
||||
public final KeyboardData.Key key;
|
||||
public int value_index;
|
||||
/** Modified value. Not equal to [key.getValue(value_index)]. */
|
||||
public KeyboardData.Key key;
|
||||
public KeyValue value;
|
||||
public float downX;
|
||||
public float downY;
|
||||
/** Distance of the pointer to the initial press. */
|
||||
public float ptrDist;
|
||||
public float ptrDistX;
|
||||
public float ptrDistY;
|
||||
public int flags;
|
||||
/** Identify timeout messages. */
|
||||
public int timeoutWhat;
|
||||
/** ptrDist at the first repeat, -1 otherwise. */
|
||||
public float repeatingPtrDist;
|
||||
|
||||
public Pointer(int p, KeyboardData.Key k, int vi, KeyValue v, float x, float y)
|
||||
public Pointer(int p, KeyboardData.Key k, KeyValue v, float x, float y)
|
||||
{
|
||||
pointerId = p;
|
||||
key = k;
|
||||
value_index = vi;
|
||||
value = v;
|
||||
downX = x;
|
||||
downY = y;
|
||||
ptrDist = 0.f;
|
||||
ptrDistX = 0.f;
|
||||
ptrDistY = 0.f;
|
||||
flags = (v == null) ? 0 : v.flags;
|
||||
timeoutWhat = -1;
|
||||
repeatingPtrDist = -1.f;
|
||||
@ -313,21 +313,10 @@ public final class Pointers implements Handler.Callback
|
||||
|
||||
public interface IPointerEventHandler
|
||||
{
|
||||
/** A key is pressed. Key can be modified or removed by returning [null].
|
||||
[getFlags()] is not uptodate. */
|
||||
public KeyValue onPointerDown(KeyValue k);
|
||||
|
||||
/** Pointer swipes into a corner. Key can be modified or removed. */
|
||||
public KeyValue onPointerSwipe(KeyValue k);
|
||||
|
||||
/** Key is released. [k] is the key that was returned by [onPointerDown] or
|
||||
[onPointerSwipe]. */
|
||||
public void onPointerDown(KeyValue k);
|
||||
public void onPointerSwipe(KeyValue k);
|
||||
public void onPointerUp(KeyValue k);
|
||||
|
||||
/** Flags changed because latched or locked keys or cancelled pointers. */
|
||||
public void onPointerFlagsChanged();
|
||||
|
||||
/** Key is repeating. */
|
||||
public void onPointerHold(KeyValue k);
|
||||
}
|
||||
}
|
||||
|
@ -70,7 +70,7 @@ public class Theme
|
||||
{
|
||||
if (_specialKeyFont == null)
|
||||
{
|
||||
_specialKeyFont = Typeface.createFromAsset(context.getAssets(), "special_font.ttf");
|
||||
_specialKeyFont = Typeface.createFromAsset(context.getAssets(), "fonts/keys.ttf");
|
||||
}
|
||||
return _specialKeyFont;
|
||||
}
|
||||
|
@ -1,7 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- IcoMoon-Free 227-smile2 CC BY 4.0 -->
|
||||
<!-- Generated by IcoMoon.io -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill="#000000" d="M8 0c-4.418 0-8 3.582-8 8s3.582 8 8 8 8-3.582 8-8-3.582-8-8-8zM11 4c0.552 0 1 0.448 1 1s-0.448 1-1 1-1-0.448-1-1 0.448-1 1-1zM5 4c0.552 0 1 0.448 1 1s-0.448 1-1 1-1-0.448-1-1 0.448-1 1-1zM8 13c-1.82 0-3.413-0.973-4.288-2.427l1.286-0.772c0.612 1.018 1.727 1.699 3.002 1.699s2.389-0.681 3.002-1.699l1.286 0.772c-0.874 1.454-2.467 2.427-4.288 2.427z"></path>
|
||||
</svg>
|
Before Width: | Height: | Size: 742 B |
@ -1,16 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- IcoMoon-Free 327-move-up CC BY 4.0 -->
|
||||
<!-- Generated by IcoMoon.io -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill="#000000" d="M11 8v6h1v-6h2.5l-3-3-3 3z"></path>
|
||||
<path fill="#000000" d="M1 3h1.5v1h-1.5v-1z"></path>
|
||||
<path fill="#000000" d="M3 3h1.5v1h-1.5v-1z"></path>
|
||||
<path fill="#000000" d="M5 3h1v1.5h-1v-1.5z"></path>
|
||||
<path fill="#000000" d="M1 6.5h1v1.5h-1v-1.5z"></path>
|
||||
<path fill="#000000" d="M2.5 7h1.5v1h-1.5v-1z"></path>
|
||||
<path fill="#000000" d="M4.5 7h1.5v1h-1.5v-1z"></path>
|
||||
<path fill="#000000" d="M1 4.5h1v1.5h-1v-1.5z"></path>
|
||||
<path fill="#000000" d="M5 5h1v1.5h-1v-1.5z"></path>
|
||||
<path fill="#000000" d="M5 11v3h-3v-3h3zM6 10h-5v5h5v-5z"></path>
|
||||
</svg>
|
Before Width: | Height: | Size: 921 B |
@ -1,16 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- IcoMoon-Free 328-move-down CC BY 4.0 -->
|
||||
<!-- Generated by IcoMoon.io -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill="#000000" d="M12 11v-6h-1v6h-2.5l3 3 3-3z"></path>
|
||||
<path fill="#000000" d="M5 4v3h-3v-3h3zM6 3h-5v5h5v-5z"></path>
|
||||
<path fill="#000000" d="M1 10h1.5v1h-1.5v-1z"></path>
|
||||
<path fill="#000000" d="M3 10h1.5v1h-1.5v-1z"></path>
|
||||
<path fill="#000000" d="M5 10h1v1.5h-1v-1.5z"></path>
|
||||
<path fill="#000000" d="M1 13.5h1v1.5h-1v-1.5z"></path>
|
||||
<path fill="#000000" d="M2.5 14h1.5v1h-1.5v-1z"></path>
|
||||
<path fill="#000000" d="M4.5 14h1.5v1h-1.5v-1z"></path>
|
||||
<path fill="#000000" d="M1 11.5h1v1.5h-1v-1.5z"></path>
|
||||
<path fill="#000000" d="M5 12h1v1.5h-1v-1.5z"></path>
|
||||
</svg>
|
Before Width: | Height: | Size: 931 B |
@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M495.9 166.6C499.2 175.2 496.4 184.9 489.6 191.2L446.3 230.6C447.4 238.9 448 247.4 448 256C448 264.6 447.4 273.1 446.3 281.4L489.6 320.8C496.4 327.1 499.2 336.8 495.9 345.4C491.5 357.3 486.2 368.8 480.2 379.7L475.5 387.8C468.9 398.8 461.5 409.2 453.4 419.1C447.4 426.2 437.7 428.7 428.9 425.9L373.2 408.1C359.8 418.4 344.1 427 329.2 433.6L316.7 490.7C314.7 499.7 307.7 506.1 298.5 508.5C284.7 510.8 270.5 512 255.1 512C241.5 512 227.3 510.8 213.5 508.5C204.3 506.1 197.3 499.7 195.3 490.7L182.8 433.6C167 427 152.2 418.4 138.8 408.1L83.14 425.9C74.3 428.7 64.55 426.2 58.63 419.1C50.52 409.2 43.12 398.8 36.52 387.8L31.84 379.7C25.77 368.8 20.49 357.3 16.06 345.4C12.82 336.8 15.55 327.1 22.41 320.8L65.67 281.4C64.57 273.1 64 264.6 64 256C64 247.4 64.57 238.9 65.67 230.6L22.41 191.2C15.55 184.9 12.82 175.3 16.06 166.6C20.49 154.7 25.78 143.2 31.84 132.3L36.51 124.2C43.12 113.2 50.52 102.8 58.63 92.95C64.55 85.8 74.3 83.32 83.14 86.14L138.8 103.9C152.2 93.56 167 84.96 182.8 78.43L195.3 21.33C197.3 12.25 204.3 5.04 213.5 3.51C227.3 1.201 241.5 0 256 0C270.5 0 284.7 1.201 298.5 3.51C307.7 5.04 314.7 12.25 316.7 21.33L329.2 78.43C344.1 84.96 359.8 93.56 373.2 103.9L428.9 86.14C437.7 83.32 447.4 85.8 453.4 92.95C461.5 102.8 468.9 113.2 475.5 124.2L480.2 132.3C486.2 143.2 491.5 154.7 495.9 166.6V166.6zM256 336C300.2 336 336 300.2 336 255.1C336 211.8 300.2 175.1 256 175.1C211.8 175.1 176 211.8 176 255.1C176 300.2 211.8 336 256 336z"/></svg>
|
Before Width: | Height: | Size: 1.7 KiB |
@ -1,3 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- materialdesignicons.com arrow-up-bold -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="24" height="24" viewBox="0 0 24 24"><path d="M15,20H9V12H4.16L12,4.16L19.84,12H15V20Z" /></svg>
|
Before Width: | Height: | Size: 384 B |
@ -1,3 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- materialdesignicons.com arrow-right-bold -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="24" height="24" viewBox="0 0 24 24"><path d="M4,15V9H12V4.16L19.84,12L12,19.84V15H4Z" /></svg>
|
Before Width: | Height: | Size: 386 B |
@ -1,3 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- materialdesignicons.com arrow-down-bold -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="24" height="24" viewBox="0 0 24 24"><path d="M9,4H15V12H19.84L12,19.84L4.16,12H9V4Z" /></svg>
|
Before Width: | Height: | Size: 384 B |
@ -1,3 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- materialdesignicons.com arrow-left-bold -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="24" height="24" viewBox="0 0 24 24"><path d="M20,9V15H12V19.84L4.16,12L12,4.16V9H20Z" /></svg>
|
Before Width: | Height: | Size: 385 B |
@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generated by IcoMoon.io -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="18" height="16" viewBox="0 0 18 16">
|
||||
<path fill="#000000" d="M17 2h-16c-0.55 0-1 0.45-1 1v10c0 0.55 0.45 1 1 1h16c0.55 0 1-0.45 1-1v-10c0-0.55-0.45-1-1-1zM10 4h2v2h-2v-2zM13 7v2h-2v-2h2zM7 4h2v2h-2v-2zM10 7v2h-2v-2h2zM4 4h2v2h-2v-2zM7 7v2h-2v-2h2zM2 4h1v2h-1v-2zM2 7h2v2h-2v-2zM3 12h-1v-2h1v2zM12 12h-8v-2h8v2zM16 12h-3v-2h3v2zM16 9h-2v-2h2v2zM16 6h-3v-2h3v2z"></path>
|
||||
</svg>
|
Before Width: | Height: | Size: 651 B |
@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generated by IcoMoon.io -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill="#000000" d="M10.5 14h-5c-0.276 0-0.5-0.224-0.5-0.5v-5.5h-2c-0.202 0-0.385-0.122-0.462-0.309s-0.035-0.402 0.108-0.545l5-5c0.195-0.195 0.512-0.195 0.707 0l5 5c0.143 0.143 0.186 0.358 0.108 0.545s-0.26 0.309-0.462 0.309h-2v5.5c0 0.276-0.224 0.5-0.5 0.5zM6 13h4v-5.5c0-0.276 0.224-0.5 0.5-0.5h1.293l-3.793-3.793-3.793 3.793h1.293c0.276 0 0.5 0.224 0.5 0.5v5.5z"></path>
|
||||
</svg>
|
Before Width: | Height: | Size: 697 B |
@ -1,9 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="-10 0 750 1000"
|
||||
fill="currentColor">
|
||||
<!-- created by @sdrapha - https://github.com/sdrapha/IconFontSVG
|
||||
License - LICENSE: CC BY-SA 4.0 -->
|
||||
<!-- derived from Entypo+ arrow-left-bold by Daniel Bruce -->
|
||||
<title>arrow-home</title>
|
||||
<path d="M0 165h50v669h-50v-669zM378 830l-328 -330l328 -330v190h352v278h-352v192z" />
|
||||
</svg>
|
Before Width: | Height: | Size: 381 B |
@ -1,9 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="-10 0 750 1000"
|
||||
fill="currentColor">
|
||||
<!-- created by @sdrapha - https://github.com/sdrapha/IconFontSVG
|
||||
License - LICENSE: CC BY-SA 4.0 -->
|
||||
<!-- derived from Entypo+ arrow-right-bold by Daniel Bruce -->
|
||||
<title>arrow-end</title>
|
||||
<path d="M680 170h50v660h-50v-660zM350 170l330 330l-330 330v-192h-350v-278h350v-190z" />
|
||||
</svg>
|
Before Width: | Height: | Size: 384 B |
@ -1,8 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 24 24"
|
||||
fill="currentColor">
|
||||
<!-- Material Icons by @google - https://github.com/google/material-design-icons
|
||||
License - Apache-2.0 License -->
|
||||
<title>space-bar</title>
|
||||
<path d="M18 9v4H6V9H4v6h16V9h-2z"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 274 B |
@ -1,9 +0,0 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="-10 0 870 1000">
|
||||
<g transform="matrix(1 0 0 -1 0 850)">
|
||||
<path fill="currentColor"
|
||||
d="M200 390h510v240h140v-280q0 -42 -30 -71t-70 -29h-550v-100l-200 170l200 170v-100z" />
|
||||
</g>
|
||||
|
||||
</svg>
|
Before Width: | Height: | Size: 434 B |
@ -1,9 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generated by IcoMoon.io -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill="#000000" d="M15 0h1v8h-1v-8z"></path>
|
||||
<path fill="#000000" d="M0 8h1v8h-1v-8z"></path>
|
||||
<path fill="#000000" d="M5 11h11v2h-11v2.5l-3.5-3.5 3.5-3.5v2.5z"></path>
|
||||
<path fill="#000000" d="M11 5h-11v-2h11v-2.5l3.5 3.5-3.5 3.5z"></path>
|
||||
</svg>
|
Before Width: | Height: | Size: 563 B |
@ -1,4 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- materialdesignicons.com backspace-reverse-outline -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="24" height="24" viewBox="0 0 24 24"><path d="M5,15.59L6.41,17L10,13.41L13.59,17L15,15.59L11.41,12L15,8.41L13.59,7L10,10.59L6.41,7L5,8.41L8.59,12L5,15.59M2,3A2,2 0 0,0 0,5V19A2,2 0 0,0 2,21H17C17.69,21 18.23,20.64 18.59,20.11L24,12L18.59,3.88C18.23,3.35 17.69,3 17,3H2M2,5H17L21.72,12L17,19H2V5Z" /></svg>
|
||||
|
Before Width: | Height: | Size: 606 B |
@ -1,4 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- materialdesignicons.com backspace-outline -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="24" height="24" viewBox="0 0 24 24"><path d="M19,15.59L17.59,17L14,13.41L10.41,17L9,15.59L12.59,12L9,8.41L10.41,7L14,10.59L17.59,7L19,8.41L15.41,12L19,15.59M22,3A2,2 0 0,1 24,5V19A2,2 0 0,1 22,21H7C6.31,21 5.77,20.64 5.41,20.11L0,12L5.41,3.88C5.77,3.35 6.31,3 7,3H22M22,5H7L2.28,12L7,19H22V5Z" /></svg>
|
||||
|
Before Width: | Height: | Size: 596 B |
@ -1,14 +0,0 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!-- Accent from Roboto font family (Regular). Apache License, Version 2.0. -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="-20 0 1168 2048">
|
||||
<g transform="matrix(1 0 0 -1 0 1536)">
|
||||
<path fill="currentColor"
|
||||
d="M931.256 1002.78l-69.3145 -69.3145q-112.472 86.3159 -249.792 98.0859v99.3945q176.555 -11.7715 319.106 -128.166zM516.679 1031.55q-133.396 -10.4619 -249.792 -100.701q0 1.30811 -71.9297 74.5449l2.61523 -2.61523q142.553 116.395 319.106 128.166v-99.3945z
|
||||
M197.572 860.229q-90.2388 -103.317 -107.24 -245.868h-99.3936q17.001 181.786 137.32 319.105l-6.53906 5.23145l3.92285 -2.61523l41.8506 -43.1582q30.0791 -31.3872 30.0791 -32.6953zM1137.89 614.361h-99.3936q-17.001 141.243 -107.24 248.484l69.3135 70.6211
|
||||
q120.319 -137.32 137.32 -319.105zM1137.89 517.583q-14.3862 -189.633 -129.474 -326.953l-69.3135 70.6221q86.3159 111.164 99.3936 256.331h99.3936zM189.726 263.867q-75.8525 -77.1606 -74.5449 -77.1611l3.92285 3.92383q-115.087 137.32 -128.165 326.953h99.3936
|
||||
q13.0781 -146.476 99.3936 -253.716zM939.103 121.315q-146.476 -124.242 -326.953 -136.013v99.3945q139.935 11.77 257.639 105.933zM516.679 -14.6973q-180.478 11.7715 -326.953 136.013l69.3145 69.3145q117.703 -90.2388 257.639 -105.933v-99.3945zM650 1541h230
|
||||
l2 -6l-269 -260h-148z" />
|
||||
</g>
|
||||
|
||||
</svg>
|
Before Width: | Height: | Size: 1.4 KiB |
@ -1,14 +0,0 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!-- Accent from Roboto font family (Regular). Apache License, Version 2.0. -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="-20 0 1168 2048">
|
||||
<g transform="matrix(1 0 0 -1 0 1536)">
|
||||
<path fill="currentColor"
|
||||
d="M931.256 1002.78l-69.3145 -69.3145q-112.472 86.3159 -249.792 98.0859v99.3945q176.555 -11.7715 319.106 -128.166zM516.679 1031.55q-133.396 -10.4619 -249.792 -100.701q0 1.30811 -71.9297 74.5449l2.61523 -2.61523q142.553 116.395 319.106 128.166v-99.3945z
|
||||
M197.572 860.229q-90.2388 -103.317 -107.24 -245.868h-99.3936q17.001 181.786 137.32 319.105l-6.53906 5.23145l3.92285 -2.61523l41.8506 -43.1582q30.0791 -31.3872 30.0791 -32.6953zM1137.89 614.361h-99.3936q-17.001 141.243 -107.24 248.484l69.3135 70.6211
|
||||
q120.319 -137.32 137.32 -319.105zM1137.89 517.583q-14.3862 -189.633 -129.474 -326.953l-69.3135 70.6221q86.3159 111.164 99.3936 256.331h99.3936zM189.726 263.867q-75.8525 -77.1606 -74.5449 -77.1611l3.92285 3.92383q-115.087 137.32 -128.165 326.953h99.3936
|
||||
q13.0781 -146.476 99.3936 -253.716zM939.103 121.315q-146.476 -124.242 -326.953 -136.013v99.3945q139.935 11.77 257.639 105.933zM516.679 -14.6973q-180.478 11.7715 -326.953 136.013l69.3145 69.3145q117.703 -90.2388 257.639 -105.933v-99.3945zM553 1395l147 148
|
||||
h170v-18l-257 -245h-119l-254 243v20h166z" />
|
||||
</g>
|
||||
|
||||
</svg>
|
Before Width: | Height: | Size: 1.4 KiB |
@ -1,12 +0,0 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!-- Accent from Roboto font family (Regular). Apache License, Version 2.0. -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="-19 0 1167 2048">
|
||||
<g transform="matrix(1 0 0 -1 0 1536)">
|
||||
<path fill="currentColor"
|
||||
d="M931 1003l-69 -70q-112 86 -250 99v99q176 -12 319 -128zM517 1032q-133 -10 -250 -101q0 1 -72 74l3 -2q143 116 319 128v-99zM198 860q-90 -103 -108 -246h-99q17 182 137 319l-6 6l4 -3l41 -43q31 -32 31 -33zM1138 614h-100q-17 141 -107 249l70 70
|
||||
q120 -137 137 -319zM1138 518q-14 -190 -130 -327l-69 70q86 111 99 257h100zM190 264q-76 -77 -75 -77l4 4q-115 137 -128 327h99q14 -147 100 -254zM939 121q-146 -124 -327 -136v100q140 12 258 106zM517 -15q-180 12 -327 136l69 70q118 -90 258 -106v-100zM687 0
|
||||
q-70 -52 -109.5 -99.5t-39.5 -101.5q0 -42 22.5 -66t73.5 -24q27 0 50 7.5t49 18.5l33 -123q-36 -19 -79.5 -31.5t-103.5 -12.5q-95 0 -155.5 55t-60.5 154q0 80 60.5 152t187.5 128z" />
|
||||
</g>
|
||||
|
||||
</svg>
|
Before Width: | Height: | Size: 1.1 KiB |
@ -1,14 +0,0 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!-- Accent from Roboto font family (Regular). Apache License, Version 2.0. -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="-20 0 1168 2048">
|
||||
<g transform="matrix(1 0 0 -1 0 1536)">
|
||||
<path fill="currentColor"
|
||||
d="M931.256 1002.78l-69.3145 -69.3145q-112.472 86.3159 -249.792 98.0859v99.3945q176.555 -11.7715 319.106 -128.166zM516.679 1031.55q-133.396 -10.4619 -249.792 -100.701q0 1.30811 -71.9297 74.5449l2.61523 -2.61523q142.553 116.395 319.106 128.166v-99.3945z
|
||||
M197.572 860.229q-90.2388 -103.317 -107.24 -245.868h-99.3936q17.001 181.786 137.32 319.105l-6.53906 5.23145l3.92285 -2.61523l41.8506 -43.1582q30.0791 -31.3872 30.0791 -32.6953zM1137.89 614.361h-99.3936q-17.001 141.243 -107.24 248.484l69.3135 70.6211
|
||||
q120.319 -137.32 137.32 -319.105zM1137.89 517.583q-14.3862 -189.633 -129.474 -326.953l-69.3135 70.6221q86.3159 111.164 99.3936 256.331h99.3936zM189.726 263.867q-75.8525 -77.1606 -74.5449 -77.1611l3.92285 3.92383q-115.087 137.32 -128.165 326.953h99.3936
|
||||
q13.0781 -146.476 99.3936 -253.716zM939.103 121.315q-146.476 -124.242 -326.953 -136.013v99.3945q139.935 11.77 257.639 105.933zM516.679 -14.6973q-180.478 11.7715 -326.953 136.013l69.3145 69.3145q117.703 -90.2388 257.639 -105.933v-99.3945zM863 1304v-25
|
||||
h-161l-147 148l-146 -148h-160v26l246 237h120z" />
|
||||
</g>
|
||||
|
||||
</svg>
|
Before Width: | Height: | Size: 1.5 KiB |
@ -1,14 +0,0 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!-- Accent from Roboto font family (Regular). Apache License, Version 2.0. -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="-20 0 1168 2048">
|
||||
<g transform="matrix(1 0 0 -1 0 1536)">
|
||||
<path fill="currentColor"
|
||||
d="M931.256 1002.78l-69.3145 -69.3145q-112.472 86.3159 -249.792 98.0859v99.3945q176.555 -11.7715 319.106 -128.166zM516.679 1031.55q-133.396 -10.4619 -249.792 -100.701q0 1.30811 -71.9297 74.5449l2.61523 -2.61523q142.553 116.395 319.106 128.166v-99.3945z
|
||||
M197.572 860.229q-90.2388 -103.317 -107.24 -245.868h-99.3936q17.001 181.786 137.32 319.105l-6.53906 5.23145l3.92285 -2.61523l41.8506 -43.1582q30.0791 -31.3872 30.0791 -32.6953zM1137.89 614.361h-99.3936q-17.001 141.243 -107.24 248.484l69.3135 70.6211
|
||||
q120.319 -137.32 137.32 -319.105zM1137.89 517.583q-14.3862 -189.633 -129.474 -326.953l-69.3135 70.6221q86.3159 111.164 99.3936 256.331h99.3936zM189.726 263.867q-75.8525 -77.1606 -74.5449 -77.1611l3.92285 3.92383q-115.087 137.32 -128.165 326.953h99.3936
|
||||
q13.0781 -146.476 99.3936 -253.716zM939.103 121.315q-146.476 -124.242 -326.953 -136.013v99.3945q139.935 11.77 257.639 105.933zM516.679 -14.6973q-180.478 11.7715 -326.953 136.013l69.3145 69.3145q117.703 -90.2388 257.639 -105.933v-99.3945zM638 1279h-158
|
||||
l-250 260l3 6h230zM638 1279h-158l-250 260l3 6h230z" />
|
||||
</g>
|
||||
|
||||
</svg>
|
Before Width: | Height: | Size: 1.5 KiB |
@ -1,14 +0,0 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!-- Accent from Roboto font family (Regular). Apache License, Version 2.0. -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="-20 0 1168 2048">
|
||||
<g transform="matrix(1 0 0 -1 0 1536)">
|
||||
<path fill="currentColor"
|
||||
d="M931.256 1002.78l-69.3145 -69.3145q-112.472 86.3159 -249.792 98.0859v99.3945q176.555 -11.7715 319.106 -128.166zM516.679 1031.55q-133.396 -10.4619 -249.792 -100.701q0 1.30811 -71.9297 74.5449l2.61523 -2.61523q142.553 116.395 319.106 128.166v-99.3945z
|
||||
M197.572 860.229q-90.2388 -103.317 -107.24 -245.868h-99.3936q17.001 181.786 137.32 319.105l-6.53906 5.23145l3.92285 -2.61523l41.8506 -43.1582q30.0791 -31.3872 30.0791 -32.6953zM1137.89 614.361h-99.3936q-17.001 141.243 -107.24 248.484l69.3135 70.6211
|
||||
q120.319 -137.32 137.32 -319.105zM1137.89 517.583q-14.3862 -189.633 -129.474 -326.953l-69.3135 70.6221q86.3159 111.164 99.3936 256.331h99.3936zM189.726 263.867q-75.8525 -77.1606 -74.5449 -77.1611l3.92285 3.92383q-115.087 137.32 -128.165 326.953h99.3936
|
||||
q13.0781 -146.476 99.3936 -253.716zM939.103 121.315q-146.476 -124.242 -326.953 -136.013v99.3945q139.935 11.77 257.639 105.933zM516.679 -14.6973q-180.478 11.7715 -326.953 136.013l69.3145 69.3145q117.703 -90.2388 257.639 -105.933v-99.3945zM925.5 1318h-721
|
||||
v146h721v-146z" />
|
||||
</g>
|
||||
|
||||
</svg>
|
Before Width: | Height: | Size: 1.4 KiB |
@ -1,14 +0,0 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!-- Accent from Roboto font family (Regular). Apache License, Version 2.0. -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="-20 0 1168 2048">
|
||||
<g transform="matrix(1 0 0 -1 0 1536)">
|
||||
<path fill="currentColor"
|
||||
d="M931.256 1002.78l-69.3145 -69.3145q-112.472 86.3159 -249.792 98.0859v99.3945q176.555 -11.7715 319.106 -128.166zM516.679 1031.55q-133.396 -10.4619 -249.792 -100.701q0 1.30811 -71.9297 74.5449l2.61523 -2.61523q142.553 116.395 319.106 128.166v-99.3945z
|
||||
M197.572 860.229q-90.2388 -103.317 -107.24 -245.868h-99.3936q17.001 181.786 137.32 319.105l-6.53906 5.23145l3.92285 -2.61523l41.8506 -43.1582q30.0791 -31.3872 30.0791 -32.6953zM1137.89 614.361h-99.3936q-17.001 141.243 -107.24 248.484l69.3135 70.6211
|
||||
q120.319 -137.32 137.32 -319.105zM1137.89 517.583q-14.3862 -189.633 -129.474 -326.953l-69.3135 70.6221q86.3159 111.164 99.3936 256.331h99.3936zM189.726 263.867q-75.8525 -77.1606 -74.5449 -77.1611l3.92285 3.92383q-115.087 137.32 -128.165 326.953h99.3936
|
||||
q13.0781 -146.476 99.3936 -253.716zM939.103 121.315q-146.476 -124.242 -326.953 -136.013v99.3945q139.935 11.77 257.639 105.933zM516.679 -14.6973q-180.478 11.7715 -326.953 136.013l69.3145 69.3145q117.703 -90.2388 257.639 -105.933v-99.3945zM378 1412
|
||||
q0 72 51.5 120.5t124.5 48.5q72 0 122.5 -48.5t50.5 -120.5q0 -73 -50.5 -118.5t-122.5 -45.5q-74 0 -125 46t-51 118zM478 1412q0 -31 22.5 -52.5t53.5 -21.5q30 0 51.5 21t21.5 53t-21.5 54.5t-51.5 22.5q-32 0 -54 -22.5t-22 -54.5z" />
|
||||
</g>
|
||||
|
||||
</svg>
|
Before Width: | Height: | Size: 1.6 KiB |
@ -1,14 +0,0 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!-- Accent from Roboto font family (Regular). Apache License, Version 2.0. -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="-20 0 1168 2048">
|
||||
<g transform="matrix(1 0 0 -1 0 1536)">
|
||||
<path fill="currentColor"
|
||||
d="M931.256 1002.78l-69.3145 -69.3145q-112.472 86.3159 -249.792 98.0859v99.3945q176.555 -11.7715 319.106 -128.166zM516.679 1031.55q-133.396 -10.4619 -249.792 -100.701q0 1.30811 -71.9297 74.5449l2.61523 -2.61523q142.553 116.395 319.106 128.166v-99.3945z
|
||||
M197.572 860.229q-90.2388 -103.317 -107.24 -245.868h-99.3936q17.001 181.786 137.32 319.105l-6.53906 5.23145l3.92285 -2.61523l41.8506 -43.1582q30.0791 -31.3872 30.0791 -32.6953zM1137.89 614.361h-99.3936q-17.001 141.243 -107.24 248.484l69.3135 70.6211
|
||||
q120.319 -137.32 137.32 -319.105zM1137.89 517.583q-14.3862 -189.633 -129.474 -326.953l-69.3135 70.6221q86.3159 111.164 99.3936 256.331h99.3936zM189.726 263.867q-75.8525 -77.1606 -74.5449 -77.1611l3.92285 3.92383q-115.087 137.32 -128.165 326.953h99.3936
|
||||
q13.0781 -146.476 99.3936 -253.716zM939.103 121.315q-146.476 -124.242 -326.953 -136.013v99.3945q139.935 11.77 257.639 105.933zM516.679 -14.6973q-180.478 11.7715 -326.953 136.013l69.3145 69.3145q117.703 -90.2388 257.639 -105.933v-99.3945zM902 1522
|
||||
q0 -94 -59.5 -159t-149.5 -65q-71 0 -148 46.5t-128 46.5q-43 0 -72 -32.5t-29 -78.5l-108 26q0 93 59 161.5t150 68.5q56 0 140 -47t136 -47q41 0 71 32.5t30 79.5z" />
|
||||
</g>
|
||||
|
||||
</svg>
|
Before Width: | Height: | Size: 1.6 KiB |
@ -1,14 +0,0 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!-- Accent from Roboto font family (Regular). Apache License, Version 2.0. -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="-20 0 1168 2048">
|
||||
<g transform="matrix(1 0 0 -1 0 1536)">
|
||||
<path fill="currentColor"
|
||||
d="M931.256 1002.78l-69.3145 -69.3145q-112.472 86.3159 -249.792 98.0859v99.3945q176.555 -11.7715 319.106 -128.166zM516.679 1031.55q-133.396 -10.4619 -249.792 -100.701q0 1.30811 -71.9297 74.5449l2.61523 -2.61523q142.553 116.395 319.106 128.166v-99.3945z
|
||||
M197.572 860.229q-90.2388 -103.317 -107.24 -245.868h-99.3936q17.001 181.786 137.32 319.105l-6.53906 5.23145l3.92285 -2.61523l41.8506 -43.1582q30.0791 -31.3872 30.0791 -32.6953zM1137.89 614.361h-99.3936q-17.001 141.243 -107.24 248.484l69.3135 70.6211
|
||||
q120.319 -137.32 137.32 -319.105zM1137.89 517.583q-14.3862 -189.633 -129.474 -326.953l-69.3135 70.6221q86.3159 111.164 99.3936 256.331h99.3936zM189.726 263.867q-75.8525 -77.1606 -74.5449 -77.1611l3.92285 3.92383q-115.087 137.32 -128.165 326.953h99.3936
|
||||
q13.0781 -146.476 99.3936 -253.716zM939.103 121.315q-146.476 -124.242 -326.953 -136.013v99.3945q139.935 11.77 257.639 105.933zM516.679 -14.6973q-180.478 11.7715 -326.953 136.013l69.3145 69.3145q117.703 -90.2388 257.639 -105.933v-99.3945zM900 1283h-219
|
||||
v200h219v-200zM430 1283h-219v200h219v-200z" />
|
||||
</g>
|
||||
|
||||
</svg>
|
Before Width: | Height: | Size: 1.4 KiB |
@ -1,14 +0,0 @@
|
||||
# The special font is used for the symbols of some keys. It is built from SVG
|
||||
# files, one for each glyph.
|
||||
New()
|
||||
|
||||
# Imports glyphs, file name is position in the font.
|
||||
i = 2
|
||||
while (i < $argc)
|
||||
Select(Strtol($argv[i]:t:r, 16))
|
||||
Import($argv[i], 0, 0, 4.0, 0.1)
|
||||
AutoWidth(150)
|
||||
i++
|
||||
endloop
|
||||
|
||||
Generate($1)
|