# Copyright (c) 2012-2014 The CEF Python authors. All rights reserved. # License: New BSD License. # Website: http://code.google.com/p/cefpython/ include "cefpython.pyx" cimport cef_types # cef_paint_element_type_t, PaintElementType PET_VIEW = cef_types.PET_VIEW PET_POPUP = cef_types.PET_POPUP cdef public cpp_bool RenderHandler_GetRootScreenRect( CefRefPtr[CefBrowser] cefBrowser, CefRect& cefRect ) except * with gil: cdef PyBrowser pyBrowser cdef list pyRect = [] cdef py_bool ret try: pyBrowser = GetPyBrowser(cefBrowser) callback = pyBrowser.GetClientCallback("GetRootScreenRect") if callback: ret = callback(pyBrowser, pyRect) if ret: assert (pyRect and len(pyRect) == 4), "rectangle not provided" cefRect.x = pyRect[0] cefRect.y = pyRect[1] cefRect.width = pyRect[2] cefRect.height = pyRect[3] return True else: return False else: return False except: (exc_type, exc_value, exc_trace) = sys.exc_info() sys.excepthook(exc_type, exc_value, exc_trace) cdef public cpp_bool RenderHandler_GetViewRect( CefRefPtr[CefBrowser] cefBrowser, CefRect& cefRect ) except * with gil: cdef PyBrowser pyBrowser cdef list pyRect = [] cdef py_bool ret try: pyBrowser = GetPyBrowser(cefBrowser) callback = pyBrowser.GetClientCallback("GetViewRect") if callback: ret = callback(pyBrowser, pyRect) if ret: assert (pyRect and len(pyRect) == 4), "rectangle not provided" cefRect.x = pyRect[0] cefRect.y = pyRect[1] cefRect.width = pyRect[2] cefRect.height = pyRect[3] return True else: return False else: return False except: (exc_type, exc_value, exc_trace) = sys.exc_info() sys.excepthook(exc_type, exc_value, exc_trace) cdef public cpp_bool RenderHandler_GetScreenRect( CefRefPtr[CefBrowser] cefBrowser, CefRect& cefRect ) except * with gil: cdef PyBrowser pyBrowser cdef list pyRect = [] cdef py_bool ret try: pyBrowser = GetPyBrowser(cefBrowser) callback = pyBrowser.GetClientCallback("GetScreenRect") if callback: ret = callback(pyBrowser, pyRect) if ret: assert (pyRect and len(pyRect) == 4), ( "rectangle not provided or invalid") cefRect.x = pyRect[0] cefRect.y = pyRect[1] cefRect.width = pyRect[2] cefRect.height = pyRect[3] return True else: return False else: return False except: (exc_type, exc_value, exc_trace) = sys.exc_info() sys.excepthook(exc_type, exc_value, exc_trace) cdef public cpp_bool RenderHandler_GetScreenPoint( CefRefPtr[CefBrowser] cefBrowser, int viewX, int viewY, int& screenX, int& screenY ) except * with gil: cdef PyBrowser pyBrowser cdef list screenCoordinates = [] cdef py_bool ret try: pyBrowser = GetPyBrowser(cefBrowser) callback = pyBrowser.GetClientCallback("GetScreenPoint") if callback: ret = callback(pyBrowser, viewX, viewY, screenCoordinates) if ret: assert (screenCoordinates and len(screenCoordinates) == 2), ( "screenCoordinates not provided or invalid") (&screenX)[0] = int(screenCoordinates[0]) (&screenY)[0] = int(screenCoordinates[1]) return True else: return False else: return False except: (exc_type, exc_value, exc_trace) = sys.exc_info() sys.excepthook(exc_type, exc_value, exc_trace) cdef public cpp_bool RenderHandler_GetScreenInfo( CefRefPtr[CefBrowser] cefBrowser, CefScreenInfo& cefScreenInfo ) except * with gil: # Not yet implemented. return False cdef public void RenderHandler_OnPopupShow( CefRefPtr[CefBrowser] cefBrowser, cpp_bool show ) except * with gil: cdef PyBrowser pyBrowser try: pyBrowser = GetPyBrowser(cefBrowser) callback = pyBrowser.GetClientCallback("OnPopupShow") if callback: callback(pyBrowser, show) except: (exc_type, exc_value, exc_trace) = sys.exc_info() sys.excepthook(exc_type, exc_value, exc_trace) cdef public void RenderHandler_OnPopupSize( CefRefPtr[CefBrowser] cefBrowser, const CefRect& cefRect ) except * with gil: cdef PyBrowser pyBrowser cdef list pyRect try: pyBrowser = GetPyBrowser(cefBrowser) callback = pyBrowser.GetClientCallback("OnPopupSize") if callback: pyRect = [cefRect.x, cefRect.y, cefRect.width, cefRect.height] callback(pyBrowser, pyRect) except: (exc_type, exc_value, exc_trace) = sys.exc_info() sys.excepthook(exc_type, exc_value, exc_trace) cdef public void RenderHandler_OnPaint( CefRefPtr[CefBrowser] cefBrowser, cef_types.cef_paint_element_type_t paintElementType, cpp_vector[CefRect]& cefDirtyRects, const void* cefBuffer, int width, int height ) except * with gil: cdef PyBrowser pyBrowser cdef list pyDirtyRects = [] cdef list pyRect # TODO: cefDirtyRects should be const, but const_iterator is # not yet implemented in libcpp.vector. cdef cpp_vector[CefRect].iterator iterator cdef CefRect cefRect cdef PaintBuffer paintBuffer try: pyBrowser = GetPyBrowser(cefBrowser) iterator = cefDirtyRects.begin() while iterator != cefDirtyRects.end(): cefRect = deref(iterator) pyRect = [cefRect.x, cefRect.y, cefRect.width, cefRect.height] pyDirtyRects.append(pyRect) preinc(iterator) # In CEF 1 width and height were fetched using GetSize(), # but in CEF 3 they are passed as arguments to OnPaint(). # OFF: | (width, height) = pyBrowser.GetSize(paintElementType) paintBuffer = CreatePaintBuffer(cefBuffer, width, height) callback = pyBrowser.GetClientCallback("OnPaint") if callback: callback(pyBrowser, paintElementType, pyDirtyRects, paintBuffer, width, height) else: return except: (exc_type, exc_value, exc_trace) = sys.exc_info() sys.excepthook(exc_type, exc_value, exc_trace) cdef public void RenderHandler_OnCursorChange( CefRefPtr[CefBrowser] cefBrowser, CefCursorHandle cursor ) except * with gil: cdef PyBrowser pyBrowser try: pyBrowser = GetPyBrowser(cefBrowser) callback = pyBrowser.GetClientCallback("OnCursorChange") if callback: callback(pyBrowser, cursor) except: (exc_type, exc_value, exc_trace) = sys.exc_info() sys.excepthook(exc_type, exc_value, exc_trace) cdef public void RenderHandler_OnScrollOffsetChanged( CefRefPtr[CefBrowser] cefBrowser ) except * with gil: cdef PyBrowser pyBrowser try: pyBrowser = GetPyBrowser(cefBrowser) callback = pyBrowser.GetClientCallback("OnScrollOffsetChanged") if callback: callback(pyBrowser) except: (exc_type, exc_value, exc_trace) = sys.exc_info() sys.excepthook(exc_type, exc_value, exc_trace)