Change webview's zoom level on JavaScript side
This commit is contained in:
parent
118924ba7a
commit
af02739c4e
8 changed files with 26 additions and 58 deletions
|
@ -4,7 +4,7 @@
|
|||
|
||||
#include "atom/renderer/api/atom_api_web_frame.h"
|
||||
|
||||
#include "atom/common/api/api_messages.h"
|
||||
#include "atom/common/api/event_emitter_caller.h"
|
||||
#include "atom/common/native_mate_converters/callback.h"
|
||||
#include "atom/common/native_mate_converters/gfx_converter.h"
|
||||
#include "atom/common/native_mate_converters/string16_converter.h"
|
||||
|
@ -38,11 +38,9 @@ void WebFrame::SetName(const std::string& name) {
|
|||
}
|
||||
|
||||
double WebFrame::SetZoomLevel(double level) {
|
||||
auto render_view = content::RenderView::FromWebView(web_frame_->view());
|
||||
// Notify guests if any for zoom level change.
|
||||
render_view->Send(
|
||||
new AtomViewHostMsg_ZoomLevelChanged(MSG_ROUTING_NONE, level));
|
||||
return web_frame_->view()->setZoomLevel(level);
|
||||
double ret = web_frame_->view()->setZoomLevel(level);
|
||||
mate::EmitEvent(isolate(), GetWrapper(isolate()), "zoom-level-changed", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
double WebFrame::GetZoomLevel() const {
|
||||
|
|
|
@ -1,16 +1,19 @@
|
|||
var deprecate, webFrame;
|
||||
'use strict';
|
||||
|
||||
deprecate = require('electron').deprecate;
|
||||
const deprecate = require('electron').deprecate;
|
||||
const EventEmitter = require('events').EventEmitter;
|
||||
|
||||
webFrame = process.atomBinding('web_frame').webFrame;
|
||||
const webFrame = process.atomBinding('web_frame').webFrame;
|
||||
|
||||
// webFrame is an EventEmitter.
|
||||
webFrame.__proto__ = EventEmitter.prototype;
|
||||
|
||||
/* Deprecated. */
|
||||
// Lots of webview would subscribe to webFrame's events.
|
||||
webFrame.setMaxListeners(0);
|
||||
|
||||
// Deprecated.
|
||||
deprecate.rename(webFrame, 'registerUrlSchemeAsSecure', 'registerURLSchemeAsSecure');
|
||||
|
||||
deprecate.rename(webFrame, 'registerUrlSchemeAsBypassingCSP', 'registerURLSchemeAsBypassingCSP');
|
||||
|
||||
deprecate.rename(webFrame, 'registerUrlSchemeAsPrivileged', 'registerURLSchemeAsPrivileged');
|
||||
|
||||
module.exports = webFrame;
|
||||
|
|
|
@ -57,22 +57,6 @@ class AtomRenderFrameObserver : public content::RenderFrameObserver {
|
|||
render_frame()->GetWebFrame(), context);
|
||||
}
|
||||
|
||||
bool OnMessageReceived(const IPC::Message& message) {
|
||||
bool handled = true;
|
||||
IPC_BEGIN_MESSAGE_MAP(AtomRenderFrameObserver, message)
|
||||
IPC_MESSAGE_HANDLER(AtomViewMsg_SetZoomLevel, OnSetZoomLevel)
|
||||
IPC_MESSAGE_UNHANDLED(handled = false)
|
||||
IPC_END_MESSAGE_MAP()
|
||||
|
||||
return handled;
|
||||
}
|
||||
|
||||
void OnSetZoomLevel(double level) {
|
||||
auto view = render_frame()->GetWebFrame()->view();
|
||||
if (view)
|
||||
view->setZoomLevel(level);
|
||||
}
|
||||
|
||||
private:
|
||||
AtomRendererClient* renderer_client_;
|
||||
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
'user strict';
|
||||
|
||||
var WebViewImpl, deprecate, getNextId, guestViewInternal, ipcRenderer, listener, nextId, ref, registerBrowserPluginElement, registerWebViewElement, remote, useCapture, v8Util, webFrame, webViewConstants,
|
||||
hasProp = {}.hasOwnProperty,
|
||||
slice = [].slice;
|
||||
|
@ -39,6 +41,11 @@ WebViewImpl = (function() {
|
|||
this.setupFocusPropagation();
|
||||
this.viewInstanceId = getNextId();
|
||||
shadowRoot.appendChild(this.browserPluginNode);
|
||||
|
||||
// Subscribe to host's zoom level changes.
|
||||
webFrame.on('zoom-level-changed', (zoomLevel) => {
|
||||
this.webviewNode.setZoomLevel(zoomLevel);
|
||||
});
|
||||
}
|
||||
|
||||
WebViewImpl.prototype.createBrowserPluginNode = function() {
|
||||
|
@ -382,6 +389,9 @@ registerWebViewElement = function() {
|
|||
'insertText',
|
||||
'send',
|
||||
'sendInputEvent',
|
||||
'setZoomFactor',
|
||||
'setZoomLevel',
|
||||
'setZoomLevelLimits',
|
||||
];
|
||||
|
||||
/* Forward proto.foo* method calls to WebViewImpl.foo*. */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue