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 "content/renderer/pepper/ppb_widget_impl.h"
7 #include "content/renderer/pepper/host_globals.h"
8 #include "content/renderer/pepper/pepper_plugin_instance_impl.h"
9 #include "content/renderer/pepper/ppb_image_data_impl.h"
10 #include "content/renderer/pepper/plugin_module.h"
11 #include "ppapi/c/dev/ppp_widget_dev.h"
12 #include "ppapi/thunk/enter.h"
13 #include "ppapi/thunk/ppb_input_event_api.h"
14 #include "ppapi/thunk/ppb_widget_api.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
;
23 PPB_Widget_Impl::PPB_Widget_Impl(PP_Instance instance
)
24 : Resource(ppapi::OBJECT_IS_IMPL
, instance
),
26 memset(&location_
, 0, sizeof(location_
));
29 PPB_Widget_Impl::~PPB_Widget_Impl() {
32 PPB_Widget_API
* PPB_Widget_Impl::AsPPB_Widget_API() {
36 PP_Bool
PPB_Widget_Impl::Paint(const PP_Rect
* rect
, PP_Resource image_id
) {
37 EnterResourceNoLock
<PPB_ImageData_API
> enter(image_id
, true);
40 return PaintInternal(gfx::Rect(rect
->point
.x
, rect
->point
.y
,
41 rect
->size
.width
, rect
->size
.height
),
42 static_cast<PPB_ImageData_Impl
*>(enter
.object()));
45 PP_Bool
PPB_Widget_Impl::HandleEvent(PP_Resource pp_input_event
) {
46 EnterResourceNoLock
<PPB_InputEvent_API
> enter(pp_input_event
, true);
49 return HandleEventInternal(enter
.object()->GetInputEventData());
52 PP_Bool
PPB_Widget_Impl::GetLocation(PP_Rect
* location
) {
53 *location
= location_
;
57 void PPB_Widget_Impl::SetLocation(const PP_Rect
* location
) {
58 location_
= *location
;
59 SetLocationInternal(location
);
62 void PPB_Widget_Impl::SetScale(float scale
) {
66 void PPB_Widget_Impl::Invalidate(const PP_Rect
* dirty
) {
67 PepperPluginInstanceImpl
* plugin_instance
=
68 HostGlobals::Get()->GetInstance(pp_instance());
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
);
78 } // namespace content