1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "webkit/plugins/ppapi/ppb_widget_impl.h"
7 #include "ppapi/c/dev/ppp_widget_dev.h"
8 #include "ppapi/thunk/enter.h"
9 #include "ppapi/thunk/ppb_input_event_api.h"
10 #include "ppapi/thunk/ppb_widget_api.h"
11 #include "webkit/plugins/ppapi/ppb_image_data_impl.h"
12 #include "webkit/plugins/ppapi/ppapi_plugin_instance.h"
13 #include "webkit/plugins/ppapi/plugin_module.h"
14 #include "webkit/plugins/ppapi/resource_helper.h"
16 using ppapi::thunk::EnterResourceNoLock
;
17 using ppapi::thunk::PPB_ImageData_API
;
18 using ppapi::thunk::PPB_InputEvent_API
;
19 using ppapi::thunk::PPB_Widget_API
;
24 PPB_Widget_Impl::PPB_Widget_Impl(PP_Instance instance
)
25 : Resource(::ppapi::OBJECT_IS_IMPL
, instance
),
27 memset(&location_
, 0, sizeof(location_
));
30 PPB_Widget_Impl::~PPB_Widget_Impl() {
33 PPB_Widget_API
* PPB_Widget_Impl::AsPPB_Widget_API() {
37 PP_Bool
PPB_Widget_Impl::Paint(const PP_Rect
* rect
, PP_Resource image_id
) {
38 EnterResourceNoLock
<PPB_ImageData_API
> enter(image_id
, true);
41 return PaintInternal(gfx::Rect(rect
->point
.x
, rect
->point
.y
,
42 rect
->size
.width
, rect
->size
.height
),
43 static_cast<PPB_ImageData_Impl
*>(enter
.object()));
46 PP_Bool
PPB_Widget_Impl::HandleEvent(PP_Resource pp_input_event
) {
47 EnterResourceNoLock
<PPB_InputEvent_API
> enter(pp_input_event
, true);
50 return HandleEventInternal(enter
.object()->GetInputEventData());
53 PP_Bool
PPB_Widget_Impl::GetLocation(PP_Rect
* location
) {
54 *location
= location_
;
58 void PPB_Widget_Impl::SetLocation(const PP_Rect
* location
) {
59 location_
= *location
;
60 SetLocationInternal(location
);
63 void PPB_Widget_Impl::SetScale(float scale
) {
67 void PPB_Widget_Impl::Invalidate(const PP_Rect
* dirty
) {
68 PluginInstance
* plugin_instance
= ResourceHelper::GetPluginInstance(this);
71 const PPP_Widget_Dev
* widget
= static_cast<const PPP_Widget_Dev
*>(
72 plugin_instance
->module()->GetPluginInterface(PPP_WIDGET_DEV_INTERFACE
));
75 widget
->Invalidate(pp_instance(), pp_resource(), dirty
);