mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-06-05 21:39:12 +02:00
Implement off-screen rendering support using delegated rendering (issue #1257).
This implementation supports both GPU compositing and software compositing (used when GPU is not supported or when passing `--disable-gpu --disable-gpu-compositing` command-line flags). GPU-accelerated features (WebGL and 3D CSS) that did not work with the previous off-screen rendering implementation do work with this implementation when GPU support is available. Rendering now operates on a per-frame basis. The frame rate is configurable via CefBrowserSettings.windowless_frame_rate up to a maximum of 60fps (potentially limited by how fast the system can generate new frames). CEF generates a bitmap from the compositor backing and passes it to CefRenderHandler::OnPaint. The previous CefRenderHandler/CefBrowserHost API for off-screen rendering has been restored mostly as-is with some minor changes: - CefBrowserHost::Invalidate no longer accepts a CefRect region argument. Instead of invalidating a specific region it now triggers generation of a new frame. - The |dirtyRects| argument to CefRenderHandler::OnPaint will now always be a single CefRect representing the whole view (frame) size. Previously, invalidated regions were listed separately. - Linux: CefBrowserHost::SendKeyEvent now expects X11 event information instead of GTK event information. See cefclient for an example of converting GTK events to the necessary format. - Sizes passed to the CefRenderHandler OnPaint and OnPopupSize methods are now already DPI scaled. Previously, the client had to perform DPI scaling. - Includes drag&drop implementation from issue #1032. - Includes unit test fixes from issue #1245. git-svn-id: https://chromiumembedded.googlecode.com/svn/trunk@1751 5089003a-bbd8-11dd-ad1f-f1f9622dbc98
This commit is contained in:
@ -11,11 +11,54 @@
|
||||
//
|
||||
|
||||
#include "libcef_dll/cpptoc/drag_data_cpptoc.h"
|
||||
#include "libcef_dll/cpptoc/stream_writer_cpptoc.h"
|
||||
#include "libcef_dll/transfer_util.h"
|
||||
|
||||
|
||||
// GLOBAL FUNCTIONS - Body may be edited by hand.
|
||||
|
||||
CEF_EXPORT cef_drag_data_t* cef_drag_data_create() {
|
||||
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
|
||||
|
||||
// Execute
|
||||
CefRefPtr<CefDragData> _retval = CefDragData::Create();
|
||||
|
||||
// Return type: refptr_same
|
||||
return CefDragDataCppToC::Wrap(_retval);
|
||||
}
|
||||
|
||||
|
||||
// MEMBER FUNCTIONS - Body may be edited by hand.
|
||||
|
||||
struct _cef_drag_data_t* CEF_CALLBACK drag_data_clone(
|
||||
struct _cef_drag_data_t* self) {
|
||||
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
|
||||
|
||||
DCHECK(self);
|
||||
if (!self)
|
||||
return NULL;
|
||||
|
||||
// Execute
|
||||
CefRefPtr<CefDragData> _retval = CefDragDataCppToC::Get(self)->Clone();
|
||||
|
||||
// Return type: refptr_same
|
||||
return CefDragDataCppToC::Wrap(_retval);
|
||||
}
|
||||
|
||||
int CEF_CALLBACK drag_data_is_read_only(struct _cef_drag_data_t* self) {
|
||||
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
|
||||
|
||||
DCHECK(self);
|
||||
if (!self)
|
||||
return 0;
|
||||
|
||||
// Execute
|
||||
bool _retval = CefDragDataCppToC::Get(self)->IsReadOnly();
|
||||
|
||||
// Return type: bool
|
||||
return _retval;
|
||||
}
|
||||
|
||||
int CEF_CALLBACK drag_data_is_link(struct _cef_drag_data_t* self) {
|
||||
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
|
||||
|
||||
@ -163,6 +206,23 @@ cef_string_userfree_t CEF_CALLBACK drag_data_get_file_name(
|
||||
return _retval.DetachToUserFree();
|
||||
}
|
||||
|
||||
size_t CEF_CALLBACK drag_data_get_file_contents(struct _cef_drag_data_t* self,
|
||||
struct _cef_stream_writer_t* writer) {
|
||||
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
|
||||
|
||||
DCHECK(self);
|
||||
if (!self)
|
||||
return 0;
|
||||
// Unverified params: writer
|
||||
|
||||
// Execute
|
||||
size_t _retval = CefDragDataCppToC::Get(self)->GetFileContents(
|
||||
CefStreamWriterCppToC::Unwrap(writer));
|
||||
|
||||
// Return type: simple
|
||||
return _retval;
|
||||
}
|
||||
|
||||
int CEF_CALLBACK drag_data_get_file_names(struct _cef_drag_data_t* self,
|
||||
cef_string_list_t names) {
|
||||
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
|
||||
@ -191,11 +251,127 @@ int CEF_CALLBACK drag_data_get_file_names(struct _cef_drag_data_t* self,
|
||||
return _retval;
|
||||
}
|
||||
|
||||
void CEF_CALLBACK drag_data_set_link_url(struct _cef_drag_data_t* self,
|
||||
const cef_string_t* url) {
|
||||
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
|
||||
|
||||
DCHECK(self);
|
||||
if (!self)
|
||||
return;
|
||||
// Unverified params: url
|
||||
|
||||
// Execute
|
||||
CefDragDataCppToC::Get(self)->SetLinkURL(
|
||||
CefString(url));
|
||||
}
|
||||
|
||||
void CEF_CALLBACK drag_data_set_link_title(struct _cef_drag_data_t* self,
|
||||
const cef_string_t* title) {
|
||||
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
|
||||
|
||||
DCHECK(self);
|
||||
if (!self)
|
||||
return;
|
||||
// Unverified params: title
|
||||
|
||||
// Execute
|
||||
CefDragDataCppToC::Get(self)->SetLinkTitle(
|
||||
CefString(title));
|
||||
}
|
||||
|
||||
void CEF_CALLBACK drag_data_set_link_metadata(struct _cef_drag_data_t* self,
|
||||
const cef_string_t* data) {
|
||||
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
|
||||
|
||||
DCHECK(self);
|
||||
if (!self)
|
||||
return;
|
||||
// Unverified params: data
|
||||
|
||||
// Execute
|
||||
CefDragDataCppToC::Get(self)->SetLinkMetadata(
|
||||
CefString(data));
|
||||
}
|
||||
|
||||
void CEF_CALLBACK drag_data_set_fragment_text(struct _cef_drag_data_t* self,
|
||||
const cef_string_t* text) {
|
||||
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
|
||||
|
||||
DCHECK(self);
|
||||
if (!self)
|
||||
return;
|
||||
// Unverified params: text
|
||||
|
||||
// Execute
|
||||
CefDragDataCppToC::Get(self)->SetFragmentText(
|
||||
CefString(text));
|
||||
}
|
||||
|
||||
void CEF_CALLBACK drag_data_set_fragment_html(struct _cef_drag_data_t* self,
|
||||
const cef_string_t* html) {
|
||||
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
|
||||
|
||||
DCHECK(self);
|
||||
if (!self)
|
||||
return;
|
||||
// Unverified params: html
|
||||
|
||||
// Execute
|
||||
CefDragDataCppToC::Get(self)->SetFragmentHtml(
|
||||
CefString(html));
|
||||
}
|
||||
|
||||
void CEF_CALLBACK drag_data_set_fragment_base_url(struct _cef_drag_data_t* self,
|
||||
const cef_string_t* base_url) {
|
||||
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
|
||||
|
||||
DCHECK(self);
|
||||
if (!self)
|
||||
return;
|
||||
// Unverified params: base_url
|
||||
|
||||
// Execute
|
||||
CefDragDataCppToC::Get(self)->SetFragmentBaseURL(
|
||||
CefString(base_url));
|
||||
}
|
||||
|
||||
void CEF_CALLBACK drag_data_reset_file_contents(struct _cef_drag_data_t* self) {
|
||||
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
|
||||
|
||||
DCHECK(self);
|
||||
if (!self)
|
||||
return;
|
||||
|
||||
// Execute
|
||||
CefDragDataCppToC::Get(self)->ResetFileContents();
|
||||
}
|
||||
|
||||
void CEF_CALLBACK drag_data_add_file(struct _cef_drag_data_t* self,
|
||||
const cef_string_t* path, const cef_string_t* display_name) {
|
||||
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
|
||||
|
||||
DCHECK(self);
|
||||
if (!self)
|
||||
return;
|
||||
// Verify param: path; type: string_byref_const
|
||||
DCHECK(path);
|
||||
if (!path)
|
||||
return;
|
||||
// Unverified params: display_name
|
||||
|
||||
// Execute
|
||||
CefDragDataCppToC::Get(self)->AddFile(
|
||||
CefString(path),
|
||||
CefString(display_name));
|
||||
}
|
||||
|
||||
|
||||
// CONSTRUCTOR - Do not edit by hand.
|
||||
|
||||
CefDragDataCppToC::CefDragDataCppToC(CefDragData* cls)
|
||||
: CefCppToC<CefDragDataCppToC, CefDragData, cef_drag_data_t>(cls) {
|
||||
struct_.struct_.clone = drag_data_clone;
|
||||
struct_.struct_.is_read_only = drag_data_is_read_only;
|
||||
struct_.struct_.is_link = drag_data_is_link;
|
||||
struct_.struct_.is_fragment = drag_data_is_fragment;
|
||||
struct_.struct_.is_file = drag_data_is_file;
|
||||
@ -206,7 +382,16 @@ CefDragDataCppToC::CefDragDataCppToC(CefDragData* cls)
|
||||
struct_.struct_.get_fragment_html = drag_data_get_fragment_html;
|
||||
struct_.struct_.get_fragment_base_url = drag_data_get_fragment_base_url;
|
||||
struct_.struct_.get_file_name = drag_data_get_file_name;
|
||||
struct_.struct_.get_file_contents = drag_data_get_file_contents;
|
||||
struct_.struct_.get_file_names = drag_data_get_file_names;
|
||||
struct_.struct_.set_link_url = drag_data_set_link_url;
|
||||
struct_.struct_.set_link_title = drag_data_set_link_title;
|
||||
struct_.struct_.set_link_metadata = drag_data_set_link_metadata;
|
||||
struct_.struct_.set_fragment_text = drag_data_set_fragment_text;
|
||||
struct_.struct_.set_fragment_html = drag_data_set_fragment_html;
|
||||
struct_.struct_.set_fragment_base_url = drag_data_set_fragment_base_url;
|
||||
struct_.struct_.reset_file_contents = drag_data_reset_file_contents;
|
||||
struct_.struct_.add_file = drag_data_add_file;
|
||||
}
|
||||
|
||||
#ifndef NDEBUG
|
||||
|
Reference in New Issue
Block a user