use electron nativewindow

This commit is contained in:
Heilig Benedek 2016-07-27 14:36:22 +02:00
parent 8392ece321
commit a39bb35744
6 changed files with 34 additions and 11 deletions

View file

@ -313,10 +313,12 @@ WebContents::WebContents(v8::Isolate* isolate,
} else {
content::WebContents::CreateParams params(session->browser_context());
params.view = new OffScreenWebContentsView();
params.delegate_view = (content::RenderViewHostDelegateView *)params.view;
auto view = new OffScreenWebContentsView();
params.view = view;
params.delegate_view = view;
web_contents = content::WebContents::Create(params);
view->SetWebContents(web_contents);
}
Observe(web_contents);

View file

@ -1257,13 +1257,13 @@ void NativeWindowViews::HandleKeyboardEvent(
}
}
gfx::Size NativeWindowViews::GetMinimumSize() {
/*gfx::Size NativeWindowViews::GetMinimumSize() {
return NativeWindow::GetMinimumSize();
}
gfx::Size NativeWindowViews::GetMaximumSize() {
return NativeWindow::GetMaximumSize();
}
}*/
bool NativeWindowViews::AcceleratorPressed(const ui::Accelerator& accelerator) {
return accelerator_util::TriggerAcceleratorTableCommand(

View file

@ -9,7 +9,7 @@
namespace atom {
OffScreenWebContentsView::OffScreenWebContentsView() {
OffScreenWebContentsView::OffScreenWebContentsView() : web_contents_(nullptr) {
// std::cout << "OffScreenWebContentsView" << std::endl;
//std::this_thread::sleep_for(std::chrono::milliseconds(10000));
}
@ -17,6 +17,11 @@ OffScreenWebContentsView::~OffScreenWebContentsView() {
// std::cout << "~OffScreenWebContentsView" << std::endl;
}
void OffScreenWebContentsView::SetWebContents(
content::WebContents* web_contents) {
web_contents_ = web_contents;
}
// Returns the native widget that contains the contents of the tab.
gfx::NativeView OffScreenWebContentsView::GetNativeView() const{
// std::cout << "GetNativeView" << std::endl;
@ -93,6 +98,7 @@ gfx::Rect OffScreenWebContentsView::GetViewBounds() const{
void OffScreenWebContentsView::CreateView(
const gfx::Size& initial_size, gfx::NativeView context){
std::cout << context << std::endl;
// std::cout << "CreateView" << std::endl;
// std::cout << initial_size.width() << "x" << initial_size.height() << std::endl;
}
@ -109,7 +115,8 @@ content::RenderWidgetHostViewBase*
OffScreenWebContentsView::CreateViewForWidget(
content::RenderWidgetHost* render_widget_host, bool is_guest_view_hack){
// std::cout << "CreateViewForWidget" << std::endl;
view_ = new OffScreenWindow(render_widget_host);
auto relay = NativeWindowRelay::FromWebContents(web_contents_);
view_ = new OffScreenWindow(render_widget_host, relay->window.get());
return view_;
}
@ -118,7 +125,8 @@ content::RenderWidgetHostViewBase*
OffScreenWebContentsView::CreateViewForPopupWidget(
content::RenderWidgetHost* render_widget_host){
// std::cout << "CreateViewForPopupWidget" << std::endl;
view_ = new OffScreenWindow(render_widget_host);
auto relay = NativeWindowRelay::FromWebContents(web_contents_);
view_ = new OffScreenWindow(render_widget_host, relay->window.get());
return view_;
}

View file

@ -7,6 +7,7 @@
#include "content/browser/renderer_host/render_view_host_delegate_view.h"
#include "content/browser/web_contents/web_contents_view.h"
#include "content/public/browser/web_contents.h"
namespace atom {
@ -15,6 +16,8 @@ class OffScreenWebContentsView : public content::WebContentsView,
public:
OffScreenWebContentsView();
~OffScreenWebContentsView();
void SetWebContents(content::WebContents*);
gfx::NativeView GetNativeView() const override;
gfx::NativeView GetContentNativeView() const override;
@ -61,6 +64,7 @@ public:
private:
content::RenderWidgetHostViewBase* view_;
content::WebContents* web_contents_;
};
} // namespace atom

View file

@ -19,6 +19,7 @@
#include "base/location.h"
#include "base/time/time.h"
#include "ui/gfx/native_widget_types.h"
#include "ui/views/widget/widget.h"
#include <iostream>
#include <chrono>
#include <thread>
@ -399,8 +400,10 @@ class CefBeginFrameTimer : public cc::DelayBasedTimeSourceClient {
DISALLOW_COPY_AND_ASSIGN(CefBeginFrameTimer);
};
OffScreenWindow::OffScreenWindow(content::RenderWidgetHost* host)
OffScreenWindow::OffScreenWindow(
content::RenderWidgetHost* host, NativeWindow* native_window)
: render_widget_host_(content::RenderWidgetHostImpl::From(host)),
native_window_(native_window),
software_output_device_(NULL),
frame_rate_threshold_ms_(0),
scale_factor_(1.0f),
@ -417,7 +420,8 @@ OffScreenWindow::OffScreenWindow(content::RenderWidgetHost* host)
root_layer_.reset(new ui::Layer(ui::LAYER_SOLID_COLOR));
CreatePlatformWidget();
//CreatePlatformWidget();
compositor_widget_ = native_window_->GetAcceleratedWidget();
#if !defined(OS_MACOSX)
// On OS X the ui::Compositor is created/owned by the platform view.
@ -547,7 +551,9 @@ gfx::Vector2dF OffScreenWindow::GetLastScrollOffset() const {
gfx::NativeView OffScreenWindow::GetNativeView() const {
// std::cout << "GetNativeView" << std::endl;
return gfx::NativeView();
auto widget = views::Widget::GetWidgetForNativeWindow(
native_window_->GetNativeWindow());
return widget->GetNativeView();
}
gfx::NativeViewAccessible OffScreenWindow::GetNativeViewAccessible() {

View file

@ -5,6 +5,8 @@
#ifndef ATOM_BROWSER_OSR_WINDOW_H_
#define ATOM_BROWSER_OSR_WINDOW_H_
#include "atom/browser/native_window.h"
#include "content/browser/renderer_host/render_widget_host_view_base.h"
#include "content/browser/renderer_host/delegated_frame_host.h"
#include "content/browser/renderer_host/resize_lock.h"
@ -66,7 +68,7 @@ public:
typedef base::Callback<void(const gfx::Rect&,int,int,void*)>
OnPaintCallback;
OffScreenWindow(content::RenderWidgetHost*);
OffScreenWindow(content::RenderWidgetHost*, NativeWindow*);
~OffScreenWindow();
void CreatePlatformWidget();
@ -196,6 +198,7 @@ private:
void ResizeRootLayer();
content::RenderWidgetHostImpl* render_widget_host_;
NativeWindow* native_window_;
std::unique_ptr<CefCopyFrameGenerator> copy_frame_generator_;
std::unique_ptr<CefBeginFrameTimer> begin_frame_timer_;