Revert "Revert[2] "hide deprecated underline and strikethru""
authorMike Reed <reed@google.com>
Thu, 23 Feb 2017 14:06:12 +0000 (14:06 +0000)
committerSkia Commit-Bot <skia-commit-bot@chromium.org>
Thu, 23 Feb 2017 14:06:19 +0000 (14:06 +0000)
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 <reed@google.com>
> Reviewed-by: Mike Reed <reed@google.com>
>

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 <reed@google.com>
Commit-Queue: Mike Reed <reed@google.com>

fuzz/FilterFuzz.cpp
fuzz/FuzzDrawFunctions.cpp
gm/texteffects.cpp
gn/android_framework_defines.gni
include/core/SkPaint.h
public.bzl
samplecode/SampleFilterFuzz.cpp
src/core/SkPaint.cpp
src/core/SkTextBlob.cpp
tests/TextBlobTest.cpp
tools/viewer/sk_app/CommandSet.cpp

index bd9e5fde8f4770a98547616a06e04227e35da707..e3d30b5af78c779b568b353e6e97d83c9ce7fbdd 100644 (file)
@@ -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());
index e9e4f8e041a83ffa38662ea2ecd2de093d62bf3d..2cd3828a519c6ff4a70ed4c9d36ea21a8d82d606 100644 (file)
@@ -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();
index e74d7a97f5354271c53cfaf24023585066484c82..c4c389a0652d2cd4dba9a163c691c929675acbe5 100644 (file)
@@ -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) {
index 386cba35d8f1cee0611e3f9f1214eb8bcbb3a19f..b79bb87967dd79e06a3d5fad48e036641ce7295f 100644 (file)
@@ -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",
 ]
index c8d4cc117cb92ddf24a3437f3f38a9763535cf21..0b31bb5a80290c416d3a9964a5fb231ac043a4cf 100644 (file)
@@ -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.
index a092c495b4f0feeb27a175b016cc15b090a2462e..02ce1df480c735991529a29c18a66f1e6c044380 100644 (file)
@@ -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",
 ]
 
 ################################################################################
index d90476aef7d2f102080296b872239475cefa3278..ef4eee85209eda298db7d9f32c0457ba8694e6e6 100644 (file)
@@ -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());
index 568ba6a0216d33cced68af8e4db7db787efb9a6a..a2dfa73dfa9525024a19ebd2b3ed728ac2e51824 100644 (file)
@@ -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);
index 817fc62a4abf0e40e027acdcfa017ab792e165fe..4065771862c1295ee9a70ae3bcf221d7ddb050ab 100644 (file)
@@ -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       |
index 09389a4b520812c4451f69e8ee6279c943f763de..dafbe74e69c8b8d0bf185408fd6c865cb9ef5323 100644 (file)
@@ -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());
index 689b97f86431aad9bb8b0e4436314568f70c18bd..f6568ec34294b4a3fb1482ee76bf0b45242c67be 100644 (file)
@@ -112,6 +112,7 @@ void CommandSet::drawHelp(SkCanvas* canvas) {
 
     SkPaint groupPaint;
     groupPaint.setTextSize(18);
+    groupPaint.setUnderlineText(true);
     groupPaint.setAntiAlias(true);
     groupPaint.setColor(0xFFFFFFFF);