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;
}