diff --git a/src/store/constants.ts b/src/store/constants.ts index d8b6796f..793b7012 100644 --- a/src/store/constants.ts +++ b/src/store/constants.ts @@ -12,6 +12,7 @@ export enum MutationTypes { SET_CREATING_ELEMENT = 'setCreatingElement', SET_AVAILABLE_FONTS = 'setAvailableFonts', SET_TOOLBAR_STATE = 'setToolbarState', + SET_CLIPING_IMAGE_ELEMENT_ID = 'setClipingImageElementId', // slides SET_SLIDES = 'setSlides', diff --git a/src/store/index.ts b/src/store/index.ts index 4a5372f1..2ca3144a 100644 --- a/src/store/index.ts +++ b/src/store/index.ts @@ -31,6 +31,7 @@ export interface State { ctrlKeyState: boolean; shiftKeyState: boolean; screening: boolean; + clipingImageElementId: string; } const state: State = { @@ -52,6 +53,7 @@ const state: State = { ctrlKeyState: false, shiftKeyState: false, screening: false, + clipingImageElementId: '', } export default createStore({ diff --git a/src/store/mutations.ts b/src/store/mutations.ts index 7ced1de2..29e5ed15 100644 --- a/src/store/mutations.ts +++ b/src/store/mutations.ts @@ -62,6 +62,10 @@ export const mutations: MutationTree = { state.toolbarState = type }, + [MutationTypes.SET_CLIPING_IMAGE_ELEMENT_ID](state, elId) { + state.clipingImageElementId = elId + }, + // slides [MutationTypes.SET_SLIDES](state, slides: Slide[]) { diff --git a/src/types/slides.ts b/src/types/slides.ts index cc758cac..71750b64 100644 --- a/src/types/slides.ts +++ b/src/types/slides.ts @@ -40,13 +40,13 @@ export interface PPTTextElement { } export interface ImageElementFilters { - 'blur': string; - 'brightness': string; - 'contrast': string; - 'grayscale': string; - 'saturate': string; - 'hue-rotate': string; - 'opacity': string; + 'blur'?: string; + 'brightness'?: string; + 'contrast'?: string; + 'grayscale'?: string; + 'saturate'?: string; + 'hue-rotate'?: string; + 'opacity'?: string; } export interface PPTImageElement { type: 'image'; diff --git a/src/views/Editor/Canvas/Operate/ImageClipHandler.vue b/src/views/Editor/Canvas/Operate/ImageClipHandler.vue index ba011640..24371dd1 100644 --- a/src/views/Editor/Canvas/Operate/ImageClipHandler.vue +++ b/src/views/Editor/Canvas/Operate/ImageClipHandler.vue @@ -16,7 +16,7 @@ class="top-image-content" :style="{ ...topImgWrapperPositionStyle, - clipPath: clipPath, + clipPath, }" > import { computed, defineComponent, onMounted, onUnmounted, PropType, reactive, ref } from 'vue' +import { useStore } from 'vuex' +import { State } from '@/store' import { KEYS } from '@/configs/hotkey' import { ImageClipData, ImageClipDataRange, ImageClipedEmitData } from '@/types/edit' @@ -63,16 +65,11 @@ export default defineComponent({ }, clipData: { type: Object as PropType, - required: true, }, clipPath: { type: String, required: true, }, - canvasScale: { - type: Number, - required: true, - }, width: { type: Number, required: true, @@ -91,6 +88,9 @@ export default defineComponent({ }, }, setup(props, { emit }) { + const store = useStore() + const canvasScale = computed(() => store.state.canvasScale) + const topImgWrapperPosition = reactive({ top: 0, left: 0, @@ -172,9 +172,7 @@ export default defineComponent({ } const clip = () => { - if(isSettingClipRange.value) return - - if(!currentRange.value) { + if(isSettingClipRange.value || !currentRange.value) { emit('clip', null) return } @@ -251,8 +249,8 @@ export default defineComponent({ const currentPageX = e.pageX const currentPageY = e.pageY - const moveX = (currentPageX - startPageX) / props.canvasScale / props.width * 100 - const moveY = (currentPageY - startPageY) / props.canvasScale / props.height * 100 + const moveX = (currentPageX - startPageX) / canvasScale.value / props.width * 100 + const moveY = (currentPageY - startPageY) / canvasScale.value / props.height * 100 let targetLeft = originPositopn.left + moveX let targetTop = originPositopn.top + moveY @@ -307,8 +305,8 @@ export default defineComponent({ const currentPageX = e.pageX const currentPageY = e.pageY - let moveX = (currentPageX - startPageX) / props.canvasScale / props.width * 100 - let moveY = (currentPageY - startPageY) / props.canvasScale / props.height * 100 + let moveX = (currentPageX - startPageX) / canvasScale.value / props.width * 100 + let moveY = (currentPageY - startPageY) / canvasScale.value / props.height * 100 let targetLeft, targetTop, targetWidth, targetHeight diff --git a/src/views/Editor/Canvas/Operate/ImageElementOperate.vue b/src/views/Editor/Canvas/Operate/ImageElementOperate.vue index 7f176548..69dc92d7 100644 --- a/src/views/Editor/Canvas/Operate/ImageElementOperate.vue +++ b/src/views/Editor/Canvas/Operate/ImageElementOperate.vue @@ -1,16 +1,23 @@