
    fa5                         d Z ddlmZmZmZ ddlmZmZ ddlZddl	m
Z
mZ ddlmZ ddlZ ej                  d      Z G d d	e      Z G d
 de      Zy)z. Enlarged drag handles for resizing or moving     )divisionprint_functionunicode_literals)pisqrtN)Rectdrop_shadow)HandleTouchHandlesc                       e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZdZd	Zd
ZdZdZi ZdZdZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"ddZ#d Z$y)TouchHandlez- Enlarged drag handle for resizing or moving NFr   )(   r         ?      ?g?g{Gz?   )               @`   c                 b   || _         | j                  st        t        j                        D ]  \  }}|t
        z  dz  | j                  |<     t        t        j                        D ](  \  }}|t
        z  dz  t
        dz  z   | j                  |<   * d| j                  t        j                  <   y y )Nr         @r   )id_handle_angles	enumerater
   EDGESr   CORNERSMOVE)selfr   ihs       6/usr/lib/python3/dist-packages/Onboard/TouchHandles.py__init__zTouchHandle.__init__<   s     ""!&,,/ 61)*R###A&6!&..1 A1)*R#S)@##A&A/2D, #    c                 ^    | j                   }|| j                  r|j                  dd      }|S )Nr   )_rectpressedoffsetr   rects     r    get_rectzTouchHandle.get_rectG   s,    zz|<<;;sC(Dr"   c                 b    | j                         j                         \  }}t        ||      dz  S )Nr   )r)   get_sizemin)r   wr   s      r    
get_radiuszTouchHandle.get_radiusN   s*    }}'')11ay3r"   c                     | j                         }|rb|j                  | j                  dz         }|xj                  | j                  d   z  c_        |xj
                  | j                  d   z  c_        |S )N   r   )r)   inflate_shadow_sizer-   _shadow_offsetr   r'   s     r    get_shadow_rectzTouchHandle.get_shadow_rectR   s`    }}<< 1 1! 34DFFd))!,,FFFd))!,,Fr"   c                 4    | j                   | j                     S N)r   r   r   s    r    get_arrow_anglezTouchHandle.get_arrow_angleZ   s    ""477++r"   c                 :    | j                   t        j                  v S r6   )r   r
   r   r7   s    r    is_edge_handlezTouchHandle.is_edge_handle]   s    ww&,,&&r"   c                 :    | j                   t        j                  v S r6   )r   r
   r   r7   s    r    is_corner_handlezTouchHandle.is_corner_handle`   s    ww&..((r"   c                 V   | j                   \  }}t        ||j                  dz        }t        ||j                  dz        }|}d| _        |j                         \  }}| j                  t        j                  u ret        |j                  d|z  z
  |j                  d|z  z
        }d| _        t        || j                  z  |      }t        || j                  z  |      }| j                  t        j                  t        j                  t        j                  fv r|j                         }| j                  t        j                  t        j                  t        j                  fv r|j                         }| j                  t        j                   t        j                  t        j"                  fv r|j%                         |z
  }| j                  t        j&                  t        j                  t        j"                  fv r|j)                         |z
  }| j                  t        j                  t        j                   t        j                  fv r||dz  z
  }| j                  t        j                  t        j                  t        j&                  fv r||dz  z
  }t+        ||      | _        y )Ng      @r   r   gffffff?)_sizer,   r-   r   _scale
get_centerr   r
   r   WEST
NORTH_WEST
SOUTH_WESTleftNORTH
NORTH_EASTtopEAST
SOUTH_EASTrightSOUTHbottomr   r$   )	r   canvas_rectr-   r   xcycdxys	            r    update_positionzTouchHandle.update_positionc   s   zz1;==3&';==3&''')B77fkk!KMMC!G+[]]S1W-DEADKAOQ'AAOQ'A77v{{((((* *   "A77v||((((* * !A77v{{((((* * !!#a'A77v||((((* * ""$q(A77v{{FKK==QWA77v{{FLL&,,??QWA!Q1%
r"   c                 R   | j                         j                  | j                        }| j                         | j                  z  }|r_|j	                  |      rN| j
                  j                         }|r2|j                         }| j                  |||        |j                  | S y)NF)r)   grow_hit_proximity_factorr.   is_point_within_window
get_windowcairo_create_build_handle_pathin_fillr@   r   )r   pointr(   radius_wincontextrN   rO   dxdyrP   s              r    hit_testzTouchHandle.hit_test   s    %%d&@&@A"T%?%??D((/<<**,D++-''v>&w..r"   c                     | j                   rd}nd}|j                          | j                  ||       | j                  ||       | j	                  |       y )Nr   r   )r%   new_path_draw_handle_shadow_draw_handle_draw_arrows)r   r`   alpha_factors      r    drawzTouchHandle.draw   sM    <<LL  ,7'<0'"r"   c                 |   | j                         }|dz  }| j                  |z  }| j                  r|j                  ddd|       n5| j                  r|j                  ddd|       n|j                  ddd|       | j                  |       |j                          |j                  |       |j                          y )Ng      .@g(\?gQ?g(\?g\(\?g(\?gGz?)	r.   _handle_alphar%   set_source_rgbaprelightr[   fill_preserveset_line_widthstroke)r   r`   ri   r^   
line_widthalphas         r    rg   zTouchHandle._draw_handle   s    "d]
""\1<<##D$e<]]##D$e<##D$e<(z*r"   c           	      H   | j                         }|j                           |j                  | j                         j	                           |j                          |j                          |j                  t        j                         | j                  |       |j                  dddd       |j                          |j                         }t        |||| j                  | j                   | j"                  d       |j                          |j%                  t        j&                         |j                  dddd       | j                  |       |j                          |j)                          |j+                          |j-                          |j)                          y )Nr   r      )r)   save	rectangler4   intclip
push_grouppush_group_with_contentcairoCONTENT_ALPHAr[   rm   fill	pop_groupr	   r2   r3   _shadow_alphaset_operatorOPERATOR_CLEARrestorepop_group_to_sourcepaint)r   r`   ri   r(   groups        r    rf   zTouchHandle._draw_handle_shadow   s=   }} 	4//15578 	''(;(;<(S#s3!!#GUD%%''&&		 	U112S#s3(##%r"   c                    | j                         }| j                         j                         \  }}|dz  | j                  z  dz  }| j	                         }| j
                  t        j                  k(  r1d}| j                  r|dz  }|t        dz  z  }| j                  r|dz  }nd}dt        z  |z  }t        |      D ]  }	|j                          |j                  ||       |j                  ||	|z  z          |j                  ||       | j
                  t        j                  u r|j                  dd       n|j                  dd       | j!                  |       |j#                           y )	Nr   g333333?            ?g?r   g333333?)r.   r)   r@   r?   r8   r   r
   r   lock_x_axisr   lock_y_axisrangerv   	translaterotatescale_draw_arrowr   )
r   r`   r^   rN   rO   r   angle
num_arrows
angle_stepr   s
             r    rh   zTouchHandle._draw_arrows   s?   "++-Bt{{*S0$$&77fkk!Ja
c!a
J2X
*
z" 	ALLNb"%NN51z>12MM%' ww&++%!!#q)!!$*W%OO	r"   c                 B   |j                  dd       |j                  dd       |j                  dd       |j                          |j                  dddd       |j	                          |j                  dddd       |j                  d       |j                          y )Nr   g      r   r   g?r   )move_toline_to
close_pathrm   ro   rp   rq   )r   r`   s     r    r   zTouchHandle._draw_arrow  s    d#s#s#S#s3S#s3q!r"   c           	         || j                         }|| j                         }|j                         \  }}| j                  }| j	                         }t        j                         }|j                  ||       |j                  |       | j                         r|j                  ||       }	|j                  ||      }
|j                  ||||t        dz  z   |t        dz  z   t        z           |j                  |	   |j                  |
  |j                          y | j                         r,|j                  t         dz         |j                  ||||dt        z  dz  z   |dt        z  dz  z          |j                  ||       } |j                  |  |rl|j                  |||z
        }|j                  ||z
  ||z
        } |j                  |  |j                  |d   |d   ||t        dz  z
  |t        dz  z          n!|j                  ||      } |j                  |  |j                  | |      } |j                  |  |j                          y |j                  |||ddt        z         y )Nr   r      ru   r   r0   )r)   r.   r@   corner_radiusr8   r|   Matrixr   r   r:   transform_pointarcr   r   r   r<   )r   r`   r(   r^   rN   rO   r   r   mp0p1ptptcs                r    r[   zTouchHandle._build_handle_path  sH   <==?D>__&F"B**$$&LLN	B	 ""6F73B""662BKKBS(8%"s(:JR:OPGOOR GOOR  ""$HHbS3YKKBB(<(-B(<>""6F73BGOOR ''-1GH''(>(.(>@$CFCFM!BH,urCx/?A &&v7$""F7V4BGOOR  KKB384r"   c                 \    | j                         }|r | j                  j                  |  y y r6   )r4   rX   queue_draw_arear'   s     r    redrawzTouchHandle.redraw=  s,    ##%(DLL(($/ r"   )NN)%__name__
__module____qualname____doc__r   rn   r%   r   r>   _fallback_sizerV   r$   r?   rl   r   r2   r3   _screen_dpir   r   r   r!   r)   r.   r4   r8   r:   r<   rS   rc   rj   rg   rf   rh   r   r[   r    r"   r    r   r   $   s    7	BHGMENEFMMLNKNKK	3,')$&L$
#"%P D,5\0r"   r   c                   j    e Zd ZdZdZdZdZd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zy)r   z% Full set of resize and move handles Fr   Nc                    g | _         t        t        j                        t        t        j                        t        t        j
                        t        t        j                        t        t        j                        t        t        j                        t        t        j                        t        t        j                        t        t        j                        g	| _        y r6   )handlesr   r
   r   rB   rE   rF   rH   rI   rK   rC   rA   _handle_poolr7   s    r    r!   zTouchHandles.__init__I  s    (5():):;(6():):;(5():):;(6():):;(57r"   c                     g | _         | j                  D ],  }|j                  |v s| j                   j                  |       . y r6   )r   r   r   append)r   
handle_idshandles      r    set_active_handleszTouchHandles.set_active_handlesU  s<    '' 	,FyyJ&##F+	,r"   c                 4    | j                   D ]	  }||_         y r6   )r   rX   )r   windowr   s      r    
set_windowzTouchHandles.set_window[  s    '' 	$F#FN	$r"   c                 V    || _         | j                  D ]  }|j                  |        y r6   )r(   r   rS   )r   rM   r   s      r    update_positionszTouchHandles.update_positions_  s*    	ll 	0F"";/	0r"   c                    | j                   rt        j                  |j                          }| j                  D ]  }|j                         }|j                  |      s%|j                           |j                  |j                           |j                          |j                          |j                  |       |j                          |j                  | j                          |j                           y y r6   )opacityr   from_extentsclip_extentsr   r4   
intersectsrv   rw   rx   ry   rz   rj   r   paint_with_alphar   )r   r`   	clip_rectr   r(   s        r    rj   zTouchHandles.drawd  s    <<))7+?+?+ABI,, &--/??9-LLN%G%%txxz2LLN&&(KK(//1,,T\\:OO%& r"   c                 `    | j                   r"| j                  D ]  }|j                           y y r6   )r(   r   r   )r   r   s     r    r   zTouchHandles.redrawu  s*    99,,    r"   c                 ~    | j                   r1| j                  D ]!  }|j                  |      s|j                  c S  y y r6   )activer   rc   r   )r   r]   r   s      r    rc   zTouchHandles.hit_testz  s7    ;;,, %??5)!99$% r"   c                     | j                   D ]G  }|j                  |k(  xr |j                   }|j                  |k7  s1||_        |j	                          I y r6   )r   r   r%   rn   r   )r   	handle_idr   rn   s       r    set_prelightzTouchHandles.set_prelight  sK    ll 	 FyyI-Dfnn2DH(*"*		 r"   c                     | j                   D ]8  }|j                  |k(  }|j                  |k7  s"||_        |j                          : y r6   )r   r   r%   r   )r   r   r   r%   s       r    set_pressedzTouchHandles.set_pressed  s?    ll 	 Fii9,G~~(!(		 r"   c                 4    | j                   D ]	  }||_         y r6   )r   r   )r   r   r   s      r    set_corner_radiuszTouchHandles.set_corner_radius  s    ll 	1F#0F 	1r"   c                     d}d}t         j                  }|d   |k  s|d   |k  rd}d}n"|d   |d   z  |d   z  }|d   |d   z  |d   z  }t        ||d         t        ||d         f}|t         _        y )N2   )ru   ru   r   r0   )r   r   maxr>   )	r   size_pxsize_mmmin_monitor_mmtarget_size_mmmin_sizer-   r   sizes	            r    set_monitor_dimensionsz#TouchHandles.set_monitor_dimensions  s    --1:&1:&AA
WQZ'.*;;A
WQZ'.*;;A1hqk"C8A;$77 r"   c                 4    | j                   D ]	  }||_         y)z+ Set to False to constraint movement in x. N)r   r   r   lockr   s      r    r   zTouchHandles.lock_x_axis      ll 	&F!%F	&r"   c                 4    | j                   D ]	  }||_         y)z* Set to True to constraint movement in y. N)r   r   r   s      r    r   zTouchHandles.lock_y_axis  r   r"   )r   r   r   r   r   r   r(   r!   r   r   r   rj   r   rc   r   r   r   r   r   r   r   r"   r    r   r   C  sU    /FGD
7,$0
&" 
%  1!&
&r"   )r   
__future__r   r   r   mathr   r   r|   Onboard.utilsr   r	   Onboard.definitionsr
   logging	getLogger_loggerobjectr   r   r   r"   r    <module>r      sP   ( 5 A A   1 & 
'

N
+\0& \0~f&6 f&r"   