summaryrefslogtreecommitdiffstats
path: root/webkit
diff options
context:
space:
mode:
authorjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-01 07:28:25 +0000
committerjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-01 07:28:25 +0000
commitb75b829359b4b432d0462ab5011542f99f2021a5 (patch)
tree564389d8698b140e97918a4cefd7ad18c7c99e7f /webkit
parent3ec5d92cbba6b7b13ead81ebfd9e3c202fae001d (diff)
downloadchromium_src-b75b829359b4b432d0462ab5011542f99f2021a5.zip
chromium_src-b75b829359b4b432d0462ab5011542f99f2021a5.tar.gz
chromium_src-b75b829359b4b432d0462ab5011542f99f2021a5.tar.bz2
Chrome side of consolidating zoom code for pepper plugins (i.e. pdf) and the rest of Chrome. Allows plugins to have different zoom ranges, and also to update zoom on its own.
Review URL: http://codereview.chromium.org/3419023 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@61153 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit')
-rw-r--r--webkit/glue/plugins/pepper_plugin_delegate.h12
-rw-r--r--webkit/glue/plugins/pepper_plugin_instance.cc45
-rw-r--r--webkit/glue/plugins/pepper_plugin_instance.h4
-rw-r--r--webkit/glue/plugins/pepper_plugin_module.cc3
-rw-r--r--webkit/glue/plugins/pepper_webplugin_impl.cc14
-rw-r--r--webkit/glue/plugins/pepper_webplugin_impl.h2
6 files changed, 69 insertions, 11 deletions
diff --git a/webkit/glue/plugins/pepper_plugin_delegate.h b/webkit/glue/plugins/pepper_plugin_delegate.h
index 1bb4bed..318c70a 100644
--- a/webkit/glue/plugins/pepper_plugin_delegate.h
+++ b/webkit/glue/plugins/pepper_plugin_delegate.h
@@ -156,12 +156,12 @@ class PluginDelegate {
PlatformAudio::Client* client) = 0;
// Notifies that the number of find results has changed.
- virtual void DidChangeNumberOfFindResults(int identifier,
- int total,
- bool final_result) = 0;
+ virtual void NumberOfFindResultsChanged(int identifier,
+ int total,
+ bool final_result) = 0;
// Notifies that the index of the currently selected item has been updated.
- virtual void DidChangeSelectedFindResult(int identifier, int index) = 0;
+ virtual void SelectedFindResultChanged(int identifier, int index) = 0;
// Runs a file chooser.
virtual bool RunFileChooser(
@@ -202,6 +202,10 @@ class PluginDelegate {
// Returns a string with the name of the default 8-bit char encoding.
virtual std::string GetDefaultEncoding() = 0;
+
+ // Sets the mininum and maximium zoom factors.
+ virtual void ZoomLimitsChanged(double minimum_factor,
+ double maximum_factor) = 0;
};
} // namespace pepper
diff --git a/webkit/glue/plugins/pepper_plugin_instance.cc b/webkit/glue/plugins/pepper_plugin_instance.cc
index b4ccd89..b59539d 100644
--- a/webkit/glue/plugins/pepper_plugin_instance.cc
+++ b/webkit/glue/plugins/pepper_plugin_instance.cc
@@ -24,6 +24,7 @@
#include "skia/ext/platform_canvas.h"
#include "third_party/ppapi/c/dev/ppb_find_dev.h"
#include "third_party/ppapi/c/dev/ppb_fullscreen_dev.h"
+#include "third_party/ppapi/c/dev/ppb_zoom_dev.h"
#include "third_party/ppapi/c/dev/ppp_find_dev.h"
#include "third_party/ppapi/c/dev/ppp_zoom_dev.h"
#include "third_party/ppapi/c/pp_input_event.h"
@@ -42,6 +43,7 @@
#include "third_party/WebKit/WebKit/chromium/public/WebInputEvent.h"
#include "third_party/WebKit/WebKit/chromium/public/WebPluginContainer.h"
#include "third_party/WebKit/WebKit/chromium/public/WebRect.h"
+#include "third_party/WebKit/WebKit/chromium/public/WebView.h"
#include "webkit/glue/plugins/pepper_buffer.h"
#include "webkit/glue/plugins/pepper_graphics_2d.h"
#include "webkit/glue/plugins/pepper_event_conversion.h"
@@ -59,6 +61,7 @@ using WebKit::WebCursorInfo;
using WebKit::WebFrame;
using WebKit::WebInputEvent;
using WebKit::WebPluginContainer;
+using WebKit::WebView;
namespace pepper {
@@ -189,7 +192,7 @@ void NumberOfFindResultsChanged(PP_Instance instance_id,
return;
DCHECK_NE(instance->find_identifier(), -1);
- instance->delegate()->DidChangeNumberOfFindResults(
+ instance->delegate()->NumberOfFindResultsChanged(
instance->find_identifier(), total, final_result);
}
@@ -200,7 +203,7 @@ void SelectedFindResultChanged(PP_Instance instance_id,
return;
DCHECK_NE(instance->find_identifier(), -1);
- instance->delegate()->DidChangeSelectedFindResult(
+ instance->delegate()->SelectedFindResultChanged(
instance->find_identifier(), index);
}
@@ -228,6 +231,37 @@ const PPB_Fullscreen_Dev ppb_fullscreen = {
&SetFullscreen,
};
+void ZoomChanged(PP_Instance instance_id, double factor) {
+#ifdef ZOOM_LEVEL_IS_DOUBLE
+ PluginInstance* instance = PluginInstance::FromPPInstance(instance_id);
+ if (!instance)
+ return;
+ double zoom_level = WebView::zoomFactorToZoomLevel(factor);
+ instance->container()->zoomLevelChanged(zoom_level);
+#endif
+}
+
+void ZoomLimitsChanged(PP_Instance instance_id,
+ double minimum_factor,
+ double maximium_factor) {
+ if (minimum_factor > maximium_factor) {
+ NOTREACHED();
+ return;
+ }
+
+#ifdef ZOOM_LEVEL_IS_DOUBLE
+ PluginInstance* instance = PluginInstance::FromPPInstance(instance_id);
+ if (!instance)
+ return;
+ instance->delegate()->ZoomLimitsChanged(minimum_factor, maximium_factor);
+#endif
+}
+
+const PPB_Zoom_Dev ppb_zoom = {
+ &ZoomChanged,
+ &ZoomLimitsChanged
+};
+
} // namespace
PluginInstance::PluginInstance(PluginDelegate* delegate,
@@ -282,6 +316,11 @@ const PPB_Fullscreen_Dev* PluginInstance::GetFullscreenInterface() {
return &ppb_fullscreen;
}
+// static
+const PPB_Zoom_Dev* PluginInstance::GetZoomInterface() {
+ return &ppb_zoom;
+}
+
PP_Instance PluginInstance::GetPPInstance() {
return reinterpret_cast<intptr_t>(this);
}
@@ -555,7 +594,7 @@ string16 PluginInstance::GetSelectedText(bool html) {
return UTF8ToUTF16(string->value());
}
-void PluginInstance::Zoom(float factor, bool text_only) {
+void PluginInstance::Zoom(double factor, bool text_only) {
if (!LoadZoomInterface())
return;
plugin_zoom_interface_->Zoom(GetPPInstance(), factor, text_only);
diff --git a/webkit/glue/plugins/pepper_plugin_instance.h b/webkit/glue/plugins/pepper_plugin_instance.h
index 4eb956f..97e026e 100644
--- a/webkit/glue/plugins/pepper_plugin_instance.h
+++ b/webkit/glue/plugins/pepper_plugin_instance.h
@@ -25,6 +25,7 @@ struct PP_Var;
struct PPB_Instance;
struct PPB_Find_Dev;
struct PPB_Fullscreen_Dev;
+struct PPB_Zoom_Dev;
struct PPP_Find_Dev;
struct PPP_Instance;
struct PPP_Zoom_Dev;
@@ -67,6 +68,7 @@ class PluginInstance : public base::RefCounted<PluginInstance> {
// exposed to the plugin.
static const PPB_Find_Dev* GetFindInterface();
static const PPB_Fullscreen_Dev* GetFullscreenInterface();
+ static const PPB_Zoom_Dev* GetZoomInterface();
PluginDelegate* delegate() const { return delegate_; }
PluginModule* module() const { return module_.get(); }
@@ -134,7 +136,7 @@ class PluginInstance : public base::RefCounted<PluginInstance> {
gfx::Rect* clip);
string16 GetSelectedText(bool html);
- void Zoom(float factor, bool text_only);
+ void Zoom(double factor, bool text_only);
bool StartFind(const string16& search_text,
bool case_sensitive,
int identifier);
diff --git a/webkit/glue/plugins/pepper_plugin_module.cc b/webkit/glue/plugins/pepper_plugin_module.cc
index 251023f..0845479 100644
--- a/webkit/glue/plugins/pepper_plugin_module.cc
+++ b/webkit/glue/plugins/pepper_plugin_module.cc
@@ -34,6 +34,7 @@
#include "third_party/ppapi/c/dev/ppb_url_util_dev.h"
#include "third_party/ppapi/c/dev/ppb_video_decoder_dev.h"
#include "third_party/ppapi/c/dev/ppb_widget_dev.h"
+#include "third_party/ppapi/c/dev/ppb_zoom_dev.h"
#include "third_party/ppapi/c/trusted/ppb_image_data_trusted.h"
#include "third_party/ppapi/c/pp_module.h"
#include "third_party/ppapi/c/pp_resource.h"
@@ -272,6 +273,8 @@ const void* GetInterface(const char* name) {
return CharSet::GetInterface();
if (strcmp(name, PPB_CURSOR_CONTROL_DEV_INTERFACE) == 0)
return GetCursorControlInterface();
+ if (strcmp(name, PPB_ZOOM_DEV_INTERFACE) == 0)
+ return PluginInstance::GetZoomInterface();
// Only support the testing interface when the command line switch is
// specified. This allows us to prevent people from (ab)using this interface
diff --git a/webkit/glue/plugins/pepper_webplugin_impl.cc b/webkit/glue/plugins/pepper_webplugin_impl.cc
index 32903b0..0cea7219 100644
--- a/webkit/glue/plugins/pepper_webplugin_impl.cc
+++ b/webkit/glue/plugins/pepper_webplugin_impl.cc
@@ -4,10 +4,13 @@
#include "webkit/glue/plugins/pepper_webplugin_impl.h"
+#include <cmath>
+
#include "base/message_loop.h"
#include "third_party/ppapi/c/pp_var.h"
#include "third_party/WebKit/WebKit/chromium/public/WebPluginParams.h"
#include "third_party/WebKit/WebKit/chromium/public/WebRect.h"
+#include "third_party/WebKit/WebKit/chromium/public/WebView.h"
#include "webkit/glue/plugins/pepper_plugin_instance.h"
#include "webkit/glue/plugins/pepper_plugin_module.h"
#include "webkit/glue/plugins/pepper_url_loader.h"
@@ -19,6 +22,7 @@ using WebKit::WebPluginParams;
using WebKit::WebRect;
using WebKit::WebString;
using WebKit::WebVector;
+using WebKit::WebView;
namespace pepper {
@@ -165,8 +169,14 @@ WebKit::WebString WebPluginImpl::selectionAsMarkup() const {
return instance_->GetSelectedText(true);
}
-void WebPluginImpl::setZoomFactor(float scale, bool text_only) {
- instance_->Zoom(scale, text_only);
+void WebPluginImpl::setZoomLevel(double level, bool text_only) {
+#ifdef ZOOM_LEVEL_IS_DOUBLE
+ double factor = WebView::zoomLevelToZoomFactor(level);
+#else
+ double factor = std::pow(1.2, level);
+#endif
+
+ instance_->Zoom(factor, text_only);
}
bool WebPluginImpl::startFind(const WebKit::WebString& search_text,
diff --git a/webkit/glue/plugins/pepper_webplugin_impl.h b/webkit/glue/plugins/pepper_webplugin_impl.h
index 9d2f313..17ce979 100644
--- a/webkit/glue/plugins/pepper_webplugin_impl.h
+++ b/webkit/glue/plugins/pepper_webplugin_impl.h
@@ -63,7 +63,7 @@ class WebPluginImpl : public WebKit::WebPlugin {
virtual bool hasSelection() const;
virtual WebKit::WebString selectionAsText() const;
virtual WebKit::WebString selectionAsMarkup() const;
- virtual void setZoomFactor(float scale, bool text_only);
+ virtual void setZoomLevel(double level, bool text_only);
virtual bool startFind(const WebKit::WebString& search_text,
bool case_sensitive,
int identifier);