
    \
j7                         d dl Z d dlZd dlmZmZmZmZ d dlmZ d dl	Z
d dlmZmZmZ ej        Zej        Zej        Z G d dej                  Z G d dej                  ZdS )	    N)c_void_pc_int32byrefc_byte)base)cocoapykCTFontURLAttributeCGFloatc                   $     e Zd Z fdZd Z xZS )QuartzGlyphRendererc                 X    t                                          |           || _        d S N)super__init__font)selfr   	__class__s     L/DATA/AppData/hermes/venv/lib/python3.11/site-packages/pyglet/font/quartz.pyr   zQuartzGlyphRenderer.__init__5   s&    			    c                    | j         j        }t          t                              d dt          j        t          j                            }t                              |t          j	        |           t          t          
                    d t          j        |          |                    }t          t                              |                    }t                              |           t                              |           t          |          }t          j        |z  t#          t%          t&          t)          |                               }t          j        |z              }t                              ||||           |d         dk    rt/                      t/                      }
}	t1          t                              |t5          |	          t5          |
          d                     x}}t1          |	j        |
j        z             }d}|
j        }n-t                              |d|d |          }t                              |d|d |          }t=          t1          t?          j         |j!        j"                  dz             d          }t=          t1          t?          j         |j!        j#                  dz             d          }t1          t?          j$        |j%        j&                             dz   }t1          t?          j         |j%        j'                            dz
  }t1          tQ          |                    }d}d|z  }t          tR          *                                          }t          tR          +                    d |||||t          j,                            }tR          -                    |d           tR          .                    || |           t          /                    ||           t                              |           t          tR          0                    |                    }tR          1                    |          }t          tR          2                    |                    }t          tR          3                    |                    }t          4                    |          }tk          |z              }t          j6        d|          }t          7                    |||           tR          8                    |           tR          9                    |           t                              |           t                              |           tt          j;        <                    ||d||          }| j         =                    |          }|>                    |||           t#          |j?                  }|dd	         |d
d         z   |dd
         z   |d d         z   |_?        |S )N   r            TRGBA	            )@r   ctFontr   cfCFDictionaryCreateMutablekCFTypeDictionaryKeyCallBackskCFTypeDictionaryValueCallBacksCFDictionaryAddValuer   kCTFontAttributeNameCFAttributedStringCreateCFSTRct CTLineCreateWithAttributedString	CFReleaselenUniCharlistmapordstrCGGlyphCTFontGetGlyphsForCharactersr
   intCTLineGetTypographicBoundsr   valueCTFontGetBoundingRectsForGlyphsCTFontGetAdvancesForGlyphsmaxmathceilsizewidthheightfloororiginyxroundquartzCGColorSpaceCreateDeviceRGBCGBitmapContextCreatekCGImageAlphaPremultipliedLastCGContextSetShouldAntialiasCGContextSetTextPosition
CTLineDrawCGBitmapContextCreateImageCGImageGetBytesPerRowCGImageGetDataProviderCGDataProviderCopyDataCFDataGetLengthr   CFRangeCFDataGetBytesCGImageReleaseCGDataProviderReleasepygletimage	ImageDatacreate_glyphset_bearings
tex_coords)r   textr    
attributesstringlinecountcharsglyphsascentdescentadvancer=   r>   lsbbaselinerectbitsPerComponentbytesPerRow
colorSpacebitmapimageRefdataProvider	imageData
buffersizebuffer	byteRangeglyph_imageglyphts                                 r   renderzQuartzGlyphRenderer.render9   s    ! b::4BDdfh  gI  J  J  K  K


G,H&QQQ"55dGM$<O<OQ[\\]] ;;FCCDD
V
Z    D		5(4CD		0B0B+C+CD/E),,
''vuEEE !9>> &iiGF!""?"?eFmmUZ[bUcUcei"j"jkkkGe566FC}HH 55fauUUD 33FAvtUSSG DIdio66:;;Q??ETYty'7881<==qAAFDJt{}55666:Hdi..//!3C%..))G gf@@BBCC
&66 68 8 9 9 	**64888''h???
dF###
T F==fEEFF228<< = =h G GHHV::<HHII	''	22
:%((OAz22	
)Y777h'''$$Y///
V
Z   l,,UFFFKXX	&&{338S'222!""QrT7QqsV+a!f4q!u<r   )__name__
__module____qualname__r   rt   __classcell__r   s   @r   r   r   4   sN            _ _ _ _ _ _ _r   r   c                        e Zd ZeZi Zd Zd Zd fd	Ze	d             Z
e	d             Zd Zed	             Zed
             Z xZS )
QuartzFontc                     || j         vrd S | j         |         }|sd S ||v r||         S |                                D ]\  }}||z  r|c S d|v r|d         S t          |                                          d         S Nr   )_loaded_CGFont_tableitemsr.   values)r   familytraitsfontsrs   fs         r   #_lookup_font_with_family_and_traitsz.QuartzFont._lookup_font_with_family_and_traits   s     2224)&1 	4U??= kkmm 	 	FQz  ::8OELLNN##A&&r   c           	         t          t                              d dt          j        t          j                            }t          j        |          }t                              |t
          j        |           t          	                    |           t          |          }t          t                              d t
          j        t          |                              }|rt          t                              d dt          j        t          j                            }|rft                              |t
          j        |           t                              |t
          j        |           t          	                    |           t          	                    |           t          t                               |                    }t          	                    |           |S r}   )r   r!   r"   r#   r$   r   r(   r%   kCTFontFamilyNameAttributer+   r   CFNumberCreatekCFNumberSInt32Typer   kCTFontSymbolicTraitkCTFontTraitsAttributer)   $CTFontDescriptorCreateWithAttributes)	r   family_namer   r[   cfnameitraits	symTraits
traitsDict
descriptors	            r   _create_font_descriptorz"QuartzFont._create_font_descriptor   s   b::4BDdfh  gI  J  J  K  K
{++

G,NPVWWW
V&//R..tW5PRWX_R`R`aabb	 		$!"">">tQHhjl  kM  #N  #N  O  OJ )''
G4PR[\\\''
G4RT^___Z(((LL###bEEjQQRR

Z   r   FNc                 b   |rt          j        d           t                                                       |pd}|pd}||z  dz  }d}|r|t          j        z  }|r|t          j        z  }t          |          }|| _        | 	                    ||          }|r0t          t                              ||d d                     | _        nr|                     ||          }	t          t                              |	|d                     | _        t                               |	           | j        sJ d|z               t          t                              | j                            }
t          t	          j        |
                    | _        t                               |
           t+          t-          j        t                              | j                                      | _        t+          t-          j        t                              | j                                       | _        d S )Nz4The current font render does not support stretching.	Helvetica`   g      R@r   zCouldn't load font: )warningswarnr   r   r   kCTFontBoldTraitkCTFontItalicTraitr1   r   r   r   r)   CTFontCreateWithGraphicsFontr    r   CTFontCreateWithFontDescriptorr!   r+   CTFontCopyFamilyNamecfstring_to_string_family_namer4   r:   r;   CTFontGetAscentra   CTFontGetDescentrb   )r   namer<   bolditalicstretchdpir   cgFontr   r\   r   s              r   r   zQuartzFont.__init__   s     	RMPQQQ"{ iRczD   	/g..F 	1g00F4yy99$GG 	>"2#B#B64QUW[#\#\]]DKK 55dFCCJ"2#D#DZQUW[#\#\]]DKLL$$$;== 6 ===;"11$+>>?? :6 B BCC
V$)B$6$6t{$C$CDDEEDIb&9&9$+&F&FGGHHHr   c                    |                      | j        | j                  }t          t                              |t                              }|rXt          j        |d          }|	                                
                                }t                              |           |S t                              |           dS )NF)cacheUnknown)r   r   r   r   r)   CTFontDescriptorCopyAttributer	   r   ObjCInstancefileSystemRepresentationdecoder!   r+   )r   r   refurlfilepaths        r   filenamezQuartzFont.filename   s    11$)T[II
r77
DWXXYY 	&s%888C3355<<>>HLLO
Z   yr   c                     | j         S r   )r   r   s    r   r   zQuartzFont.name  s      r   c                 D    t                               | j                   d S r   )r!   r+   r    r   s    r   __del__zQuartzFont.__del__  s    
T[!!!!!r   c                     t          |          }|| j        v rdS t          j        |          }t	          t
                              |                    }t                              |           |rt                              |           dS dS )NTF)	r1   r~   r   r(   r   rD   CGFontCreateWithFontNamer!   r+   )clsr   cfstringcgfonts       r   	have_fontzQuartzFont.have_font  s    4yy3+++DD =&&&99(CCDD
X 	LL   4ur   c           	      F   t          t                              d |t          |                              }t          t                              |                    }t          t                              |                    }t                              |           t                              |           t          t          
                    |dd d                     }t          t                              |                    }t          t          j        |                    }t                              |           t          t                              |                    }t          t          j        |                    }t                              |           t                              |          }	t                              |           || j        vr
i | j        |<   || j        |         |	<   || j        vr
i | j        |<   || j        |         |	<   d S )Nr   )r   r!   CFDataCreater,   rD   CGDataProviderCreateWithCFDataCGFontCreateWithDataProviderr+   rS   r)   r   r   r1   r   r   CTFontCopyFullNameCTFontGetSymbolicTraitsr~   )
r   datadataRefproviderr   r    r\   
familyNamefullNamer   s
             r   add_font_datazQuartzFont.add_font_data   s    2??4s4yyAABBFAA'JJKK&==hGGHH
W$$X... "99&!T4PPQQ "11&99::3F;;<<

V"//7788w1&99::
V++F33
V S55535C$Z07= ,V4333313C$X.5; *6222r   )FFFN)ru   rv   rw   r   glyph_renderer_classr~   r   r   r   propertyr   r   r   classmethodr   r   rx   ry   s   @r   r{   r{      s        .' ' '6  2)I )I )I )I )I )IV 
 
 X
 ! ! X!" " "   [ %< %< [%< %< %< %< %<r   r{   )r:   r   ctypesr   r   r   r   pyglet.fontr   pyglet.imagerT   pyglet.libs.darwinr   r	   r
   r!   r)   rD   GlyphRendererr   Fontr{    r   r   <module>r      s  L   3 3 3 3 3 3 3 3 3 3 3 3           D D D D D D D D D DZZ	d d d d d$, d d dNk< k< k< k< k< k< k< k< k< k<r   