mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-06-05 21:39:12 +02:00
- Win: Improve redraw and scrolling performance (issue #360).
- Win: Fix CefBrowser::GetImage() and add "Get Image" example to cefclient (issue #377). - Pass the list of dirty rectangles to CefRenderHandler::Paint(). (issue #415). git-svn-id: https://chromiumembedded.googlecode.com/svn/trunk@368 5089003a-bbd8-11dd-ad1f-f1f9622dbc98
This commit is contained in:
@@ -94,18 +94,22 @@ void CEF_CALLBACK render_handler_on_popup_size(
|
||||
|
||||
void CEF_CALLBACK render_handler_on_paint(struct _cef_render_handler_t* self,
|
||||
cef_browser_t* browser, enum cef_paint_element_type_t type,
|
||||
const cef_rect_t* dirtyRect, const void* buffer)
|
||||
size_t dirtyRectCount, cef_rect_t const* dirtyRects, const void* buffer)
|
||||
{
|
||||
DCHECK(self);
|
||||
DCHECK(browser);
|
||||
DCHECK(dirtyRect);
|
||||
DCHECK(dirtyRectCount > 0);
|
||||
DCHECK(dirtyRects);
|
||||
DCHECK(buffer);
|
||||
if (!self || !browser || !dirtyRect || !buffer)
|
||||
if (!self || !browser || dirtyRectCount == 0 || !dirtyRects || !buffer)
|
||||
return;
|
||||
|
||||
CefRect rect(*dirtyRect);
|
||||
CefRenderHandler::RectList rectList;
|
||||
for (size_t i = 0; i < dirtyRectCount; ++i)
|
||||
rectList.push_back(dirtyRects[i]);
|
||||
|
||||
return CefRenderHandlerCppToC::Get(self)->OnPaint(
|
||||
CefBrowserCToCpp::Wrap(browser), type, rect, buffer);
|
||||
CefBrowserCToCpp::Wrap(browser), type, rectList, buffer);
|
||||
}
|
||||
|
||||
void CEF_CALLBACK render_handler_on_cursor_change(
|
||||
|
@@ -66,13 +66,25 @@ void CefRenderHandlerCToCpp::OnPopupSize(CefRefPtr<CefBrowser> browser,
|
||||
}
|
||||
|
||||
void CefRenderHandlerCToCpp::OnPaint(CefRefPtr<CefBrowser> browser,
|
||||
PaintElementType type, const CefRect& dirtyRect, const void* buffer)
|
||||
PaintElementType type, const RectList& dirtyRects, const void* buffer)
|
||||
{
|
||||
if (CEF_MEMBER_MISSING(struct_, on_paint))
|
||||
return;
|
||||
|
||||
return struct_->on_paint(struct_, CefBrowserCppToC::Wrap(browser), type,
|
||||
&dirtyRect, buffer);
|
||||
const size_t rectCt = dirtyRects.size();
|
||||
DCHECK(rectCt > 0);
|
||||
if (rectCt == 0)
|
||||
return;
|
||||
|
||||
cef_rect_t* rects = new cef_rect_t[rectCt];
|
||||
RectList::const_iterator it = dirtyRects.begin();
|
||||
for (size_t i = 0; it != dirtyRects.end(); ++it, ++i)
|
||||
rects[i] = *it;
|
||||
|
||||
struct_->on_paint(struct_, CefBrowserCppToC::Wrap(browser), type, rectCt,
|
||||
rects, buffer);
|
||||
|
||||
delete [] rects;
|
||||
}
|
||||
|
||||
void CefRenderHandlerCToCpp::OnCursorChange(CefRefPtr<CefBrowser> browser,
|
||||
|
@@ -43,7 +43,7 @@ public:
|
||||
virtual void OnPopupSize(CefRefPtr<CefBrowser> browser,
|
||||
const CefRect& rect) OVERRIDE;
|
||||
virtual void OnPaint(CefRefPtr<CefBrowser> browser, PaintElementType type,
|
||||
const CefRect& dirtyRect, const void* buffer) OVERRIDE;
|
||||
const RectList& dirtyRects, const void* buffer) OVERRIDE;
|
||||
virtual void OnCursorChange(CefRefPtr<CefBrowser> browser,
|
||||
CefCursorHandle cursor) OVERRIDE;
|
||||
};
|
||||
|
Reference in New Issue
Block a user