Index: webkit/plugins/ppapi/ppb_graphics_2d_impl.cc |
diff --git a/webkit/plugins/ppapi/ppb_graphics_2d_impl.cc b/webkit/plugins/ppapi/ppb_graphics_2d_impl.cc |
index ff5c523d085f70bc6a7cb8f1ed1b26047214ccfb..85c27d96a47feca1589f15814fa79c80aa08a782 100644 |
--- a/webkit/plugins/ppapi/ppb_graphics_2d_impl.cc |
+++ b/webkit/plugins/ppapi/ppb_graphics_2d_impl.cc |
@@ -21,7 +21,10 @@ |
#include "third_party/skia/include/core/SkBitmap.h" |
#include "ui/gfx/blit.h" |
#include "ui/gfx/point.h" |
+#include "ui/gfx/point_conversions.h" |
#include "ui/gfx/rect.h" |
+#include "ui/gfx/rect_conversions.h" |
+#include "ui/gfx/size_conversions.h" |
#include "ui/gfx/scoped_ns_graphics_context_save_gstate_mac.h" |
#include "ui/gfx/skia_util.h" |
#include "webkit/plugins/ppapi/common.h" |
@@ -77,17 +80,6 @@ bool ValidateAndConvertRect(const PP_Rect* rect, |
return true; |
} |
-// Scale the rectangle, taking care to round coordinates outward so a |
-// rectangle scaled down then scaled back up by the inverse scale would |
-// fully contain the entire area affected by the original rectangle. |
-gfx::Rect ScaleRectBounds(const gfx::Rect& rect, float scale) { |
- int left = static_cast<int>(floorf(rect.x() * scale)); |
- int top = static_cast<int>(floorf(rect.y() * scale)); |
- int right = static_cast<int>(ceilf((rect.x() + rect.width()) * scale)); |
- int bottom = static_cast<int>(ceilf((rect.y() + rect.height()) * scale)); |
- return gfx::Rect(left, top, right - left, bottom - top); |
-} |
- |
// Converts BGRA <-> RGBA. |
void ConvertBetweenBGRAandRGBA(const uint32_t* input, |
int pixel_length, |
@@ -573,7 +565,7 @@ void PPB_Graphics2D_Impl::Paint(WebKit::WebCanvas* canvas, |
SkAutoCanvasRestore auto_restore(canvas, true); |
canvas->clipRect(sk_invalidate_rect); |
gfx::Size pixel_image_size(image_data_->width(), image_data_->height()); |
- gfx::Size image_size = pixel_image_size.Scale(scale_); |
+ gfx::Size image_size = gfx::ToFlooredSize(pixel_image_size.Scale(scale_)); |
PluginInstance* plugin_instance = ResourceHelper::GetPluginInstance(this); |
if (!plugin_instance) |
@@ -652,13 +644,16 @@ bool PPB_Graphics2D_Impl::ConvertToLogicalPixels(float scale, |
return true; |
gfx::Rect original_rect = *op_rect; |
- *op_rect = ScaleRectBounds(*op_rect, scale); |
+ // Take the enclosing rectangle after scaling so a rectangle scaled down then |
+ // scaled back up by the inverse scale would fully contain the entire area |
+ // affected by the original rectangle. |
+ *op_rect = gfx::ToEnclosingRect(op_rect->Scale(scale)); |
if (delta) { |
gfx::Point original_delta = *delta; |
float inverse_scale = 1.0f / scale; |
- *delta = delta->Scale(scale); |
- if (original_rect != ScaleRectBounds(*op_rect, inverse_scale) || |
- original_delta != delta->Scale(inverse_scale)) { |
+ *delta = gfx::ToFlooredPoint(delta->Scale(scale)); |
+ if (original_rect != gfx::ToEnclosingRect(op_rect->Scale(inverse_scale)) || |
+ original_delta != gfx::ToFlooredPoint(delta->Scale(inverse_scale))) { |
return false; |
} |
} |