Implement allowtransparency attribute
This commit is contained in:
parent
ce793ec86d
commit
6336edbe92
6 changed files with 49 additions and 14 deletions
|
@ -34,11 +34,13 @@ v8::Persistent<v8::ObjectTemplate> template_;
|
||||||
WebContents::WebContents(content::WebContents* web_contents)
|
WebContents::WebContents(content::WebContents* web_contents)
|
||||||
: content::WebContentsObserver(web_contents),
|
: content::WebContentsObserver(web_contents),
|
||||||
guest_instance_id_(-1),
|
guest_instance_id_(-1),
|
||||||
|
guest_opaque_(true),
|
||||||
auto_size_enabled_(false) {
|
auto_size_enabled_(false) {
|
||||||
}
|
}
|
||||||
|
|
||||||
WebContents::WebContents(const mate::Dictionary& options)
|
WebContents::WebContents(const mate::Dictionary& options)
|
||||||
: guest_instance_id_(-1),
|
: guest_instance_id_(-1),
|
||||||
|
guest_opaque_(true),
|
||||||
auto_size_enabled_(false) {
|
auto_size_enabled_(false) {
|
||||||
options.Get("guestInstanceId", &guest_instance_id_);
|
options.Get("guestInstanceId", &guest_instance_id_);
|
||||||
|
|
||||||
|
@ -103,6 +105,13 @@ void WebContents::RenderViewReady() {
|
||||||
if (!is_guest())
|
if (!is_guest())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
// We don't want to accidentally set the opacity of an interstitial page.
|
||||||
|
// WebContents::GetRenderWidgetHostView will return the RWHV of an
|
||||||
|
// interstitial page if one is showing at this time. We only want opacity
|
||||||
|
// to apply to web pages.
|
||||||
|
web_contents()->GetRenderViewHost()->GetView()->
|
||||||
|
SetBackgroundOpaque(guest_opaque_);
|
||||||
|
|
||||||
content::RenderViewHost* rvh = web_contents()->GetRenderViewHost();
|
content::RenderViewHost* rvh = web_contents()->GetRenderViewHost();
|
||||||
if (auto_size_enabled_) {
|
if (auto_size_enabled_) {
|
||||||
rvh->EnableAutoResize(min_auto_size_, max_auto_size_);
|
rvh->EnableAutoResize(min_auto_size_, max_auto_size_);
|
||||||
|
@ -291,6 +300,17 @@ void WebContents::SetAutoSize(bool enabled,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WebContents::SetAllowTransparency(bool allow) {
|
||||||
|
if (guest_opaque_ != allow)
|
||||||
|
return;
|
||||||
|
|
||||||
|
guest_opaque_ = !allow;
|
||||||
|
if (!web_contents()->GetRenderViewHost()->GetView())
|
||||||
|
return;
|
||||||
|
|
||||||
|
web_contents()->GetRenderViewHost()->GetView()->SetBackgroundOpaque(!allow);
|
||||||
|
}
|
||||||
|
|
||||||
mate::ObjectTemplateBuilder WebContents::GetObjectTemplateBuilder(
|
mate::ObjectTemplateBuilder WebContents::GetObjectTemplateBuilder(
|
||||||
v8::Isolate* isolate) {
|
v8::Isolate* isolate) {
|
||||||
if (template_.IsEmpty())
|
if (template_.IsEmpty())
|
||||||
|
@ -318,6 +338,7 @@ mate::ObjectTemplateBuilder WebContents::GetObjectTemplateBuilder(
|
||||||
.SetMethod("_executeJavaScript", &WebContents::ExecuteJavaScript)
|
.SetMethod("_executeJavaScript", &WebContents::ExecuteJavaScript)
|
||||||
.SetMethod("_send", &WebContents::SendIPCMessage)
|
.SetMethod("_send", &WebContents::SendIPCMessage)
|
||||||
.SetMethod("setAutoSize", &WebContents::SetAutoSize)
|
.SetMethod("setAutoSize", &WebContents::SetAutoSize)
|
||||||
|
.SetMethod("setAllowTransparency", &WebContents::SetAllowTransparency)
|
||||||
.Build());
|
.Build());
|
||||||
|
|
||||||
return mate::ObjectTemplateBuilder(
|
return mate::ObjectTemplateBuilder(
|
||||||
|
|
|
@ -61,6 +61,9 @@ class WebContents : public mate::EventEmitter,
|
||||||
const gfx::Size& min_size,
|
const gfx::Size& min_size,
|
||||||
const gfx::Size& max_size);
|
const gfx::Size& max_size);
|
||||||
|
|
||||||
|
// Sets the transparency of the guest.
|
||||||
|
void SetAllowTransparency(bool allow);
|
||||||
|
|
||||||
// Returns whether this is a guest view.
|
// Returns whether this is a guest view.
|
||||||
bool is_guest() const { return guest_instance_id_ != -1; }
|
bool is_guest() const { return guest_instance_id_ != -1; }
|
||||||
|
|
||||||
|
@ -129,6 +132,9 @@ class WebContents : public mate::EventEmitter,
|
||||||
|
|
||||||
DestructionCallback destruction_callback_;
|
DestructionCallback destruction_callback_;
|
||||||
|
|
||||||
|
// Stores whether the contents of the guest can be transparent.
|
||||||
|
bool guest_opaque_;
|
||||||
|
|
||||||
// The extra parameters associated with this guest view passed
|
// The extra parameters associated with this guest view passed
|
||||||
// in from JavaScript. This will typically be the view instance ID,
|
// in from JavaScript. This will typically be the view instance ID,
|
||||||
// the API to use, and view-specific parameters. These parameters
|
// the API to use, and view-specific parameters. These parameters
|
||||||
|
|
|
@ -22,14 +22,6 @@ module.exports.wrap = (webContents) ->
|
||||||
else
|
else
|
||||||
webContents.once 'did-finish-load', @_executeJavaScript.bind(this, code)
|
webContents.once 'did-finish-load', @_executeJavaScript.bind(this, code)
|
||||||
|
|
||||||
# Init guest web view.
|
|
||||||
webContents.on 'internal-did-attach', (event, params) ->
|
|
||||||
min = width: params.minwidth, height: params.minheight
|
|
||||||
max = width: params.maxwidth, height: params.maxheight
|
|
||||||
@setAutoSize params.autosize, min, max
|
|
||||||
if params.src
|
|
||||||
@loadUrl params.src
|
|
||||||
|
|
||||||
# The processId and routingId and identify a webContents.
|
# The processId and routingId and identify a webContents.
|
||||||
webContents.getId = -> "#{@getProcessId()}-#{@getRoutingId()}"
|
webContents.getId = -> "#{@getProcessId()}-#{@getRoutingId()}"
|
||||||
webContents.equal = (other) -> @getId() is other.getId()
|
webContents.equal = (other) -> @getId() is other.getId()
|
||||||
|
|
|
@ -22,7 +22,18 @@ createGuest = (embedder, params) ->
|
||||||
webViewManager.addGuest id, embedder, guest
|
webViewManager.addGuest id, embedder, guest
|
||||||
|
|
||||||
# Destroy guest when the embedder is gone.
|
# Destroy guest when the embedder is gone.
|
||||||
embedder.once 'render-view-deleted', -> destroyGuest id
|
embedder.once 'render-view-deleted', ->
|
||||||
|
destroyGuest id
|
||||||
|
|
||||||
|
# Init guest web view after attached.
|
||||||
|
guest.once 'internal-did-attach', (event, params) ->
|
||||||
|
min = width: params.minwidth, height: params.minheight
|
||||||
|
max = width: params.maxwidth, height: params.maxheight
|
||||||
|
@setAutoSize params.autosize, min, max
|
||||||
|
if params.src
|
||||||
|
@loadUrl params.src
|
||||||
|
if params.allowtransparency?
|
||||||
|
@setAllowTransparency params.allowtransparency
|
||||||
|
|
||||||
id
|
id
|
||||||
|
|
||||||
|
@ -35,8 +46,11 @@ destroyGuest = (id) ->
|
||||||
ipc.on 'ATOM_SHELL_GUEST_VIEW_MANAGER_CREATE_GUEST', (event, type, params, requestId) ->
|
ipc.on 'ATOM_SHELL_GUEST_VIEW_MANAGER_CREATE_GUEST', (event, type, params, requestId) ->
|
||||||
event.sender.send "ATOM_SHELL_RESPONSE_#{requestId}", createGuest(event.sender, params)
|
event.sender.send "ATOM_SHELL_RESPONSE_#{requestId}", createGuest(event.sender, params)
|
||||||
|
|
||||||
ipc.on 'ATOM_SHELL_GUEST_VIEW_MANAGER_DESTROY_GUEST', (event, guestInstanceId) ->
|
ipc.on 'ATOM_SHELL_GUEST_VIEW_MANAGER_DESTROY_GUEST', (event, id) ->
|
||||||
destroyGuest guestInstanceId
|
destroyGuest id
|
||||||
|
|
||||||
ipc.on 'ATOM_SHELL_GUEST_VIEW_MANAGER_SET_AUTO_SIZE', (event, guestInstanceId, params) ->
|
ipc.on 'ATOM_SHELL_GUEST_VIEW_MANAGER_SET_AUTO_SIZE', (event, id, params) ->
|
||||||
guestInstances[id]?.setAutoSize params.enableAutoSize, params.min, params.max
|
guestInstances[id]?.setAutoSize params.enableAutoSize, params.min, params.max
|
||||||
|
|
||||||
|
ipc.on 'ATOM_SHELL_GUEST_VIEW_MANAGER_SET_ALLOW_TRANSPARENCY', (event, id, allowtransparency) ->
|
||||||
|
guestInstances[id]?.setAllowTransparency allowtransparency
|
||||||
|
|
|
@ -13,3 +13,6 @@ module.exports =
|
||||||
|
|
||||||
setAutoSize: (guestInstanceId, params) ->
|
setAutoSize: (guestInstanceId, params) ->
|
||||||
ipc.send 'ATOM_SHELL_GUEST_VIEW_MANAGER_SET_AUTO_SIZE', guestInstanceId, params
|
ipc.send 'ATOM_SHELL_GUEST_VIEW_MANAGER_SET_AUTO_SIZE', guestInstanceId, params
|
||||||
|
|
||||||
|
setAllowTransparency: (guestInstanceId, allowtransparency) ->
|
||||||
|
ipc.send 'ATOM_SHELL_GUEST_VIEW_MANAGER_SET_ALLOW_TRANSPARENCY', guestInstanceId, allowtransparency
|
||||||
|
|
|
@ -242,8 +242,7 @@ class WebView
|
||||||
|
|
||||||
return unless @guestInstanceId
|
return unless @guestInstanceId
|
||||||
|
|
||||||
# FIXME
|
guestViewInternal.setAllowTransparency @guestInstanceId, @allowtransparency
|
||||||
# WebViewInternal.setAllowTransparency @guestInstanceId, @allowtransparency
|
|
||||||
else if name is 'name'
|
else if name is 'name'
|
||||||
# We treat null attribute (attribute removed) and the empty string as
|
# We treat null attribute (attribute removed) and the empty string as
|
||||||
# one case.
|
# one case.
|
||||||
|
|
Loading…
Reference in a new issue