
    ^jL@                       d dl mZ d dlZd dlZd dlZd dlmZmZmZ d dl	Z	d dl
Z	d dlmZ d dlmZmZmZmZmZ d dlmZ d dlmZ d dlmZmZmZ d d	lmZ d d
lmZm Z m!Z!m"Z" erd dl#m$Z$ dZ%dZ&dZ'dZ(dZ)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2dZ3dZ4dZ5dZ6dZ7e	j8        d         Z9 G d dej:                  Z;e)e'dZ< G d dej=                  Z> G d dej?                  Z@d*d#ZAd+d'ZB G d( d)e@          ZCdS ),    )annotationsN)TYPE_CHECKINGClassVarSequence)base)
BitmapDataImageLockModeReadPixelFormat32bppARGBRectgdiplus)_gdi32)_user32)ANTIALIASED_QUALITYFW_BOLD	FW_NORMAL)device_context)ABCBYTELOGFONTW
TEXTMETRIC)Glyph                i   i   i   i    i @     
debug_fontc                  R    e Zd Zdej        fdej        fdej        fdej        fgZdS )RectfxywidthheightN)__name__
__module____qualname__ctypesc_float_fields_     L/home/agentuser/manim-venv/lib/python3.11/site-packages/pyglet/font/win32.pyr    r    3   s=        	fn	fn	&.!	6>"	HHHr,   r    )TFc                  8     e Zd Zd fdZddZdd
ZddZ xZS )GDIPlusGlyphRendererfontGDIPlusFontreturnNonec                B   d | _         d | _        d | _        t                                          |           || _        |j        }|j        |j        z
  }|dz  dz   }|dz  dz   }| 	                    ||           t          j        | j        | j        j                   d S )Nr   r   )_bitmap_dc_bitmap_rectsuper__init__r0   max_glyph_widthascentdescent_create_bitmapgdi32SelectObjecthfont)selfr0   r#   r$   	__class__s       r-   r9   zGDIPlusGlyphRenderer.__init__C   s     	 $t|+!3,!#E6***48TY_55555r,   c                p   	 | j         rt          j        | j                    | j        rt          j        | j                   | j        rt          j        | j                   | j        rt          j        | j                   | j	        rt          j        d| j	                   d S d S # t          $ r Y d S w xY wNr   )_matrixr   GdipDeleteMatrix_brushGdipDeleteBrush	_graphicsGdipDeleteGraphicsr5   GdipDisposeImager6   user32	ReleaseDC	ExceptionrA   s    r-   __del__zGDIPlusGlyphRenderer.__del__S   s    	| 7(666{ 5'444~ ;*4>:::| 7(666x . DH-----. . 	 	 	DD	s   B!B' '
B54B5r#   intr$   c           
     $   t          d|z  |z  z              | _        t          j                    | _        t
          | _        t          j        |||dz  | j        | j        t          j	        | j                             t          j                    | _
        t          j        | j        t          j	        | j
                             t          j        | j
        t                     t          j        d          | _        t#          j        | j        | j        j                   t          j        | j
        t,          t.          j        j                            t          j                    | _        t          j        dt          j	        | j                             t          j                    | _        t          j        t          j	        | j                             t<          t>          z  | _         tC          dd||          | _"        || _#        d S )Nr   r   l    )$r   _datar(   c_void_pr5   r
   _formatr   GdipCreateBitmapFromScan0byrefrI   GdipGetImageGraphicsContextGdipSetPageUnit	UnitPixelrL   GetDCr6   r>   r?   r0   r@   GdipSetTextRenderingHint_text_qualitypygletoptionstext_antialiasingrG   GdipCreateSolidFillrE   GdipCreateMatrixDriverStringOptionsCmapLookup"DriverStringOptionsRealizedAdvance_flagsr   _rect_bitmap_height)rA   r#   r$   s      r-   r=   z#GDIPlusGlyphRenderer._create_bitmapb   s   a%i&0144
((+)%L$*fl4<&@&@	B 	B 	B  **+DLL((	* 	* 	*	:::<??48TY_555(&.:;	= 	= 	= o''#JT[0I0IJJJ(( dl!;!;<<<49: !Qv..
$r,   textstrr   c                B   t          j        |          }t          |          }d}| j        }t	          d| j        | j        j        z
  | j        j        z   ||          }t          j                    }t          j
        t          j        |                     t          j                    }t          j        |t          j        |                     t          j        |           t	                      }	t          t          z  t           z  }
t          j        ||
           t          j        | j        ||| j        j        t          j        |          |t          j        |	          d d 	  	         t+          t-          j        |	j                            }|dk    rd}t3                      }d}d}d}d |D             D ]`}t5          j        | j        ||t          j        |                    r.||j        z  }||j        z  }|dk     r| |_        ||z  }X||z  }^d} |s0|}| j        j         r"||dz  z  }tC          || j"        j#                  }t          j$        | j        d           t          j%        | j        ||| j        j        t          j        |          || j&                   t          j'        | j        d	           t          j        |           tQ                      }t          j)        | j*        t          j        | j"                  tV          | j,        t          j        |                     t          j-        |j.        |j/        z            }t          j0        ||j1        t          |                     t          j2        | j*        t          j        |                     tf          j4        5                    ||d
||j.                   }| j        6                    |          }tC          |d          }|7                    | j        j         ||           |S )Ni'  r   z
Tc                ,    g | ]}t          |          S r+   )ord).0cs     r-   
<listcomp>z/GDIPlusGlyphRenderer.render.<locals>.<listcomp>   s    ///Q#a&&///r,   Fr   r   BGRA)8r(   create_unicode_bufferlenrg   r    r0   r;   r<   rT   r   %GdipStringFormatGetGenericTypographicrW   GdipCloneStringFormatGdipDeleteStringFormat&StringFormatFlagsMeasureTrailingSpacesStringFormatFlagsNoClipStringFormatFlagsNoFitBlackBoxGdipSetStringFormatFlagsGdipMeasureStringrI   	_gdipfontrQ   mathceilr#   r   r>   GetCharABCWidthsWr6   abcAabcBr!   italicminrf   WidthGdipGraphicsClearGdipDrawStringrG   	GdipFlushr   GdipBitmapLockBitsr5   r	   rU   create_string_bufferStrideHeightmemmoveScan0GdipBitmapUnlockBitsr^   image	ImageDatacreate_glyphset_bearings)rA   rh   chlen_chr#   r$   rectgenericfmtbboxflagsadvanceabclsbttf_font	codepointbitmap_databufferr   glyphs                       r-   renderzGDIPlusGlyphRenderer.render   s   )$//T $Q+)*+-1Y->?F$ $
 /##5fl76K6KLLLo%gv|C/@/@AAA&w///. ww7()/0 	(e444!$."$"("&)"5"(,t"4"4"%"(,t"4"4"&"&	( 	( 	( di
++,, 6>>D ee 0/$/// 	 	I&txIv|TWGXGXYY sx!77 "TDFSLEESLEE   		5E
 y 5!#E4:#344 	!$.*===t~!%#y2%|D11"#{	, 	, 	, 	$.!,,,&s+++ ll"LL$$&7L%%	' 	' 	' ,!335 5v{0#f++>>> 	$T\6<3L3LMMM&&6F[//1 1 	&&u--#qkkDI--sG<<<r,   )r0   r1   r2   r3   r2   r3   )r#   rQ   r$   rQ   r2   r3   )rh   ri   r2   r   )r%   r&   r'   r9   rP   r=   r   __classcell__rB   s   @r-   r/   r/   A   s        6 6 6 6 6 6    % % % %>G G G G G G G Gr,   r/   c                  D     e Zd ZeZ	 	 dd fdZeddd            Z xZS )	Win32FontnormalFNnameri   sizefloatweightr   boolstretchdpi
int | Noner2   r3   c                0   t                                                       |dv r|nd|v }|                     |||||          | _        t	          j        t          j        | j                            | _        t          d           5 }t                      }	t	          j        || j                   t	          j        |t          j        |	                     |	j        | _        |	j         | _        |	j        | _        d d d            d S # 1 swxY w Y   d S )NNTFbold)r8   r9   get_logfontlogfontr>   CreateFontIndirectWr(   rW   r@   r   r   r?   GetTextMetricsAtmAscentr;   	tmDescentr<   tmMaxCharWidthr:   )rA   r   r   r   r   r   r   r   dcmetricsrB   s             r-   r9   zWin32Font.__init__  s=    	#666vvFf<L''dD&#FF.v|DL/I/IJJ
 D!! 	:R llGr4:...!"fl7&;&;<<<!*DK#--DL#*#9D 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:s   	A5DDDr   r   c                   t          d          5 }|d}|}t                      }t          | |z  dz            |_        |rt          |_        nt          |_        ||_        | |_        t          |_
        ddd           n# 1 swxY w Y   |S )a  Get a raw Win32 :py:class:`.LOGFONTW` struct for the given arguments.

        Args:
            name: The name of the font
            size: The font size in points
            bold: Whether to request the font as bold
            italic: Whether to request the font as italic
            dpi: The screen dpi

        Returns:
            LOGFONTW: a ctypes binding of a Win32 LOGFONTW struct
        N`   H   )r   r   rQ   lfHeightr   lfWeightr   lfItalic
lfFaceNamer   	lfQuality)r   r   r   r   r   r   log_pixels_yr   s           r-   r   zWin32Font.get_logfont$  s      D!! 	4R {L jjG  #D5<#72#=>>G  -#*  #, %G!%G 3G)	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4, s   A%BBBr   FFNr   ri   r   r   r   ri   r   r   r   r   r   r   r2   r3   N)r   ri   r   r   r   r   r   r   r   r   r2   r   )	r%   r&   r'   r/   glyph_renderer_classr9   staticmethodr   r   r   s   @r-   r   r     sw        /
 KP"	: : : : : : :, % % % % \% % % % %r,   r   font_collectionctypes.c_void_pr2   Sequence[ctypes.c_void_p]c                (   t          j                    }t          j        | t          j        |                     t          j        |j        z              }t          j                    }t          j        | ||t          j        |                     |S r   )r(   c_intr    GdipGetFontCollectionFamilyCountrW   rT   valueGdipGetFontCollectionFamilyList)r   	num_count
gpfamiliesnumFounds       r-   _get_font_familiesr   M  s    I,i002 2 2/IO366J|~~H+JX0F0FH H H r,   r   ri   r   c                    t          j        d          }t          |           D ]&}t          j        ||d           |j        |k    r dS 'dS )Nr    TF)r(   rr   r   r   GdipGetFamilyNamer   )r   r   	font_namegpfamilys       r-   _font_exists_in_collectionr   X  s^    ,R00I&77  !(It<<<?d""44 # 5r,   c                       e Zd ZU eZded<   dZded<   dZded<   dZ	 	 dd  fdZ	e
d!d            Zd"dZed#d            Zed$d            Z xZS )%r1   z"ClassVar[type[base.GlyphRenderer]]r   Nzctypes.c_void_p | None_private_collection_system_collectionArialr   Fr   ri   r   r   r   r   r   r   r   r   r2   r3   c           	     "   |s| j         }|rt          j        d           |dv r|nd|v }t                                          ||||||           || _        t          j                    }|d         dk    r
|dd          }t          j        |          }| j	        r-t          j        || j	        t          j        |                     |sIt          rt          d| d| j                     t          j        |d t          j        |                     |sK| j         | _        t          j        t          j        | j                  d t          j        |                     |t          }	d	| _        nt"          }	||z  d
z  }|| _        d}
|r
|
t$          z  }
|r
|
t&          z  }
t          j                    | _        t          j        |t          j        |          |
|	t          j        | j                             t          j        |           d S )Nz4The current font render does not support stretching.r   r   r   @r   zWarning: Font 'z ' was not found. Defaulting to: r   r   )_default_namewarningswarnr8   r9   _namer(   rT   	c_wchar_pr   r   GdipCreateFontFamilyFromNamerW   _debug_fontprint	UnitPointr   rZ   FontStyleBoldFontStyleItalicr|   GdipCreateFontr)   GdipDeleteFontFamily)rA   r   r   r   r   r   r   r   familyunitstylerB   s              r-   r9   zGDIPlusFont.__init__j  s!    	&%D 	RMPQQQ#666vvFf<LtT67C@@@
"" 7c>>8D%% # 	g0t7OQWQ]^dQeQefff  	S dbbbdN`bbccc0tV\&=Q=QRRR  	k+DJ01A$*1M1MtU[UabhUiUijjj;DDHHD3J2%DDH 	#]"E 	%_$E**vv~d';';UD&,W[WeJfJfggg$V,,,,,r,   c                    | j         S r   )r   rO   s    r-   r   zGDIPlusFont.name  s
    zr,   c                j    t          j        | j                   t          j        | j                   d S r   )r>   DeleteObjectr@   r   GdipDeleteFontr|   rO   s    r-   rP   zGDIPlusFont.__del__  s.    4:&&&t~.....r,   clstype[GDIPlusFont]databytesc                   t          j                    }t          j        |t	          |          dt          j        |                    }|t          j                    | j        sCt          j                    | _        t          j
        t          j        | j                             t          j        | j        |t	          |                     d S rD   )r(   c_uint32r>   AddFontMemResourceExrs   rW   WinErrorr   rT   r   GdipNewPrivateFontCollectionGdipPrivateAddMemoryFont)r   r   numfonts_handles       r-   add_font_datazGDIPlusFont.add_font_data  s    ?$$,T3t99ahAWAWXX ?/###& 	7&,o&7&7C#0S4557 7 7()@$D		RRRRRr,   c                    | j         rt          | j         |          rdS t          j                    }t	          j        |d t          j        |                    }|dk    rt	          j        |           dS dS )NTr   F)r   r   r(   rT   r   r   rW   r   )r   r   r   statuss       r-   	have_fontzGDIPlusFont.have_font  s{     " 	'A#BY[_'`'` 	4 ""5dD&,vBVBVWWQ;;(0004ur,   r   r   )r2   ri   r   )r   r   r   r   r2   r3   )r   r   r   ri   r2   r   )r%   r&   r'   r/   r   __annotations__r   r   r   r9   propertyr   rP   classmethodr  r  r   r   s   @r-   r1   r1   b  s         ?SSSSS266666155555Min!%6- 6- 6- 6- 6- 6- 6-p    X/ / / / S S S [S    [    r,   r1   )r   r   r2   r   )r   r   r   ri   r2   r   )D
__future__r   r(   r}   r   typingr   r   r   r^   pyglet.imagepyglet.fontr   pyglet.image.codecs.gdiplusr   r	   r
   r   r   pyglet.libs.win32r   r>   r   rL   pyglet.libs.win32.constantsr   r   r   "pyglet.libs.win32.context_managersr   pyglet.libs.win32.typesr   r   r   r   pyglet.font.baser   rc   rd   )TextRenderingHintSingleBitPerPixelGridFitTextRenderingHintAntiAlias!TextRenderingHintAntiAliasGridFitr   r   rZ   r   %StringFormatFlagsDirectionRightToLeft"StringFormatFlagsDirectionVerticalry   %StringFormatFlagsDisplayFormatControlStringFormatFlagsNoFontFallbackrw   StringFormatFlagsNoWrapStringFormatFlagsLineLimitrx   FontFamilyNotFoundr_   r   	Structurer    r]   GlyphRendererr/   Fontr   r   r   r1   r+   r,   r-   <module>r!     s   " " " " " "    4 4 4 4 4 4 4 4 4 4            j j j j j j j j j j j j j j - - - - - - / / / / / / O O O O O O O O O O = = = = = = C C C C C C C C C C C C '&&&&&& !" %& ",- ) $% ! 		(2 %%/ "!+ (2 %", )3 &$ ' $   n\*    F    ,4 
G G G G G4- G G GT? ? ? ? ?	 ? ? ?D	 	 	 	   f f f f f) f f f f fr,   