# Copyright (c) 2013 CEF Python, see the Authors file.
# All rights reserved. Licensed under BSD 3-clause license.
# Project website: https://github.com/cztomczak/cefpython
include "cefpython.pyx"
cdef PaintBuffer CreatePaintBuffer(const void* buffer_, int width, int height):
cdef PaintBuffer paintBuffer = PaintBuffer()
paintBuffer.buffer = buffer_
paintBuffer.width = width
paintBuffer.height = height
paintBuffer.length = width*height*4
return paintBuffer
cdef class PaintBuffer:
cdef const void* buffer
cdef int width
cdef int height
cdef Py_ssize_t length
cpdef uintptr_t GetPointer(self) except *:
# BEFORE MODIFYING CODE:
# There is an exact copy of this method named "GetIntPointer"
# (deprecated).
return self.buffer
cpdef object GetBytes(self, str mode="bgra", str origin="top-left"):
# BEFORE MODIFYING CODE:
# There is an exact copy of this method named "GetString" (deprecated).
cdef void* dest
cdef py_bool dest_alloced = False
cdef object ret
origin = origin.lower()
mode = mode.lower()
assert origin in ("top-left", "bottom-left"), "Invalid origin"
assert mode in ("bgra", "rgba"), "Invalid mode"
# To get rid of a Cython warning:
# | '__pyx_v_dest' may be used uninitialized in this function
dest = malloc(0)
if mode == "rgba":
if not dest_alloced:
dest = malloc(self.length)
dest_alloced = True
SwapBufferFromBgraToRgba(dest, self.buffer, self.width,
self.height)
if origin == "bottom-left":
if not dest_alloced:
dest = malloc(self.length)
dest_alloced = True
FlipBufferUpsideDown(dest, self.buffer, self.width, self.height)
if dest_alloced:
ret = (dest)[:self.length]
free(dest)
return ret
else:
return (self.buffer)[:self.length]
# ---- DEPRECATED ---------------------------------------------------------
# TODO: remove deprecated methods from API reference during next release.
# TODO: remove deprecated methods after users had time to update code.
cpdef uintptr_t GetIntPointer(self) except *:
"""@deprecated."""
return self.buffer
cpdef object GetString(self, str mode="bgra", str origin="top-left"):
"""@deprecated."""
cdef void* dest
cdef py_bool dest_alloced = False
cdef object ret
origin = origin.lower()
mode = mode.lower()
assert origin in ("top-left", "bottom-left"), "Invalid origin"
assert mode in ("bgra", "rgba"), "Invalid mode"
# To get rid of a Cython warning:
# | '__pyx_v_dest' may be used uninitialized in this function
dest = malloc(0)
if mode == "rgba":
if not dest_alloced:
dest = malloc(self.length)
dest_alloced = True
SwapBufferFromBgraToRgba(dest, self.buffer, self.width,
self.height)
if origin == "bottom-left":
if not dest_alloced:
dest = malloc(self.length)
dest_alloced = True
FlipBufferUpsideDown(dest, self.buffer, self.width, self.height)
if dest_alloced:
ret = (dest)[:self.length]
free(dest)
return ret
else:
return (self.buffer)[:self.length]