Index: ui/gfx/render_text.cc |
=================================================================== |
--- ui/gfx/render_text.cc (revision 140345) |
+++ ui/gfx/render_text.cc (working copy) |
@@ -179,9 +179,14 @@ |
namespace internal { |
+// Indicates that underline metrics have not been set explicitly. |
+const SkScalar kUnderlineMetricsNotSet = -1.0f; |
msw
2012/06/06 01:12:51
nit: technically this applies to a single metric v
Alexei Svitkine (slow)
2012/06/06 14:46:27
Done.
I've also changed the value to be SK_Scalar
|
+ |
SkiaTextRenderer::SkiaTextRenderer(Canvas* canvas) |
: canvas_skia_(canvas->sk_canvas()), |
- started_drawing_(false) { |
+ started_drawing_(false), |
+ underline_thickness_(kUnderlineMetricsNotSet), |
+ underline_position_(kUnderlineMetricsNotSet) { |
DCHECK(canvas_skia_); |
paint_.setTextEncoding(SkPaint::kGlyphID_TextEncoding); |
paint_.setStyle(SkPaint::kFill_Style); |
@@ -221,7 +226,7 @@ |
paint_.setTypeface(typeface); |
} |
-void SkiaTextRenderer::SetTextSize(int size) { |
+void SkiaTextRenderer::SetTextSize(SkScalar size) { |
paint_.setTextSize(size); |
} |
@@ -252,6 +257,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 +315,14 @@ |
r.fRight = x + width; |
if (style.underline) { |
- SkScalar offset = SkScalarMulAdd(text_size, kUnderlineOffset, y); |
- r.fTop = offset; |
- r.fBottom = offset + height; |
+ if (underline_position_ == kUnderlineMetricsNotSet) { |
msw
2012/06/06 01:12:51
Take the 'not set' path if either value isn't set
Alexei Svitkine (slow)
2012/06/06 14:46:27
Made the two fields independent - so that none, on
|
+ SkScalar offset = SkScalarMulAdd(text_size, kUnderlineOffset, y); |
+ r.fTop = offset; |
+ r.fBottom = offset + height; |
+ } else { |
+ r.fTop = underline_position_; |
+ r.fBottom = r.fTop + underline_thickness_; |
+ } |
canvas_skia_->drawRect(r, paint_); |
} |
if (style.strike) { |