aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--fuzz/FilterFuzz.cpp2
-rw-r--r--fuzz/FuzzDrawFunctions.cpp4
-rw-r--r--gm/texteffects.cpp32
-rw-r--r--gn/android_framework_defines.gni1
-rw-r--r--include/core/SkPaint.h33
-rw-r--r--public.bzl1
-rw-r--r--samplecode/SampleFilterFuzz.cpp2
-rw-r--r--src/core/SkPaint.cpp10
-rw-r--r--src/core/SkTextBlob.cpp2
-rw-r--r--tests/TextBlobTest.cpp6
-rw-r--r--tools/viewer/sk_app/CommandSet.cpp1
11 files changed, 80 insertions, 14 deletions
diff --git a/fuzz/FilterFuzz.cpp b/fuzz/FilterFuzz.cpp
index bd9e5fde8f..e3d30b5af7 100644
--- a/fuzz/FilterFuzz.cpp
+++ b/fuzz/FilterFuzz.cpp
@@ -525,6 +525,8 @@ static SkPaint make_paint() {
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());
diff --git a/fuzz/FuzzDrawFunctions.cpp b/fuzz/FuzzDrawFunctions.cpp
index e9e4f8e041..2cd3828a51 100644
--- a/fuzz/FuzzDrawFunctions.cpp
+++ b/fuzz/FuzzDrawFunctions.cpp
@@ -141,6 +141,8 @@ static void fuzz_drawText(Fuzz* fuzz, sk_sp<SkTypeface> font) {
fuzz->next(&b);
p.setLinearText(b);
fuzz->next(&b);
+ p.setStrikeThruText(b);
+ fuzz->next(&b);
p.setSubpixelText(b);
fuzz->next(&x);
p.setTextScaleX(x);
@@ -149,6 +151,8 @@ static void fuzz_drawText(Fuzz* fuzz, sk_sp<SkTypeface> font) {
fuzz->next(&x);
p.setTextSize(x);
fuzz->next(&b);
+ p.setUnderlineText(b);
+ fuzz->next(&b);
p.setVerticalText(b);
SkCanvas* cnv = surface->getCanvas();
diff --git a/gm/texteffects.cpp b/gm/texteffects.cpp
index e74d7a97f5..c4c389a065 100644
--- a/gm/texteffects.cpp
+++ b/gm/texteffects.cpp
@@ -195,6 +195,38 @@ DEF_SIMPLE_GM(texteffects, canvas, 460, 680) {
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) {
diff --git a/gn/android_framework_defines.gni b/gn/android_framework_defines.gni
index 386cba35d8..b79bb87967 100644
--- a/gn/android_framework_defines.gni
+++ b/gn/android_framework_defines.gni
@@ -17,5 +17,4 @@ android_framework_defines = [
"SK_SUPPORT_LEGACY_EMBOSSMASKFILTER",
"SK_SUPPORT_EXOTIC_CLIPOPS",
"SK_SUPPORT_LEGACY_CANVAS_HELPERS",
- "SK_SUPPORT_LEGACY_PAINT_TEXTDECORATION",
]
diff --git a/include/core/SkPaint.h b/include/core/SkPaint.h
index c8d4cc117c..0b31bb5a80 100644
--- a/include/core/SkPaint.h
+++ b/include/core/SkPaint.h
@@ -101,6 +101,8 @@ public:
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
@@ -113,12 +115,7 @@ public:
// 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
@@ -241,16 +238,28 @@ public:
/** 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.
diff --git a/public.bzl b/public.bzl
index a092c495b4..02ce1df480 100644
--- a/public.bzl
+++ b/public.bzl
@@ -600,7 +600,6 @@ DEFINES_ALL = [
"SK_SUPPORT_LEGACY_BITMAP_SETPIXELREF",
"SK_SUPPORT_LEGACY_CLIPOP_EXOTIC_NAMES",
"SK_SUPPORT_LEGACY_CANVAS_HELPERS",
- "SK_SUPPORT_LEGACY_PAINT_TEXTDECORATION",
]
################################################################################
diff --git a/samplecode/SampleFilterFuzz.cpp b/samplecode/SampleFilterFuzz.cpp
index d90476aef7..ef4eee8520 100644
--- a/samplecode/SampleFilterFuzz.cpp
+++ b/samplecode/SampleFilterFuzz.cpp
@@ -495,6 +495,8 @@ static SkPaint make_paint() {
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());
diff --git a/src/core/SkPaint.cpp b/src/core/SkPaint.cpp
index 568ba6a021..a2dfa73dfa 100644
--- a/src/core/SkPaint.cpp
+++ b/src/core/SkPaint.cpp
@@ -245,6 +245,14 @@ void SkPaint::setVerticalText(bool doVertical) {
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));
}
@@ -2134,6 +2142,8 @@ void SkPaint::toString(SkString* str) const {
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);
diff --git a/src/core/SkTextBlob.cpp b/src/core/SkTextBlob.cpp
index 817fc62a4a..4065771862 100644
--- a/src/core/SkTextBlob.cpp
+++ b/src/core/SkTextBlob.cpp
@@ -56,6 +56,8 @@ public:
private:
const static uint32_t kFlagsMask =
SkPaint::kAntiAlias_Flag |
+ SkPaint::kUnderlineText_Flag |
+ SkPaint::kStrikeThruText_Flag |
SkPaint::kFakeBoldText_Flag |
SkPaint::kLinearText_Flag |
SkPaint::kSubpixelText_Flag |
diff --git a/tests/TextBlobTest.cpp b/tests/TextBlobTest.cpp
index 09389a4b52..dafbe74e69 100644
--- a/tests/TextBlobTest.cpp
+++ b/tests/TextBlobTest.cpp
@@ -186,6 +186,8 @@ public:
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);
@@ -205,6 +207,8 @@ public:
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());
@@ -234,6 +238,8 @@ public:
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());
diff --git a/tools/viewer/sk_app/CommandSet.cpp b/tools/viewer/sk_app/CommandSet.cpp
index 689b97f864..f6568ec342 100644
--- a/tools/viewer/sk_app/CommandSet.cpp
+++ b/tools/viewer/sk_app/CommandSet.cpp
@@ -112,6 +112,7 @@ void CommandSet::drawHelp(SkCanvas* canvas) {
SkPaint groupPaint;
groupPaint.setTextSize(18);
+ groupPaint.setUnderlineText(true);
groupPaint.setAntiAlias(true);
groupPaint.setColor(0xFFFFFFFF);