- 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:
Marshall Greenblatt
2011-11-09 20:09:24 +00:00
parent 85ebe06965
commit 587eb7871d
17 changed files with 313 additions and 139 deletions

View File

@@ -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(

View File

@@ -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,

View File

@@ -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;
};