summaryrefslogtreecommitdiffstats
path: root/webkit/glue/plugins/pepper_widget.cc
diff options
context:
space:
mode:
Diffstat (limited to 'webkit/glue/plugins/pepper_widget.cc')
-rw-r--r--webkit/glue/plugins/pepper_widget.cc90
1 files changed, 90 insertions, 0 deletions
diff --git a/webkit/glue/plugins/pepper_widget.cc b/webkit/glue/plugins/pepper_widget.cc
new file mode 100644
index 0000000..9d345274
--- /dev/null
+++ b/webkit/glue/plugins/pepper_widget.cc
@@ -0,0 +1,90 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "webkit/glue/plugins/pepper_widget.h"
+
+#include "base/logging.h"
+#include "third_party/ppapi/c/pp_completion_callback.h"
+#include "third_party/ppapi/c/pp_errors.h"
+#include "third_party/ppapi/c/ppb_widget.h"
+#include "third_party/ppapi/c/ppp_widget.h"
+#include "webkit/glue/plugins/pepper_image_data.h"
+#include "webkit/glue/plugins/pepper_plugin_instance.h"
+#include "webkit/glue/plugins/pepper_plugin_module.h"
+
+namespace pepper {
+
+namespace {
+
+bool IsWidget(PP_Resource resource) {
+ return !!Resource::GetAs<Widget>(resource).get();
+}
+
+bool Paint(PP_Resource resource, const PP_Rect* rect, PP_Resource image_id) {
+ scoped_refptr<Widget> widget(Resource::GetAs<Widget>(resource));
+ if (!widget.get())
+ return false;
+
+ scoped_refptr<ImageData> image(Resource::GetAs<ImageData>(image_id));
+ return widget.get() && widget->Paint(rect, image);
+}
+
+bool HandleEvent(PP_Resource resource, const PP_Event* event) {
+ scoped_refptr<Widget> widget(Resource::GetAs<Widget>(resource));
+ return widget.get() && widget->HandleEvent(event);
+}
+
+bool GetLocation(PP_Resource resource, PP_Rect* location) {
+ scoped_refptr<Widget> widget(Resource::GetAs<Widget>(resource));
+ return widget.get() && widget->GetLocation(location);
+}
+
+void SetLocation(PP_Resource resource, const PP_Rect* location) {
+ scoped_refptr<Widget> widget(Resource::GetAs<Widget>(resource));
+ if (widget.get())
+ widget->SetLocation(location);
+}
+
+const PPB_Widget ppb_widget = {
+ &IsWidget,
+ &Paint,
+ &HandleEvent,
+ &GetLocation,
+ &SetLocation,
+};
+
+} // namespace
+
+Widget::Widget(PluginInstance* instance)
+ : Resource(instance->module()),
+ instance_(instance) {
+}
+
+Widget::~Widget() {
+}
+
+// static
+const PPB_Widget* Widget::GetInterface() {
+ return &ppb_widget;
+}
+
+bool Widget::GetLocation(PP_Rect* location) {
+ *location = location_;
+ return true;
+}
+
+void Widget::SetLocation(const PP_Rect* location) {
+ location_ = *location;
+ SetLocationInternal(location);
+}
+
+void Widget::Invalidate(const PP_Rect* dirty) {
+ const PPP_Widget* widget = static_cast<const PPP_Widget*>(
+ module()->GetPluginInterface(PPP_WIDGET_INTERFACE));
+ if (!widget)
+ return;
+ widget->Invalidate(instance_->GetPPInstance(), GetResource(), dirty);
+}
+
+} // namespace pepper