From 05f079fa5b8541462a984b01805eeee7ca89ef26 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Mon, 16 Jun 2014 18:52:04 +0800 Subject: [PATCH] Allow setting default zoom factor. --- atom/browser/native_window.cc | 10 ++++++++++ atom/browser/native_window.h | 5 ++++- atom/common/options_switches.cc | 3 +++ atom/common/options_switches.h | 1 + atom/renderer/atom_render_view_observer.cc | 15 +++++++++++++++ atom/renderer/atom_render_view_observer.h | 1 + 6 files changed, 34 insertions(+), 1 deletion(-) diff --git a/atom/browser/native_window.cc b/atom/browser/native_window.cc index 7b3e2e38a8ae..68bec9352b7e 100644 --- a/atom/browser/native_window.cc +++ b/atom/browser/native_window.cc @@ -22,6 +22,7 @@ #include "base/json/json_writer.h" #include "base/prefs/pref_service.h" #include "base/message_loop/message_loop.h" +#include "base/strings/string_number_conversions.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" #include "base/values.h" @@ -58,6 +59,7 @@ NativeWindow::NativeWindow(content::WebContents* web_contents, is_closed_(false), node_integration_("except-iframe"), has_dialog_attached_(false), + zoom_factor_(1.0), weak_factory_(this), inspectable_web_contents_( brightray::InspectableWebContents::Create(web_contents)) { @@ -82,6 +84,9 @@ NativeWindow::NativeWindow(content::WebContents* web_contents, if (options->GetDictionary(switches::kWebPreferences, &web_preferences)) web_preferences_.reset(web_preferences->DeepCopy()); + // Read the zoom factor before any navigation. + options->GetDouble(switches::kZoomFactor, &zoom_factor_); + web_contents->SetDelegate(this); inspectable_web_contents()->SetDelegate(this); @@ -358,6 +363,11 @@ void NativeWindow::AppendExtraCommandLineSwitches(CommandLine* command_line, // Append --node-integration to renderer process. command_line->AppendSwitchASCII(switches::kNodeIntegration, node_integration_); + + // Append --zoom-factor. + if (zoom_factor_ != 1.0) + command_line->AppendSwitchASCII(switches::kZoomFactor, + base::DoubleToString(zoom_factor_)); } void NativeWindow::OverrideWebkitPrefs(const GURL& url, WebPreferences* prefs) { diff --git a/atom/browser/native_window.h b/atom/browser/native_window.h index cb539a4c3e66..7fd79a55c20a 100644 --- a/atom/browser/native_window.h +++ b/atom/browser/native_window.h @@ -294,9 +294,12 @@ class NativeWindow : public brightray::DefaultWebContentsDelegate, // it should be cancelled when we can prove that the window is responsive. base::CancelableClosure window_unresposive_closure_; - // web preferences. + // Web preferences. scoped_ptr web_preferences_; + // Page's default zoom factor. + double zoom_factor_; + base::WeakPtrFactory weak_factory_; base::WeakPtr devtools_window_; diff --git a/atom/common/options_switches.cc b/atom/common/options_switches.cc index 2a99831d7a64..ba3634e2f80d 100644 --- a/atom/common/options_switches.cc +++ b/atom/common/options_switches.cc @@ -45,6 +45,9 @@ const char kUseContentSize[] = "use-content-size"; // The WebPreferences. const char kWebPreferences[] = "web-preferences"; +// The factor of which page should be zoomed. +const char kZoomFactor[] = "zoom-factor"; + } // namespace switches } // namespace atom diff --git a/atom/common/options_switches.h b/atom/common/options_switches.h index f08c33393676..8d06177ed749 100644 --- a/atom/common/options_switches.h +++ b/atom/common/options_switches.h @@ -31,6 +31,7 @@ extern const char kNodeIntegration[]; extern const char kAcceptFirstMouse[]; extern const char kUseContentSize[]; extern const char kWebPreferences[]; +extern const char kZoomFactor[]; } // namespace switches diff --git a/atom/renderer/atom_render_view_observer.cc b/atom/renderer/atom_render_view_observer.cc index 1815bfd31b43..ed57df9aa8b6 100644 --- a/atom/renderer/atom_render_view_observer.cc +++ b/atom/renderer/atom_render_view_observer.cc @@ -7,8 +7,11 @@ #include #include "atom/common/api/api_messages.h" +#include "atom/common/options_switches.h" #include "atom/renderer/api/atom_renderer_bindings.h" #include "atom/renderer/atom_renderer_client.h" +#include "base/command_line.h" +#include "base/strings/string_number_conversions.h" #include "content/public/renderer/render_view.h" #include "ipc/ipc_message_macros.h" #include "third_party/WebKit/public/web/WebDraggableRegion.h" @@ -32,6 +35,18 @@ AtomRenderViewObserver::AtomRenderViewObserver( AtomRenderViewObserver::~AtomRenderViewObserver() { } +void AtomRenderViewObserver::DidCreateDocumentElement(WebKit::WebFrame* frame) { + std::string zoom_factor_str = CommandLine::ForCurrentProcess()-> + GetSwitchValueASCII(switches::kZoomFactor);; + if (zoom_factor_str.empty()) + return; + double zoom_factor; + if (!base::StringToDouble(zoom_factor_str, &zoom_factor)) + return; + double zoom_level = WebKit::WebView::zoomFactorToZoomLevel(zoom_factor); + frame->view()->setZoomLevel(zoom_level); +} + void AtomRenderViewObserver::DraggableRegionsChanged(WebKit::WebFrame* frame) { WebKit::WebVector webregions = frame->document().draggableRegions(); diff --git a/atom/renderer/atom_render_view_observer.h b/atom/renderer/atom_render_view_observer.h index 3b5863dda0d5..4de9fd33cfe3 100644 --- a/atom/renderer/atom_render_view_observer.h +++ b/atom/renderer/atom_render_view_observer.h @@ -25,6 +25,7 @@ class AtomRenderViewObserver : public content::RenderViewObserver { private: // content::RenderViewObserver implementation. + virtual void DidCreateDocumentElement(WebKit::WebFrame* frame) OVERRIDE; virtual void DraggableRegionsChanged(WebKit::WebFrame* frame) OVERRIDE; virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;