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

Side by Side Diff: Source/platform/graphics/GraphicsContext.cpp

Issue 185683003: Draw a single underline for text-decoration-style: [dashed, dotted]. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2003, 2004, 2005, 2006, 2009 Apple Inc. All rights reserved. 2 * Copyright (C) 2003, 2004, 2005, 2006, 2009 Apple Inc. All rights reserved.
3 * Copyright (C) 2013 Google Inc. All rights reserved. 3 * Copyright (C) 2013 Google Inc. All rights reserved.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions 6 * modification, are permitted provided that the following conditions
7 * are met: 7 * are met:
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
(...skipping 749 matching lines...) Expand 10 before | Expand all | Expand 10 after
760 760
761 DrawLooper drawLooper; 761 DrawLooper drawLooper;
762 drawLooper.addShadow(shadowOffset, shadowBlur, shadowColor, 762 drawLooper.addShadow(shadowOffset, shadowBlur, shadowColor,
763 DrawLooper::ShadowRespectsTransforms, DrawLooper::ShadowIgnoresAlpha); 763 DrawLooper::ShadowRespectsTransforms, DrawLooper::ShadowIgnoresAlpha);
764 setDrawLooper(drawLooper); 764 setDrawLooper(drawLooper);
765 fillRectWithRoundedHole(outerRect, roundedHole, fillColor); 765 fillRectWithRoundedHole(outerRect, roundedHole, fillColor);
766 restore(); 766 restore();
767 clearDrawLooper(); 767 clearDrawLooper();
768 } 768 }
769 769
770 // This is only used to draw borders.
771 void GraphicsContext::drawLine(const IntPoint& point1, const IntPoint& point2) 770 void GraphicsContext::drawLine(const IntPoint& point1, const IntPoint& point2)
772 { 771 {
773 if (paintingDisabled()) 772 if (paintingDisabled())
774 return; 773 return;
775 774
776 StrokeStyle penStyle = strokeStyle(); 775 StrokeStyle penStyle = strokeStyle();
777 if (penStyle == NoStroke) 776 if (penStyle == NoStroke)
778 return; 777 return;
779 778
780 SkPaint paint; 779 SkPaint paint;
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
948 } 947 }
949 948
950 void GraphicsContext::drawLineForText(const FloatPoint& pt, float width, bool pr inting) 949 void GraphicsContext::drawLineForText(const FloatPoint& pt, float width, bool pr inting)
951 { 950 {
952 if (paintingDisabled()) 951 if (paintingDisabled())
953 return; 952 return;
954 953
955 if (width <= 0) 954 if (width <= 0)
956 return; 955 return;
957 956
958 int thickness = SkMax32(static_cast<int>(strokeThickness()), 1);
959 SkRect r;
960 r.fLeft = WebCoreFloatToSkScalar(pt.x());
961 // Avoid anti-aliasing lines. Currently, these are always horizontal.
962 // Round to nearest pixel to match text and other content.
963 r.fTop = WebCoreFloatToSkScalar(floorf(pt.y() + 0.5f));
964 r.fRight = r.fLeft + WebCoreFloatToSkScalar(width);
965 r.fBottom = r.fTop + SkIntToScalar(thickness);
966
967 SkPaint paint; 957 SkPaint paint;
968 switch (strokeStyle()) { 958 switch (strokeStyle()) {
969 case NoStroke: 959 case NoStroke:
970 case SolidStroke: 960 case SolidStroke:
971 case DoubleStroke: 961 case DoubleStroke:
972 case WavyStroke: 962 case WavyStroke: {
963 int thickness = SkMax32(static_cast<int>(strokeThickness()), 1);
964 SkRect r;
965 r.fLeft = WebCoreFloatToSkScalar(pt.x());
966 // Avoid anti-aliasing lines. Currently, these are always horizontal.
967 // Round to nearest pixel to match text and other content.
968 r.fTop = WebCoreFloatToSkScalar(floorf(pt.y() + 0.5f));
969 r.fRight = r.fLeft + WebCoreFloatToSkScalar(width);
970 r.fBottom = r.fTop + SkIntToScalar(thickness);
973 setupPaintForFilling(&paint); 971 setupPaintForFilling(&paint);
974 break; 972 // Text lines are drawn using the stroke color.
973 paint.setColor(effectiveStrokeColor());
974 drawRect(r, paint);
975 return;
976 }
975 case DottedStroke: 977 case DottedStroke:
976 case DashedStroke: 978 case DashedStroke: {
977 setupPaintForStroking(&paint); 979 int y = floorf(pt.y() + std::max<float>(strokeThickness() / 2.0f, 0.5f)) ;
978 break; 980 drawLine(IntPoint(pt.x(), y), IntPoint(pt.x() + width, y));
981 return;
982 }
979 } 983 }
980 984
981 // Text lines are drawn using the stroke color. 985 ASSERT_NOT_REACHED();
982 paint.setColor(effectiveStrokeColor());
983 drawRect(r, paint);
984 } 986 }
985 987
986 // Draws a filled rectangle with a stroked border. 988 // Draws a filled rectangle with a stroked border.
987 void GraphicsContext::drawRect(const IntRect& rect) 989 void GraphicsContext::drawRect(const IntRect& rect)
988 { 990 {
989 if (paintingDisabled()) 991 if (paintingDisabled())
990 return; 992 return;
991 993
992 ASSERT(!rect.isEmpty()); 994 ASSERT(!rect.isEmpty());
993 if (rect.isEmpty()) 995 if (rect.isEmpty())
(...skipping 1021 matching lines...) Expand 10 before | Expand all | Expand 10 after
2015 2017
2016 void GraphicsContext::didDrawTextInRect(const SkRect& textRect) 2018 void GraphicsContext::didDrawTextInRect(const SkRect& textRect)
2017 { 2019 {
2018 if (m_trackTextRegion) { 2020 if (m_trackTextRegion) {
2019 TRACE_EVENT0("skia", "PlatformContextSkia::trackTextRegion"); 2021 TRACE_EVENT0("skia", "PlatformContextSkia::trackTextRegion");
2020 m_textRegion.join(textRect); 2022 m_textRegion.join(textRect);
2021 } 2023 }
2022 } 2024 }
2023 2025
2024 } 2026 }
OLDNEW
« Source/core/rendering/RenderBoxModelObject.h ('K') | « Source/core/rendering/RenderBoxModelObject.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698