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
), scale_(1.0f
) {
25 memset(&location_
, 0, sizeof(location_
));
28 PPB_Widget_Impl::~PPB_Widget_Impl() {}
30 PPB_Widget_API
* PPB_Widget_Impl::AsPPB_Widget_API() { return this; }
32 PP_Bool
PPB_Widget_Impl::Paint(const PP_Rect
* rect
, PP_Resource image_id
) {
33 EnterResourceNoLock
<PPB_ImageData_API
> enter(image_id
, true);
38 rect
->point
.x
, rect
->point
.y
, rect
->size
.width
, rect
->size
.height
),
39 static_cast<PPB_ImageData_Impl
*>(enter
.object()));
42 PP_Bool
PPB_Widget_Impl::HandleEvent(PP_Resource pp_input_event
) {
43 EnterResourceNoLock
<PPB_InputEvent_API
> enter(pp_input_event
, true);
46 return HandleEventInternal(enter
.object()->GetInputEventData());
49 PP_Bool
PPB_Widget_Impl::GetLocation(PP_Rect
* location
) {
50 *location
= location_
;
54 void PPB_Widget_Impl::SetLocation(const PP_Rect
* location
) {
55 location_
= *location
;
56 SetLocationInternal(location
);
59 void PPB_Widget_Impl::SetScale(float scale
) { scale_
= scale
; }
61 void PPB_Widget_Impl::Invalidate(const PP_Rect
* dirty
) {
62 PepperPluginInstanceImpl
* plugin_instance
=
63 HostGlobals::Get()->GetInstance(pp_instance());
66 const PPP_Widget_Dev
* widget
= static_cast<const PPP_Widget_Dev
*>(
67 plugin_instance
->module()->GetPluginInterface(PPP_WIDGET_DEV_INTERFACE
));
70 widget
->Invalidate(pp_instance(), pp_resource(), dirty
);
73 } // namespace content