From e9d0bcc2065a715c8ae30af985e57fac0a5695e7 Mon Sep 17 00:00:00 2001 From: Fedorov Vladimir Date: Sun, 2 Jul 2023 23:48:02 +0700 Subject: [PATCH] add margin --- src/App.vue | 91 ++++++++++++++++++++++++++++++++++++--- src/components/Canvas.vue | 25 ++++++++++- src/const.ts | 6 ++- 3 files changed, 114 insertions(+), 8 deletions(-) diff --git a/src/App.vue b/src/App.vue index 831ca6c..86b3dd0 100644 --- a/src/App.vue +++ b/src/App.vue @@ -14,6 +14,9 @@ import { DEFAULT_VERTICAL_MARGIN, DEFAULT_IMAGE_BACKGROUND_COLOR, DEFAULT_VERTICAL_ROTATION, + DEFAULT_MARGIN_ENABLE, + DEFAULT_MARGIN_BACKGROUND_COLOR, + DEFAULT_MARGIN_LEFT_MARGIN, } from "./const"; import { ButtonSize, InputType } from "./types"; @@ -25,6 +28,10 @@ const imageWidth = ref(DEFAULT_IMAGE_WIDTH); const imageHeight = ref(DEFAULT_IMAGE_HEIGHT); const imageBackgroundColor = ref(DEFAULT_IMAGE_BACKGROUND_COLOR); +const marginEnable = ref(DEFAULT_MARGIN_ENABLE); +const marginColor = ref(DEFAULT_MARGIN_BACKGROUND_COLOR); +const marginLeftMargin = ref(DEFAULT_MARGIN_LEFT_MARGIN); + const savePng = async () => { const canvas = document.getElementById("canvas") as HTMLCanvasElement; @@ -86,14 +93,23 @@ const rotatePage = () => { Отступ, мм Дополнительный отступ, мм + + + + Цвет {{ marginColor }} + + Отступ слева, мм + - + - + Высота, мм Ширина, мм @@ -144,4 +160,69 @@ html { body { background-color: aqua; } + +/* The switch - the box around the slider */ +.switch { + position: relative; + display: inline-block; + width: 60px; + height: 27px; + margin: 10px 0; +} + +/* Hide default HTML checkbox */ +.switch input { + opacity: 0; + width: 0; + height: 0; +} + +/* The slider */ +.slider { + position: absolute; + cursor: pointer; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: #ccc; + -webkit-transition: .4s; + transition: .4s; + border: 1px solid #5E503F; +} + +.slider:before { + position: absolute; + content: ""; + height: 17px; + width: 17px; + left: 5px; + bottom: 4px; + background-color: white; + -webkit-transition: .4s; + transition: .4s; +} + +input:checked+.slider { + background-color: #EAE0D5; +} + +input:focus+.slider { + box-shadow: 0 0 1px #EAE0D5; +} + +input:checked+.slider:before { + -webkit-transform: translateX(31px); + -ms-transform: translateX(31px); + transform: translateX(31px); +} + +/* Rounded sliders */ +.slider.round { + border-radius: 34px; +} + +.slider.round:before { + border-radius: 50%; +} diff --git a/src/components/Canvas.vue b/src/components/Canvas.vue index 26492e8..0c7a3b1 100644 --- a/src/components/Canvas.vue +++ b/src/components/Canvas.vue @@ -3,13 +3,19 @@ import { onMounted, onUpdated, ref } from "vue"; import { ONE_MM } from "../const"; const props = defineProps<{ + imageBackgroundColor: string; + vMargin: number; vRotation: number; hMargin: number; hMargin2: number; + + marginEnable: boolean; + marginColor: string; + marginLeftMargin: number; + imageWidth: number; imageHeight: number; - imageBackgroundColor: string; }>(); const ctx = ref(null); @@ -26,7 +32,7 @@ const clearCanvas = () => { }; const render = () => { - const { vMargin, vRotation, hMargin, hMargin2, imageWidth, imageHeight } = props; + const { vMargin, vRotation, hMargin, hMargin2, imageWidth, imageHeight, marginEnable, marginColor, marginLeftMargin } = props; if (vMargin < 1 || hMargin < 1 || hMargin2 < 1) { return @@ -45,6 +51,10 @@ const render = () => { var rotationDelta = imageHeightPx / Math.tan(vRotation / 180 * Math.PI); if (ctx.value) { + ctx.value.strokeStyle = "#000000"; + ctx.value.beginPath(); + ctx.value.stroke(); + var x = 0; var y = 0; @@ -71,6 +81,17 @@ const render = () => { ctx.value.stroke(); i++; } + + + x = marginLeftMargin * ONE_MM; + if (marginEnable) { + ctx.value.strokeStyle = marginColor; + ctx.value.lineWidth = 2; + ctx.value.beginPath(); + ctx.value.moveTo(x, 0); + ctx.value.lineTo(x, imageHeightPx); + ctx.value.stroke(); + } } }; diff --git a/src/const.ts b/src/const.ts index 6edfeca..732fa5b 100644 --- a/src/const.ts +++ b/src/const.ts @@ -8,4 +8,8 @@ export const DEFAULT_VERTICAL_MARGIN = 10; export const DEFAULT_HORIZONTAL_MARGIN = 10; export const DEFAULT_VERTICAL_ROTATION = 90; -export const DEFAULT_IMAGE_BACKGROUND_COLOR = "#ffffff" \ No newline at end of file +export const DEFAULT_IMAGE_BACKGROUND_COLOR = "#ffffff" + +export const DEFAULT_MARGIN_ENABLE = false; +export const DEFAULT_MARGIN_BACKGROUND_COLOR = "#dd3333"; +export const DEFAULT_MARGIN_LEFT_MARGIN = 25;