diff options
author | jhorwich@chromium.org <jhorwich@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-08-23 00:47:54 +0000 |
---|---|---|
committer | jhorwich@chromium.org <jhorwich@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-08-23 00:47:54 +0000 |
commit | 2d5977eacf30f4e875f5fdc3ff7fba9f31409095 (patch) | |
tree | d6df0acc95678722e5b37e9bd31ceee38dc60e83 /ppapi/cpp/dev/widget_dev.cc | |
parent | f686eb609c169a045cc2123a037ee2f5fb9ae4bb (diff) | |
download | chromium_src-2d5977eacf30f4e875f5fdc3ff7fba9f31409095.zip chromium_src-2d5977eacf30f4e875f5fdc3ff7fba9f31409095.tar.gz chromium_src-2d5977eacf30f4e875f5fdc3ff7fba9f31409095.tar.bz2 |
Add SetScale to PPB_WidgetDev, use scale for painting
In order to allow for HiDPI-aware scrollbars, this patch allows the plugin to
specify a scale factor used during widget paint operations.
The widgets (of which Scrollbar is the only current instance) will continue to
use the DIP coordinate system for events and sizing, which is consistent with
their WebKit implementation.
This change should maintain backward compat. with existing users of interface
'PPB_Wdiget(Dev);0.3'
BUG=140833
TEST=Run pre-built (with 0.3 interfaces) PDF plugin and verify scrollbars
Committed: http://src.chromium.org/viewvc/chrome?view=rev&revision=152495
Review URL: https://chromiumcodereview.appspot.com/10824386
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@152889 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ppapi/cpp/dev/widget_dev.cc')
-rw-r--r-- | ppapi/cpp/dev/widget_dev.cc | 59 |
1 files changed, 42 insertions, 17 deletions
diff --git a/ppapi/cpp/dev/widget_dev.cc b/ppapi/cpp/dev/widget_dev.cc index 97d941f..14efe1d 100644 --- a/ppapi/cpp/dev/widget_dev.cc +++ b/ppapi/cpp/dev/widget_dev.cc @@ -16,8 +16,12 @@ namespace pp { namespace { -template <> const char* interface_name<PPB_Widget_Dev>() { - return PPB_WIDGET_DEV_INTERFACE; +template <> const char* interface_name<PPB_Widget_Dev_0_3>() { + return PPB_WIDGET_DEV_INTERFACE_0_3; +} + +template <> const char* interface_name<PPB_Widget_Dev_0_4>() { + return PPB_WIDGET_DEV_INTERFACE_0_4; } } // namespace @@ -29,30 +33,51 @@ Widget_Dev::Widget_Dev(const Widget_Dev& other) : Resource(other) { } bool Widget_Dev::Paint(const Rect& rect, ImageData* image) { - if (!has_interface<PPB_Widget_Dev>()) - return false; - return PP_ToBool(get_interface<PPB_Widget_Dev>()->Paint( - pp_resource(), &rect.pp_rect(), image->pp_resource())); + if (has_interface<PPB_Widget_Dev_0_4>()) { + return PP_ToBool(get_interface<PPB_Widget_Dev_0_4>()->Paint( + pp_resource(), &rect.pp_rect(), image->pp_resource())); + } else if (has_interface<PPB_Widget_Dev_0_3>()) { + return PP_ToBool(get_interface<PPB_Widget_Dev_0_3>()->Paint( + pp_resource(), &rect.pp_rect(), image->pp_resource())); + } + return false; } bool Widget_Dev::HandleEvent(const InputEvent& event) { - if (!has_interface<PPB_Widget_Dev>()) - return false; - return PP_ToBool(get_interface<PPB_Widget_Dev>()->HandleEvent( - pp_resource(), event.pp_resource())); + if (has_interface<PPB_Widget_Dev_0_4>()) { + return PP_ToBool(get_interface<PPB_Widget_Dev_0_4>()->HandleEvent( + pp_resource(), event.pp_resource())); + } else if (has_interface<PPB_Widget_Dev_0_3>()) { + return PP_ToBool(get_interface<PPB_Widget_Dev_0_3>()->HandleEvent( + pp_resource(), event.pp_resource())); + } + return false; } bool Widget_Dev::GetLocation(Rect* location) { - if (!has_interface<PPB_Widget_Dev>()) - return false; - return PP_ToBool(get_interface<PPB_Widget_Dev>()->GetLocation( - pp_resource(), &location->pp_rect())); + if (has_interface<PPB_Widget_Dev_0_4>()) { + return PP_ToBool(get_interface<PPB_Widget_Dev_0_4>()->GetLocation( + pp_resource(), &location->pp_rect())); + } else if (has_interface<PPB_Widget_Dev_0_3>()) { + return PP_ToBool(get_interface<PPB_Widget_Dev_0_3>()->GetLocation( + pp_resource(), &location->pp_rect())); + } + return false; } void Widget_Dev::SetLocation(const Rect& location) { - if (has_interface<PPB_Widget_Dev>()) - get_interface<PPB_Widget_Dev>()->SetLocation(pp_resource(), - &location.pp_rect()); + if (has_interface<PPB_Widget_Dev_0_4>()) { + get_interface<PPB_Widget_Dev_0_4>()->SetLocation(pp_resource(), + &location.pp_rect()); + } else if (has_interface<PPB_Widget_Dev_0_3>()) { + get_interface<PPB_Widget_Dev_0_3>()->SetLocation(pp_resource(), + &location.pp_rect()); + } +} + +void Widget_Dev::SetScale(float scale) { + if (has_interface<PPB_Widget_Dev_0_4>()) + get_interface<PPB_Widget_Dev_0_4>()->SetScale(pp_resource(), scale); } } // namespace pp |