
    ^jd                         d dl mZmZ d dlmZmZmZ d dlT d dlm	Z	m
Z
mZ d dlmZ d dlmZ d dlmZ d dlmZ  G d	 d
e          Zd Zd ZdS )    )c_void_pc_ubyte)	ImageData	AnimationAnimationFrame)*)cfquartz
NSMakeRect)cfnumber_to_number)kCGImageAlphaPremultipliedLast)kCGImagePropertyGIFDictionary)kCGImagePropertyGIFDelayTimec                   ,    e Zd Zd Zd Zd Zd Zd ZdS )QuartzImageDecoderc                 
    g dS )N)z.bmpz.cur.gifz.icoz.jp2z.jpgz.jpegz.pcxz.pngz.tgaz.tifz.tiffz.xbmz.xpm selfs    U/home/agentuser/manim-venv/lib/python3.11/site-packages/pyglet/image/codecs/quartz.pyget_file_extensionsz&QuartzImageDecoder.get_file_extensions   s    K K K 	K    c                     dgS )Nr   r   r   s    r   get_animation_file_extensionsz0QuartzImageDecoder.get_animation_file_extensions   s	    xr   c                 ^   t          t          j        ||d                     }d}t          t          j                              }d}t          j        |          }t          j        |          }d|z  }	||	z  }
t          |
z              }t          t          j        |||||	|t                              }t          j	        |t          dd||          |           t          j        |           t          j        |           t          j        |           |	}t          |||||           S )NRGBA      r   )r   r
   CGImageSourceCreateImageAtIndexCGColorSpaceCreateDeviceRGBCGImageGetWidthCGImageGetHeightr   CGBitmapContextCreater   CGContextDrawImager   CGImageReleaseCGContextReleaseCGColorSpaceReleaser   )r   	sourceRefindeximageRefformatrgbColorSpacebitsPerComponentwidthheightbytesPerRow
bufferSizebufferbitmappitchs                 r   *_get_pyglet_ImageData_from_source_at_indexz=QuartzImageDecoder._get_pyglet_ImageData_from_source_at_index   s3   FB9eUYZZ[[  !C!E!EFF&x00(22%i k)
J&))
 &6v7<f7G7B7D7UW W X X 	!&*Qqv*F*FQQQh''''''"=111???r   c           	      r   |st          |d          }|                                }t          t          j        d |t          |                              }t          t          j        |d                     }|                     |d          }t          j	        |           t          j	        |           |S )Nrbr   )
openreadr   r	   CFDataCreatelenr
   CGImageSourceCreateWithDatar6   	CFRelease)r   filenamefile
file_bytesdatar)   images          r   decodezQuartzImageDecoder.decode:   s     	($''DYY[[
j#j//JJKK V?dKKLL	??	1MM
T
Yr   c           	         |st          |d          }|                                }t          t          j        d |t          |                              }t          t          j        |d                     }t          j        |          }g }t          |          D ]}d}	t          t          j
        ||d                     }
t          j        |
t                    rut          t          j        |
t                              }t          j        |t                    r4t          t          t          j        |t                                        }	t          j        |
           |                     ||          }|                    t'          ||	                     t          j        |           t          j        |           t)          |          S )Nr8   g?)r9   r:   r   r	   r;   r<   r
   r=   CGImageSourceGetCountrange"CGImageSourceCopyPropertiesAtIndexCFDictionaryContainsKeyr   CFDictionaryGetValuer   r   r>   r6   appendr   r   )r   r?   r@   rA   rB   r)   countframesr*   durationprops	gif_propsrC   s                r   decode_animationz#QuartzImageDecoder.decode_animationI   s    	($''DYY[[
j#j//JJKKV?dKKLL	 ,Y775\\ 	= 	=EHVFyRWY]^^__E)%1NOO ~$R%<UDa%b%bcc	-i9UVV ~1(2;RS\^z;{;{2|2|}}HLCCIuUUEMM>%::<<<<
T
Y   r   N)__name__
__module____qualname__r   r   r6   rD   rQ   r   r   r   r   r      sf        K K K
  "@ "@ "@H  ! ! ! ! !r   r   c                       t                      gS N)r   r   r   r   get_decodersrW   i   s    !!##r   c                      g S rV   r   r   r   r   get_encodersrY   l   s    Ir   N)ctypesr   r   pyglet.imager   r   r   pyglet.image.codecspyglet.libs.darwin.cocoapyr	   r
   r   r   r   r   r   ImageDecoderr   rW   rY   r   r   r   <module>r_      s   $ $ $ $ $ $ $ $ = = = = = = = = = = ! ! ! ! = = = = = = = = = = 9 9 9 9 9 9 E E E E E E D D D D D D C C C C C CY! Y! Y! Y! Y! Y! Y! Y!x$ $ $    r   