
    Eg                         d dl Z  e j                  dd       d dlmZmZmZmZmZmZ d dl	m
Z
mZ dZdZ G d d	ej                        Zy)
    NCinnamonDesktopz3.0)Gtk	GdkPixbufGioGLibGObjectGdk)utilstrackersi@     c                        e Zd ZdZdej
                  j                  deffiZd fd	Z	d Z
d Zd Zd Zd	 Zd
 ZddZddZ xZS )FramedImagez}
    Widget to hold the user face image.  It attempts to display an image at
    its native size, up to a max sane size.
    surface-changedNc                 0   t         t        |           | j                         j	                  d       d | _        d | _        d | _        || _        |rt        | _
        nt        | _
        t        j                         j                  | d| j                         y )Nframedimagerealize)superr   __init__get_style_context	add_classcancellablefilepathscale_upMAX_IMAGE_SIZE_LOW_RESmax_sizeMAX_IMAGE_SIZEr   con_tracker_getconnecton_realized)selflow_resr   	__class__s      6/usr/share/cinnamon-screensaver/widgets/framedImage.pyr   zFramedImage.__init__   sv    k4)+ **=9		 2DM*DM  "**4D<L<LM    c                 $    | j                          y N)generate_image)r!   widgets     r$   r    zFramedImage.on_realized'   s    r%   c                 J    | j                  d        | j                  dd        y )Nr   )set_from_surfaceemitr!   s    r$   clear_imagezFramedImage.clear_image*   s    d#		#T*r%   c                 b    || _         d | _        | j                         r| j                          y y r'   )r   r   get_realizedr(   )r!   r   s     r$   set_from_pathzFramedImage.set_from_path.   -    		! r%   c                 b    || _         d | _        | j                         r| j                          y y r'   )r   r   r0   r(   )r!   r   s     r$   set_from_filezFramedImage.set_from_file5   r2   r%   c                 @   d }| j                   | j                         z  }	 t        j                  j	                  |      }||j                         |kD  sK|j                         |kD  s8| j                  rN|j                         |dz  k  s|j                         |dz  k  r"	 t        j                  j                  |||      }|rWt        j                  || j                         | j                               }| j                  |       | j!                  d|       y t#               | j%                          y # t
        j                  $ r}d|d|j                  }d}Y d }~$d }~ww xY w# t
        j                  $ r}d|d|j                  }d}Y d }~d }~ww xY w)NzCould not load pixbuf from 'z' for FramedImage: T   zCould not scale pixbuf from 'r   )r   get_scale_factorr   Pixbufnew_from_filer   Errormessage
get_height	get_widthr   new_from_file_at_sizer	    cairo_surface_create_from_pixbuf
get_windowr+   r,   printr.   )r!   r   pixbufscaled_max_sizeer;   errorsurfaces           r$   set_image_internalzFramedImage.set_image_internal<   sm   --$*?*?*AA	%%33D9F
 !!#o59I9I9Ko9]6#4#4#619L#LPVP`P`PbetwxexPx!&--CCD/[jkF
 ::6;?;P;P;R;???;LNG !!'*II'1'N+ zz 	OSUVU^U^_GE	 zz !X\^_^g^ghG E!s/   D7 !!E, 7E)
E$$E),F?FFc                 Z   | j                   r| j                  | j                          y | j                  rw| j                  !| j                  j	                          d | _        t        j                         | _        | j                  j                  | j                  | j                         y y r'   )	r   rG   r   r   cancelr   Cancellableload_contents_asyncload_contents_async_callbackr-   s    r$   r(   zFramedImage.generate_imageY   s|    99##DII.YY+  '')#' "0DII))$*:*:D<]<]^ r%   c                    	 |j                  |      \  }}}|rt        j                  t        j
                         dg      }t        j                  j                  |      }|j                  |d dt        j                  j                  | j                  | j                         y y # t        j                  $ r | j                          Y y w xY w)Nz"cinnamon-screensaver-albumart-tempF)load_contents_finishr   r:   r.   build_filenamevget_user_cache_dirr   Filenew_for_pathreplace_contents_asyncFileCreateFlagsREPLACE_DESTINATIONr   on_file_written)	r!   r   resultdatasuccesscontentsetag_out
cache_name
cache_files	            r$   rL   z(FramedImage.load_contents_async_callbackd   s    	*.*C*CF*K'GXx
 --t/F/F/HJn.opJ..z:J--h.2.3.1.A.A.U.U.2.>.>.2.B.BD	 	 zz 		s   B% %#C
Cc                     	 |j                  |      r | j                  |j                                y y # t        j                  $ r Y y w xY wr'   )replace_contents_finishrG   get_pathr   r:   )r!   r   rW   rX   s       r$   rV   zFramedImage.on_file_writtenv   sD    	++F3''8 4zz 		s   04 A
	A
)FFr'   )__name__
__module____qualname____doc__r   SignalFlagsRUN_LASTobject__gsignals__r   r    r.   r1   r4   rG   r(   rL   rV   __classcell__)r#   s   @r$   r   r      s[    
 	G//88$	JLN"+"":	_D$r%   r   )girequire_versiongi.repositoryr   r   r   r   r   r	   utilr
   r   r   r   Imager    r%   r$   <module>rp      sC    
   $e , A A   m#)) mr%   