Index: third_party/WebKit/WebCore/platform/graphics/skia/PlatformContextSkia.cpp |
=================================================================== |
--- third_party/WebKit/WebCore/platform/graphics/skia/PlatformContextSkia.cpp (revision 11711) |
+++ third_party/WebKit/WebCore/platform/graphics/skia/PlatformContextSkia.cpp (working copy) |
@@ -272,12 +272,21 @@ |
if (m_state->m_strokeStyle != WebCore::NoStroke && |
(m_state->m_strokeColor & 0xFF000000)) { |
- if (fillcolorNotTransparent) { |
- // This call is expensive so don't call it unnecessarily. |
- paint.reset(); |
- } |
- setupPaintForStroking(&paint, &rect, 0); |
- canvas()->drawRect(rect, paint); |
+ // We do a fill of four rects to simulate the stroke of a border. |
+ SkColor oldFillColor = m_state->m_fillColor; |
+ if (oldFillColor != m_state->m_strokeColor) |
+ setFillColor(m_state->m_strokeColor); |
+ setupPaintForFilling(&paint); |
+ SkRect topBorder = { rect.fLeft, rect.fTop, rect.width(), 1}; |
+ canvas()->drawRect(topBorder, paint); |
+ SkRect bottomBorder = { rect.fLeft, rect.fBottom - 1, rect.width(), 1 }; |
+ canvas()->drawRect(bottomBorder, paint); |
+ SkRect leftBorder = { rect.fLeft, rect.fTop + 1, 1, rect.height() - 2 }; |
+ canvas()->drawRect(leftBorder, paint); |
+ SkRect rightBorder = { rect.fRight - 1, rect.fTop + 1, 1, rect.height() - 2 }; |
+ canvas()->drawRect(rightBorder, paint); |
+ if (oldFillColor != m_state->m_strokeColor) |
+ setFillColor(oldFillColor); |
} |
} |
@@ -311,10 +320,6 @@ |
setupPaintCommon(paint); |
float width = m_state->m_strokeThickness; |
- // This allows dashing and dotting to work properly for hairline strokes. |
- if (width == 0) |
- width = 1; |
- |
paint->setColor(m_state->applyAlpha(m_state->m_strokeColor)); |
paint->setStyle(SkPaint::kStroke_Style); |
paint->setStrokeWidth(SkFloatToScalar(width)); |
@@ -322,9 +327,6 @@ |
paint->setStrokeJoin(m_state->m_lineJoin); |
paint->setStrokeMiter(SkFloatToScalar(m_state->m_miterLimit)); |
- if (rect != 0 && (static_cast<int>(roundf(width)) & 1)) |
- rect->inset(-SK_ScalarHalf, -SK_ScalarHalf); |
- |
if (m_state->m_dash) |
paint->setPathEffect(m_state->m_dash); |
else { |
@@ -339,7 +341,8 @@ |
SkScalar dashLength; |
if (length) { |
// Determine about how many dashes or dots we should have. |
- int numDashes = length / roundf(width); |
+ float roundedWidth = roundf(width); |
+ int numDashes = roundedWidth ? (length / roundedWidth) : length; |
if (!(numDashes & 1)) |
numDashes++; // Make it odd so we end on a dash/dot. |
// Use the number of dashes to determine the length of a |