*/}}
Pārlūkot izejas kodu

Better tilt description

YimingWu 1 gadu atpakaļ
vecāks
revīzija
e3818ab6c8
2 mainītis faili ar 14 papildinājumiem un 8 dzēšanām
  1. 3 3
      la_interface.h
  2. 11 5
      la_kernel.c

+ 3 - 3
la_interface.h

@@ -198,7 +198,7 @@ STRUCTURE(laEvent){
     uint32_t Input;
 
     int GoodPressure,IsEraser;
-    real Pressure,AngleX,AngleY;
+    real Pressure,Orientation,Deviation;
 
     void *Localized;
 
@@ -361,8 +361,8 @@ STRUCTURE(LA){
     int xi_opcode;
 #endif
     int InkOrWinTab;
-    int WacomDeviceStylus; real StylusPressure, StylusAngleX, StylusAngleY, StylusMaxPressure;
-    int WacomDeviceEraser; real EraserPressure, EraserAngleX, EraserAngleY, EraserMaxPressure;
+    int WacomDeviceStylus; real StylusPressure, StylusOrientation, StylusDeviation, StylusMaxPressure;
+    int WacomDeviceEraser; real EraserPressure, EraserOrientation, EraserDeviation, EraserMaxPressure;
     int PointerIsEraser,IsPen;
     int evLastX,evLastY;
 

+ 11 - 5
la_kernel.c

@@ -1178,8 +1178,8 @@ void la_SaveEvent(SYSWINDOW hwnd, laEvent *e, int use_last_pos){
     if(use_last_pos){ e->x=MAIN.evLastX; e->y=MAIN.evLastY; }
 
     e->Pressure=MAIN.IsPen?(MAIN.PointerIsEraser?MAIN.EraserPressure:MAIN.StylusPressure):0.5f;
-    e->AngleX=rad(MAIN.PointerIsEraser?MAIN.EraserAngleX:MAIN.StylusAngleX);
-    e->AngleY=rad(MAIN.PointerIsEraser?MAIN.EraserAngleY:MAIN.StylusAngleY);
+    e->Orientation=MAIN.PointerIsEraser?MAIN.EraserOrientation:MAIN.StylusOrientation;
+    e->Deviation=rad(MAIN.PointerIsEraser?MAIN.EraserDeviation:MAIN.StylusDeviation);
     e->IsEraser=MAIN.PointerIsEraser;
     e->GoodPressure=MAIN.IsPen;
 
@@ -6668,8 +6668,13 @@ static void la_RecordWacomMotions(XIRawEvent *event)
     //printf("root: x %d y %d\n", win_x_return, win_y_return);
 
     if(XIMaskIsSet(event->valuators.mask, 2)){ if(IsStylus) MAIN.StylusPressure=valuator[2]/MAIN.StylusMaxPressure; else MAIN.EraserPressure=valuator[2]/MAIN.EraserMaxPressure; }
-    if(XIMaskIsSet(event->valuators.mask, 3)){ if(IsStylus) MAIN.StylusAngleX=valuator[3]; else MAIN.EraserAngleX=valuator[3]; }
-    if(XIMaskIsSet(event->valuators.mask, 4)){ if(IsStylus) MAIN.StylusAngleY=valuator[4]; else MAIN.EraserAngleY=valuator[4]; }
+    if(XIMaskIsSet(event->valuators.mask, 3) && XIMaskIsSet(event->valuators.mask, 4)){
+        real x=valuator[3],y=valuator[4];
+        real orientation=atan2(y,x); real deviation=sqrt(x*x+y*y);
+        printf("%f %f\n",orientation,deviation);
+        if(IsStylus){ MAIN.StylusOrientation=orientation;MAIN.StylusDeviation=deviation; }
+        else { MAIN.EraserOrientation=orientation;MAIN.EraserDeviation=deviation; }
+    }
 
     MAIN.IsPen=1;
 }
@@ -6715,7 +6720,8 @@ LRESULT CALLBACK LA_WindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lp
         if (gpWTPacket((HCTX)lparam, wparam, &pkt)){
             MAIN.StylusPressure = (real)pkt.pkNormalPressure/MAIN.WinTabMaxPenPressure;
             real angle = (real)pkt.pkOrientation.orAzimuth / 3600*TNS_PI*2+TNS_PI/2;
-            MAIN.StylusAngleX = cos(angle); MAIN.StylusAngleY = sin(angle);
+            MAIN.StylusOrientation = angle; MAIN.StylusDeviation=rad(90.0f-(real)pkt.pkOrientation.orAltitude/10.0f);
+            printf("%f %f\n",angle,MAIN.StylusDeviation);
             MAIN.IsPen = 1; MAIN.PointerIsEraser=((pkt.pkStatus & TPS_INVERT)==TPS_INVERT);
         }
         break;