*/}}
Sfoglia il codice sorgente

knob and invoke fix

YimingWu 3 mesi fa
parent
commit
5eb9e1dad6
3 ha cambiato i file con 42 aggiunte e 29 eliminazioni
  1. 21 15
      la_kernel.c
  2. 1 0
      resources/la_operators.c
  3. 20 14
      resources/la_widgets.c

+ 21 - 15
la_kernel.c

@@ -7480,6 +7480,23 @@ int laOperatorAvailableSafe(char *ID, laPropPack *This, void *Real_FromInstance,
     return laOperatorAvailablePSafe(at, This, Real_FromInstance, Instructions);
 }
 
+void la_EnsureLocalizedEvent(laOperator *From, laOperator *a, laEvent *e){
+    laOperatorType *at=a->Type;
+    if (e&&!e->Localized && at->ExtraMark & LA_EXTRA_TO_PANEL){
+        laWindowToLocal(0, a->ToPanel, &e->x, &e->y);
+        e->Localized = 1;
+    }
+
+    if (e&&e->Localized){
+        if (!at->ExtraMark & LA_EXTRA_TO_PANEL){
+            laLocalToWindow(From, From->ToPanel, &e->x, &e->y);
+            e->Localized = 0;
+        }else{
+            laLocalToWindow(From, From->ToPanel, &e->x, &e->y);
+            laWindowToLocal(a, a->ToPanel, &e->x, &e->y);
+        }
+    }
+}
 int laInvokeP(laOperator *From, laOperatorType *at, laEvent *e, laPropPack *This, char *args, char *args2){
     laOperator *a, *f = From;
     int rev;
@@ -7501,20 +7518,7 @@ int laInvokeP(laOperator *From, laOperatorType *at, laEvent *e, laPropPack *This
 
     lstGeneratePointerList(f ? &f->LocalUiLists : 0, 0, &a->LocalUiLists);
 
-    if (e&&!e->Localized && at->ExtraMark & LA_EXTRA_TO_PANEL){
-        laWindowToLocal(0, a->ToPanel, &e->x, &e->y);
-        e->Localized = 1;
-    }
-
-    if (e&&e->Localized){
-        if (!at->ExtraMark & LA_EXTRA_TO_PANEL){
-            laLocalToWindow(f, f->ToPanel, &e->x, &e->y);
-            e->Localized = 0;
-        }else{
-            laLocalToWindow(f, f->ToPanel, &e->x, &e->y);
-            laWindowToLocal(a, a->ToPanel, &e->x, &e->y);
-        }
-    }
+    la_EnsureLocalizedEvent(From,a,e);
 
     if (From) f->Child = a;
 
@@ -7580,7 +7584,7 @@ int laInvokePCreateThis(laOperator *From, laOperatorType *at, laEvent *e, laProp
 
     lstGeneratePointerList(f ? &f->LocalUiLists : 0, 0, &a->LocalUiLists);
 
-    if (e&&!e->Localized && at->ExtraMark & LA_EXTRA_TO_PANEL) laWindowToLocal(0, a->ToPanel, &e->x, &e->y);
+    la_EnsureLocalizedEvent(From,a,e);
 
     if (From) f->Child = a;
 
@@ -7616,6 +7620,8 @@ int laInvokeUiP(laOperator *From, laOperatorType *at, laEvent *e, void *inst, la
     a->ToPanel = MAIN.ToPanel;
     if (!IgnoreLocals) lstGeneratePointerList(f ? &f->LocalUiLists : 0, Locals, &a->LocalUiLists);
 
+    la_EnsureLocalizedEvent(From,a,e);
+
     if (From) f->Child = a;
 
     a->Using = 1;

+ 1 - 0
resources/la_operators.c

@@ -2162,6 +2162,7 @@ int OPMOD_Panel(laOperator *a, laEvent *e){
     }
     if (ui && !a->Child && ui->Type->OperatorType && !la_UiOperatorExists(ui)){
         laSetOperatorLocalizer(p);
+        //laPanelToLocal(a, &t, &UIB);
         if (!(laInvokeUiP(a, ui->Type->OperatorType, e, ui, &Locals, 0) & LA_FINISH)){ laRetriggerOperators(); }
         lstClearPointer(&Locals);
         //return LA_RUNNING;

+ 20 - 14
resources/la_widgets.c

@@ -2429,15 +2429,17 @@ int OPMOD_IntArrayHorizon(laOperator *a, laEvent *e){
         if(ui->Extra->Edit){ return LA_RUNNING; }
         int dist=abs(e->x - uit->LastX + uit->LastY - e->y);
         if (dist > MAIN.ValuatorThreshold || uit->Dragging){
-            int min,max,Ranged = laGetIntRange(&ui->PP, &min, &max); real step=ip->Step; if(Ranged&&!IsKnob){ step=(real)(max-min)/(ui->R-ui->L); }
+            int min,max,Ranged = laGetIntRange(&ui->PP, &min, &max); 
+            int UseRange = (Ranged&&!IsKnob); real step=ip->Step; if(UseRange){ step=(real)(max-min)/(ui->R-ui->L); }
             if(Ranged){ TNS_CLAMP(step,(max-min)/500,INT_MAX); }
-            //laGetIntArray(&ui->PP, &TmpArr);
-            //uit->TargetIndexVali = TmpArr[ui->Extra->On - 1];
-            int delta=e->x-uit->LastX; if(IsKnob){ int dy=uit->LastY-e->y; delta=delta+dy; } if(!uit->Dragging) delta=delta>0?1:-1;
-            uit->TargetIndexValf +=  delta*step;
-            laSetIntArraySingle(&ui->PP, ui->Extra->On - 1, uit->TargetIndexValf);
-            uit->LastX = e->x;
-            uit->LastY = e->y;
+            int delta=e->x-uit->LastX; if(IsKnob){ int dy=uit->LastY-e->y; delta=delta+dy; }
+            if(UseRange || (abs(delta) > MAIN.ValuatorThreshold)){
+                if((!uit->Dragging ) || !(UseRange)) delta=delta>0?1:-1;
+                uit->TargetIndexValf += delta*step;
+                laSetIntArraySingle(&ui->PP, ui->Extra->On - 1, uit->TargetIndexValf);
+                uit->LastX = e->x;
+                uit->LastY = e->y;
+            }
             uit->Dragging = 1;
             laRedrawCurrentPanel();
         }
@@ -2553,15 +2555,19 @@ int OPMOD_FloatArrayHorizon(laOperator *a, laEvent *e){
         if(uit->Edit){ return LA_RUNNING; }
         int dist=abs(e->x - uit->LastX - e->y + uit->LastY);
         if (dist > MAIN.ValuatorThreshold || uit->Dragging){
-            real min,max; int Ranged = laGetFloatRange(&ui->PP, &min, &max); real step=fp->Step; if(Ranged&&!IsKnob){ step=(max-min)/(ui->R-ui->L); }
+            real min,max; int Ranged = laGetFloatRange(&ui->PP, &min, &max); 
+            int UseRange = (Ranged&&!IsKnob); real step=fp->Step; if(UseRange){ step=(max-min)/(ui->R-ui->L); }
             if(Ranged){ TNS_CLAMP(step,(max-min)/500,INT_MAX); }
             laGetFloatArray(&ui->PP, &TmpArr);
             uit->TargetIndexValf = TmpArr[ui->Extra->On - 1];
-            int delta=e->x-uit->LastX; if(IsKnob){ int dy=uit->LastY-e->y; delta=delta+dy; }  if(!uit->Dragging) delta=delta>0?1:-1;
-            uit->TargetIndexValf +=  delta*step;
-            laSetFloatArraySingle(&ui->PP, ui->Extra->On - 1, uit->TargetIndexValf);
-            uit->LastX = e->x;
-            uit->LastY = e->y;
+            int delta=e->x-uit->LastX; if(IsKnob){ int dy=uit->LastY-e->y; delta=delta+dy; }
+            if(UseRange || (abs(delta) > MAIN.ValuatorThreshold)){
+                if((!uit->Dragging ) || !(UseRange)) delta=delta>0?1:-1;
+                uit->TargetIndexValf +=  delta*step;
+                laSetFloatArraySingle(&ui->PP, ui->Extra->On - 1, uit->TargetIndexValf);
+                uit->LastX = e->x;
+                uit->LastY = e->y;
+            }
             uit->Dragging = 1;
             laRedrawCurrentPanel();
         }