Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(50)

Unified Diff: third_party/WebKit/Source/platform/graphics/GraphicsContext.cpp

Issue 2711983002: Paint dotted borders using circular dots (Closed)
Patch Set: Refactor isDashedStroke Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/platform/graphics/GraphicsContext.cpp
diff --git a/third_party/WebKit/Source/platform/graphics/GraphicsContext.cpp b/third_party/WebKit/Source/platform/graphics/GraphicsContext.cpp
index 6b8397a0c3a16442320670088c393b5e010650e7..cb688e1b62f47a40c3104826d9202c5721eec702 100644
--- a/third_party/WebKit/Source/platform/graphics/GraphicsContext.cpp
+++ b/third_party/WebKit/Source/platform/graphics/GraphicsContext.cpp
@@ -501,9 +501,9 @@ void GraphicsContext::drawLine(const IntPoint& point1, const IntPoint& point2) {
int length = SkScalarRoundToInt(disp.width() + disp.height());
PaintFlags flags(immutableState()->strokeFlags(length));
- if (getStrokeStyle() == DottedStroke || getStrokeStyle() == DashedStroke) {
+ if (StrokeData::strokeIsDashed(width, getStrokeStyle())) {
// Do a rect fill of our endpoints. This ensures we always have the
- // appearance of being a border. We then draw the actual dotted/dashed
+ // appearance of being a border. We then draw the actual dotted/dashed
// line.
SkRect r1, r2;
r1.set(p1.x(), p1.y(), p1.x() + width, p1.y() + width);
@@ -520,6 +520,17 @@ void GraphicsContext::drawLine(const IntPoint& point1, const IntPoint& point2) {
fillFlags.setColor(flags.getColor());
drawRect(r1, fillFlags);
drawRect(r2, fillFlags);
+ } else if (getStrokeStyle() == DottedStroke) {
+ // We draw thick dotted lines with 0 length dash strokes and round endcaps,
+ // producing circles. The endcaps extend beyond the line's endpoints,
+ // so move the start and end in.
+ if (isVerticalLine) {
+ p1.setY(p1.y() + width / 2.f);
+ p2.setY(p2.y() - width / 2.f);
+ } else {
+ p1.setX(p1.x() + width / 2.f);
+ p2.setX(p2.x() - width / 2.f);
+ }
}
adjustLineToPixelBoundaries(p1, p2, width, penStyle);
@@ -1298,7 +1309,7 @@ void GraphicsContext::adjustLineToPixelBoundaries(FloatPoint& p1,
// pass us (y1+y2)/2, e.g., (50+53)/2 = 103/2 = 51 when we want 51.5. It is
// always true that an even width gave us a perfect position, but an odd width
// gave us a position that is off by exactly 0.5.
- if (penStyle == DottedStroke || penStyle == DashedStroke) {
+ if (StrokeData::strokeIsDashed(strokeWidth, penStyle)) {
if (p1.x() == p2.x()) {
p1.setY(p1.y() + strokeWidth);
p2.setY(p2.y() - strokeWidth);
« no previous file with comments | « third_party/WebKit/Source/core/paint/ObjectPainter.cpp ('k') | third_party/WebKit/Source/platform/graphics/StrokeData.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698