
    \
jT                        d dl Z d dlZd dlmZ d dlZd dlmZ d dlmZ d dlZd dl	T d dl
mZ d dlT d dlmZmZ d dlmZ d d	lmZ ej        d
         Zd Zd
Zd Zd Zdad Z G d dej                  Z G d de          Z  G d dej!                  Z"d dl#m$Z$m%Z%m&Z& d dl#m'Z'm(Z( dZ)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2dZ3dZ4d Z5 G d! d"e6j7                  Z8 G d# d$e          Z9dZ:dZ;dZ<dZ= G d% d&e"          Z>dS )'    N)	byteorder)base)
win32query)*)device_context)_gdi32_user32)	_kernel32)asbytes
debug_fontc                     t           dk    r|                     d          } n|                     d          } t          | dz             S )Nbig	utf_16_be	utf_16_le )r   encodecreate_string_buffer)texts    K/DATA/AppData/hermes/venv/lib/python3.11/site-packages/pyglet/font/win32.pystr_ucs2r   8   sC    E{{;''{{;''t,,,    c                 Z   dd l }|j                            t                    s|                    t                     d|j                            t          |           z  }d}|j                            |||fz            r$|dz  }|j                            |||fz            $|||fz  S )Nr   z
%s-%%d.%%s   )ospathexists
_debug_dirmakedirsjoin)r   	extensionr   namenums        r   _debug_filenamer#   @   s    III7>>*%%  
J"',,z4888D
C
'..i 00
1
1 q '..i 00
1
1 3	"""r   c                 z    t          |d          }|                     |           t          d| d|           d S )NpngzSaved image z to )r#   save_debug)imager!   filenames      r   _debug_imager*   J   sD    tU++H	JJx
FUUUHH566666r   c                     t           st          t          dd          d          a t                               | dz              d S )Nlogtxtwt
)_debug_logfileopenr#   write)msgs    r   r'   r'   P   sB     CoeU;;TBBt$$$$$r   c                   *     e Zd Z fdZd Zd Z xZS )Win32GlyphRendererc                 P   d | _         d | _        d | _        t          t          |                               |           || _        |j        }|j        |j	        z
  }|dz  dz   }|dz  dz   }| 
                    ||           t          j        | j        | j        j                   d S )N   r   )_bitmap_dc_bitmap_rectsuperr5   __init__fontmax_glyph_widthascentdescent_create_bitmapgdi32SelectObjecthfont)selfr=   widthheight	__class__s       r   r<   zWin32GlyphRenderer.__init__Y   s      $''00666	 $t|+!3,!#E6***48TY_55555r   c                     d S N rE   rF   rG   s      r   rA   z!Win32GlyphRenderer._create_bitmapi   s    r   c                      t          d          )Nabstract)NotImplementedError)rE   r   s     r   renderzWin32GlyphRenderer.renderl   s    !*---r   )__name__
__module____qualname__r<   rA   rP   __classcell__rH   s   @r   r5   r5   V   sV        6 6 6 6 6   . . . . . . .r   r5   c                   &    e Zd Zd Zd Zd Zd ZdS )GDIGlyphRendererc                     	 | j         rt          j        | j                    | j        rt          j        | j                   d S d S #  Y d S xY wrJ   )r9   rB   DeleteDCr8   DeleteObjectrE   s    r   __del__zGDIGlyphRenderer.__del__p   s`    	x )tx(((| 1"4<000001 1	DDs   A A Ac                     t                      }t          j        | j        t	          |          t	          |          t          |                    r&|j        }|j        }|j        |j        z   |j        z   }n\t                      }t          j
        | j        t	          |          t	          |          t          |                     |j        }d}|}| j        }|                     ||||          }| j                            |          }	|	                    | j        j         ||           t$          rt'          | d|d           t'          d|j        z             t'          d|j        z             t'          d|j        z             t'          d|z             t'          d|z             t'          d	|z             t'          d
|z             t)          |d|z             t)          | j        j        d         d|z             |	S )Nr   z.render()zabc.abcA = %rzabc.abcB = %rzabc.abcC = %rz
width = %rzheight = %rzlsb = %rzadvance = %rzglyph_%sztex_%s)ABCrB   GetCharABCWidthsWr9   ordbyrefabcBabcAabcCc_intGetCharWidth32Wvalue_bitmap_height
_get_imager=   create_glyphset_bearingsr@   _debug_fontr'   r*   textures)
rE   r   abcrF   lsbadvance	width_bufrG   r(   glyphs
             r   rP   zGDIGlyphRenderer.rendery   s   ee"48IIs4yy%**. . 	HE(Ch)CH4GGI!$(D		3t99eI&6&68 8 8OECG $eVS99	&&u--DI--sG<<< 
	AdddDDD1222?SX-...?SX-...?SX-...<%'(((=6)***:#$$$>G+,,,
T 1222+A.4@@@r   c                    t          j        | j        | j                   t          j        | j        | j        j                   t          j        | j        d           t          j        | j        d           t          j        | j        t                     t          j        | j        t          | j                  | j                   t          j        | j        | ddd |t!          |          d            t          j                     t$          j                            ||d| j        | j        j        dz            }|S )Nr   i AXXX   )rB   rC   r9   r8   r=   rD   
SetBkColorSetTextColor	SetBkModeOPAQUEuser32FillRectrb   r:   _blackExtTextOutAlenGdiFlushpygletr(   	ImageData_bitmap_dataright)rE   r   rF   rG   rp   r(   s         r   rj   zGDIGlyphRenderer._get_image   s    	48T\22248TY_5553'''48Z000&))) 	%(9":":DKHHH$(SD!QdIIt	 	 	 &&ufD%t'8'>'BD Dr   c                    t          j        t                    | _        t          j        t                    | _        | j        rt          j        | j                   | j        rt          j	        | j                   |dz  } t          t          ||z  z                        }t                      }t          |j                  |j        _        ||j        _        ||j        _        d|j        _        d|j        _        t(          |j        _        t          j        d           | _        t          j        d t1          |          t2          t1          |          d d          | _        t5          j        d           |j        | _        t=                      | _        d| j        _         || j        _!        d| j        _"        || j        _#        || _$        tJ          rstM          d| ||fz             tM          d| j        z             tM          d| j        z             tM          d|z             tM          d	|j        j        z             d S d S )
Nrv   r       r   z%r._create_dc(%d, %d)z_dc = %rz_bitmap = %rz
pitch = %rzinfo.bmiHeader.biSize = %r)'rB   GetStockObjectBLACK_BRUSHr}   WHITE_BRUSH_whiter9   	ReleaseDCr8   rZ   POINTERc_byte
BITMAPINFOsizeof	bmiHeaderbiSizebiWidthbiHeightbiPlanes
biBitCountBI_RGBbiCompressionCreateCompatibleDCCreateDIBSectionrb   DIB_RGB_COLORSkernel32SetLastErrorcontentsr   RECTr:   leftr   topbottomri   rm   r'   )rE   rF   rG   pitchdatainfos         r   rA   zGDIGlyphRenderer._create_bitmap   s   *;77*;778 	&ODH%%%< 	-t|,,,	1wv%01133|| &t~ 6 6!&"("#$&!'-$+D11-d$KKtd  	a    M FF!""' !#) $ 	I*dE6-BBCCC:()))>DL0111<%'(((/$.2GGHHHHH	I 	Ir   N)rQ   rR   rS   r\   rP   rj   rA   rK   r   r   rW   rW   o   sV          # # #J  .)I )I )I )I )Ir   rW   c                   l     e Zd ZeZd fd	Zd Zed             Ze	d             Z
e	d             Z xZS )		Win32FontFNc                    t          t          |                                            |                     |||||          | _        t          j        t          | j                            | _        t          d           5 }t                      }t          j        || j                   t          j        |t          |                     |j        | _        |j         | _        |j        | _        d d d            d S # 1 swxY w Y   d S rJ   )r;   r   r<   get_logfontlogfontrB   CreateFontIndirectWrb   rD   r   
TEXTMETRICrC   GetTextMetricsAtmAscentr?   	tmDescentr@   tmMaxCharWidthr>   )
rE   r!   sizebolditalicstretchdpidcmetricsrH   s
            r   r<   zWin32Font.__init__   s"   i'')))''dD&#FF.uT\/B/BCC
 D!! 	:R llGr4:...!"eGnn555!*DK#--DL#*#9D 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:s   A0C>>DDc                 8    t          j        | j                   d S rJ   )rB   rZ   rD   r[   s    r   r\   zWin32Font.__del__   s    4:&&&&&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 )N`   H   )r   LOGFONTWintlfHeightFW_BOLDlfWeight	FW_NORMALlfItalic
lfFaceNameANTIALIASED_QUALITY	lfQuality)r!   r   r   r   r   r   
logpixelsyr   s           r   r   zWin32Font.get_logfont   s     D!! 	4R{JjjG"D5:#5#;<<G -#*  #, %G!%G 3G	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4  s   A%BBBc                 *    t          j        |          S rJ   )r   	have_font)clsr!   s     r   r   zWin32Font.have_font
  s     #D)))r   c                     t                      }t          j        |t          |          dt	          |                     d S Nr   )c_uint32rB   AddFontMemResourceExr   rb   )r   r   numfontss      r   add_font_datazWin32Font.add_font_data  s4    ::"4TAuXGGGGGr   FFFN)rQ   rR   rS   rW   glyph_renderer_classr<   r\   staticmethodr   classmethodr   r   rT   rU   s   @r   r   r      s        +: : : : : :' ' '   \( * * [* H H [H H H H Hr   r   )PixelFormat32bppARGBgdiplusRect)ImageLockModeRead
BitmapDatar   rv   r7      r   i   i   i   i    i @  c                   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yrF   rG   N)rQ   rR   rS   ctypesc_float_fields_rK   r   r   r   r   (  s=        	fn	fn	&.!	6>"	HHHr   r   c                        e Zd Zd Zd Zd ZdS )GDIPlusGlyphRendererc                 ^   	 | 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 #  Y d S xY wr   )_matrixr   GdipDeleteMatrix_brushGdipDeleteBrush	_graphicsGdipDeleteGraphicsr8   GdipDisposeImager9   r{   r   )rE   ress     r   r\   zGDIPlusGlyphRenderer.__del__1  s    	| =.t|<<{ ;-dk::~ A0@@| =.t|<<x 4&q$(334 4	DDs   B!B' 'B,c           
      Z   t          d|z  |z  z              | _        t                                          | _        t
          | _        t          j        |||dz  | j        | j        t          	                    | j                             t                                          | _
        t          j        | j        t          	                    | j
                             t          j        | j
        t                     t          j        d          | _        t#          j        | j        | j        j                   t          j        | j
        t,                     t                                          | _        t          j        dt          	                    | j                             t                                          | _        t          j        t          	                    | j                             t6          t8          z  | _        t=          dd||          | _        || _         d S )Nrv   r   l    )!BYTE_datar   c_void_pr8   r   _formatr   GdipCreateBitmapFromScan0rb   r   GdipGetImageGraphicsContextGdipSetPageUnit	UnitPixelr{   GetDCr9   rB   rC   r=   rD   GdipSetTextRenderingHint!TextRenderingHintAntiAliasGridFitr   GdipCreateSolidFillr   GdipCreateMatrixDriverStringOptionsCmapLookup"DriverStringOptionsRealizedAdvance_flagsr   _rectri   rL   s      r   rA   z#GDIPlusGlyphRenderer._create_bitmap@  s   a%i&0144
((+)%L$*fll4<&@&@	B 	B 	B  **+DLLL((	* 	* 	*	:::<??48TY_555(-	/ 	/ 	/ oo''#JT[0I0IJJJ (( dl!;!;<<<49: !Qv..
$r   c                 f   t                               |          }t          |          }d}| j        }t	          d| j        | j        j        z
  | j        j        z   ||          }t                                           }t          j
        t                               |                     t                                           }t          j        |t                               |                     t          j        |           t	                      }	t          t          z  t           z  }
t          j        ||
           t          j        | j        ||| j        j        t                               |          |t                               |	          d d 	  	         t+          t-          j        |	j                            }|dk    rd}t3                      }d}d}d}d |D             D ][}t5          j        | j        ||t          |                    r.||j        z  }||j        z  }|dk     r| |_        ||z  }S||z  }Yd} |s0|}| j        j         r"||dz  z  }tC          || j"        j#                  }t          j$        | j        d           t          j%        | j        ||| j        j        t                               |          || j&                   t          j'        | j        d	           t          j        |           tQ                      }t          j)        | j*        t          | j"                  tV          | j,        t          |                     t[          |j.        |j/        z            }ta          ||j1        t          |                     t          j2        | j*        t          |                     tf          j4        5                    ||d
||j.                   }| j        6                    |          }tC          |d          }|7                    | j        j         ||           |S )Ni'  r   z
Tc                 ,    g | ]}t          |          S rK   )ra   ).0cs     r   
<listcomp>z/GDIPlusGlyphRenderer.render.<locals>.<listcomp>  s    ///Q#a&&///r   Fr   r   BGRA)8r   create_unicode_bufferr   ri   r   r=   r?   r@   r   r   %GdipStringFormatGetGenericTypographicrb   GdipCloneStringFormatGdipDeleteStringFormat&StringFormatFlagsMeasureTrailingSpacesStringFormatFlagsNoClipStringFormatFlagsNoFitBlackBoxGdipSetStringFormatFlagsGdipMeasureStringr   	_gdipfontr   mathceilrF   r_   rB   r`   r9   rd   rc   r   r   minr   WidthGdipGraphicsClearGdipDrawStringr   	GdipFlushr   GdipBitmapLockBitsr8   r   r   r   StrideHeightmemmoveScan0GdipBitmapUnlockBitsr   r(   r   rk   rl   )rE   r   chlen_chrF   rG   rectgenericfmtbboxflagsrq   ro   rp   ttf_font	codepointbitmap_databufferr(   rs   s                       r   rP   zGDIPlusGlyphRenderer.rendera  s   ))$//T $Q+)*+-1Y->?F$ $
 //##5fll76K6KLLLoo%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IuSzzRR sx!77 "TDFSLEESLEE   		5E
 y 5!#E4:#344 	!$.*===t~!%#y2%||D11"#{	, 	, 	, 	$.!,,,&s+++ ll"4<$*0$,+	  	  	 
 &!335 5)3v;;777 	$T\53E3EFFF&&ufF[//1 1 	&&u--#qkkDI--sG<<<r   N)rQ   rR   rS   r\   rA   rP   rK   r   r   r   r   0  sG          % % %BD D D D Dr   r   c                        e Zd ZeZdZdZd	 fd	Zed             Z	 fdZ
e fd            Ze fd            Z xZS )
GDIPlusFontNArialFc           	      z   |s| j         }|rt          j        d           t                                          ||||||           || _        t                                          }|d         dk    r
|dd          }t                              |          }| j	        r3t          j        || j	        t                              |                     |sOt          rt          d| d| j                     t          j        |d t                              |                     |sW| j         | _        t          j        t                              | j                  d t                              |                     |t          }d| _        nt"          }||z  dz  }|| _        d}	|r
|	t$          z  }	|r
|	t&          z  }	t                                          | _        t          j        |t                              |          |	|t                              | j                             t          j        |           d S )	Nz4The current font render does not support stretching.r   @r   zWarning: Font 'z ' was not found. Defaulting to: r   r   )_default_namewarningswarnr;   r<   _namer   r   	c_wchar_p_private_fontsr   GdipCreateFontFamilyFromNamerb   rm   print	UnitPointr   r   FontStyleBoldFontStyleItalicr  GdipCreateFontr   GdipDeleteFontFamily)rE   r!   r   r   r   r   r   familyunitstylerH   s             r   r<   zGDIPlusFont.__init__  s    	&%D
  	RMPQQQtT67C@@@
"" 7c>>8D%%  	b0t7JFLLY_L`L`aaa  	S dbbbdN`bbccc0tV\\&=Q=QRRR  	k+DJ01A1A$*1M1MtU[UaUabhUiUijjj;DDHHD3J2%DDH 	#]"E 	%_$E**vv~~d';';UD&,,W[WeJfJfggg$V,,,,,r   c                     | j         S rJ   )r.  r[   s    r   r!   zGDIPlusFont.name+  s
    zr   c                     t          t          |                                            t          j        | j                   d S rJ   )r;   r'  r\   r   GdipDeleteFontr  )rE   rH   s    r   r\   zGDIPlusFont.__del__/  s8    k4  ((***t~.....r   c                 T   t          t          |                               |           | j        sOt                                          | _        t          j        t                              | j                             t          j	        | j        |t          |                     d S rJ   )r;   r'  r   r0  r   r   r   GdipNewPrivateFontCollectionrb   GdipPrivateAddMemoryFontr   )r   r   rH   s     r   r   zGDIPlusFont.add_font_data3  s    k3--d333! 	2!'!2!2C0S/002 2 2();T3t99MMMMMr   c                 r   t                                           }t                                           }t          j        | j        t                               |                     t          j        |j        z              }t                                           }t          j        | j        ||t                               |                     t           	                    d          }|D ]&}t          j
        ||d           |j        |k    r dS 't          t          |                               |          S )Nr   r   T)r   r   rf   r    GdipGetFontCollectionFamilyCountr0  rb   rh   GdipGetFontCollectionFamilyListr  GdipGetFamilyNamer;   r'  r   )	r   r!   r8  	num_count
gpfamiliesnumFound	font_namegpfamilyrH   s	           r   r   zGDIPlusFont.have_font=  s   "" LLNN	0Y 7 7	9 	9 	9o	7::
<<>>/	:v||H7M7M	O 	O 	O 0044	" 	 	H%h	4@@@$&&tt ' [#&&00666r   r   )rQ   rR   rS   r   r   r0  r+  r<   propertyr!   r\   r   r   r   rT   rU   s   @r   r'  r'    s        /NM6- 6- 6- 6- 6- 6-p   X/ / / / / N N N N [N 7 7 7 7 [7 7 7 7 7r   r'  )?r  r,  sysr   r   pyglet.fontr   r   pyglet.imagepyglet.libs.win32.constants"pyglet.libs.win32.context_managersr   pyglet.libs.win32.typespyglet.libs.win32r   rB   r	   r{   r
   r   pyglet.utilr   optionsrm   r   r   r#   r*   r0   r'   GlyphRendererr5   rW   Fontr   pyglet.image.codecs.gdiplusr   r   r   r   r   r   r   TextRenderingHintAntiAliasr   %StringFormatFlagsDirectionRightToLeft"StringFormatFlagsDirectionVerticalr
  %StringFormatFlagsDisplayFormatControlStringFormatFlagsNoFontFallbackr  StringFormatFlagsNoWrapStringFormatFlagsLineLimitr	  r   	Structurer   r   r4  r5  r   r3  r'  rK   r   r   <module>r_     s  L                " " " " " "     ) ) ) ) = = = = = = % % % % @ @ @ @ @ @ @ @ 3 3 3 3 3 3      n\*- - - 
# # #7 7 7
 % % %. . . . .+ . . .2oI oI oI oI oI) oI oI oIb2H 2H 2H 2H 2H	 2H 2H 2Hl L K K K K K K K K K E E E E E E E E ! %& " $% !(2 %%/ "!+ (2 %", )3 &$ ' $     F   u u u u u- u u un 		e7 e7 e7 e7 e7) e7 e7 e7 e7 e7r   