Index: include/core/SkPaint.h |
diff --git a/include/core/SkPaint.h b/include/core/SkPaint.h |
index 48cd573dc4d115b59983d3b656ae13d0be7fd7d6..7d553ec8e0cd5a219e69a0652fa3f79fb5ec38a9 100644 |
--- a/include/core/SkPaint.h |
+++ b/include/core/SkPaint.h |
@@ -731,17 +731,60 @@ public: |
void setTextEncoding(TextEncoding encoding); |
struct FontMetrics { |
+ /** Flags which indicate the confidence level of various metrics. |
+ A set flag indicates that the metric may be trusted. |
+ */ |
+ enum FontMetricsFlags { |
+ kUnderlineThinknessIsValid_Flag = 1 << 0, |
+ kUnderlinePositionIsValid_Flag = 1 << 1, |
+ }; |
+ |
+ uint32_t fFlags; //!< Bit field to identify which values are unknown |
SkScalar fTop; //!< The greatest distance above the baseline for any glyph (will be <= 0) |
SkScalar fAscent; //!< The recommended distance above the baseline (will be <= 0) |
SkScalar fDescent; //!< The recommended distance below the baseline (will be >= 0) |
SkScalar fBottom; //!< The greatest distance below the baseline for any glyph (will be >= 0) |
SkScalar fLeading; //!< The recommended distance to add between lines of text (will be >= 0) |
- SkScalar fAvgCharWidth; //!< the average charactor width (>= 0) |
- SkScalar fMaxCharWidth; //!< the max charactor width (>= 0) |
+ SkScalar fAvgCharWidth; //!< the average character width (>= 0) |
+ SkScalar fMaxCharWidth; //!< the max character width (>= 0) |
SkScalar fXMin; //!< The minimum bounding box x value for all glyphs |
SkScalar fXMax; //!< The maximum bounding box x value for all glyphs |
SkScalar fXHeight; //!< The height of an 'x' in px, or 0 if no 'x' in face |
SkScalar fCapHeight; //!< The cap height (> 0), or 0 if cannot be determined. |
+ SkScalar fUnderlineThickness; //!< underline thickness, or 0 if cannot be determined |
+ |
+ /** Underline Position - position of the top of the Underline stroke |
+ relative to the baseline, this can have following values |
+ - Negative - means underline should be drawn above baseline. |
+ - Positive - means below baseline. |
+ - Zero - mean underline should be drawn on baseline. |
+ */ |
+ SkScalar fUnderlinePosition; //!< underline position, or 0 if cannot be determined |
+ |
+ /** If the fontmetrics has a valid underlinethickness, return true, and set the |
+ thickness param to that value. If it doesn't return false and ignore the |
+ thickness param. |
+ */ |
+ bool hasUnderlineThickness(SkScalar* thickness) const { |
+ if (SkToBool(fFlags & kUnderlineThinknessIsValid_Flag)) { |
+ *thickness = fUnderlineThickness; |
+ return true; |
+ } |
+ return false; |
+ } |
+ |
+ /** If the fontmetrics has a valid underlineposition, return true, and set the |
+ thickness param to that value. If it doesn't return false and ignore the |
+ thickness param. |
+ */ |
+ bool hasUnderlinePosition(SkScalar* position) const { |
+ if (SkToBool(fFlags & kUnderlinePositionIsValid_Flag)) { |
+ *position = fUnderlinePosition; |
+ return true; |
+ } |
+ return false; |
+ } |
+ |
}; |
/** Return the recommend spacing between lines (which will be |