*/}}
浏览代码

Node socket initial interactive offset fix

YimingWu 1 年之前
父节点
当前提交
edc2347c8e
共有 2 个文件被更改,包括 11 次插入2 次删除
  1. 1 1
      la_kernel.c
  2. 10 1
      resources/la_widgets.c

+ 1 - 1
la_kernel.c

@@ -6016,7 +6016,7 @@ laUiItem *la_DetectSocketRecursive(laUiList* uil, int x, int y, int LimB, laProp
     laListHandle Locals={0};
     laUiItem* ui=la_DetectUiItemRecursive(uil, x,y,LimB,&Locals, 1);
     while(lstPopPointer(&Locals));
-    printf("%s\n", ui?ui->Type->Identifier:"?");
+    //printf("%s\n", ui?ui->Type->Identifier:"?");
     if(ui && ui->Type==_LA_UI_NODE_SOCKET){
         laProp* p=ui->PP.LastPs->p; laPropContainer* pc=la_EnsureSubTarget(p,0);
         if(pc==PCInOrOut) return ui;

+ 10 - 1
resources/la_widgets.c

@@ -2884,6 +2884,15 @@ int OPMOD_ColumnAdjuster(laOperator *a, laEvent *e){
 
     return LA_RUNNING;
 }
+void la_NodeSocketGetPositionDelta(laUiItem* ui, int ex,int ey,int* dx,int* dy){
+    int cx,cy;
+    if(ui->Flags&LA_UI_SOCKET_LABEL_E){ cy=(ui->U+ui->B)/2; cx=ui->L+(ui->B-ui->U)/2; }
+    elif(ui->Flags&LA_UI_SOCKET_LABEL_W){ cy=(ui->U+ui->B)/2; cx=ui->R-(ui->B-ui->U)/2; }
+    elif(ui->Flags&LA_UI_SOCKET_LABEL_N){ cx=(ui->L+ui->R)/2; cy=ui->U+(ui->R-ui->L)/3; }
+    elif(ui->Flags&LA_UI_SOCKET_LABEL_S){ cx=(ui->L+ui->R)/2; cy=ui->B-(ui->R-ui->L)/3; }
+    else{ cx=(ui->L+ui->R)/2; cy=(ui->U+ui->B)/2; }
+    *dx=cx-ex; *dy=cy-ey;
+}
 int OPMOD_NodeSocket(laOperator *a, laEvent *e){
     laUiItem *ui = a->Instance;
     laBoxedTheme *bt = (*ui->Type->Theme);
@@ -2917,7 +2926,7 @@ int OPMOD_NodeSocket(laOperator *a, laEvent *e){
         elif(pc==LA_PC_SOCKET_OUT){ MAIN.tNodeIn->Source=ui->PP.EndInstance; latouched_NodeInSocket(0,0);
             MAIN.tNodeIn->RuntimeX=MAIN.tNodeIn->RuntimeY=MAIN.tNodeIn->RuntimePX=MAIN.tNodeIn->RuntimePY=0;
             MAIN.tNodeIn->ColorId=MAIN.NextWireColor;  }
-        uit->LastX = e->x; uit->LastY = e->y;
+        int dx,dy; la_NodeSocketGetPositionDelta(ui,e->x,e->y,&dx,&dy); uit->LastX = e->x+dx; uit->LastY = e->y+dy;
         laRedrawCurrentPanel();
         return LA_RUNNING;
     }