Modified: trunk/LayoutTests/ChangeLog (98526 => 98527)
--- trunk/LayoutTests/ChangeLog 2011-10-27 00:20:38 UTC (rev 98526)
+++ trunk/LayoutTests/ChangeLog 2011-10-27 00:21:34 UTC (rev 98527)
@@ -1,5 +1,15 @@
2011-10-26 Julien Chaffraix <jchaffr...@webkit.org>
+ Unreviewed, rolling out r98486.
+ http://trac.webkit.org/changeset/98486
+ https://bugs.webkit.org/show_bug.cgi?id=70748
+
+ Broke Chromium's test_expectation.txt
+
+ * platform/chromium/test_expectations.txt:
+
+2011-10-26 Julien Chaffraix <jchaffr...@webkit.org>
+
Unreviewed trivial renaming.
* fast/js/dfg-intrinsic-osr-exit-expected.html: Removed.
Modified: trunk/LayoutTests/platform/chromium/test_expectations.txt (98526 => 98527)
--- trunk/LayoutTests/platform/chromium/test_expectations.txt 2011-10-27 00:20:38 UTC (rev 98526)
+++ trunk/LayoutTests/platform/chromium/test_expectations.txt 2011-10-27 00:21:34 UTC (rev 98527)
@@ -1001,116 +1001,6 @@
BUGWK64876 LINUX WIN GPU : fast/canvas/canvas-scale-strokePath-shadow.html = TEXT
-// Rebaseline once native aa-clipping has landed
-BUGWK70748 CPU : css2.1/t0805-c5517-brdr-s-00-c.html = IMAGE
-BUGWK70748 CPU : fast/backgrounds/border-radius-split-background-image.html = IMAGE
-BUGWK70748 CPU : fast/backgrounds/gradient-background-leakage.html = IMAGE
-BUGWK70748 CPU : fast/borders/borderRadiusAllStylesAllCorners.html = IMAGE
-BUGWK70748 CPU : fast/borders/borderRadiusArcs01.html = IMAGE
-BUGWK70748 CPU : fast/borders/border-radius-complex-inner.html = IMAGE
-BUGWK70748 CPU : fast/borders/borderRadiusDashed01.html = IMAGE
-BUGWK70748 CPU : fast/borders/borderRadiusDashed02.html = IMAGE
-BUGWK70748 CPU : fast/borders/borderRadiusDashed03.html = IMAGE
-BUGWK70748 CPU : fast/borders/borderRadiusDashed04.html = IMAGE
-BUGWK70748 CPU : fast/borders/borderRadiusDashed05.html = IMAGE
-BUGWK70748 CPU : fast/borders/border-radius-different-width-001.html = IMAGE
-BUGWK70748 CPU : fast/borders/borderRadiusDotted01.html = IMAGE
-BUGWK70748 CPU : fast/borders/borderRadiusDotted02.html = IMAGE
-BUGWK70748 CPU : fast/borders/borderRadiusDotted03.html = IMAGE
-BUGWK70748 CPU : fast/borders/borderRadiusDotted04.html = IMAGE
-BUGWK70748 CPU : fast/borders/borderRadiusDotted05.html = IMAGE
-BUGWK70748 CPU : fast/borders/borderRadiusDotted06.html = IMAGE
-BUGWK70748 CPU : fast/borders/borderRadiusDouble01.html = IMAGE
-BUGWK70748 CPU : fast/borders/borderRadiusDouble02.html = IMAGE
-BUGWK70748 CPU : fast/borders/borderRadiusDouble03.html = IMAGE
-BUGWK70748 CPU : fast/borders/borderRadiusDouble04.html = IMAGE
-BUGWK70748 CPU : fast/borders/borderRadiusDouble05.html = IMAGE
-BUGWK70748 CPU : fast/borders/borderRadiusDouble06.html = IMAGE
-BUGWK70748 CPU : fast/borders/borderRadiusDouble07.html = IMAGE
-BUGWK70748 CPU : fast/borders/borderRadiusDouble08.html = IMAGE
-BUGWK70748 CPU : fast/borders/borderRadiusDouble09.html = IMAGE
-BUGWK70748 CPU : fast/borders/border-radius-groove-01.html = IMAGE
-BUGWK70748 CPU : fast/borders/borderRadiusGroove01.html = IMAGE
-BUGWK70748 CPU : fast/borders/border-radius-groove-02.html = IMAGE
-BUGWK70748 CPU : fast/borders/borderRadiusGroove02.html = IMAGE
-BUGWK70748 CPU : fast/borders/border-radius-groove-03.html = IMAGE
-BUGWK70748 CPU : fast/borders/borderRadiusInset01.html = IMAGE
-BUGWK70748 CPU : fast/borders/border-radius-inset-outset.html = IMAGE
-BUGWK70748 CPU : fast/borders/borderRadiusOutset01.html = IMAGE
-BUGWK70748 CPU : fast/borders/borderRadiusRidge01.html = IMAGE
-BUGWK70748 CPU : fast/borders/border-radius-split-inline.html = IMAGE
-BUGWK70748 CPU : fast/borders/border-radius-wide-border-01.html = IMAGE
-BUGWK70748 CPU : fast/borders/border-radius-wide-border-02.html = IMAGE
-BUGWK70748 CPU : fast/borders/border-radius-wide-border-03.html = IMAGE
-BUGWK70748 CPU : fast/borders/border-radius-wide-border-04.html = IMAGE
-BUGWK70748 CPU : fast/borders/border-styles-split.html = IMAGE
-BUGWK70748 CPU : fast/borders/different-color-borders.html = IMAGE
-BUGWK70748 CPU : fast/borders/fieldsetBorderRadius.html = IMAGE
-BUGWK70748 CPU : fast/borders/mixed-border-styles-radius2.html = IMAGE
-BUGWK70748 CPU : fast/borders/mixed-border-styles-radius.html = IMAGE
-BUGWK70748 CPU : fast/box-shadow/basic-shadows.html = IMAGE
-BUGWK70748 CPU : fast/box-shadow/border-radius-big.html = IMAGE
-BUGWK70748 CPU : fast/box-shadow/inset-box-shadows.html = IMAGE
-BUGWK70748 CPU : fast/box-shadow/inset.html = IMAGE
-BUGWK70748 CPU : fast/box-shadow/inset-with-extraordinary-radii-and-border.html = IMAGE
-BUGWK70748 CPU : fast/box-shadow/spread.html = IMAGE
-BUGWK70748 CPU : fast/box-shadow/spread-multiple-inset.html = IMAGE
-BUGWK70748 CPU : fast/box-shadow/spread-multiple-normal.html = IMAGE
-BUGWK70748 CPU : fast/clip/overflow-border-radius-clip.html = IMAGE
-BUGWK70748 CPU : fast/css/box-shadow-and-border-radius.html = IMAGE
-BUGWK70748 CPU : fast/css/nested-rounded-corners.html = IMAGE
-BUGWK70748 CPU : fast/css/text-input-with-webkit-border-radius.html = IMAGE
-BUGWK70748 CPU : fast/forms/basic-selects.html = IMAGE
-BUGWK70748 CPU : fast/forms/validation-message-appearance.html = IMAGE
-BUGWK70748 CPU : fast/layers/video-layer.html = IMAGE
-BUGWK70748 CPU : fast/repaint/shadow-multiple-horizontal.html = IMAGE
-BUGWK70748 CPU : fast/repaint/shadow-multiple-strict-horizontal.html = IMAGE
-BUGWK70748 CPU : fast/repaint/shadow-multiple-strict-vertical.html = IMAGE
-BUGWK70748 CPU : fast/repaint/shadow-multiple-vertical.html = IMAGE
-BUGWK70748 CPU : fast/transforms/shadows.html = IMAGE
-BUGWK70748 CPU : fast/writing-mode/border-styles-vertical-lr.html = IMAGE
-BUGWK70748 CPU : fast/writing-mode/border-styles-vertical-rl.html = IMAGE
-BUGWK70748 CPU : fast/writing-mode/box-shadow-horizontal-bt.html = IMAGE
-BUGWK70748 CPU : fast/writing-mode/box-shadow-vertical-lr.html = IMAGE
-BUGWK70748 CPU : fast/writing-mode/box-shadow-vertical-rl.html = IMAGE
-BUGWK70748 CPU : fullscreen/full-screen-stacking-context.html = IMAGE
-BUGWK70748 CPU : media/audio-controls-rendering.html = IMAGE
-BUGWK70748 CPU : media/audio-repaint.html = IMAGE
-BUGWK70748 CPU : media/controls-after-reload.html = IMAGE
-BUGWK70748 CPU : media/controls-strict.html = IMAGE
-BUGWK70748 CPU : media/controls-styling.html = IMAGE
-BUGWK70748 CPU : media/controls-without-preload.html = IMAGE
-BUGWK70748 CPU : media/media-controls-clone.html = IMAGE
-BUGWK70748 CPU : media/media-document-audio-repaint.html = IMAGE
-BUGWK70748 CPU : media/video-controls-rendering.html = IMAGE
-BUGWK70748 CPU : media/video-display-toggle.html = IMAGE
-BUGWK70748 CPU : media/video-empty-source.html = IMAGE
-BUGWK70748 CPU : media/video-no-audio.html = IMAGE
-BUGWK70748 CPU : media/video-playing-and-pause.html = IMAGE
-BUGWK70748 CPU : media/video-volume-slider.html = IMAGE
-BUGWK70748 CPU : svg/clip-path/clip-in-mask-objectBoundingBox.svg = IMAGE
-BUGWK70748 CPU : svg/clip-path/clip-in-mask-userSpaceOnUse.svg = IMAGE
-BUGWK70748 CPU : svg/clip-path/clip-path-clipped-evenodd-twice.svg = IMAGE
-BUGWK70748 CPU : svg/clip-path/clip-path-clipped-nonzero.svg = IMAGE
-BUGWK70748 CPU : svg/clip-path/clip-path-clipped.svg = IMAGE
-BUGWK70748 CPU : svg/clip-path/clip-path-objectBoundingBox.svg = IMAGE
-BUGWK70748 CPU : svg/clip-path/clip-path-on-clipped-use.svg = IMAGE
-BUGWK70748 CPU : svg/clip-path/clip-path-on-g-and-child.svg = IMAGE
-BUGWK70748 CPU : svg/clip-path/clip-path-on-g.svg = IMAGE
-BUGWK70748 CPU : svg/clip-path/clip-path-on-svg-and-child.svg = IMAGE
-BUGWK70748 CPU : svg/clip-path/clip-path-on-svg.svg = IMAGE
-BUGWK70748 CPU : svg/clip-path/clip-path-transform-2.svg = IMAGE
-BUGWK70748 CPU : svg/clip-path/clip-path-use-as-child.svg = IMAGE
-BUGWK70748 CPU : svg/clip-path/clip-path-userSpaceOnUse.svg = IMAGE
-BUGWK70748 CPU : svg/clip-path/clip-path-with-text-clipped.svg = IMAGE
-BUGWK70748 CPU : svg/css/text-shadow-multiple.xhtml = IMAGE
-BUGWK70748 CPU : svg/custom/resource-invalidate-on-target-update.svg = IMAGE
-BUGWK70748 CPU : svg/custom/use-on-clip-path-with-transformation.svg = IMAGE
-BUGWK70748 CPU : svg/W3C-I18N/tspan-dirLTR-ubOverride-in-rtl-context.svg = IMAGE
-BUGWK70748 CPU : svg/W3C-SVG-1.1/painting-marker-02-f.svg = IMAGE
-BUGWK70748 CPU : fast/borders/only-one-border-with-width.html = IMAGE
-BUGWK70748 CPU : svg/W3C-SVG-1.1/masking-path-05-f.svg = IMAGE
-
// -----------------------------------------------------------------
// Other failures
// -----------------------------------------------------------------
Modified: trunk/Source/WebCore/ChangeLog (98526 => 98527)
--- trunk/Source/WebCore/ChangeLog 2011-10-27 00:20:38 UTC (rev 98526)
+++ trunk/Source/WebCore/ChangeLog 2011-10-27 00:21:34 UTC (rev 98527)
@@ -1,3 +1,19 @@
+2011-10-26 Julien Chaffraix <jchaffr...@webkit.org>
+
+ Unreviewed, rolling out r98486.
+ http://trac.webkit.org/changeset/98486
+ https://bugs.webkit.org/show_bug.cgi?id=70748
+
+ Broke Chromium's test_expectation.txt
+
+ * platform/graphics/skia/PlatformContextSkia.cpp:
+ (WebCore::PlatformContextSkia::State::State):
+ (WebCore::PlatformContextSkia::State::cloneInheritedProperties):
+ (WebCore::PlatformContextSkia::clipPathAntiAliased):
+ (WebCore::PlatformContextSkia::restore):
+ (WebCore::PlatformContextSkia::applyAntiAliasedClipPaths):
+ * platform/graphics/skia/PlatformContextSkia.h:
+
2011-10-26 Dan Bernstein <m...@apple.com>
<rdar://problem/10350775> REGRESSION (r97032): Slider thumb is not drawn
Modified: trunk/Source/WebCore/platform/graphics/skia/PlatformContextSkia.cpp (98526 => 98527)
--- trunk/Source/WebCore/platform/graphics/skia/PlatformContextSkia.cpp 2011-10-27 00:20:38 UTC (rev 98526)
+++ trunk/Source/WebCore/platform/graphics/skia/PlatformContextSkia.cpp 2011-10-27 00:21:34 UTC (rev 98527)
@@ -98,6 +98,9 @@
// If m_imageBufferClip is non-empty, this is the region the image is clipped to.
FloatRect m_clip;
+ // This is a list of clipping paths which are currently active, in the
+ // order in which they were pushed.
+ WTF::Vector<SkPath> m_antiAliasClipPaths;
InterpolationQuality m_interpolationQuality;
PlatformContextSkia::State cloneInheritedProperties();
@@ -143,6 +146,7 @@
, m_textDrawingMode(other.m_textDrawingMode)
, m_imageBufferClip(other.m_imageBufferClip)
, m_clip(other.m_clip)
+ , m_antiAliasClipPaths(other.m_antiAliasClipPaths)
, m_interpolationQuality(other.m_interpolationQuality)
{
// Up the ref count of these. SkSafeRef does nothing if its argument is 0.
@@ -159,7 +163,12 @@
// Returns a new State with all of this object's inherited properties copied.
PlatformContextSkia::State PlatformContextSkia::State::cloneInheritedProperties()
{
- return PlatformContextSkia::State(*this);
+ PlatformContextSkia::State state(*this);
+
+ // Everything is inherited except for the clip paths.
+ state.m_antiAliasClipPaths.clear();
+
+ return state;
}
SkColor PlatformContextSkia::State::applyAlpha(SkColor c) const
@@ -258,7 +267,33 @@
void PlatformContextSkia::clipPathAntiAliased(const SkPath& clipPath)
{
- canvas()->clipPath(clipPath, SkRegion::kIntersect_Op, true);
+ if (m_canvas->getTopDevice()->getDeviceCapabilities() & SkDevice::kVector_Capability) {
+ // When the output is a vector device, like PDF, we don't need antialiased clips.
+ // It's up to the PDF rendering engine to do that. We can simply disable the
+ // antialiased clip code if the output is a vector device.
+ canvas()->clipPath(clipPath);
+ return;
+ }
+
+ // If we are currently tracking any anti-alias clip paths, then we already
+ // have a layer in place and don't need to add another.
+ bool haveLayerOutstanding = m_state->m_antiAliasClipPaths.size();
+
+ // See comments in applyAntiAliasedClipPaths about how this works.
+ m_state->m_antiAliasClipPaths.append(clipPath);
+
+ if (!haveLayerOutstanding) {
+ SkRect bounds = clipPath.getBounds();
+ // If we are doing a clip outside of clipPath our layer needs to be for the whole
+ // canvas, otherwise we can create a smaller layer.
+ SkRect* layerBounds = 0;
+ if (!clipPath.isInverseFillType())
+ layerBounds = &bounds;
+ canvas()->saveLayerAlpha(layerBounds, 255, static_cast<SkCanvas::SaveFlags>(SkCanvas::kHasAlphaLayer_SaveFlag | SkCanvas::kFullColorLayer_SaveFlag | SkCanvas::kClipToLayer_SaveFlag));
+ // Guards state modification during clipped operations.
+ // The state is popped in applyAntiAliasedClipPaths().
+ canvas()->save();
+ }
}
void PlatformContextSkia::restore()
@@ -268,6 +303,9 @@
canvas()->restore();
}
+ if (!m_state->m_antiAliasClipPaths.isEmpty())
+ applyAntiAliasedClipPaths(m_state->m_antiAliasClipPaths);
+
m_stateStack.removeLast();
m_state = &m_stateStack.last();
@@ -584,6 +622,45 @@
m_canvas->drawBitmap(imageBuffer, SkFloatToScalar(rect.x()), SkFloatToScalar(rect.y()), &paint);
}
+void PlatformContextSkia::applyAntiAliasedClipPaths(WTF::Vector<SkPath>& paths)
+{
+ // Anti-aliased clipping:
+ //
+ // Skia's clipping is 1-bit only. Consider what would happen if it were 8-bit:
+ // We have a square canvas, filled with white and we declare a circular
+ // clipping path. Then we fill twice with a black rectangle. The fractional
+ // pixels would first get the correct color (white * alpha + black * (1 -
+ // alpha)), but the second fill would apply the alpha to the already
+ // modified color and the result would be too dark.
+ //
+ // This, anti-aliased clipping needs to be performed after the drawing has
+ // been done. In order to do this, we create a new layer of the canvas in
+ // clipPathAntiAliased and store the clipping path. All drawing is done to
+ // the layer's bitmap while it's in effect. When WebKit calls restore() to
+ // undo the clipping, this function is called.
+ //
+ // Here, we walk the list of clipping paths backwards and, for each, we
+ // clear outside of the clipping path. We only need a single extra layer
+ // for any number of clipping paths.
+ //
+ // When we call restore on the SkCanvas, the layer's bitmap is composed
+ // into the layer below and we end up with correct, anti-aliased clipping.
+
+ m_canvas->restore();
+
+ SkPaint paint;
+ paint.setXfermodeMode(SkXfermode::kClear_Mode);
+ paint.setAntiAlias(true);
+ paint.setStyle(SkPaint::kFill_Style);
+
+ for (size_t i = paths.size() - 1; i < paths.size(); --i) {
+ paths[i].toggleInverseFillType();
+ m_canvas->drawPath(paths[i], paint);
+ }
+
+ m_canvas->restore();
+}
+
void PlatformContextSkia::setGraphicsContext3D(GraphicsContext3D* context)
{
m_gpuContext = context;
Modified: trunk/Source/WebCore/platform/graphics/skia/PlatformContextSkia.h (98526 => 98527)
--- trunk/Source/WebCore/platform/graphics/skia/PlatformContextSkia.h 2011-10-27 00:20:38 UTC (rev 98526)
+++ trunk/Source/WebCore/platform/graphics/skia/PlatformContextSkia.h 2011-10-27 00:21:34 UTC (rev 98527)
@@ -185,6 +185,7 @@
// Used when restoring and the state has an image clip. Only shows the pixels in
// m_canvas that are also in imageBuffer.
void applyClipFromImage(const FloatRect&, const SkBitmap&);
+ void applyAntiAliasedClipPaths(WTF::Vector<SkPath>& paths);
// common code between setupPaintFor[Filling,Stroking]
void setupShader(SkPaint*, Gradient*, Pattern*, SkColor) const;