mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2026-09-17 15:28:04 +08:00
* wasm: do the async initialization only once This allows the rest of the app to access wasm synchronously. This allows removing of a global. * provide the wasm via vue provide/inject. There's still code directly accessing the wasm. That will be changed later. * MenuBarInput: use injected wasm instead of the global instance * Let the App handle event listeners * move stateful modules into state/ * state/fullscreen: create per instance * App: load the initial document list on mount. This got lost a few commits ago. Now it's back. * state/dialog: create per instance * util/input: remove dependency on global dialog instance * state/documents: create per instance * reponse-handler: move into EditorWasm * comingSoon: move into dialog * wasm: allow instantiating multiple editors * input handlers: do not look at canvases outside the mounted App * input: listen on the container instead of the window when possible * - removed proxy from wasm-loader - integrated with js-dispatcher - state functions to classes - integrated some upstream changes * fix errors caused by merge * Getting closer: - added global state to track all instances - fix fullscreen close trigger - wasm-loader is statefull - panic across instanes * - fix outline while using editor - removed circular import rule - added editorInstance to js message constructor * - changed input handler to a class - still need a better way of handeling it in App.vue * - fixed single instance of inputManager to weakmap * - fix no-explicit-any in a few places - removed global state from input.ts * simplified two long lines * removed global state * removed $data from App * add mut self to functions in api.rs * Update Workspace.vue remove outdated import * fixed missing import * Changes throughout code review; note this causes some bugs to be fixed in a later commit * PR review round 1 * - fix coming soon bugs - changed folder structure * moved declaration to .d.ts * - changed from classes to functions - moved decs back to app.vue * removed need to export js function to rust * changed folder structure * fixed indentation breaking multiline strings * Fix eslint rule to whitelist @/../ * Simplify strip-indents implementation * replace type assertions with better annotations or proper runtime checks * Small tweaks and code rearranging improvements after second code review pass * maybe fix mouse events * Add back preventDefault for mouse scroll * code review round 2 * Comment improvements * -removed runtime checks - fixed layers not showing * - extened proxy to cover classes - stopped multiple panics from logging - Stop wasm-bindgen from mut ref counting our struct * cleaned up messageConstructors exports * Fix input and fullscreen regressions Co-authored-by: Max Fisher <maxmfishernj@gmail.com> Co-authored-by: mfish33 <32677537+mfish33@users.noreply.github.com> Co-authored-by: Keavon Chambers <keavon@keavon.com>
90 lines
2.4 KiB
Vue
90 lines
2.4 KiB
Vue
<template>
|
|
<LayoutRow class="workspace-grid-subdivision">
|
|
<LayoutCol class="workspace-grid-subdivision" style="flex-grow: 1597">
|
|
<Panel
|
|
:panelType="'Document'"
|
|
:tabCloseButtons="true"
|
|
:tabMinWidths="true"
|
|
:tabLabels="documents.state.documents.map((doc) => doc.displayName)"
|
|
:tabActiveIndex="documents.state.activeDocumentIndex"
|
|
ref="documentsPanel"
|
|
/>
|
|
</LayoutCol>
|
|
<LayoutCol class="workspace-grid-resize-gutter"></LayoutCol>
|
|
<LayoutCol class="workspace-grid-subdivision" style="flex-grow: 319">
|
|
<LayoutRow class="workspace-grid-subdivision" style="flex-grow: 402">
|
|
<Panel :panelType="'Properties'" :tabLabels="['Properties']" :tabActiveIndex="0" />
|
|
</LayoutRow>
|
|
<LayoutRow class="workspace-grid-resize-gutter"></LayoutRow>
|
|
<LayoutRow class="workspace-grid-subdivision" style="flex-grow: 590">
|
|
<Panel :panelType="'LayerTree'" :tabLabels="['Layer Tree']" :tabActiveIndex="0" />
|
|
</LayoutRow>
|
|
<!-- <LayoutRow class="workspace-grid-resize-gutter"></LayoutRow>
|
|
<LayoutRow class="workspace-grid-subdivision folded">
|
|
<Panel :panelType="'Minimap'" :tabLabels="['Minimap', 'Asset Manager']" :tabActiveIndex="0" />
|
|
</LayoutRow> -->
|
|
</LayoutCol>
|
|
</LayoutRow>
|
|
<DialogModal v-if="dialog.state.visible" />
|
|
</template>
|
|
|
|
<style lang="scss">
|
|
.workspace-grid-subdivision {
|
|
min-height: 28px;
|
|
flex: 1 1 0;
|
|
|
|
&.folded {
|
|
flex-grow: 0;
|
|
height: 0;
|
|
}
|
|
}
|
|
|
|
.workspace-grid-resize-gutter {
|
|
flex: 0 0 4px;
|
|
|
|
&.layout-row {
|
|
cursor: ns-resize;
|
|
}
|
|
|
|
&.layout-col {
|
|
cursor: ew-resize;
|
|
}
|
|
}
|
|
</style>
|
|
|
|
<script lang="ts">
|
|
import { defineComponent } from "vue";
|
|
|
|
import Panel from "@/components/workspace/Panel.vue";
|
|
import LayoutRow from "@/components/layout/LayoutRow.vue";
|
|
import LayoutCol from "@/components/layout/LayoutCol.vue";
|
|
import DialogModal from "@/components/widgets/floating-menus/DialogModal.vue";
|
|
|
|
export default defineComponent({
|
|
inject: ["documents", "dialog"],
|
|
components: {
|
|
LayoutRow,
|
|
LayoutCol,
|
|
Panel,
|
|
DialogModal,
|
|
},
|
|
data() {
|
|
return {};
|
|
},
|
|
computed: {
|
|
activeDocumentIndex() {
|
|
return this.documents.state.activeDocumentIndex;
|
|
},
|
|
},
|
|
watch: {
|
|
activeDocumentIndex(newIndex: number) {
|
|
this.$nextTick(() => {
|
|
const documentsPanel = this.$refs.documentsPanel as typeof Panel;
|
|
const newActiveTab = documentsPanel.$el.querySelectorAll(".tab-bar .tab-group .tab")[newIndex];
|
|
newActiveTab.scrollIntoView();
|
|
});
|
|
},
|
|
},
|
|
});
|
|
</script>
|