summaryrefslogtreecommitdiffstats
path: root/WebCore
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore')
-rw-r--r--WebCore/html/HTMLCanvasElement.cpp24
1 files changed, 24 insertions, 0 deletions
diff --git a/WebCore/html/HTMLCanvasElement.cpp b/WebCore/html/HTMLCanvasElement.cpp
index 7bae6e3..0405669 100644
--- a/WebCore/html/HTMLCanvasElement.cpp
+++ b/WebCore/html/HTMLCanvasElement.cpp
@@ -277,7 +277,19 @@ IntRect HTMLCanvasElement::convertLogicalToDevice(const FloatRect& logicalRect)
IntSize HTMLCanvasElement::convertLogicalToDevice(const FloatSize& logicalSize) const
{
+#if PLATFORM(ANDROID)
+ /* In Android we capture the drawing into a displayList, and then
+ replay that list at various scale factors (sometimes zoomed out, other
+ times zoomed in for "normal" reading, yet other times at arbitrary
+ zoom values based on the user's choice). In all of these cases, we do
+ not re-record the displayList, hence it is usually harmful to perform
+ any pre-rounding, since we just don't know the actual drawing resolution
+ at record time.
+ */
+ float pageScaleFactor = 1.0f;
+#else
float pageScaleFactor = document()->frame() ? document()->frame()->page()->chrome()->scaleFactor() : 1.0f;
+#endif
float wf = ceilf(logicalSize.width() * pageScaleFactor);
float hf = ceilf(logicalSize.height() * pageScaleFactor);
@@ -289,7 +301,19 @@ IntSize HTMLCanvasElement::convertLogicalToDevice(const FloatSize& logicalSize)
IntPoint HTMLCanvasElement::convertLogicalToDevice(const FloatPoint& logicalPos) const
{
+#if PLATFORM(ANDROID)
+ /* In Android we capture the drawing into a displayList, and then
+ replay that list at various scale factors (sometimes zoomed out, other
+ times zoomed in for "normal" reading, yet other times at arbitrary
+ zoom values based on the user's choice). In all of these cases, we do
+ not re-record the displayList, hence it is usually harmful to perform
+ any pre-rounding, since we just don't know the actual drawing resolution
+ at record time.
+ */
+ float pageScaleFactor = 1.0f;
+#else
float pageScaleFactor = document()->frame() ? document()->frame()->page()->chrome()->scaleFactor() : 1.0f;
+#endif
float xf = logicalPos.x() * pageScaleFactor;
float yf = logicalPos.y() * pageScaleFactor;