liwei 1 year ago
parent
commit
57d3c84d01

+ 109 - 98
src/modules/editor/components/CompUI/basicUI/Transfer/select.tsx

@@ -1,7 +1,7 @@
 import { IconRotate } from "@/assets/icons";
 import { CompToolbars } from "@/modules/editor/objects/Toolbars";
 import { css } from "@linaria/core";
-import { defineComponent, onMounted, onUnmounted, ref , nextTick} from "vue";
+import { defineComponent, onMounted, onUnmounted, ref, nextTick } from "vue";
 import { useEditor } from "../../../..";
 
 export const SelectTransfer = defineComponent({
@@ -25,31 +25,43 @@ export const SelectTransfer = defineComponent({
     const scaleTopRef = ref();
     const scaleBottomRef = ref();
 
-    onMounted(()=>{
-        nextTick(()=>{
-            selectRectRef.value.editable = "move";
-            rotateRef.value.editable = "rotate";
-            rotateRef2.value.editable = "rotate";
-            rotateRef3.value.editable = "rotate";
-            scaleBottomrightRef.value.editable = "scaleBottomright";
+    onMounted(() => {
+      nextTick(() => {
+        selectRectRef.value.editable = "move";
+        rotateRef.value.editable = "rotate";
+        rotateRef2.value.editable = "rotate";
+        rotateRef3.value.editable = "rotate";
+        scaleBottomrightRef.value.editable = "scaleBottomright";
+
+        scaleBottomLeftRef.value.editable = "scaleBottomleft";
+        scaleTopLeftRef.value.editable = "scaleTopleft";
+        scaleTopRightRef.value.editable = "scaleTopright";
+      });
+    });
+
+    const scaleFlagRef = ref();
 
-            scaleBottomLeftRef.value.editable = "scaleBottomleft";
-            scaleTopLeftRef.value.editable = "scaleTopleft";
-            scaleTopRightRef.value.editable = "scaleTopright";
-            scaleRightRef.value.editable = "scaleright"
-            scaleLeftRef.value.editable = "scaleleft"
-            scaleTopRef.value.editable = "scaletop"
-            scaleBottomRef.value.editable = "scalebottom"
-        })
-    })
     return () => {
+
+        if (selectCtrl.transferStyle.showOrthScale && !scaleFlagRef.value) {
+            scaleFlagRef.value = true
+            nextTick(()=>{
+                scaleRightRef.value.editable = "scaleright";
+                scaleLeftRef.value.editable = "scaleleft";
+                scaleTopRef.value.editable = "scaletop";
+                scaleBottomRef.value.editable = "scalebottom";
+            })
+        }
+        
       return (
-       (
-          <div
-            class={["absolute transfer z-1001",transferStyle.showGizmo? showgizmo:hideGizmo]}
-          >
-              <div class="">
-                {/* {toolbarOpts.map((item) => {
+        <div
+          class={[
+            "absolute transfer z-1001",
+            transferStyle.showGizmo ? showgizmo : hideGizmo,
+          ]}
+        >
+          <div class="">
+            {/* {toolbarOpts.map((item) => {
                   return item.getVisible.call(editor, comp) ? (
                     <item.component
                       class="p-4px"
@@ -58,95 +70,95 @@ export const SelectTransfer = defineComponent({
                     />
                   ) : null;
                 })} */}
-              </div>
-            
-            <div
-              class={["absolute", selctRectStyle]}
-              ref={selectRectRef}
+          </div>
 
-              style={{
-                width: transferStyle.width + "px",
-                height: transferStyle.height + "px",
-                transform: transferStyle.matrix,
-                transformOrigin: `0 0`,
-              }}
-            >
+          <div
+            class={["absolute", selctRectStyle]}
+            ref={selectRectRef}
+            style={{
+              width: transferStyle.width + "px",
+              height: transferStyle.height + "px",
+              transform: transferStyle.matrix,
+              transformOrigin: `0 0`,
+            }}
+          >
+            <div class={borderStyle} />
+            <>
               <div
-                class={borderStyle}
+                class={[resizeStyle, scaleBottomRightStyle]}
+                style={{ transform: transferStyle.matrixInvert }}
+                ref={scaleBottomrightRef}
+              />
+              <div
+                class={[resizeStyle, scaleBottomLeftStyle]}
+                style={{ transform: transferStyle.matrixInvert }}
+                ref={scaleBottomLeftRef}
+              />
+              <div
+                class={[resizeStyle, scaleTopLeftStyle]}
+                style={{ transform: transferStyle.matrixInvert }}
+                ref={scaleTopLeftRef}
+              />
+
+              <div
+                class={[resizeStyle, scaleTopRightStyle]}
+                style={{ transform: transferStyle.matrixInvert }}
+                ref={scaleTopRightRef}
               />
-                <>
-                  <div
-                    class={[resizeStyle, scaleBottomRightStyle]}
-                    style={{transform: transferStyle.matrixInvert}}
-                    ref={scaleBottomrightRef}
-                  />
-                  <div
-                    class={[resizeStyle, scaleBottomLeftStyle]}
-                    style={{transform: transferStyle.matrixInvert}}
-                    ref={scaleBottomLeftRef}
-                  />
-                  <div
-                    class={[resizeStyle, scaleTopLeftStyle]}
-                    style={{transform: transferStyle.matrixInvert}}
-                    ref={scaleTopLeftRef}
-                  />
-                   
-                
-                    <div
-                        class={[resizeStyle, scaleTopRightStyle ]}
-                        style={{transform: transferStyle.matrixInvert}}
-                        ref={scaleTopRightRef}
-                    />
-             
-                  
 
-                  
-                    <div class={transformBtnsStyle} ref={rotateRef3}>
-                        <div class={transBtnStyle} ref={rotateRef} style={{transform: transferStyle.matrixInvert}} >
-                            <IconRotate ref={rotateRef2} />
-                        </div>
-                    </div>
-                  
+              <div class={transformBtnsStyle} ref={rotateRef3}>
+                <div
+                  class={transBtnStyle}
+                  ref={rotateRef}
+                  style={{ transform: transferStyle.matrixInvert }}
+                >
+                  <IconRotate ref={rotateRef2} />
+                </div>
+              </div>
 
-                  <div
+              {
+                
+                transferStyle.showOrthScale && <div
                     class={[resizeHeightBtnCls, scaleTopCls]}
                     ref={scaleTopRef}
                   />
-
-                  <div
-                    class={ [resizeHeightBtnCls, scaleBottomCls]}
+              }
+              {
+                 transferStyle.showOrthScale &&  <div
+                    class={[resizeHeightBtnCls, scaleBottomCls]}
                     ref={scaleBottomRef}
                   />
-
-                  <div
-                    class={ [resizeWidthBtnCls, scaleRightCls]}
+              }
+              {
+                transferStyle.showOrthScale && <div
+                    class={[resizeWidthBtnCls, scaleRightCls]}
                     ref={scaleRightRef}
                   />
-                   <div
-                    class={ [resizeWidthBtnCls, scaleLeftCls]}
+              }
+               { transferStyle.showOrthScale && <div
+                    class={[resizeWidthBtnCls, scaleLeftCls]}
                     ref={scaleLeftRef}
                   />
-                
-                </>
-            </div>
+              }
+            </>
           </div>
-        )
+        </div>
       );
     };
   },
 });
 const selctRectStyle = css`
-    pointer-events: none;
-`
+  pointer-events: none;
+`;
 const showgizmo = css`
-    display: block;
-    left: 0;
-    top: 0;
-    /* pointer-events: none; */
-`
+  display: block;
+  left: 0;
+  top: 0;
+  /* pointer-events: none; */
+`;
 const hideGizmo = css`
-    display: none;
-`
+  display: none;
+`;
 
 const borderStyle = css`
   position: absolute;
@@ -178,21 +190,21 @@ const resizeStyle = css`
 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;
@@ -259,7 +271,6 @@ const scaleBottomCls = css`
   transform: translate(-50%, 4px);
 `;
 
-
 const resizeWidthBtnCls = css`
   position: absolute;
   width: 8px;
@@ -276,9 +287,9 @@ const resizeWidthBtnCls = css`
 `;
 
 const scaleRightCls = css`
-   right: 0;
-   top: 50%;
-   transform: translate(4px, -50%);
+  right: 0;
+  top: 50%;
+  transform: translate(4px, -50%);
 `;
 
 const scaleLeftCls = css`

+ 4 - 10
src/modules/editor/controllers/SelectCtrl/ObjsContainer.ts

@@ -76,16 +76,8 @@ export class ObjsContainer {
 
         if (n == 1) { //单对象
             let obj = selected[0];
-
-            const s = obj.worldTransform.getScale();
-            let rect = new Rectangle(0, 0, obj.width * s.x, obj.height*s.y);
+            let rect = new Rectangle(0, 0, obj.width , obj.height);
             this.rect = rect;
-            obj.transform.scale.x = 1;
-            obj.transform.scale.y = 1;
-            obj.width = rect.width;
-            obj.height = rect.height;
-            obj.updateTransform();
-
             this.parent.transform.setFromMatrix(obj.worldTransform);
             this.parent.updateTransform();
             this.parent.addChildWorldNoChange(obj);
@@ -228,7 +220,9 @@ export class ObjsContainer {
     }
 
     applyChildWidth(option:{Width?:number, Height?:number}) {
+        if (this.selected.length != 1) return;
         const obj = this.selected[0];
+
         //先移除
         this.parent.removeChildWorldNoChange(obj);
         const m = new Matrix();
@@ -267,7 +261,7 @@ export class ObjsContainer {
         this.applyChildWidth({Height});
         this.updateCompState();
     }
-    
+
     translate(x:number, y:number) {
         this.parent.x += x;
         this.parent.y += y;

+ 3 - 1
src/modules/editor/controllers/SelectCtrl/index.ts

@@ -39,6 +39,7 @@ export class SelectCtrl extends ModuleControl<EditorModule> {
     height: 0,
     matrix: "matrix(1,0,0,1,0,0)",
     matrixInvert: "matrix(1,0,0,1,0,0)",
+    showOrthScale: false,
   });
 
   selected: any[] = []; //选中的所有组件ids
@@ -405,6 +406,7 @@ export class SelectCtrl extends ModuleControl<EditorModule> {
     this.transferStyle.height = h;
     this.transferStyle.matrix = matrix;
     this.transferStyle.matrixInvert = matrixInvert;
+    this.transferStyle.showOrthScale = this.selected.length == 1;
   }
 
   selectId(id: string) {
@@ -751,7 +753,7 @@ export class SelectCtrl extends ModuleControl<EditorModule> {
 
       } else if (i == 2 || i == 3) {
         this.lastScale.y = dtaScale * this.initScale.y;
-        
+
         // objContainer.scaleY(this.lastScale.y);
         objContainer.scaleHeight(this.lastScale.y * this.initScaleWith.h);
       }