diff --git a/client/web/src/components/panels/Document.vue b/client/web/src/components/panels/Document.vue
index f502eebcd..576ec33a9 100644
--- a/client/web/src/components/panels/Document.vue
+++ b/client/web/src/components/panels/Document.vue
@@ -139,15 +139,31 @@
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -184,6 +200,27 @@
.viewport {
flex: 1 1 100%;
+ .canvas-area {
+ flex: 1 1 100%;
+ }
+
+ .bar-area {
+ flex: 0 0 auto;
+ }
+
+ .top-ruler {
+ padding-left: 16px;
+ margin-right: 16px;
+ }
+
+ .right-scrollbar {
+ margin-top: -16px;
+ }
+
+ .bottom-scrollbar {
+ margin-right: 16px;
+ }
+
.canvas {
background: var(--color-1-nearblack);
width: 100%;
@@ -210,6 +247,8 @@ import SwatchPairInput from "@/components/widgets/inputs/SwatchPairInput.vue";
import { MenuDirection } from "@/components/widgets/floating-menus/FloatingMenu.vue";
import ShelfItemInput from "@/components/widgets/inputs/ShelfItemInput.vue";
import Separator, { SeparatorDirection, SeparatorType } from "@/components/widgets/separators/Separator.vue";
+import PersistentScrollbar, { ScrollbarDirection } from "@/components/widgets/scrollbars/PersistentScrollbar.vue";
+import CanvasRuler, { RulerDirection } from "@/components/widgets/rulers/CanvasRuler.vue";
import IconButton from "@/components/widgets/buttons/IconButton.vue";
import PopoverButton from "@/components/widgets/buttons/PopoverButton.vue";
import RadioInput from "@/components/widgets/inputs/RadioInput.vue";
@@ -274,6 +313,14 @@ export default defineComponent({
}
todo(toolIndex);
},
+ async swapWorkingColors() {
+ const { swap_colors } = await wasm;
+ swap_colors();
+ },
+ async resetWorkingColors() {
+ const { reset_colors } = await wasm;
+ reset_colors();
+ },
download(filename: string, svgData: string) {
const svgBlob = new Blob([svgData], { type: "image/svg+xml;charset=utf-8" });
const svgUrl = URL.createObjectURL(svgBlob);
@@ -328,14 +375,16 @@ export default defineComponent({
return {
viewportSvg: "",
activeTool: "Select",
- MenuDirection,
- SeparatorDirection,
- SeparatorType,
modeMenuEntries,
viewModeIndex: 0,
snappingEnabled: true,
gridEnabled: true,
overlaysEnabled: true,
+ MenuDirection,
+ SeparatorDirection,
+ ScrollbarDirection,
+ RulerDirection,
+ SeparatorType,
};
},
components: {
@@ -344,6 +393,8 @@ export default defineComponent({
SwatchPairInput,
ShelfItemInput,
Separator,
+ PersistentScrollbar,
+ CanvasRuler,
IconButton,
PopoverButton,
RadioInput,
diff --git a/client/web/src/components/widgets/rulers/CanvasRuler.vue b/client/web/src/components/widgets/rulers/CanvasRuler.vue
new file mode 100644
index 000000000..da05dd1d0
--- /dev/null
+++ b/client/web/src/components/widgets/rulers/CanvasRuler.vue
@@ -0,0 +1,113 @@
+
+
+
+
+
+
+
diff --git a/client/web/src/components/widgets/scrollbars/PersistentScrollbar.vue b/client/web/src/components/widgets/scrollbars/PersistentScrollbar.vue
new file mode 100644
index 000000000..0988e932e
--- /dev/null
+++ b/client/web/src/components/widgets/scrollbars/PersistentScrollbar.vue
@@ -0,0 +1,148 @@
+
+
+
+
+
+
+