
    BPcu                         d Z ddlmZ ddlZddlmZmZmZ ddlmZ	  G d dej
                  Zedk    r e                                             dS dS )	zF
An Inkscape extension that creates a frame around a selected object.
    )ListN)GroupPathElementClipPath)inkex_gettextc                       e Zd ZdZd Zdej        dej        fdZe	ddej
        fd	            Zd
eej                 fdZd
eej                 fdZd ZdS )FramezN
    An Inkscape extension that creates a frame around a selected object.
    c                 0   |                     dd           |                     dt          j        d           |                     dddd	g
           |                     dt          d           |                     dt          j        t          j        d                     |                     dt          j        d           |                     dt          j        t          j        d                     |                     dt
          d           |                     dt
          dd           |                     dt
          dd           |                     dt          dg d           |                     dt          j        d           d S )Nz--tabstroke)defaultz--clipF)typer   z--typerectellipse)r   choicesz--corner_radiusr   z--fill_colorz--groupz--stroke_colorz--widthg       @z--offset_absolutez(Offset in user units, positive = outside)r   r   helpz--offset_relativez6Relative offset in percentage of the bounding box sizez--z_positionbottom)topr   split)r   r   r   z	--asgroup)add_argumentinkexBooleanintColorfloatstr)selfparss     '/usr/share/inkscape/extensions/frame.pyadd_argumentszFrame.add_arguments$   s   '8444(FFF(FVY<OPPP+#qAAA.u{EKPQNNSSS)%-GGG*ekRSnnUUU)%===;	 	 	
 	
 	
 	I	 	 	
 	
 	
 	...	 	 	
 	
 	
 	+EM5IIIII    node	clip_pathc                    t                      }|                    t          j        |j        |j                              | j        j                            |           |	                    d|
                    d                     dS )zAdds a new clip path node to the defs and sets
            the clip-path on the node.
        node -- The node that will be clipped.
        clip_path -- The clip path object.
        )path	transformz	clip-path   )as_urlN)r   appendr   newr$   r%   svgdefsaddsetget_id)r   r!   r"   clips       r   add_clipzFrame.add_clipB   sv     zz 	KODN?SSSTTT$dkkk3344444r    Tr   boxc                    |rt          |t          |j        j        dz            t          |j        j        dz            g          }t
          j                            |j        j        |j        j        |j        j        |j        j        |          }n.t
          j	                            |j
        |j        dz            }| |_        |S )z
        name -- The name of the new frame object.
        box -- The boundary box of the node.
        style -- The style used to draw the path.
        radius -- The corner radius of the frame.
        returns a new frame node.
        r&   )leftr   widthheightrx)centerradius)minabsxsizeyr   	Rectangler)   minimumEllipser7   label)namer1   	rectangler8   relems         r   generate_framezFrame.generate_frameP   s      
	MVSa00#cej1n2E2EFGGA?&&U]EMejuz '  DD =$$CJsx!|$LLD
r    containedelementsc                    | j         j        }t          j        d|i          }|                    | j         j        d           d}d}t          j                    }|D ]s}t          |t          j        t          j	        t          j
        f          r)	 ||                                z  }L# t          $ r Y Xw xY w||                                z  }t|                    |j        j        | j         j        dz  z  |j        j        | j         j        dz  z            }|                    | j         j                  }|                     d|| j         j        dk    | j         j                  }| j         j        dk    r=|                    | j         j        d           ||_        | j         j        d	k    r|}nQ|}nN|                                }	|}||_        |	}|j                            | j         j        d           d|j        d<   ||fS )
z8generate the frame for an element or a group of elementsstroke-widthr   Nd   r	   r   r   fillr   )optionsr4   r   Style	set_colorstroke_colorBoundingBox
isinstanceTextElementTspanFlowRootget_inkscape_bbox
ValueErrorbounding_boxresizer;   r<   offset_relativer=   offset_absoluterF   r   corner_radius
z_position
fill_colorstylecopy)
r   rG   r4   r^   elem_topelem_bottomr1   r!   framerK   s
             r   create_framezFrame.create_frameg   s   "^U34418<<<!!% 	+ 	+D$!2EK PQQ +411333CC!   H t((***jjEJ$,6<=EJ$,6<=
 
 jj566##S$,+v5t|7Q
 
 <"g--OODL3V<<<EK|&(22# ::<<DH"HNK''(?HHH%)HN6"H$$s   B((
B54B5c                 *   |                      |          \  }}| j        j        r!|D ]}||n|}|                     ||           | j        j        r|d                                                             t                                }||                    |           |D ]}|                    |           ||                    |           dS dS ||d         	                    |           ||d         
                    |           dS dS )z>Create and append the frame for an object or a set of objects.Nr   )rc   rL   r/   r0   group	getparentr,   r   r(   addpreviousaddnext)r   rG   ra   r`   r!   elementrf   s          r   process_elementszFrame.process_elements   sA    $ 1 12C D DX< 	-) - -&.&:((dG,,,,< 	8%a(224488AAE&[)))) # #T""""#X&&&&& $# &!!$00===#!"%--h77777 $#r    c                    | j         j        s!t          j        t	          d                    t          j        d| j        j        i          }|                    | j        j	        d           | j        j
        s'| j         j        D ]}|                     |g           dS |                     | j         j                                                   dS )zPerforms the effect.zSelect at least one object.rI   r   N)r*   	selectionr   AbortExtension_rM   rL   r4   rN   rO   asgrouprk   rendering_order)r   r^   r!   s      r   effectzFrame.effect   s     x! 	I&q)F'G'GHHH^T\-?@AA18<<<|# 	H* . .%%tf----. . !!$("4"D"D"F"FGGGGGr    N)Tr   )__name__
__module____qualname____doc__r   r   BaseElementr   r0   staticmethodrP   rF   r   rc   rk   rr    r    r   r	   r	      s         J J J<5U. 55;L 5 5 5 5  %"3    \,(%d53D.E (% (% (% (%T8$u7H2I 8 8 8 8*H H H H Hr    r	   __main__)rv   typingr   r   r   r   r   inkex.localizationr   ro   EffectExtensionr	   rs   runry   r    r   <module>r      s   (         . . . . . . . . . . 1 1 1 1 1 1TH TH TH TH THE! TH TH THn z	EGGKKMMMMM r    