paint.setEmbeddedBitmapText(make_bool());
paint.setAutohinted(make_bool());
paint.setVerticalText(make_bool());
+ paint.setUnderlineText(make_bool());
+ paint.setStrikeThruText(make_bool());
paint.setFakeBoldText(make_bool());
paint.setDevKernText(make_bool());
paint.setFilterQuality(make_filter_quality());
fuzz->next(&b);
p.setLinearText(b);
fuzz->next(&b);
+ p.setStrikeThruText(b);
+ fuzz->next(&b);
p.setSubpixelText(b);
fuzz->next(&x);
p.setTextScaleX(x);
fuzz->next(&x);
p.setTextSize(x);
fuzz->next(&b);
+ p.setUnderlineText(b);
+ fuzz->next(&b);
p.setVerticalText(b);
SkCanvas* cnv = surface->getCanvas();
canvas->restore();
}
+DEF_SIMPLE_GM(textunderstrike, canvas, 460, 680) {
+ canvas->clear(SK_ColorYELLOW);
+ SkPaint paint;
+ sk_tool_utils::set_portable_typeface(&paint);
+ paint.setTextSize(50);
+ paint.setStrokeWidth(5);
+ paint.setAntiAlias(true);
+
+ auto drawText = [&]() {
+ paint.setStyle(SkPaint::kFill_Style);
+ canvas->drawText("Hello", 5, 100, 50, paint);
+ paint.setStyle(SkPaint::kStroke_Style);
+ canvas->drawText("Hello", 5, 100, 100, paint);
+ canvas->translate(0, 100);
+ };
+
+ drawText();
+ paint.setUnderlineText(true);
+ drawText();
+ paint.setUnderlineText(false);
+ paint.setStrikeThruText(true);
+ drawText();
+ paint.setUnderlineText(true);
+ drawText();
+ paint.setColor(SK_ColorWHITE);
+ paint.setStyle(SkPaint::kStroke_Style);
+ canvas->drawText("Hello", 5, 100, 50, paint);
+ paint.setColor(SK_ColorBLUE);
+ paint.setStyle(SkPaint::kFill_Style);
+ canvas->drawText("Hello", 5, 100, 50, paint);
+}
+
static SkPath create_underline(const SkTDArray<SkScalar>& intersections,
SkScalar last, SkScalar finalPos,
SkScalar uPos, SkScalar uWidth, SkScalar textSize) {
"SK_SUPPORT_LEGACY_EMBOSSMASKFILTER",
"SK_SUPPORT_EXOTIC_CLIPOPS",
"SK_SUPPORT_LEGACY_CANVAS_HELPERS",
- "SK_SUPPORT_LEGACY_PAINT_TEXTDECORATION",
]
enum Flags {
kAntiAlias_Flag = 0x01, //!< mask to enable antialiasing
kDither_Flag = 0x04, //!< mask to enable dithering
+ kUnderlineText_Flag = 0x08, //!< mask to enable underline text
+ kStrikeThruText_Flag = 0x10, //!< mask to enable strike-thru text
kFakeBoldText_Flag = 0x20, //!< mask to enable fake-bold text
kLinearText_Flag = 0x40, //!< mask to enable linear-text
kSubpixelText_Flag = 0x80, //!< mask to enable subpixel text positioning
// when adding extra flags, note that the fFlags member is specified
// with a bit-width and you'll have to expand it.
- kAllFlags = 0xFFFF,
-
-#ifdef SK_SUPPORT_LEGACY_PAINT_TEXTDECORATION
- kUnderlineText_Flag = 0x08,
- kStrikeThruText_Flag = 0x10,
-#endif
+ kAllFlags = 0xFFFF
};
#ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK
/** Helper for getFlags(), returning true if kUnderlineText_Flag bit is set
@return true if the underlineText bit is set in the paint's flags.
*/
-#ifdef SK_SUPPORT_LEGACY_PAINT_TEXTDECORATION
- bool isUnderlineText() const { return false; }
-#endif
+ bool isUnderlineText() const {
+ return SkToBool(this->getFlags() & kUnderlineText_Flag);
+ }
+
+ /** Helper for setFlags(), setting or clearing the kUnderlineText_Flag bit
+ @param underlineText true to set the underlineText bit in the paint's
+ flags, false to clear it.
+ */
+ void setUnderlineText(bool underlineText);
/** Helper for getFlags(), returns true if kStrikeThruText_Flag bit is set
@return true if the strikeThruText bit is set in the paint's flags.
*/
-#ifdef SK_SUPPORT_LEGACY_PAINT_TEXTDECORATION
- bool isStrikeThruText() const { return false; }
-#endif
+ bool isStrikeThruText() const {
+ return SkToBool(this->getFlags() & kStrikeThruText_Flag);
+ }
+
+ /** Helper for setFlags(), setting or clearing the kStrikeThruText_Flag bit
+ @param strikeThruText true to set the strikeThruText bit in the
+ paint's flags, false to clear it.
+ */
+ void setStrikeThruText(bool strikeThruText);
/** Helper for getFlags(), returns true if kFakeBoldText_Flag bit is set
@return true if the kFakeBoldText_Flag bit is set in the paint's flags.
"SK_SUPPORT_LEGACY_BITMAP_SETPIXELREF",
"SK_SUPPORT_LEGACY_CLIPOP_EXOTIC_NAMES",
"SK_SUPPORT_LEGACY_CANVAS_HELPERS",
- "SK_SUPPORT_LEGACY_PAINT_TEXTDECORATION",
]
################################################################################
paint.setEmbeddedBitmapText(make_bool());
paint.setAutohinted(make_bool());
paint.setVerticalText(make_bool());
+ paint.setUnderlineText(make_bool());
+ paint.setStrikeThruText(make_bool());
paint.setFakeBoldText(make_bool());
paint.setDevKernText(make_bool());
paint.setFilterQuality(make_filter_quality());
this->setFlags(set_clear_mask(fBitfields.fFlags, doVertical, kVerticalText_Flag));
}
+void SkPaint::setUnderlineText(bool doUnderline) {
+ this->setFlags(set_clear_mask(fBitfields.fFlags, doUnderline, kUnderlineText_Flag));
+}
+
+void SkPaint::setStrikeThruText(bool doStrikeThru) {
+ this->setFlags(set_clear_mask(fBitfields.fFlags, doStrikeThru, kStrikeThruText_Flag));
+}
+
void SkPaint::setFakeBoldText(bool doFakeBold) {
this->setFlags(set_clear_mask(fBitfields.fFlags, doFakeBold, kFakeBoldText_Flag));
}
bool needSeparator = false;
SkAddFlagToString(str, this->isAntiAlias(), "AntiAlias", &needSeparator);
SkAddFlagToString(str, this->isDither(), "Dither", &needSeparator);
+ SkAddFlagToString(str, this->isUnderlineText(), "UnderlineText", &needSeparator);
+ SkAddFlagToString(str, this->isStrikeThruText(), "StrikeThruText", &needSeparator);
SkAddFlagToString(str, this->isFakeBoldText(), "FakeBoldText", &needSeparator);
SkAddFlagToString(str, this->isLinearText(), "LinearText", &needSeparator);
SkAddFlagToString(str, this->isSubpixelText(), "SubpixelText", &needSeparator);
private:
const static uint32_t kFlagsMask =
SkPaint::kAntiAlias_Flag |
+ SkPaint::kUnderlineText_Flag |
+ SkPaint::kStrikeThruText_Flag |
SkPaint::kFakeBoldText_Flag |
SkPaint::kLinearText_Flag |
SkPaint::kSubpixelText_Flag |
font.setTextAlign(SkPaint::kCenter_Align);
font.setHinting(SkPaint::kFull_Hinting);
font.setAntiAlias(true);
+ font.setUnderlineText(true);
+ font.setStrikeThruText(true);
font.setFakeBoldText(true);
font.setLinearText(true);
font.setSubpixelText(true);
REPORTER_ASSERT(reporter, defaultPaint.getTextAlign() != font.getTextAlign());
REPORTER_ASSERT(reporter, defaultPaint.getHinting() != font.getHinting());
REPORTER_ASSERT(reporter, defaultPaint.isAntiAlias() != font.isAntiAlias());
+ REPORTER_ASSERT(reporter, defaultPaint.isUnderlineText() != font.isUnderlineText());
+ REPORTER_ASSERT(reporter, defaultPaint.isStrikeThruText() != font.isStrikeThruText());
REPORTER_ASSERT(reporter, defaultPaint.isFakeBoldText() != font.isFakeBoldText());
REPORTER_ASSERT(reporter, defaultPaint.isLinearText() != font.isLinearText());
REPORTER_ASSERT(reporter, defaultPaint.isSubpixelText() != font.isSubpixelText());
REPORTER_ASSERT(reporter, paint.getTextAlign() == font.getTextAlign());
REPORTER_ASSERT(reporter, paint.getHinting() == font.getHinting());
REPORTER_ASSERT(reporter, paint.isAntiAlias() == font.isAntiAlias());
+ REPORTER_ASSERT(reporter, paint.isUnderlineText() == font.isUnderlineText());
+ REPORTER_ASSERT(reporter, paint.isStrikeThruText() == font.isStrikeThruText());
REPORTER_ASSERT(reporter, paint.isFakeBoldText() == font.isFakeBoldText());
REPORTER_ASSERT(reporter, paint.isLinearText() == font.isLinearText());
REPORTER_ASSERT(reporter, paint.isSubpixelText() == font.isSubpixelText());
SkPaint groupPaint;
groupPaint.setTextSize(18);
+ groupPaint.setUnderlineText(true);
groupPaint.setAntiAlias(true);
groupPaint.setColor(0xFFFFFFFF);