diff options
author | Ben Wagner <bungeman@google.com> | 2019-01-23 10:34:59 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2019-01-23 16:38:40 +0000 |
commit | 9613e4577521df7559d64d461abf59461397c4e5 (patch) | |
tree | c5dcfc9c28fb398d923040b9a534d3615ba7d4d3 /tools | |
parent | 9dc532dd13506ab15299724ccfbfc7f5e1fd2690 (diff) | |
download | platform_external_skqp-9613e4577521df7559d64d461abf59461397c4e5.tar.gz platform_external_skqp-9613e4577521df7559d64d461abf59461397c4e5.tar.bz2 platform_external_skqp-9613e4577521df7559d64d461abf59461397c4e5.zip |
Update Viewer for SkFont overrides.
Change-Id: I18871dd6db647b24db08a3e92e0470c5baa5850c
Reviewed-on: https://skia-review.googlesource.com/c/186082
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Ben Wagner <bungeman@google.com>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/viewer/Viewer.cpp | 267 | ||||
-rw-r--r-- | tools/viewer/Viewer.h | 9 |
2 files changed, 166 insertions, 110 deletions
diff --git a/tools/viewer/Viewer.cpp b/tools/viewer/Viewer.cpp index 0f5216ddc7..2ea63029e7 100644 --- a/tools/viewer/Viewer.cpp +++ b/tools/viewer/Viewer.cpp @@ -355,7 +355,7 @@ Viewer::Viewer(int argc, char** argv, void* platformData) this->updateTitle(); fWindow->inval(); }); - fCommands.addCommand('H', "Paint", "Hinting mode", [this]() { + fCommands.addCommand('H', "Font", "Hinting mode", [this]() { if (!fFontOverrides.fHinting) { fFontOverrides.fHinting = true; fFont.setHinting(kNo_SkFontHinting); @@ -380,45 +380,45 @@ Viewer::Viewer(int argc, char** argv, void* platformData) fWindow->inval(); }); fCommands.addCommand('A', "Paint", "Antialias Mode", [this]() { - if (!(fPaintOverrides.fFlags & SkPaint::kAntiAlias_Flag)) { - fPaintOverrides.fAntiAlias = SkPaintFields::AntiAliasState::Alias; - fPaintOverrides.fFlags |= SkPaint::kAntiAlias_Flag; + if (!fPaintOverrides.fAntiAlias) { + fPaintOverrides.fAntiAliasState = SkPaintFields::AntiAliasState::Alias; + fPaintOverrides.fAntiAlias = true; fPaint.setAntiAlias(false); gSkUseAnalyticAA = gSkForceAnalyticAA = false; gSkUseDeltaAA = gSkForceDeltaAA = false; } else { fPaint.setAntiAlias(true); - switch (fPaintOverrides.fAntiAlias) { + switch (fPaintOverrides.fAntiAliasState) { case SkPaintFields::AntiAliasState::Alias: - fPaintOverrides.fAntiAlias = SkPaintFields::AntiAliasState::Normal; + fPaintOverrides.fAntiAliasState = SkPaintFields::AntiAliasState::Normal; gSkUseAnalyticAA = gSkForceAnalyticAA = false; gSkUseDeltaAA = gSkForceDeltaAA = false; break; case SkPaintFields::AntiAliasState::Normal: - fPaintOverrides.fAntiAlias = SkPaintFields::AntiAliasState::AnalyticAAEnabled; + fPaintOverrides.fAntiAliasState = SkPaintFields::AntiAliasState::AnalyticAAEnabled; gSkUseAnalyticAA = true; gSkForceAnalyticAA = false; gSkUseDeltaAA = gSkForceDeltaAA = false; break; case SkPaintFields::AntiAliasState::AnalyticAAEnabled: - fPaintOverrides.fAntiAlias = SkPaintFields::AntiAliasState::AnalyticAAForced; + fPaintOverrides.fAntiAliasState = SkPaintFields::AntiAliasState::AnalyticAAForced; gSkUseAnalyticAA = gSkForceAnalyticAA = true; gSkUseDeltaAA = gSkForceDeltaAA = false; break; case SkPaintFields::AntiAliasState::AnalyticAAForced: - fPaintOverrides.fAntiAlias = SkPaintFields::AntiAliasState::DeltaAAEnabled; + fPaintOverrides.fAntiAliasState = SkPaintFields::AntiAliasState::DeltaAAEnabled; gSkUseAnalyticAA = gSkForceAnalyticAA = false; gSkUseDeltaAA = true; gSkForceDeltaAA = false; break; case SkPaintFields::AntiAliasState::DeltaAAEnabled: - fPaintOverrides.fAntiAlias = SkPaintFields::AntiAliasState::DeltaAAForced; + fPaintOverrides.fAntiAliasState = SkPaintFields::AntiAliasState::DeltaAAForced; gSkUseAnalyticAA = gSkForceAnalyticAA = false; gSkUseDeltaAA = gSkForceDeltaAA = true; break; case SkPaintFields::AntiAliasState::DeltaAAForced: - fPaintOverrides.fAntiAlias = SkPaintFields::AntiAliasState::Alias; - fPaintOverrides.fFlags &= ~SkPaint::kAntiAlias_Flag; + fPaintOverrides.fAntiAliasState = SkPaintFields::AntiAliasState::Alias; + fPaintOverrides.fAntiAlias = false; gSkUseAnalyticAA = fPaintOverrides.fOriginalSkUseAnalyticAA; gSkForceAnalyticAA = fPaintOverrides.fOriginalSkForceAnalyticAA; gSkUseDeltaAA = fPaintOverrides.fOriginalSkUseDeltaAA; @@ -438,7 +438,7 @@ Viewer::Viewer(int argc, char** argv, void* platformData) this->updateTitle(); fWindow->inval(); }); - fCommands.addCommand('L', "Paint", "Subpixel Antialias Mode", [this]() { + fCommands.addCommand('L', "Font", "Subpixel Antialias Mode", [this]() { if (!fFontOverrides.fEdging) { fFontOverrides.fEdging = true; fFont.setEdging(SkFont::Edging::kAlias); @@ -459,7 +459,7 @@ Viewer::Viewer(int argc, char** argv, void* platformData) this->updateTitle(); fWindow->inval(); }); - fCommands.addCommand('S', "Paint", "Subpixel Position Mode", [this]() { + fCommands.addCommand('S', "Font", "Subpixel Position Mode", [this]() { if (!fFontOverrides.fSubpixel) { fFontOverrides.fSubpixel = true; fFont.setSubpixel(false); @@ -699,26 +699,48 @@ void Viewer::updateTitle() { } SkPaintTitleUpdater paintTitle(&title); - auto paintFlag = [this, &paintTitle](SkPaint::Flags flag, bool (SkPaint::* isFlag)() const, + auto paintFlag = [this, &paintTitle](bool SkPaintFields::* flag, + bool (SkPaint::* isFlag)() const, const char* on, const char* off) { - if (fPaintOverrides.fFlags & flag) { + if (fPaintOverrides.*flag) { paintTitle.append((fPaint.*isFlag)() ? on : off); } }; - paintFlag(SkPaint::kAntiAlias_Flag, &SkPaint::isAntiAlias, "Antialias", "Alias"); - paintFlag(SkPaint::kDither_Flag, &SkPaint::isDither, "DITHER", "No Dither"); -#if 0 - paintFlag(SkPaint::kFakeBoldText_Flag, &SkPaint::isFakeBoldText, "Fake Bold", "No Fake Bold"); - paintFlag(SkPaint::kLinearText_Flag, &SkPaint::isLinearText, "Linear Text", "Non-Linear Text"); - paintFlag(SkPaint::kSubpixelText_Flag, &SkPaint::isSubpixelText, "Subpixel Text", "Pixel Text"); - paintFlag(SkPaint::kLCDRenderText_Flag, &SkPaint::isLCDRenderText, "LCD", "lcd"); - paintFlag(SkPaint::kEmbeddedBitmapText_Flag, &SkPaint::isEmbeddedBitmapText, - "Bitmap Text", "No Bitmap Text"); - paintFlag(SkPaint::kAutoHinting_Flag, &SkPaint::isAutohinted, - "Force Autohint", "No Force Autohint"); -#endif + auto fontFlag = [this, &paintTitle](bool SkFontFields::* flag, bool (SkFont::* isFlag)() const, + const char* on, const char* off) + { + if (fFontOverrides.*flag) { + paintTitle.append((fFont.*isFlag)() ? on : off); + } + }; + + paintFlag(&SkPaintFields::fAntiAlias, &SkPaint::isAntiAlias, "Antialias", "Alias"); + paintFlag(&SkPaintFields::fDither, &SkPaint::isDither, "DITHER", "No Dither"); + + fontFlag(&SkFontFields::fForceAutoHinting, &SkFont::isForceAutoHinting, + "Force Autohint", "No Force Autohint"); + fontFlag(&SkFontFields::fEmbolden, &SkFont::isEmbolden, "Fake Bold", "No Fake Bold"); + fontFlag(&SkFontFields::fLinearMetrics, &SkFont::isLinearMetrics, + "Linear Metrics", "Non-Linear Metrics"); + fontFlag(&SkFontFields::fEmbeddedBitmaps, &SkFont::isEmbeddedBitmaps, + "Bitmap Text", "No Bitmap Text"); + fontFlag(&SkFontFields::fSubpixel, &SkFont::isSubpixel, "Subpixel Text", "Pixel Text"); + + if (fFontOverrides.fEdging) { + switch (fFont.getEdging()) { + case SkFont::Edging::kAlias: + paintTitle.append("Alias Text"); + break; + case SkFont::Edging::kAntiAlias: + paintTitle.append("Antialias Text"); + break; + case SkFont::Edging::kSubpixelAntiAlias: + paintTitle.append("Subpixel Antialias Text"); + break; + } + } if (fFontOverrides.fHinting) { switch (fFont.getHinting()) { @@ -1050,39 +1072,35 @@ public: if (fFontOverrides->fHinting) { font->writable()->setHinting(fFont->getHinting()); } -#if 0 - if (fFontOverrides->fFlags & SkPaint::kAntiAlias_Flag) { - paint->writable()->setAntiAlias(fPaint->isAntiAlias()); - } - if (fFontOverrides->fFlags & SkPaint::kFakeBoldText_Flag) { - paint->writable()->setFakeBoldText(fPaint->isFakeBoldText()); + if (fFontOverrides->fEdging) { + font->writable()->setEdging(fFont->getEdging()); } - if (fFontOverrides->fFlags & SkPaint::kLinearText_Flag) { - paint->writable()->setLinearText(fPaint->isLinearText()); + if (fFontOverrides->fEmbolden) { + font->writable()->setEmbolden(fFont->isEmbolden()); } - if (fFontOverrides->fFlags & SkPaint::kSubpixelText_Flag) { - paint->writable()->setSubpixelText(fPaint->isSubpixelText()); + if (fFontOverrides->fLinearMetrics) { + font->writable()->setLinearMetrics(fFont->isLinearMetrics()); } - if (fFontOverrides->fFlags & SkPaint::kLCDRenderText_Flag) { - paint->writable()->setLCDRenderText(fPaint->isLCDRenderText()); + if (fFontOverrides->fSubpixel) { + font->writable()->setSubpixel(fFont->isSubpixel()); } - if (fFontOverrides->fFlags & SkPaint::kEmbeddedBitmapText_Flag) { - paint->writable()->setEmbeddedBitmapText(fPaint->isEmbeddedBitmapText()); + if (fFontOverrides->fEmbeddedBitmaps) { + font->writable()->setEmbeddedBitmaps(fFont->isEmbeddedBitmaps()); } - if (fFontOverrides->fFlags & SkPaint::kAutoHinting_Flag) { - paint->writable()->setAutohinted(fPaint->isAutohinted()); + if (fFontOverrides->fForceAutoHinting) { + font->writable()->setForceAutoHinting(fFont->isForceAutoHinting()); } -#endif + return true; } bool onFilter(SkTCopyOnFirstWrite<SkPaint>* paint, Type) const override { if (*paint == nullptr) { return true; } - if (fPaintOverrides->fFlags & SkPaint::kAntiAlias_Flag) { + if (fPaintOverrides->fAntiAlias) { paint->writable()->setAntiAlias(fPaint->isAntiAlias()); } - if (fPaintOverrides->fFlags & SkPaint::kDither_Flag) { + if (fPaintOverrides->fDither) { paint->writable()->setDither(fPaint->isDither()); } return true; @@ -1627,27 +1645,9 @@ void Viewer::drawImGui() { } if (ImGui::CollapsingHeader("Paint")) { - int hintingIdx = 0; - if (fFontOverrides.fHinting) { - hintingIdx = static_cast<unsigned>(fFont.getHinting()) + 1; - } - if (ImGui::Combo("Hinting", &hintingIdx, - "Default\0None\0Slight\0Normal\0Full\0\0")) - { - if (hintingIdx == 0) { - fFontOverrides.fHinting = false; - fFont.setHinting(kNo_SkFontHinting); - } else { - fFontOverrides.fHinting = true; - SkFontHinting hinting = SkTo<SkFontHinting>(hintingIdx - 1); - fFont.setHinting(hinting); - } - paramsChanged = true; - } - int aliasIdx = 0; - if (fPaintOverrides.fFlags & SkPaint::kAntiAlias_Flag) { - aliasIdx = SkTo<int>(fPaintOverrides.fAntiAlias) + 1; + if (fPaintOverrides.fAntiAlias) { + aliasIdx = SkTo<int>(fPaintOverrides.fAntiAliasState) + 1; } if (ImGui::Combo("Anti-Alias", &aliasIdx, "Default\0Alias\0Normal\0AnalyticAAEnabled\0AnalyticAAForced\0" @@ -1658,13 +1658,13 @@ void Viewer::drawImGui() { gSkUseDeltaAA = fPaintOverrides.fOriginalSkUseDeltaAA; gSkForceDeltaAA = fPaintOverrides.fOriginalSkForceDeltaAA; if (aliasIdx == 0) { - fPaintOverrides.fAntiAlias = SkPaintFields::AntiAliasState::Alias; - fPaintOverrides.fFlags &= ~SkPaint::kAntiAlias_Flag; + fPaintOverrides.fAntiAliasState = SkPaintFields::AntiAliasState::Alias; + fPaintOverrides.fAntiAlias = false; } else { - fPaintOverrides.fFlags |= SkPaint::kAntiAlias_Flag; - fPaintOverrides.fAntiAlias =SkTo<SkPaintFields::AntiAliasState>(aliasIdx-1); + fPaintOverrides.fAntiAlias = true; + fPaintOverrides.fAntiAliasState = SkTo<SkPaintFields::AntiAliasState>(aliasIdx-1); fPaint.setAntiAlias(aliasIdx > 1); - switch (fPaintOverrides.fAntiAlias) { + switch (fPaintOverrides.fAntiAliasState) { case SkPaintFields::AntiAliasState::Alias: break; case SkPaintFields::AntiAliasState::Normal: @@ -1693,19 +1693,19 @@ void Viewer::drawImGui() { } auto paintFlag = [this, ¶msChanged](const char* label, const char* items, - SkPaint::Flags flag, + bool SkPaintFields::* flag, bool (SkPaint::* isFlag)() const, void (SkPaint::* setFlag)(bool) ) { int itemIndex = 0; - if (fPaintOverrides.fFlags & flag) { + if (fPaintOverrides.*flag) { itemIndex = (fPaint.*isFlag)() ? 2 : 1; } if (ImGui::Combo(label, &itemIndex, items)) { if (itemIndex == 0) { - fPaintOverrides.fFlags &= ~flag; + fPaintOverrides.*flag = false; } else { - fPaintOverrides.fFlags |= flag; + fPaintOverrides.*flag = true; (fPaint.*setFlag)(itemIndex == 2); } paramsChanged = true; @@ -1714,39 +1714,90 @@ void Viewer::drawImGui() { paintFlag("Dither", "Default\0No Dither\0Dither\0\0", - SkPaint::kDither_Flag, + &SkPaintFields::fDither, &SkPaint::isDither, &SkPaint::setDither); -#if 0 - paintFlag("Fake Bold Glyphs", - "Default\0No Fake Bold\0Fake Bold\0\0", - SkPaint::kFakeBoldText_Flag, - &SkPaint::isFakeBoldText, &SkPaint::setFakeBoldText); - - paintFlag("Linear Text", - "Default\0No Linear Text\0Linear Text\0\0", - SkPaint::kLinearText_Flag, - &SkPaint::isLinearText, &SkPaint::setLinearText); - - paintFlag("Subpixel Position Glyphs", - "Default\0Pixel Text\0Subpixel Text\0\0", - SkPaint::kSubpixelText_Flag, - &SkPaint::isSubpixelText, &SkPaint::setSubpixelText); - - paintFlag("Subpixel Anti-Alias", - "Default\0lcd\0LCD\0\0", - SkPaint::kLCDRenderText_Flag, - &SkPaint::isLCDRenderText, &SkPaint::setLCDRenderText); - - paintFlag("Embedded Bitmap Text", - "Default\0No Embedded Bitmaps\0Embedded Bitmaps\0\0", - SkPaint::kEmbeddedBitmapText_Flag, - &SkPaint::isEmbeddedBitmapText, &SkPaint::setEmbeddedBitmapText); - - paintFlag("Force Auto-Hinting", - "Default\0No Force Auto-Hinting\0Force Auto-Hinting\0\0", - SkPaint::kAutoHinting_Flag, - &SkPaint::isAutohinted, &SkPaint::setAutohinted); -#endif + } + + if (ImGui::CollapsingHeader("Font")) { + int hintingIdx = 0; + if (fFontOverrides.fHinting) { + hintingIdx = SkTo<int>(fFont.getHinting()) + 1; + } + if (ImGui::Combo("Hinting", &hintingIdx, + "Default\0None\0Slight\0Normal\0Full\0\0")) + { + if (hintingIdx == 0) { + fFontOverrides.fHinting = false; + fFont.setHinting(kNo_SkFontHinting); + } else { + fFont.setHinting(SkTo<SkFontHinting>(hintingIdx - 1)); + fFontOverrides.fHinting = true; + } + paramsChanged = true; + } + + auto fontFlag = [this, ¶msChanged](const char* label, const char* items, + bool SkFontFields::* flag, + bool (SkFont::* isFlag)() const, + void (SkFont::* setFlag)(bool) ) + { + int itemIndex = 0; + if (fFontOverrides.*flag) { + itemIndex = (fFont.*isFlag)() ? 2 : 1; + } + if (ImGui::Combo(label, &itemIndex, items)) { + if (itemIndex == 0) { + fFontOverrides.*flag = false; + } else { + fFontOverrides.*flag = true; + (fFont.*setFlag)(itemIndex == 2); + } + paramsChanged = true; + } + }; + + fontFlag("Fake Bold Glyphs", + "Default\0No Fake Bold\0Fake Bold\0\0", + &SkFontFields::fEmbolden, + &SkFont::isEmbolden, &SkFont::setEmbolden); + + fontFlag("Linear Text", + "Default\0No Linear Text\0Linear Text\0\0", + &SkFontFields::fLinearMetrics, + &SkFont::isLinearMetrics, &SkFont::setLinearMetrics); + + fontFlag("Subpixel Position Glyphs", + "Default\0Pixel Text\0Subpixel Text\0\0", + &SkFontFields::fSubpixel, + &SkFont::isSubpixel, &SkFont::setSubpixel); + + fontFlag("Embedded Bitmap Text", + "Default\0No Embedded Bitmaps\0Embedded Bitmaps\0\0", + &SkFontFields::fEmbeddedBitmaps, + &SkFont::isEmbeddedBitmaps, &SkFont::setEmbeddedBitmaps); + + fontFlag("Force Auto-Hinting", + "Default\0No Force Auto-Hinting\0Force Auto-Hinting\0\0", + &SkFontFields::fForceAutoHinting, + &SkFont::isForceAutoHinting, &SkFont::setForceAutoHinting); + + int edgingIdx = 0; + if (fFontOverrides.fEdging) { + edgingIdx = SkTo<int>(fFont.getEdging()) + 1; + } + if (ImGui::Combo("Edging", &edgingIdx, + "Default\0Alias\0Antialias\0Subpixel Antialias\0\0")) + { + if (edgingIdx == 0) { + fFontOverrides.fEdging = false; + fFont.setEdging(SkFont::Edging::kAlias); + } else { + fFont.setEdging(SkTo<SkFont::Edging>(edgingIdx-1)); + fFontOverrides.fEdging = true; + } + paramsChanged = true; + } + ImGui::Checkbox("Override TextSize", &fFontOverrides.fTextSize); if (fFontOverrides.fTextSize) { ImGui::DragFloat2("TextRange", fFontOverrides.fTextSizeRange, diff --git a/tools/viewer/Viewer.h b/tools/viewer/Viewer.h index 495c81b6f7..ec6a2d5da4 100644 --- a/tools/viewer/Viewer.h +++ b/tools/viewer/Viewer.h @@ -47,6 +47,10 @@ public: bool fHinting = false; bool fEdging = false; bool fSubpixel = false; + bool fForceAutoHinting = false; + bool fEmbeddedBitmaps = false; + bool fLinearMetrics = false; + bool fEmbolden = false; }; struct SkPaintFields { bool fPathEffect = false; @@ -61,7 +65,8 @@ public: bool fMiterLimit = false; bool fBlendMode = false; - uint32_t fFlags = 0; + bool fAntiAlias = false; + bool fDither = false; enum class AntiAliasState { Alias, Normal, @@ -69,7 +74,7 @@ public: AnalyticAAForced, DeltaAAEnabled, DeltaAAForced, - } fAntiAlias = AntiAliasState::Alias; + } fAntiAliasState = AntiAliasState::Alias; const bool fOriginalSkUseAnalyticAA = gSkUseAnalyticAA; const bool fOriginalSkForceAnalyticAA = gSkForceAnalyticAA; const bool fOriginalSkUseDeltaAA = gSkUseDeltaAA; |