|  | @@ -1537,7 +1537,7 @@ void la_SaveEvent(SYSWINDOW hwnd, laEvent *e, int use_last_pos){
 | 
											
												
													
														|  |      la_MakeSpecialKeyBit(hwnd,wnd,e,use_last_pos);
 |  |      la_MakeSpecialKeyBit(hwnd,wnd,e,use_last_pos);
 | 
											
												
													
														|  |      if(use_last_pos){ e->x=MAIN.evLastX; e->y=MAIN.evLastY; }
 |  |      if(use_last_pos){ e->x=MAIN.evLastX; e->y=MAIN.evLastY; }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -    e->Twist=MAIN.StylusTwist;
 |  | 
 | 
											
												
													
														|  | 
 |  | +    e->Twist=MAIN.StylusTwist; e->HasTwist = MAIN.StylusHasTwist;
 | 
											
												
													
														|  |      e->Pressure=MAIN.IsPen?(MAIN.PointerIsEraser?MAIN.EraserPressure:MAIN.StylusPressure):0.5f;
 |  |      e->Pressure=MAIN.IsPen?(MAIN.PointerIsEraser?MAIN.EraserPressure:MAIN.StylusPressure):0.5f;
 | 
											
												
													
														|  |      e->Orientation=MAIN.PointerIsEraser?MAIN.EraserOrientation:MAIN.StylusOrientation;
 |  |      e->Orientation=MAIN.PointerIsEraser?MAIN.EraserOrientation:MAIN.StylusOrientation;
 | 
											
												
													
														|  |      e->Deviation=MAIN.PointerIsEraser?MAIN.EraserDeviation:MAIN.StylusDeviation;
 |  |      e->Deviation=MAIN.PointerIsEraser?MAIN.EraserDeviation:MAIN.StylusDeviation;
 | 
											
										
											
												
													
														|  | @@ -7080,9 +7080,9 @@ static void la_RecordWacomMotions(XIRawEvent *event)
 | 
											
												
													
														|  |          else { MAIN.EraserOrientation=orientation;MAIN.EraserDeviation=deviation; }
 |  |          else { MAIN.EraserOrientation=orientation;MAIN.EraserDeviation=deviation; }
 | 
											
												
													
														|  |      }else{ MAIN.StylusDeviation=MAIN.StylusOrientation=MAIN.EraserDeviation=MAIN.EraserOrientation=0; }
 |  |      }else{ MAIN.StylusDeviation=MAIN.StylusOrientation=MAIN.EraserDeviation=MAIN.EraserOrientation=0; }
 | 
											
												
													
														|  |      if(XIMaskIsSet(event->valuators.mask, 5)){
 |  |      if(XIMaskIsSet(event->valuators.mask, 5)){
 | 
											
												
													
														|  | -        real angle=valuator[5]; angle=rad((900-angle)/10*2-180); if(angle<0) angle+=TNS_PI*2; MAIN.StylusTwist=angle; 
 |  | 
 | 
											
												
													
														|  | -        // printf("a %lf\n",angle);
 |  | 
 | 
											
												
													
														|  | -    }else{ MAIN.StylusTwist=0; }
 |  | 
 | 
											
												
													
														|  | 
 |  | +        real angle=valuator[5]; angle=rad((900-angle)/10*2-180); if(angle<0) angle+=TNS_PI*2; MAIN.StylusTwist=angle;
 | 
											
												
													
														|  | 
 |  | +        if(TNS_DOUBLE_CLOSE_ENOUGH(angle,TNS_PI)){ MAIN.StylusHasTwist=0; }else{ MAIN.StylusHasTwist=1; }
 | 
											
												
													
														|  | 
 |  | +    }else{ MAIN.StylusTwist=TNS_PI; MAIN.StylusHasTwist=0; }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      MAIN.IsPen=1;
 |  |      MAIN.IsPen=1;
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
										
											
												
													
														|  | @@ -7132,6 +7132,7 @@ LRESULT CALLBACK LA_WindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lp
 | 
											
												
													
														|  |              MAIN.StylusOrientation = angle; MAIN.StylusDeviation = rad((90.0f - (real)pkt.pkOrientation.orAltitude / 10.0f));
 |  |              MAIN.StylusOrientation = angle; MAIN.StylusDeviation = rad((90.0f - (real)pkt.pkOrientation.orAltitude / 10.0f));
 | 
											
												
													
														|  |              real tw = (real)pkt.pkOrientation.orTwist; tw = rad(tw / 10);
 |  |              real tw = (real)pkt.pkOrientation.orTwist; tw = rad(tw / 10);
 | 
											
												
													
														|  |              MAIN.StylusTwist = tw;
 |  |              MAIN.StylusTwist = tw;
 | 
											
												
													
														|  | 
 |  | +            if(TNS_DOUBLE_CLOSE_ENOUGH(tw,TNS_PI)){ MAIN.StylusHasTwist=0; }else{ MAIN.StylusHasTwist=1; }
 | 
											
												
													
														|  |              MAIN.EraserDeviation = MAIN.StylusDeviation; MAIN.EraserOrientation = MAIN.StylusOrientation;
 |  |              MAIN.EraserDeviation = MAIN.StylusDeviation; MAIN.EraserOrientation = MAIN.StylusOrientation;
 | 
											
												
													
														|  |              MAIN.EraserPressure = MAIN.StylusPressure;
 |  |              MAIN.EraserPressure = MAIN.StylusPressure;
 | 
											
												
													
														|  |              MAIN.IsPen = 1; MAIN.PointerIsEraser = ((pkt.pkStatus & TPS_INVERT) == TPS_INVERT);
 |  |              MAIN.IsPen = 1; MAIN.PointerIsEraser = ((pkt.pkStatus & TPS_INVERT) == TPS_INVERT);
 |