Title: [123706] trunk
Revision
123706
Author
[email protected]
Date
2012-07-25 20:26:50 -0700 (Wed, 25 Jul 2012)

Log Message

[Chromium][Win] <progress> animation on RTL direction is reverse
https://bugs.webkit.org/show_bug.cgi?id=92236

Reviewed by Kent Tamura.

Source/WebCore:

This change modfies the way to handle RTL progress bar painting.
Originally it computes the flipped coordinates. This change uses transformation for the flip.
DirectionFlippingScope handles it.

* rendering/RenderThemeChromiumLinux.cpp:
(WebCore::RenderThemeChromiumLinux::paintProgressBar): Applied DirectionFlippingScope
* rendering/RenderThemeChromiumSkia.cpp:
(WebCore::RenderThemeChromiumSkia::determinateProgressValueRectFor):
- Deleted RTL handling in favor of DirectionFlippingScope
(WebCore::RenderThemeChromiumSkia::DirectionFlippingScope::DirectionFlippingScope):
(WebCore):
(WebCore::RenderThemeChromiumSkia::DirectionFlippingScope::~DirectionFlippingScope):
* rendering/RenderThemeChromiumSkia.h:
(RenderThemeChromiumSkia):
(DirectionFlippingScope): Added.
* rendering/RenderThemeChromiumWin.cpp:
(WebCore):
(WebCore::RenderThemeChromiumWin::paintProgressBar): Applied DirectionFlippingScope

LayoutTests:

Updated the expectation file which went slightly different.

* platform/chromium-linux/fast/dom/HTMLProgressElement/progress-element-expected.png:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (123705 => 123706)


--- trunk/LayoutTests/ChangeLog	2012-07-26 03:24:46 UTC (rev 123705)
+++ trunk/LayoutTests/ChangeLog	2012-07-26 03:26:50 UTC (rev 123706)
@@ -1,3 +1,14 @@
+2012-07-25  MORITA Hajime  <[email protected]>
+
+        [Chromium][Win] <progress> animation on RTL direction is reverse
+        https://bugs.webkit.org/show_bug.cgi?id=92236
+
+        Reviewed by Kent Tamura.
+
+        Updated the expectation file which went slightly different.
+
+        * platform/chromium-linux/fast/dom/HTMLProgressElement/progress-element-expected.png:
+
 2012-07-25  Shinya Kawanaka  <[email protected]>
 
         The elements in ShadowDOM of meter or progress should not be modifiable.

Modified: trunk/LayoutTests/platform/chromium-linux/fast/dom/HTMLProgressElement/progress-element-expected.png


(Binary files differ)

Modified: trunk/Source/WebCore/ChangeLog (123705 => 123706)


--- trunk/Source/WebCore/ChangeLog	2012-07-26 03:24:46 UTC (rev 123705)
+++ trunk/Source/WebCore/ChangeLog	2012-07-26 03:26:50 UTC (rev 123706)
@@ -1,3 +1,29 @@
+2012-07-25  MORITA Hajime  <[email protected]>
+
+        [Chromium][Win] <progress> animation on RTL direction is reverse
+        https://bugs.webkit.org/show_bug.cgi?id=92236
+
+        Reviewed by Kent Tamura.
+
+        This change modfies the way to handle RTL progress bar painting.
+        Originally it computes the flipped coordinates. This change uses transformation for the flip.
+        DirectionFlippingScope handles it.
+
+        * rendering/RenderThemeChromiumLinux.cpp:
+        (WebCore::RenderThemeChromiumLinux::paintProgressBar): Applied DirectionFlippingScope
+        * rendering/RenderThemeChromiumSkia.cpp:
+        (WebCore::RenderThemeChromiumSkia::determinateProgressValueRectFor):
+        - Deleted RTL handling in favor of DirectionFlippingScope
+        (WebCore::RenderThemeChromiumSkia::DirectionFlippingScope::DirectionFlippingScope):
+        (WebCore):
+        (WebCore::RenderThemeChromiumSkia::DirectionFlippingScope::~DirectionFlippingScope):
+        * rendering/RenderThemeChromiumSkia.h:
+        (RenderThemeChromiumSkia):
+        (DirectionFlippingScope): Added.
+        * rendering/RenderThemeChromiumWin.cpp:
+        (WebCore):
+        (WebCore::RenderThemeChromiumWin::paintProgressBar): Applied DirectionFlippingScope
+
 2012-07-25  Vineet Chaudhary  <[email protected]>
 
         https://bugs.webkit.org/show_bug.cgi?id=92260

Modified: trunk/Source/WebCore/rendering/RenderThemeChromiumLinux.cpp (123705 => 123706)


--- trunk/Source/WebCore/rendering/RenderThemeChromiumLinux.cpp	2012-07-26 03:24:46 UTC (rev 123705)
+++ trunk/Source/WebCore/rendering/RenderThemeChromiumLinux.cpp	2012-07-26 03:26:50 UTC (rev 123706)
@@ -357,6 +357,7 @@
     extraParams.progressBar.valueRectWidth = valueRect.width();
     extraParams.progressBar.valueRectHeight = valueRect.height();
 
+    DirectionFlippingScope scope(o, i, rect);
     PlatformSupport::paintThemePart(i.context, PlatformSupport::PartProgressBar, getWebThemeState(this, o), rect, &extraParams);
     return false;
 }

Modified: trunk/Source/WebCore/rendering/RenderThemeChromiumSkia.cpp (123705 => 123706)


--- trunk/Source/WebCore/rendering/RenderThemeChromiumSkia.cpp	2012-07-26 03:24:46 UTC (rev 123705)
+++ trunk/Source/WebCore/rendering/RenderThemeChromiumSkia.cpp	2012-07-26 03:26:50 UTC (rev 123706)
@@ -604,8 +604,6 @@
 IntRect RenderThemeChromiumSkia::determinateProgressValueRectFor(RenderProgress* renderProgress, const IntRect& rect) const
 {
     int dx = rect.width() * renderProgress->position();
-    if (renderProgress->style()->direction() == RTL)
-        return IntRect(rect.x() + rect.width() - dx, rect.y(), dx, rect.height());
     return IntRect(rect.x(), rect.y(), dx, rect.height());
 }
 
@@ -638,6 +636,25 @@
     return renderProgress->isDeterminate() ? determinateProgressValueRectFor(renderProgress, rect) : indeterminateProgressValueRectFor(renderProgress, rect);
 }
 
+RenderThemeChromiumSkia::DirectionFlippingScope::DirectionFlippingScope(RenderObject* renderer, const PaintInfo& paintInfo, const IntRect& rect)
+    : m_needsFlipping(!renderer->style()->isLeftToRightDirection())
+    , m_paintInfo(paintInfo)
+{
+    if (!m_needsFlipping)
+        return;
+    m_paintInfo.context->save();
+    m_paintInfo.context->translate(2 * rect.x() + rect.width(), 0);
+    m_paintInfo.context->scale(FloatSize(-1, 1));
+}
+
+RenderThemeChromiumSkia::DirectionFlippingScope::~DirectionFlippingScope()
+{
+    if (!m_needsFlipping)
+        return;
+    m_paintInfo.context->restore();
+}
+
+
 #endif
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/rendering/RenderThemeChromiumSkia.h (123705 => 123706)


--- trunk/Source/WebCore/rendering/RenderThemeChromiumSkia.h	2012-07-26 03:24:46 UTC (rev 123705)
+++ trunk/Source/WebCore/rendering/RenderThemeChromiumSkia.h	2012-07-26 03:26:50 UTC (rev 123706)
@@ -158,6 +158,16 @@
         IntRect determinateProgressValueRectFor(RenderProgress*, const IntRect&) const;
         IntRect indeterminateProgressValueRectFor(RenderProgress*, const IntRect&) const;
         IntRect progressValueRectFor(RenderProgress*, const IntRect&) const;
+
+        class DirectionFlippingScope {
+        public:
+            DirectionFlippingScope(RenderObject*, const PaintInfo&, const IntRect&);
+            ~DirectionFlippingScope();
+
+        private:
+            bool m_needsFlipping;
+            const PaintInfo& m_paintInfo;
+        };
 #endif
 
 private:

Modified: trunk/Source/WebCore/rendering/RenderThemeChromiumWin.cpp (123705 => 123706)


--- trunk/Source/WebCore/rendering/RenderThemeChromiumWin.cpp	2012-07-26 03:24:46 UTC (rev 123705)
+++ trunk/Source/WebCore/rendering/RenderThemeChromiumWin.cpp	2012-07-26 03:26:50 UTC (rev 123706)
@@ -802,6 +802,7 @@
     IntRect valueRect = renderProgress->isDeterminate() ? determinateProgressValueRectFor(renderProgress, r) : IntRect(0, 0, 0, 0);
     double animatedSeconds = renderProgress->animationStartTime() ?  WTF::currentTime() - renderProgress->animationStartTime() : 0;
     ThemePainter painter(i.context, r);
+    DirectionFlippingScope scope(o, i, r);
     PlatformSupport::paintProgressBar(painter.context(), r, valueRect, renderProgress->isDeterminate(), animatedSeconds);
     return false;
 }
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to