| 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) {
|
| 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_;
|
| + r.fBottom = r.fTop + underline_thickness_;
|
| + }
|
| canvas_skia_->drawRect(r, paint_);
|
| }
|
| if (style.strike) {
|
|
|