From cfd3d9ff8f370e3a4a53e2aba84dc4d682501f4c Mon Sep 17 00:00:00 2001 From: Mike Reed Date: Thu, 23 Feb 2017 14:06:12 +0000 Subject: [PATCH] Revert "Revert[2] "hide deprecated underline and strikethru"" This reverts commit aab68c56ef8fc88b0d1536f99aa1cc9ae7a0573a. Reason for revert: android still broken RecordingCanvasTests.cpp Original change's description: > Revert[2] "hide deprecated underline and strikethru" > > android now updated. > > This reverts commit e005edd3a5deb602beec59f59cdc8b14d3764d58. > > BUG=skia:6250 > > Change-Id: If08d344cdd863fde1d9955dc3fab671a83be0f73 > Reviewed-on: https://skia-review.googlesource.com/8815 > Commit-Queue: Mike Reed > Reviewed-by: Mike Reed > TBR=reed@google.com,reviews@skia.org NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG=skia:6250 Change-Id: I954575a0e4b9aca8414e10901a7be03a2d7e6396 Reviewed-on: https://skia-review.googlesource.com/8900 Reviewed-by: Mike Reed Commit-Queue: Mike Reed --- fuzz/FilterFuzz.cpp | 2 ++ fuzz/FuzzDrawFunctions.cpp | 4 ++++ gm/texteffects.cpp | 32 +++++++++++++++++++++++++++++ gn/android_framework_defines.gni | 1 - include/core/SkPaint.h | 33 +++++++++++++++++++----------- public.bzl | 1 - samplecode/SampleFilterFuzz.cpp | 2 ++ src/core/SkPaint.cpp | 10 +++++++++ src/core/SkTextBlob.cpp | 2 ++ tests/TextBlobTest.cpp | 6 ++++++ tools/viewer/sk_app/CommandSet.cpp | 1 + 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 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 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& 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);