import { IconRotate , IconMove} from "@/assets/icons"; import { css } from "@linaria/core"; import { defineComponent, onMounted, ref, nextTick, reactive } from "vue"; import { any } from "vue-types"; import { TransformCtrl } from "@/modules/editor/controllers/TransformCtrl"; export const Transforms = defineComponent({ props: { ctrl: any() }, setup(props) { const ctrl = props.ctrl ? props.ctrl : new TransformCtrl(); const toolbarRef = ref(); const transformRef = ref(); const state = reactive({ toolbarW: 0, }) onMounted(()=>{ if (transformRef.value) ctrl.initUI(transformRef.value); nextTick(()=>{ nextTick(()=>{ if (!toolbarRef.value) { return } const r = toolbarRef.value.getBoundingClientRect(); state.toolbarW = r.width; }) }) }) return () => { let toolbarTop = ctrl.state.bbox.y if (toolbarTop < 0 ) { toolbarTop = 0; } return (
{ ctrl.state.toolbarNames.map((name) => { const ToolBarComp = ctrl.toolbars[name]; return }) }
<> {
} {
} {
} {
}
{ctrl.state.showScaleBridge && ctrl.state.showScaletop && (
)} {ctrl.state.showScaleBridge && ctrl.state.showScalebottom && (
)} {ctrl.state.showScaleBridge && (
)} {ctrl.state.showScaleBridge && (
)}
); }; }, }); const selctRectStyle = css` /* pointer-events: none; */ `; const showgizmo = css` display: block; left: 0; top: 0; /* pointer-events: none; */ `; const hideGizmo = css` display: none; `; const borderStyle = css` position: absolute; top: 0; left: 0; width: 100%; height: 100%; pointer-events: none; z-index: 999; `; const borderContentStyle = css` position: absolute; top: 0; left: 0; width: 100%; height: 100%; outline: 2px solid @inf-primary-color; ` const resizeStyle = css` position: absolute; width: 16px; height: 16px; border-radius: 50%; background-color: #fff; z-index: 999; transform: translate(50%, 50%); pointer-events: auto; box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.2); cursor: nwse-resize; &:hover { border-color: @inf-primary-color; } `; const scaleBottomRightStyle = css` bottom: -8px; right: -8px; `; const scaleBottomLeftStyle = css` bottom: -8px; left: -8px; `; const scaleTopLeftStyle = css` top: -8px; left: -8px; `; const scaleTopRightStyle = css` top: -8px; right: -8px; `; const transformBtnsStyle = css` @apply space-x-10px whitespace-nowrap; position: absolute; bottom: 0px; left:calc(50% - 32px); font-size: 16px; z-index: 999; pointer-events: auto; transform-origin: 50% 100%; pointer-events: none; `; const transBtnStyle = css` display: inline-block; width: 28px; height: 28px; border-radius: 50%; background-color: #fff; text-align: center; line-height: 28px; font-size: 16px; color: #333; position: relative; top: 50px; @apply shadow cursor-move; pointer-events: auto; &:hover { color: #fff; background-color: @inf-primary-color; } `; const toolbarStyle = css` @apply bg-white shadow rounded space-x-4px p-4px whitespace-nowrap; position: absolute; top: 0; left: 50%; transform: translate(0%, -60px); z-index: 999; `; const resizeHeightBtnCls = css` position: absolute; width: 30px; height: 8px; border-radius: 4px; left: 50%; transform: translate(-50%, -4px); pointer-events: auto; cursor: ns-resize; background: rgba(255, 255, 255, 0.3); &:hover { background: @inf-primary-color; } @apply shadow; z-index: 999; `; const scaleTopCls = css` top: -4px; left: calc(50% - 15px); `; const scaleBottomCls = css` bottom:-4px; left: calc(50% - 15px); `; const resizeWidthBtnCls = css` position: absolute; width: 8px; height: 30px; border-radius: 4px; pointer-events: auto; cursor: ew-resize; background: rgba(255, 255, 255, 0.3); &:hover { background: @inf-primary-color; } @apply shadow; z-index: 999; `; const scaleRightCls = css` right: -4px; top: calc(50% - 15px); `; const scaleLeftCls = css` left: -4px; top: calc(50% - 15px); `;