Compare commits
3 Commits
Author | SHA1 | Date | |
---|---|---|---|
5d2d407659 | |||
795e889bd0 | |||
7071f19877 |
@ -1,3 +1,9 @@
|
|||||||
|
## 0.10.1
|
||||||
|
|
||||||
|
- Fixed the order of cells in the CHUNITHM keyboard
|
||||||
|
- Fixed numpad bindings with numlock disabled
|
||||||
|
- Disabled primary monitor cleanup when "don't switch primary monitor" is enabled
|
||||||
|
|
||||||
## 0.10.0
|
## 0.10.0
|
||||||
|
|
||||||
- Added a global progress bar
|
- Added a global progress bar
|
||||||
|
@ -6,14 +6,14 @@ use tauri::{AppHandle, Listener};
|
|||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
pub struct DisplayInfo {
|
pub struct DisplayInfo {
|
||||||
pub primary: String,
|
pub primary: Option<String>,
|
||||||
pub set: Option<DisplaySet>,
|
pub set: Option<DisplaySet>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for DisplayInfo {
|
impl Default for DisplayInfo {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
DisplayInfo {
|
DisplayInfo {
|
||||||
primary: "default".to_owned(),
|
primary: None,
|
||||||
set: query_displays().ok(),
|
set: query_displays().ok(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -60,7 +60,7 @@ impl Display {
|
|||||||
.ok_or_else(|| anyhow!("Unable to query display settings"))?;
|
.ok_or_else(|| anyhow!("Unable to query display settings"))?;
|
||||||
|
|
||||||
let res = DisplayInfo {
|
let res = DisplayInfo {
|
||||||
primary: primary.name().to_owned(),
|
primary: if self.dont_switch_primary { None } else { Some(primary.name().to_owned()) },
|
||||||
set: Some(display_set.clone()),
|
set: Some(display_set.clone()),
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -132,12 +132,14 @@ impl Display {
|
|||||||
let display_set = info.set.as_ref()
|
let display_set = info.set.as_ref()
|
||||||
.ok_or_else(|| anyhow!("Unable to clean up displays: no display set"))?;
|
.ok_or_else(|| anyhow!("Unable to clean up displays: no display set"))?;
|
||||||
|
|
||||||
let primary = display_set
|
if let Some(info_primary) = &info.primary {
|
||||||
.displays()
|
let primary = display_set
|
||||||
.find(|display| display.name() == info.primary)
|
.displays()
|
||||||
.ok_or_else(|| anyhow!("Display {} not found", info.primary))?;
|
.find(|display| display.name() == info_primary)
|
||||||
|
.ok_or_else(|| anyhow!("Display {} not found", info_primary))?;
|
||||||
|
|
||||||
primary.set_primary()?;
|
primary.set_primary()?;
|
||||||
|
}
|
||||||
|
|
||||||
display_set.apply()?;
|
display_set.apply()?;
|
||||||
displayz::refresh()?;
|
displayz::refresh()?;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"$schema": "https://schema.tauri.app/config/2",
|
"$schema": "https://schema.tauri.app/config/2",
|
||||||
"productName": "STARTLINER",
|
"productName": "STARTLINER",
|
||||||
"version": "0.10.0",
|
"version": "0.10.1",
|
||||||
"identifier": "zip.patafour.startliner",
|
"identifier": "zip.patafour.startliner",
|
||||||
"build": {
|
"build": {
|
||||||
"beforeDevCommand": "bun run dev",
|
"beforeDevCommand": "bun run dev",
|
||||||
|
@ -15,9 +15,51 @@ const handleKey = (
|
|||||||
) => {
|
) => {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
|
|
||||||
const keycode = toKeycode(event.code);
|
let keycode = toKeycode(event.code);
|
||||||
|
|
||||||
if (keycode !== null && button !== undefined) {
|
if (keycode !== null && button !== undefined) {
|
||||||
const data = prf.current!.data.keyboard!.data as any;
|
const data = prf.current!.data.keyboard!.data as any;
|
||||||
|
|
||||||
|
if (event.getModifierState('NumLock') === false) {
|
||||||
|
switch (event.code) {
|
||||||
|
case 'NumpadDecimal':
|
||||||
|
keycode = toKeycode('Delete');
|
||||||
|
break;
|
||||||
|
case 'Numpad0':
|
||||||
|
keycode = toKeycode('Insert');
|
||||||
|
break;
|
||||||
|
case 'Numpad1':
|
||||||
|
keycode = toKeycode('End');
|
||||||
|
break;
|
||||||
|
case 'Numpad2':
|
||||||
|
keycode = toKeycode('ArrowDown');
|
||||||
|
break;
|
||||||
|
case 'Numpad3':
|
||||||
|
keycode = toKeycode('PageDown');
|
||||||
|
break;
|
||||||
|
case 'Numpad4':
|
||||||
|
keycode = toKeycode('ArrowLeft');
|
||||||
|
break;
|
||||||
|
case 'Numpad5':
|
||||||
|
keycode = toKeycode('Clear');
|
||||||
|
break;
|
||||||
|
case 'Numpad6':
|
||||||
|
keycode = toKeycode('ArrowRight');
|
||||||
|
break;
|
||||||
|
case 'Numpad7':
|
||||||
|
keycode = toKeycode('Home');
|
||||||
|
break;
|
||||||
|
case 'Numpad8':
|
||||||
|
keycode = toKeycode('ArrowUp');
|
||||||
|
break;
|
||||||
|
case 'Numpad9':
|
||||||
|
keycode = toKeycode('PageUp');
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (index !== undefined) {
|
if (index !== undefined) {
|
||||||
data[button][index] = keycode;
|
data[button][index] = keycode;
|
||||||
} else {
|
} else {
|
||||||
@ -75,7 +117,7 @@ const handleMouse = (
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const getKey = (key: keyof OngekiButtons, index?: number) =>
|
const getKey = (key: keyof OngekiButtons, index?: number): any =>
|
||||||
computed(() => {
|
computed(() => {
|
||||||
const data = prf.current!.data.keyboard?.data as any;
|
const data = prf.current!.data.keyboard?.data as any;
|
||||||
const keycode =
|
const keycode =
|
||||||
@ -93,6 +135,7 @@ const KEY_MAP: { [key: number]: string } = {
|
|||||||
6: 'M5',
|
6: 'M5',
|
||||||
8: 'Backspace',
|
8: 'Backspace',
|
||||||
9: 'Tab',
|
9: 'Tab',
|
||||||
|
12: 'Clear',
|
||||||
13: 'Enter',
|
13: 'Enter',
|
||||||
19: 'Pause',
|
19: 'Pause',
|
||||||
20: 'CapsLock',
|
20: 'CapsLock',
|
||||||
@ -204,28 +247,45 @@ const toKeycode = (key: string): number | null => {
|
|||||||
return res ? parseInt(res) : null;
|
return res ? parseInt(res) : null;
|
||||||
};
|
};
|
||||||
|
|
||||||
defineProps({
|
const props = defineProps({
|
||||||
small: Boolean,
|
small: Boolean,
|
||||||
verySmall: Boolean,
|
|
||||||
tall: Boolean,
|
tall: Boolean,
|
||||||
tooltip: String,
|
tooltip: String,
|
||||||
button: String,
|
button: String,
|
||||||
color: String,
|
color: String,
|
||||||
index: Number,
|
index: Number,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const modelValue = computed(() => {
|
||||||
|
return getKey(props.button as keyof OngekiButtons, props.index).value;
|
||||||
|
});
|
||||||
|
|
||||||
|
const fontSize = computed(() => {
|
||||||
|
if (!props.small) {
|
||||||
|
return '1rem';
|
||||||
|
}
|
||||||
|
const len = modelValue.value.length;
|
||||||
|
if (len < 5) {
|
||||||
|
return '1rem';
|
||||||
|
}
|
||||||
|
if (len < 7) {
|
||||||
|
return '0.75rem';
|
||||||
|
}
|
||||||
|
return '0.5rem';
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<InputText
|
<InputText
|
||||||
:style="{
|
:style="{
|
||||||
width: small ? '3em' : '5em',
|
width: small ? '2.8rem' : '5rem',
|
||||||
height: small ? '3em' : tall ? '10em' : '5em',
|
height: small ? '2.8rem' : tall ? '10rem' : '5rem',
|
||||||
fontSize: small ? '0.9em' : '1em',
|
fontSize,
|
||||||
backgroundColor: color,
|
backgroundColor: color,
|
||||||
}"
|
}"
|
||||||
unstyled
|
unstyled
|
||||||
class="text-center buttoninputtext"
|
class="text-center buttoninputtext"
|
||||||
v-tooltip="tooltip"
|
v-tooltip="tooltip ? `${tooltip}: ${modelValue}` : undefined"
|
||||||
@contextmenu.prevent="() => {}"
|
@contextmenu.prevent="() => {}"
|
||||||
@keydown="(ev: KeyboardEvent) => handleKey(button, ev, index)"
|
@keydown="(ev: KeyboardEvent) => handleKey(button, ev, index)"
|
||||||
@mousedown="
|
@mousedown="
|
||||||
@ -233,7 +293,7 @@ defineProps({
|
|||||||
handleMouse(button as keyof OngekiButtons, ev, index)
|
handleMouse(button as keyof OngekiButtons, ev, index)
|
||||||
"
|
"
|
||||||
@focusout="() => (hasClickedM1Once = false)"
|
@focusout="() => (hasClickedM1Once = false)"
|
||||||
:model-value="getKey(button as keyof OngekiButtons, index) as any"
|
:model-value="modelValue"
|
||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -241,5 +301,7 @@ defineProps({
|
|||||||
.buttoninputtext {
|
.buttoninputtext {
|
||||||
border-radius: 6px;
|
border-radius: 6px;
|
||||||
border: 1px solid rgba(200, 200, 200, 0.3);
|
border: 1px solid rgba(200, 200, 200, 0.3);
|
||||||
|
overflow: scroll !important;
|
||||||
|
text-align: center !important;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -124,7 +124,7 @@ const prf = usePrfStore();
|
|||||||
<div
|
<div
|
||||||
v-for="idx in Array(16)
|
v-for="idx in Array(16)
|
||||||
.fill(0)
|
.fill(0)
|
||||||
.map((_, i) => 16 - i)"
|
.map((_, i) => 32 - 2 * i - 1)"
|
||||||
>
|
>
|
||||||
<KeyboardKey
|
<KeyboardKey
|
||||||
button="cell"
|
button="cell"
|
||||||
@ -142,7 +142,7 @@ const prf = usePrfStore();
|
|||||||
<div
|
<div
|
||||||
v-for="idx in Array(16)
|
v-for="idx in Array(16)
|
||||||
.fill(0)
|
.fill(0)
|
||||||
.map((_, i) => 32 - i)"
|
.map((_, i) => 32 - 2 * i)"
|
||||||
>
|
>
|
||||||
<KeyboardKey
|
<KeyboardKey
|
||||||
button="cell"
|
button="cell"
|
||||||
|
Reference in New Issue
Block a user