Add diagonal strike support in RenderText
BUG=111125
TEST=manual
Review URL: https://chromiumcodereview.appspot.com/9234052
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@119478 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/ui/gfx/render_text.cc b/ui/gfx/render_text.cc
index f61ddc9..416e96df 100644
--- a/ui/gfx/render_text.cc
+++ b/ui/gfx/render_text.cc
@@ -239,13 +239,18 @@
// Based on |SkCanvas::DrawTextDecorations()| and constants from:
// third_party/skia/src/core/SkTextFormatParams.h
void SkiaTextRenderer::DrawDecorations(int x, int y, int width,
- bool underline, bool strike) {
+ const StyleRange& style) {
+ if (!style.underline && !style.strike && !style.diagonal_strike)
+ return;
+
// Fraction of the text size to lower a strike through below the baseline.
const SkScalar kStrikeThroughOffset = (-SK_Scalar1 * 6 / 21);
// Fraction of the text size to lower an underline below the baseline.
const SkScalar kUnderlineOffset = (SK_Scalar1 / 9);
// Fraction of the text size to use for a strike through or under-line.
const SkScalar kLineThickness = (SK_Scalar1 / 18);
+ // Fraction of the text size to use for a top margin of a diagonal strike.
+ const SkScalar kDiagonalStrikeThroughMarginOffset = (SK_Scalar1 / 4);
SkScalar text_size = paint_.getTextSize();
SkScalar height = SkScalarMul(text_size, kLineThickness);
@@ -254,18 +259,30 @@
r.fLeft = x;
r.fRight = x + width;
- if (underline) {
+ if (style.underline) {
SkScalar offset = SkScalarMulAdd(text_size, kUnderlineOffset, y);
r.fTop = offset;
r.fBottom = offset + height;
canvas_skia_->drawRect(r, paint_);
}
- if (strike) {
+ if (style.strike) {
SkScalar offset = SkScalarMulAdd(text_size, kStrikeThroughOffset, y);
r.fTop = offset;
r.fBottom = offset + height;
canvas_skia_->drawRect(r, paint_);
}
+ if (style.diagonal_strike) {
+ SkScalar offset =
+ SkScalarMul(text_size, kDiagonalStrikeThroughMarginOffset);
+ SkPaint paint(paint_);
+ paint.setAntiAlias(true);
+ paint.setStyle(SkPaint::kFill_Style);
+ paint.setStrokeWidth(height);
+ canvas_skia_->drawLine(
+ SkIntToScalar(x), SkIntToScalar(y) - text_size + offset,
+ SkIntToScalar(x + width), SkIntToScalar(y),
+ paint);
+ }
}
} // namespace internal
@@ -275,6 +292,7 @@
: foreground(SK_ColorBLACK),
font_style(gfx::Font::NORMAL),
strike(false),
+ diagonal_strike(false),
underline(false) {
}