B
    ]t\j                 @   s4   d dl Zd dlmZ d dlmZ G dd deZdS )    N)RendererAgg)process_figure_for_rasterizingc               @   s:   e Zd ZdZdddZd Zdd Zdd	 Zd
d Z	dS )MixedModeRenderera&  
    A helper class to implement a renderer that switches between
    vector and raster drawing.  An example may be a PDF writer, where
    most things are drawn with PDF vector commands, but some very
    complex objects, such as quad meshes, are rasterised and then
    output as images.
    Nc             C   sZ   |dkrt }|| _|| _|| _|| _|| _d| _d| _|| _|	 | _
|| _| | dS )a+  
        Parameters
        ----------
        figure : `matplotlib.figure.Figure`
            The figure instance.

        width : scalar
            The width of the canvas in logical units

        height : scalar
            The height of the canvas in logical units

        dpi : scalar
            The dpi of the canvas

        vector_renderer : `matplotlib.backend_bases.RendererBase`
            An instance of a subclass of
            `~matplotlib.backend_bases.RendererBase` that will be used for the
            vector drawing.

        raster_renderer_class : `matplotlib.backend_bases.RendererBase`
            The renderer class to use for the raster drawing.  If not provided,
            this will use the Agg backend (which is currently the only viable
            option anyway.)

        Nr   )r   _raster_renderer_class_width_heightdpi_vector_renderer_raster_renderer_rasterizingfigureZget_dpi_figdpi_bbox_inches_restore_set_current_renderer)selfr   widthheightr   Zvector_rendererZraster_renderer_classZbbox_inches_restore r   @lib/python3.7/site-packages/matplotlib/backends/backend_mixed.py__init__   s    
zMixedModeRenderer.__init__a  
        close_group draw_image draw_markers draw_path
        draw_path_collection draw_quad_mesh draw_tex draw_text
        finalize flipy get_canvas_width_height get_image_magnification
        get_texmanager get_text_width_height_descent new_gc open_group
        option_image_nocomposite points_to_pixels strip_math
        start_filter stop_filter draw_gouraud_triangle
        draw_gouraud_triangles option_scale_image
        _text2path _get_text_path_transform height width
        c             C   sF   || _ x*| jD ] }t||rt| |t|| qW | j|_| j|_d S )N)	_renderer_methodshasattrsetattrgetattrstart_rasterizingstop_rasterizing)r   Zrenderermethodr   r   r   r   N   s    
z'MixedModeRenderer._set_current_rendererc             C   sr   | j | j | jr(t| j | j}|| _| jdkr`| | j| j | j| j | j| _	| 
| j	 |  jd7  _dS )a  
        Enter "raster" mode.  All subsequent drawing commands (until
        stop_rasterizing is called) will be drawn with the raster
        backend.

        If start_rasterizing is called multiple times before
        stop_rasterizing is called, this method has no effect.
        r      N)r   set_dpir   r   r   r   r   r   r   r
   r   )r   rr   r   r   r   W   s    
z#MixedModeRenderer.start_rasterizingc             C   s   |  j d8  _ | j dkr| | j | j| j }| j \}}|\}}}}|dkr|dkrtj|tj	d}|
||df}|ddd }| j }	| j|	|| j | j || | | j | j | d| _d| _ | j| j | jrt| j| j| j}
|
| _dS )a9  
        Exit "raster" mode.  All of the drawing that was done since
        the last start_rasterizing command will be copied to the
        vector backend by calling draw_image.

        If stop_rasterizing is called multiple times before
        start_rasterizing is called, this method has no effect.
        r   r   )Zdtype   NF)r   r   r	   r   r   r
   Ztostring_rgba_minimizednpZ
frombufferZuint8Zreshaper   Znew_gcZ
draw_imager   r   r   r   r   )r   r   bufferZboundslbwhZimagegcr    r   r   r   r   o   s0    	

z"MixedModeRenderer.stop_rasterizing)NN)
__name__
__module____qualname____doc__r   splitr   r   r   r   r   r   r   r   r      s    
;	r   )Znumpyr#   Zmatplotlib.backends.backend_aggr   Zmatplotlib.tight_bboxr   objectr   r   r   r   r   <module>   s   