From 7564f8ebf10fb39838982fe15c03800f696d3498 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Valenta?= <tomas@imaniti.org> Date: Fri, 26 Apr 2024 15:50:31 +0200 Subject: [PATCH] add fancy template, remove others for now --- .../people_banner_with_predefined_text.png | Bin 0 -> 5916 bytes .../people_banner_with_custom_text/bg.png | Bin 0 -> 23628 bytes .../people_banner_with_predefined_text/bg.png | Bin 0 -> 34618 bytes frontend/src/templates.js | 101 +++++--- .../PeopleBannerWithCustomText.vue | 167 +++++++++++++ .../people_banner_with_custom_text/canvas.js | 222 ++++++++++++++++++ .../PeopleBannerWithPredefinedText.vue | 156 ++++++++++++ .../canvas.js | 182 ++++++++++++++ 8 files changed, 791 insertions(+), 37 deletions(-) create mode 100644 frontend/src/assets/previews/people_banner_with_predefined_text.png create mode 100644 frontend/src/assets/template/people_banner_with_custom_text/bg.png create mode 100644 frontend/src/assets/template/people_banner_with_predefined_text/bg.png create mode 100644 frontend/src/views/people_banner_with_custom_text/PeopleBannerWithCustomText.vue create mode 100644 frontend/src/views/people_banner_with_custom_text/canvas.js create mode 100644 frontend/src/views/people_banner_with_predefined_text/PeopleBannerWithPredefinedText.vue create mode 100644 frontend/src/views/people_banner_with_predefined_text/canvas.js diff --git a/frontend/src/assets/previews/people_banner_with_predefined_text.png b/frontend/src/assets/previews/people_banner_with_predefined_text.png new file mode 100644 index 0000000000000000000000000000000000000000..0079fdfde7b963b7242a01246a9990778e10980c GIT binary patch literal 5916 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 SyO}9yq|wvW&t;ucLK6TuNZ_mh literal 0 HcmV?d00001 diff --git a/frontend/src/assets/template/people_banner_with_custom_text/bg.png b/frontend/src/assets/template/people_banner_with_custom_text/bg.png new file mode 100644 index 0000000000000000000000000000000000000000..94e9df88dfad6ad3e6aeaf42bb5be945415e73a5 GIT binary patch literal 23628 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 KxvX<aXaWF7G5X#B literal 0 HcmV?d00001 diff --git a/frontend/src/assets/template/people_banner_with_predefined_text/bg.png b/frontend/src/assets/template/people_banner_with_predefined_text/bg.png new file mode 100644 index 0000000000000000000000000000000000000000..6a2d35b3d1767efd08e605ab42b17f73fc42e632 GIT binary patch literal 34618 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 literal 0 HcmV?d00001 diff --git a/frontend/src/templates.js b/frontend/src/templates.js index 94cb7b5..bd4d17c 100644 --- a/frontend/src/templates.js +++ b/frontend/src/templates.js @@ -14,10 +14,13 @@ import rightEventImage from "./assets/previews/right_event.png"; import angleEventRightImage from "./assets/previews/angle_event_right.png"; import angleEventLeftImage from "./assets/previews/angle_event_left.png"; -import basePersonEventImage from "./assets/previews/base_person_event.png"; -import rightPersonEventImage from "./assets/previews/right_person_event.png"; -import anglePersonEventRightImage from "./assets/previews/angle_person_event_right.png"; -import anglePersonEventLeftImage from "./assets/previews/angle_person_event_left.png"; +// import basePersonEventImage from "./assets/previews/base_person_event.png"; +// import rightPersonEventImage from "./assets/previews/right_person_event.png"; +// import anglePersonEventRightImage from "./assets/previews/angle_person_event_right.png"; +// import anglePersonEventLeftImage from "./assets/previews/angle_person_event_left.png"; + +import peopleBannerWithPredefinedTextImage from "./assets/previews/people_banner_with_predefined_text.png"; +import peopleBannerWithCustomTextImage from "./assets/previews/people_banner_with_predefined_text.png"; const TEMPLATES = { basic_photo_banner: { @@ -149,44 +152,68 @@ const TEMPLATES = { title: "Událost - pruh pod úhlem, vlevo", }, }, - base_person_event: { - name: "Událost - text a obrázek na pozadí, vprostřed", - image: basePersonEventImage, - path: "/base-person-event", - component: () => import("./views/base_person_event/BasePersonEvent.vue"), - meta: { - title: "Událost - text a obrázek na pozadí, vprostřed", - }, - }, - right_person_event: { - name: "Událost - text a obrázek na pozadí, vpravo", - image: rightPersonEventImage, - path: "/right-person-event", - component: () => import("./views/right_person_event/RightPersonEvent.vue"), - meta: { - title: "Událost - text a obrázek na pozadí, vpravo", - }, - }, - angle_person_event_right: { - name: "Událost - pruh pod úhlem s obrázkem na pozadí, vpravo", - image: anglePersonEventRightImage, - path: "/angle-person-event-right", + people_banner_with_predefined_text: { + name: 'Osoba v šipce s textem "Odvaha pro Evropu"', + image: peopleBannerWithPredefinedTextImage, + path: "/people-banner-with-predefined-text", component: () => - import("./views/angle_person_event_right/AnglePersonEventRight.vue"), + import( + "./views/people_banner_with_predefined_text/PeopleBannerWithPredefinedText.vue" + ), meta: { - title: "Událost - pruh pod úhlem s obrázkem na pozadí, vpravo", + title: 'Osoba v šipce s textem "Odvaha pro Evropu"', }, }, - angle_person_event_left: { - name: "Událost - pruh pod úhlem s obrázkem na pozadí, vlevo", - image: anglePersonEventLeftImage, - path: "/angle-person-event-left", + people_banner_with_custom_text: { + name: "Osoba v šipce s vlastním textem", + image: peopleBannerWithCustomTextImage, + path: "/people-banner-with-custom-text", component: () => - import("./views/angle_person_event_left/AnglePersonEventLeft.vue"), - meta: { - title: "Událost - pruh pod úhlem s obrázkem na pozadí, vlevo", - }, - }, + import( + "./views/people_banner_with_custom_text/PeopleBannerWithCustomText.vue" + ), + meta: { + title: "Osoba v šipce s vlastním textem", + }, + }, + // base_person_event: { + // name: "Událost - text a obrázek na pozadí, vprostřed", + // image: basePersonEventImage, + // path: "/base-person-event", + // component: () => import("./views/base_person_event/BasePersonEvent.vue"), + // meta: { + // title: "Událost - text a obrázek na pozadí, vprostřed", + // }, + // }, + // right_person_event: { + // name: "Událost - text a obrázek na pozadí, vpravo", + // image: rightPersonEventImage, + // path: "/right-person-event", + // component: () => import("./views/right_person_event/RightPersonEvent.vue"), + // meta: { + // title: "Událost - text a obrázek na pozadí, vpravo", + // }, + // }, + // angle_person_event_right: { + // name: "Událost - pruh pod úhlem s obrázkem na pozadí, vpravo", + // image: anglePersonEventRightImage, + // path: "/angle-person-event-right", + // component: () => + // import("./views/angle_person_event_right/AnglePersonEventRight.vue"), + // meta: { + // title: "Událost - pruh pod úhlem s obrázkem na pozadí, vpravo", + // }, + // }, + // angle_person_event_left: { + // name: "Událost - pruh pod úhlem s obrázkem na pozadí, vlevo", + // image: anglePersonEventLeftImage, + // path: "/angle-person-event-left", + // component: () => + // import("./views/angle_person_event_left/AnglePersonEventLeft.vue"), + // meta: { + // title: "Událost - pruh pod úhlem s obrázkem na pozadí, vlevo", + // }, + // }, }; export default TEMPLATES; diff --git a/frontend/src/views/people_banner_with_custom_text/PeopleBannerWithCustomText.vue b/frontend/src/views/people_banner_with_custom_text/PeopleBannerWithCustomText.vue new file mode 100644 index 0000000..0379ae5 --- /dev/null +++ b/frontend/src/views/people_banner_with_custom_text/PeopleBannerWithCustomText.vue @@ -0,0 +1,167 @@ +<script setup> +import { watch, ref } from "vue"; + +import COLORS from "../../colors"; +import TEMPLATES from "../../templates"; +import DEFAULT_CONTRACTOR from "../../contractors"; +import { + loadFonts, + loadCanvasStorage, + setCanvasStorage, + updateAutoRedrawStorage, + toRawDeep, +} from "../../utils"; + +import Canvas from "../../components/canvas/Canvas.vue"; +import redraw from "./canvas"; + +import Navbar from "../../components/Navbar.vue"; +import MainContainer from "../../components/MainContainer.vue"; +import ImageInput from "../../components/inputs/ImageInput.vue"; +import LongTextInput from "../../components/inputs/text/LongTextInput.vue"; +import ShortTextInput from "../../components/inputs/text/ShortTextInput.vue"; +import MultipleColorPicker from "../../components/inputs/colors/MultipleColorPicker.vue"; +import ReloadButton from "../../components/reload/ReloadButton.vue"; +import AutoReloadCheckbox from "../../components/reload/AutoReloadCheckbox.vue"; +</script> + +<script> +await loadFonts(["12px Bebas Neue", "12px Roboto Condensed"]); + +export default { + components: { + Canvas, + Navbar, + MainContainer, + ImageInput, + LongTextInput, + ShortTextInput, + MultipleColorPicker, + AutoReloadCheckbox, + ReloadButton, + }, + data() { + const predefinedColors = { + whiteBackground: { + name: "Bílé pozadí, černý text", + colors: { + background: COLORS.white, + mainText: COLORS.black, + highlightedText: COLORS.black, + highlight: COLORS.yellow1, + }, + }, + }; + + return { + mainText: null, + personImage: null, + gradientHeightMultiplier: 1, + colorLabels: { + background: "Pozadí", + }, + predefinedColors: predefinedColors, + colors: predefinedColors.whiteBackground.colors, + autoRedraw: false, + }; + }, + async created() { + await loadCanvasStorage(this); + }, + methods: { + async reloadCanvasProperties() { + const canvasProperties = { + mainText: this.mainText, + personImage: this.personImage, + colors: this.colors, + }; + + await this.$refs.canvas.redraw(canvasProperties); + + let canvasPropertiesToSave = structuredClone(toRawDeep(canvasProperties)); + delete canvasPropertiesToSave.colors; + + setCanvasStorage(canvasPropertiesToSave); + }, + }, + mounted() { + this.$watch( + (vm) => [vm.mainText, vm.personImage, vm.colors], + async (value) => { + if (this.autoRedraw) { + await this.reloadCanvasProperties(); + } + }, + { + immediate: true, + deep: true, + }, + ); + + this.$watch( + (vm) => [vm.autoRedraw], + async (value) => { + updateAutoRedrawStorage(this.autoRedraw); + + if (this.autoRedraw) { + await this.reloadCanvasProperties(); + } + }, + ); + }, +}; +</script> + +<template> + <header> + <Navbar + :defaultTemplate="TEMPLATES.people_banner_with_predefined_text" + ></Navbar> + </header> + <main> + <MainContainer> + <template v-slot:left> + <Canvas + ref="canvas" + :redrawFunction="redraw" + width="1640" + height="624" + /> + </template> + + <template v-slot:right> + <ReloadButton :parentRefs="$refs" @click="reloadCanvasProperties" /> + <AutoReloadCheckbox v-model="autoRedraw" /> + + <LongTextInput + name="Text" + v-model="mainText" + :important="true" + :highlightable="true" + zIndex="9" + /> + + <ImageInput + name="Obrázek" + v-model="personImage" + :important="true" + zIndex="10" + /> + + <MultipleColorPicker + name="Barvy" + v-model="colors" + :important="false" + :colorLabels="colorLabels" + :predefinedColors="predefinedColors" + :defaultPredefinedColors="predefinedColors.whiteBackground" + zIndex="5" + ></MultipleColorPicker> + </template> + </MainContainer> + </main> +</template> + +<style> +@import "vue-select/dist/vue-select.css"; +</style> diff --git a/frontend/src/views/people_banner_with_custom_text/canvas.js b/frontend/src/views/people_banner_with_custom_text/canvas.js new file mode 100644 index 0000000..1b84b7d --- /dev/null +++ b/frontend/src/views/people_banner_with_custom_text/canvas.js @@ -0,0 +1,222 @@ +import { fabric } from "fabric"; +import { + clearObjects, + sortObjects, + transformHighlightedText, + checkTextBoxHeight, +} from "../../components/canvas/utils"; +import COLORS from "../../colors"; +import { PaddedHighlightingTextbox } from "../../components/canvas/textbox"; + +import bgImage from "../../assets/template/people_banner_with_custom_text/bg.png"; + +let mainImage = null; +let personImage = null; +let contractedByTextbox = null; +let previousColor = null; +let mainTextBox = null; + +let personImageSource = null; + +const removeDownEventListener = () => { + document + .getElementsByClassName("upper-canvas")[0] + .removeEventListener("pointerdown", canvasPointerDownEvent); +}; + +let upEventFunction = null; +let canvasPointerDownEvent = null; +let pointerDownEventAssigned = false; + +const redraw = async (canvas, options) => { + clearObjects([contractedByTextbox, mainTextBox], canvas); + + const contractedByTextSize = Math.ceil(canvas.height * 0.035); + const contractedByTextMaxWidth = Math.ceil(canvas.width * 0.9); + const contractedByTextBottomMargin = Math.ceil(canvas.width * 0.02); + const contractedByTextSideMargin = Math.ceil(canvas.width * 0.03); + + const textMarginLeft = Math.ceil(canvas.width * 0.18); + const textMarginRight = Math.ceil(canvas.width * 0.7); + + let mainTextMarginTop = Math.ceil(canvas.height * 0.112); + const mainTextBackgroundMarginTop = Math.ceil(canvas.height * 0.14); + const mainTextSize = Math.ceil(canvas.height * 0.085); + const mainTextHeightLimit = Math.ceil(mainTextSize * 2.2); + const mainTextLineHeight = 0.85; + + document + .getElementsByClassName("upper-canvas")[0] + .removeEventListener("pointerup", upEventFunction); + document + .getElementsByClassName("upper-canvas")[0] + .removeEventListener("pointerout", upEventFunction); + document + .getElementsByClassName("upper-canvas")[0] + .removeEventListener("pointercancel", upEventFunction); + + canvas.preserveObjectStacking = true; + + /* BEGIN Person image render */ + + if ( + options.personImage !== null && + (!canvas.contains(personImage) || + personImage === null || + options.personImage.src !== personImageSource) + ) { + if (personImage !== null) { + canvas.remove(personImage); + } + + personImage = new fabric.Image(options.personImage, { + left: 0, + top: 0, + zIndex: 0, + }); + + personImage.controls = { + ...fabric.Image.prototype.controls, + mtr: new fabric.Control({ visible: false }), + }; + + if (personImage.width >= personImage.height) { + personImage.scaleToHeight(canvas.height); + } else { + personImage.scaleToWidth(canvas.width); + } + + canvas.add(personImage); + personImageSource = options.personImage.src; + // canvas.centerObject(personImage) + + removeDownEventListener(); + pointerDownEventAssigned = false; + } else if (personImage !== null && options.personImage === null) { + canvas.remove(personImage); + + removeDownEventListener(); + pointerDownEventAssigned = false; + } + + /* END Person image render */ + + /* BEGIN Main image render */ + + if (previousColor !== options.colors.background || mainImage === null) { + if (mainImage !== null) { + canvas.remove(mainImage); + } + + const image = new Image(); + + const imageLoadPromise = new Promise((resolve) => { + image.onload = () => { + resolve(); + }; + + image.src = bgImage; + }); + await imageLoadPromise; + + mainImage = new fabric.Image(image, { + left: 0, + top: 0, + zIndex: 5, + selectable: false, + }); + + mainImage.scaleToWidth(canvas.width); + + canvas.add(mainImage); + + previousColor = options.colors.background; + } + + /* END Main image render */ + + if (options.mainText !== null) { + /* BEGIN Name text render */ + + const mainTextWidth = canvas.width - textMarginLeft - textMarginRight; + + const highlightedData = transformHighlightedText( + options.mainText, + mainTextSize, + mainTextWidth, + "Bebas Neue", + options.colors.highlight.value, + options.colors.highlightedText.value, + { padWhenDiacritics: true }, + ); + + mainTextBox = new PaddedHighlightingTextbox(highlightedData.text, { + width: canvas.width, + left: textMarginLeft, + textAlign: "left", + fontFamily: "Bebas Neue", + fontSize: mainTextSize, + lineHeight: mainTextLineHeight, + fill: options.colors.mainText.value, + styles: highlightedData.styles, + selectable: false, + highlightPadding: canvas.height * 0.003, + zIndex: 10, + }); + + checkTextBoxHeight(mainTextBox, 5); + + canvas.add(mainTextBox); + + mainTextBox.top = mainTextMarginTop - highlightedData.paddingBottom; + + canvas.renderAll(); + + /* END Main text render */ + } + + sortObjects(canvas); + + canvasPointerDownEvent = (event) => { + let activeObject = canvas.getActiveObject(); + + if (activeObject === null) { + return; + } + + // if (activeObject._element.src == mainImage._element.src) { + // return + // } + + canvas.remove(mainImage); + canvas.remove(mainTextBox); + mainImage = null; + mainTextBox = null; + }; + + if (!pointerDownEventAssigned) { + document + .getElementsByClassName("upper-canvas")[0] + .addEventListener("pointerdown", canvasPointerDownEvent); + + pointerDownEventAssigned = true; + } + + upEventFunction = (event) => { + redraw(canvas, options); + }; + + document + .getElementsByClassName("upper-canvas")[0] + .addEventListener("pointerup", upEventFunction); + + document + .getElementsByClassName("upper-canvas")[0] + .addEventListener("pointerout", upEventFunction); + + document + .getElementsByClassName("upper-canvas")[0] + .addEventListener("pointercancel", upEventFunction); +}; + +export default redraw; diff --git a/frontend/src/views/people_banner_with_predefined_text/PeopleBannerWithPredefinedText.vue b/frontend/src/views/people_banner_with_predefined_text/PeopleBannerWithPredefinedText.vue new file mode 100644 index 0000000..4eea669 --- /dev/null +++ b/frontend/src/views/people_banner_with_predefined_text/PeopleBannerWithPredefinedText.vue @@ -0,0 +1,156 @@ +<script setup> +import { watch, ref } from "vue"; + +import COLORS from "../../colors"; +import TEMPLATES from "../../templates"; +import DEFAULT_CONTRACTOR from "../../contractors"; +import { + loadFonts, + loadCanvasStorage, + setCanvasStorage, + updateAutoRedrawStorage, + toRawDeep, +} from "../../utils"; + +import Canvas from "../../components/canvas/Canvas.vue"; +import redraw from "./canvas"; + +import Navbar from "../../components/Navbar.vue"; +import MainContainer from "../../components/MainContainer.vue"; +import ImageInput from "../../components/inputs/ImageInput.vue"; +import LongTextInput from "../../components/inputs/text/LongTextInput.vue"; +import ShortTextInput from "../../components/inputs/text/ShortTextInput.vue"; +import MultipleColorPicker from "../../components/inputs/colors/MultipleColorPicker.vue"; +import ReloadButton from "../../components/reload/ReloadButton.vue"; +import AutoReloadCheckbox from "../../components/reload/AutoReloadCheckbox.vue"; +</script> + +<script> +await loadFonts(["12px Bebas Neue", "12px Roboto Condensed"]); + +export default { + components: { + Canvas, + Navbar, + MainContainer, + ImageInput, + LongTextInput, + ShortTextInput, + MultipleColorPicker, + AutoReloadCheckbox, + ReloadButton, + }, + data() { + const predefinedColors = { + whiteBackground: { + name: "Bílé pozadí, černý text", + colors: { + background: COLORS.white, + highlightedText: COLORS.black, + highlight: COLORS.yellow1, + }, + }, + }; + + return { + personImage: null, + gradientHeightMultiplier: 1, + colorLabels: { + background: "Pozadí", + }, + predefinedColors: predefinedColors, + colors: predefinedColors.whiteBackground.colors, + autoRedraw: false, + }; + }, + async created() { + await loadCanvasStorage(this); + }, + methods: { + async reloadCanvasProperties() { + const canvasProperties = { + personImage: this.personImage, + colors: this.colors, + }; + + await this.$refs.canvas.redraw(canvasProperties); + + let canvasPropertiesToSave = structuredClone(toRawDeep(canvasProperties)); + delete canvasPropertiesToSave.colors; + + setCanvasStorage(canvasPropertiesToSave); + }, + }, + mounted() { + this.$watch( + (vm) => [vm.personImage, vm.colors], + async (value) => { + if (this.autoRedraw) { + await this.reloadCanvasProperties(); + } + }, + { + immediate: true, + deep: true, + }, + ); + + this.$watch( + (vm) => [vm.autoRedraw], + async (value) => { + updateAutoRedrawStorage(this.autoRedraw); + + if (this.autoRedraw) { + await this.reloadCanvasProperties(); + } + }, + ); + }, +}; +</script> + +<template> + <header> + <Navbar + :defaultTemplate="TEMPLATES.people_banner_with_predefined_text" + ></Navbar> + </header> + <main> + <MainContainer> + <template v-slot:left> + <Canvas + ref="canvas" + :redrawFunction="redraw" + width="1640" + height="624" + /> + </template> + + <template v-slot:right> + <ReloadButton :parentRefs="$refs" @click="reloadCanvasProperties" /> + <AutoReloadCheckbox v-model="autoRedraw" /> + + <ImageInput + name="Obrázek" + v-model="personImage" + :important="true" + zIndex="10" + /> + + <MultipleColorPicker + name="Barvy" + v-model="colors" + :important="false" + :colorLabels="colorLabels" + :predefinedColors="predefinedColors" + :defaultPredefinedColors="predefinedColors.whiteBackground" + zIndex="5" + ></MultipleColorPicker> + </template> + </MainContainer> + </main> +</template> + +<style> +@import "vue-select/dist/vue-select.css"; +</style> diff --git a/frontend/src/views/people_banner_with_predefined_text/canvas.js b/frontend/src/views/people_banner_with_predefined_text/canvas.js new file mode 100644 index 0000000..076178e --- /dev/null +++ b/frontend/src/views/people_banner_with_predefined_text/canvas.js @@ -0,0 +1,182 @@ +import { fabric } from "fabric"; +import { + clearObjects, + sortObjects, + transformHighlightedText, + checkTextBoxHeight, +} from "../../components/canvas/utils"; +import COLORS from "../../colors"; +import { PaddedHighlightingTextbox } from "../../components/canvas/textbox"; + +import bgImage from "../../assets/template/people_banner_with_predefined_text/bg.png"; + +let mainImage = null; +let personImage = null; +let contractedByTextbox = null; +let previousColor = null; +let mainTextBox = null; + +let personImageSource = null; + +const removeDownEventListener = () => { + document + .getElementsByClassName("upper-canvas")[0] + .removeEventListener("pointerdown", canvasPointerDownEvent); +}; + +let upEventFunction = null; +let canvasPointerDownEvent = null; +let pointerDownEventAssigned = false; + +const redraw = async (canvas, options) => { + clearObjects([contractedByTextbox, mainTextBox], canvas); + + const contractedByTextSize = Math.ceil(canvas.height * 0.035); + const contractedByTextMaxWidth = Math.ceil(canvas.width * 0.9); + const contractedByTextBottomMargin = Math.ceil(canvas.width * 0.02); + const contractedByTextSideMargin = Math.ceil(canvas.width * 0.03); + + const textMarginLeft = Math.ceil(canvas.width * 0.53); + const textMarginRight = Math.ceil(canvas.width * 0.1); + + let mainTextMarginBottom = Math.ceil(canvas.height * 0.36); + const mainTextBackgroundMarginTop = Math.ceil(canvas.height * 0.14); + const mainTextSize = Math.ceil(canvas.height * 0.13); + const mainTextHeightLimit = Math.ceil(mainTextSize * 2.2); + const mainTextLineHeight = 0.85; + + document + .getElementsByClassName("upper-canvas")[0] + .removeEventListener("pointerup", upEventFunction); + document + .getElementsByClassName("upper-canvas")[0] + .removeEventListener("pointerout", upEventFunction); + document + .getElementsByClassName("upper-canvas")[0] + .removeEventListener("pointercancel", upEventFunction); + + canvas.preserveObjectStacking = true; + + /* BEGIN Person image render */ + + if ( + options.personImage !== null && + (!canvas.contains(personImage) || + personImage === null || + options.personImage.src !== personImageSource) + ) { + if (personImage !== null) { + canvas.remove(personImage); + } + + personImage = new fabric.Image(options.personImage, { + left: 0, + top: 0, + zIndex: 0, + }); + + personImage.controls = { + ...fabric.Image.prototype.controls, + mtr: new fabric.Control({ visible: false }), + }; + + if (personImage.width >= personImage.height) { + personImage.scaleToHeight(canvas.height); + } else { + personImage.scaleToWidth(canvas.width); + } + + canvas.add(personImage); + personImageSource = options.personImage.src; + // canvas.centerObject(personImage) + + removeDownEventListener(); + pointerDownEventAssigned = false; + } else if (personImage !== null && options.personImage === null) { + canvas.remove(personImage); + + removeDownEventListener(); + pointerDownEventAssigned = false; + } + + /* END Person image render */ + + /* BEGIN Main image render */ + + if (previousColor !== options.colors.background || mainImage === null) { + if (mainImage !== null) { + canvas.remove(mainImage); + } + + const image = new Image(); + + const imageLoadPromise = new Promise((resolve) => { + image.onload = () => { + resolve(); + }; + + image.src = bgImage; + }); + await imageLoadPromise; + + mainImage = new fabric.Image(image, { + left: 0, + top: 0, + zIndex: 5, + selectable: false, + }); + + mainImage.scaleToWidth(canvas.width); + + canvas.add(mainImage); + + previousColor = options.colors.background; + } + + /* END Main image render */ + + sortObjects(canvas); + + canvasPointerDownEvent = (event) => { + let activeObject = canvas.getActiveObject(); + + if (activeObject === null) { + return; + } + + // if (activeObject._element.src == mainImage._element.src) { + // return + // } + + canvas.remove(mainImage); + canvas.remove(mainTextBox); + mainImage = null; + mainTextBox = null; + }; + + if (!pointerDownEventAssigned) { + document + .getElementsByClassName("upper-canvas")[0] + .addEventListener("pointerdown", canvasPointerDownEvent); + + pointerDownEventAssigned = true; + } + + upEventFunction = (event) => { + redraw(canvas, options); + }; + + document + .getElementsByClassName("upper-canvas")[0] + .addEventListener("pointerup", upEventFunction); + + document + .getElementsByClassName("upper-canvas")[0] + .addEventListener("pointerout", upEventFunction); + + document + .getElementsByClassName("upper-canvas")[0] + .addEventListener("pointercancel", upEventFunction); +}; + +export default redraw; -- GitLab