Chromium Code Reviews| Index: ui/gfx/render_text.cc |
| =================================================================== |
| --- ui/gfx/render_text.cc (revision 141008) |
| +++ ui/gfx/render_text.cc (working copy) |
| @@ -179,9 +179,15 @@ |
| namespace internal { |
| +// Value of |underline_thickness_| that indicates that underline metrics have |
| +// not been set explicitly. |
| +const SkScalar kUnderlineMetricsNotSet = -1.0f; |
| + |
| SkiaTextRenderer::SkiaTextRenderer(Canvas* canvas) |
| : canvas_skia_(canvas->sk_canvas()), |
| - started_drawing_(false) { |
| + started_drawing_(false), |
| + underline_thickness_(kUnderlineMetricsNotSet), |
| + underline_position_(0.0f) { |
|
msw
2012/06/12 20:44:39
You should also init this to kUnderlineMetricsNotS
|
| DCHECK(canvas_skia_); |
| paint_.setTextEncoding(SkPaint::kGlyphID_TextEncoding); |
| paint_.setStyle(SkPaint::kFill_Style); |
| @@ -221,7 +227,7 @@ |
| paint_.setTypeface(typeface); |
| } |
| -void SkiaTextRenderer::SetTextSize(int size) { |
| +void SkiaTextRenderer::SetTextSize(SkScalar size) { |
| paint_.setTextSize(size); |
| } |
| @@ -252,6 +258,12 @@ |
| paint_.setShader(shader); |
| } |
| +void SkiaTextRenderer::SetUnderlineMetrics(SkScalar thickness, |
| + SkScalar position) { |
| + underline_thickness_ = thickness; |
| + underline_position_ = position; |
| +} |
| + |
| void SkiaTextRenderer::DrawPosText(const SkPoint* pos, |
| const uint16* glyphs, |
| size_t glyph_count) { |
| @@ -304,9 +316,13 @@ |
| r.fRight = x + width; |
| if (style.underline) { |
| - SkScalar offset = SkScalarMulAdd(text_size, kUnderlineOffset, y); |
| - r.fTop = offset; |
| - r.fBottom = offset + height; |
| + if (underline_thickness_ == kUnderlineMetricsNotSet) { |
| + r.fTop = SkScalarMulAdd(text_size, kUnderlineOffset, y); |
| + r.fBottom = r.fTop + height; |
| + } else { |
| + r.fTop = y + underline_position_; |
|
msw
2012/06/12 20:44:39
You should probably DCHECK that underline_position
Alexei Svitkine (slow)
2012/06/12 20:47:43
-1.0 may be a valid position offset, but definitel
msw
2012/06/12 21:28:12
Fair enough, then it might be worthwhile to add a
|
| + r.fBottom = r.fTop + underline_thickness_; |
| + } |
| canvas_skia_->drawRect(r, paint_); |
| } |
| if (style.strike) { |