mirror of
https://github.com/ankitects/anki.git
synced 2025-09-25 09:16:38 -04:00
Merge 62e225c9d0
into 04a0b10a15
This commit is contained in:
commit
b7cbc6d356
5 changed files with 36 additions and 2 deletions
|
@ -20,6 +20,7 @@ service CollectionService {
|
||||||
rpc LatestProgress(generic.Empty) returns (Progress);
|
rpc LatestProgress(generic.Empty) returns (Progress);
|
||||||
rpc SetWantsAbort(generic.Empty) returns (generic.Empty);
|
rpc SetWantsAbort(generic.Empty) returns (generic.Empty);
|
||||||
rpc SetLoadBalancerEnabled(generic.Bool) returns (OpChanges);
|
rpc SetLoadBalancerEnabled(generic.Bool) returns (OpChanges);
|
||||||
|
rpc GetCustomColours(generic.Empty) returns (GetCustomColoursResponse);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Implicitly includes any of the above methods that are not listed in the
|
// Implicitly includes any of the above methods that are not listed in the
|
||||||
|
@ -163,3 +164,7 @@ message CreateBackupRequest {
|
||||||
bool force = 2;
|
bool force = 2;
|
||||||
bool wait_for_completion = 3;
|
bool wait_for_completion = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
message GetCustomColoursResponse {
|
||||||
|
repeated string colours = 1;
|
||||||
|
}
|
||||||
|
|
|
@ -630,7 +630,7 @@ def deck_options_ready() -> bytes:
|
||||||
|
|
||||||
def save_custom_colours() -> bytes:
|
def save_custom_colours() -> bytes:
|
||||||
colors = [
|
colors = [
|
||||||
QColorDialog.customColor(i).name(QColor.NameFormat.HexArgb)
|
QColorDialog.customColor(i).name(QColor.NameFormat.HexRgb)
|
||||||
for i in range(QColorDialog.customCount())
|
for i in range(QColorDialog.customCount())
|
||||||
]
|
]
|
||||||
aqt.mw.col.set_config("customColorPickerPalette", colors)
|
aqt.mw.col.set_config("customColorPickerPalette", colors)
|
||||||
|
@ -659,6 +659,7 @@ post_handler_list = [
|
||||||
exposed_backend_list = [
|
exposed_backend_list = [
|
||||||
# CollectionService
|
# CollectionService
|
||||||
"latest_progress",
|
"latest_progress",
|
||||||
|
"get_custom_colours",
|
||||||
# DeckService
|
# DeckService
|
||||||
"get_deck_names",
|
"get_deck_names",
|
||||||
# I18nService
|
# I18nService
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
// Copyright: Ankitects Pty Ltd and contributors
|
// Copyright: Ankitects Pty Ltd and contributors
|
||||||
// License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
// License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
||||||
|
use anki_proto::collection::GetCustomColoursResponse;
|
||||||
use anki_proto::generic;
|
use anki_proto::generic;
|
||||||
|
|
||||||
use crate::collection::Collection;
|
use crate::collection::Collection;
|
||||||
|
use crate::config::ConfigKey;
|
||||||
use crate::error;
|
use crate::error;
|
||||||
use crate::prelude::BoolKey;
|
use crate::prelude::BoolKey;
|
||||||
use crate::prelude::Op;
|
use crate::prelude::Op;
|
||||||
|
@ -62,4 +64,13 @@ impl crate::services::CollectionService for Collection {
|
||||||
})
|
})
|
||||||
.map(Into::into)
|
.map(Into::into)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn get_custom_colours(
|
||||||
|
&mut self,
|
||||||
|
) -> error::Result<anki_proto::collection::GetCustomColoursResponse> {
|
||||||
|
let colours = self
|
||||||
|
.get_config_optional(ConfigKey::CustomColorPickerPalette)
|
||||||
|
.unwrap_or_default();
|
||||||
|
Ok(GetCustomColoursResponse { colours })
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -71,6 +71,7 @@ pub(crate) enum ConfigKey {
|
||||||
NextNewCardPosition,
|
NextNewCardPosition,
|
||||||
#[strum(to_string = "schedVer")]
|
#[strum(to_string = "schedVer")]
|
||||||
SchedulerVersion,
|
SchedulerVersion,
|
||||||
|
CustomColorPickerPalette,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(PartialEq, Eq, Serialize_repr, Deserialize_repr, Clone, Copy, Debug)]
|
#[derive(PartialEq, Eq, Serialize_repr, Deserialize_repr, Clone, Copy, Debug)]
|
||||||
|
|
|
@ -55,6 +55,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
||||||
onWheelDragX,
|
onWheelDragX,
|
||||||
} from "./tools/tool-zoom";
|
} from "./tools/tool-zoom";
|
||||||
import { fillMask } from "./tools/tool-fill";
|
import { fillMask } from "./tools/tool-fill";
|
||||||
|
import { getCustomColours, saveCustomColours } from "@generated/backend";
|
||||||
|
|
||||||
export let canvas;
|
export let canvas;
|
||||||
export let iconSize;
|
export let iconSize;
|
||||||
|
@ -76,6 +77,16 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
||||||
let colourRef: HTMLInputElement | undefined;
|
let colourRef: HTMLInputElement | undefined;
|
||||||
const colour = writable(SHAPE_MASK_COLOR);
|
const colour = writable(SHAPE_MASK_COLOR);
|
||||||
|
|
||||||
|
const customColorPickerPalette = writable<string[]>([]);
|
||||||
|
|
||||||
|
async function loadCustomColours() {
|
||||||
|
customColorPickerPalette.set(
|
||||||
|
(await getCustomColours({})).colours.filter(
|
||||||
|
(hex) => !hex.startsWith("#ffffff"),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
function onClick(event: MouseEvent) {
|
function onClick(event: MouseEvent) {
|
||||||
const upperCanvas = document.querySelector(".upper-canvas");
|
const upperCanvas = document.querySelector(".upper-canvas");
|
||||||
if (event.target == upperCanvas) {
|
if (event.target == upperCanvas) {
|
||||||
|
@ -233,6 +244,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
||||||
on(document, "touchstart", onTouchstart),
|
on(document, "touchstart", onTouchstart),
|
||||||
on(document, "mousemove", onMousemoveDocument),
|
on(document, "mousemove", onMousemoveDocument),
|
||||||
);
|
);
|
||||||
|
loadCustomColours();
|
||||||
});
|
});
|
||||||
|
|
||||||
onDestroy(() => {
|
onDestroy(() => {
|
||||||
|
@ -241,7 +253,10 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<datalist id="colour-palette">
|
<datalist id="colour-palette">
|
||||||
<option value={SHAPE_MASK_COLOR}></option>
|
<option>{SHAPE_MASK_COLOR}</option>
|
||||||
|
{#each $customColorPickerPalette as colour}
|
||||||
|
<option>{colour}</option>
|
||||||
|
{/each}
|
||||||
</datalist>
|
</datalist>
|
||||||
|
|
||||||
<input
|
<input
|
||||||
|
@ -251,6 +266,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
||||||
list="colour-palette"
|
list="colour-palette"
|
||||||
value={SHAPE_MASK_COLOR}
|
value={SHAPE_MASK_COLOR}
|
||||||
on:input={(e) => ($colour = e.currentTarget!.value)}
|
on:input={(e) => ($colour = e.currentTarget!.value)}
|
||||||
|
on:change={() => saveCustomColours({})}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<div class="tool-bar-container" style:--fill-tool-colour={$colour}>
|
<div class="tool-bar-container" style:--fill-tool-colour={$colour}>
|
||||||
|
|
Loading…
Reference in a new issue