diff options
-rw-r--r-- | include/private/SkTFitsIn.h | 2 | ||||
-rw-r--r-- | tools/viewer/Viewer.cpp | 115 | ||||
-rw-r--r-- | tools/viewer/Viewer.h | 9 |
3 files changed, 114 insertions, 12 deletions
diff --git a/include/private/SkTFitsIn.h b/include/private/SkTFitsIn.h index a889807360..09fa3449aa 100644 --- a/include/private/SkTFitsIn.h +++ b/include/private/SkTFitsIn.h @@ -204,7 +204,7 @@ template <typename D, typename S> constexpr inline bool SkTFitsIn(S s) { using RealS = typename sktfitsin::Private::underlying_type<S>::type; using RealD = typename sktfitsin::Private::underlying_type<D>::type; - return sktfitsin::Private::SkTFitsIn<RealD, RealS>::type::fits(s); + return sktfitsin::Private::SkTFitsIn<RealD, RealS>::type::fits(static_cast<RealS>(s)); } #endif diff --git a/tools/viewer/Viewer.cpp b/tools/viewer/Viewer.cpp index 7695aab05a..3172244bf7 100644 --- a/tools/viewer/Viewer.cpp +++ b/tools/viewer/Viewer.cpp @@ -405,10 +405,6 @@ Viewer::Viewer(int argc, char** argv, void* platformData) fPaintOverrides.fAntiAlias = SkPaintFields::AntiAliasState::Alias; fPaintOverrides.fFlags |= SkPaint::kAntiAlias_Flag; fPaint.setAntiAlias(false); - fPaintOverrides.fOriginalSkUseAnalyticAA = gSkUseAnalyticAA; - fPaintOverrides.fOriginalSkForceAnalyticAA = gSkForceAnalyticAA; - fPaintOverrides.fOriginalSkUseDeltaAA = gSkUseDeltaAA; - fPaintOverrides.fOriginalSkForceDeltaAA = gSkForceDeltaAA; gSkUseAnalyticAA = gSkForceAnalyticAA = false; gSkUseDeltaAA = gSkForceDeltaAA = false; } else { @@ -416,24 +412,30 @@ Viewer::Viewer(int argc, char** argv, void* platformData) switch (fPaintOverrides.fAntiAlias) { case SkPaintFields::AntiAliasState::Alias: fPaintOverrides.fAntiAlias = SkPaintFields::AntiAliasState::Normal; + gSkUseAnalyticAA = gSkForceAnalyticAA = false; + gSkUseDeltaAA = gSkForceDeltaAA = false; break; case SkPaintFields::AntiAliasState::Normal: fPaintOverrides.fAntiAlias = SkPaintFields::AntiAliasState::AnalyticAAEnabled; - gSkUseDeltaAA = gSkForceDeltaAA = false; gSkUseAnalyticAA = true; + gSkForceAnalyticAA = false; + gSkUseDeltaAA = gSkForceDeltaAA = false; break; case SkPaintFields::AntiAliasState::AnalyticAAEnabled: fPaintOverrides.fAntiAlias = SkPaintFields::AntiAliasState::AnalyticAAForced; - gSkForceAnalyticAA = true; + gSkUseAnalyticAA = gSkForceAnalyticAA = true; + gSkUseDeltaAA = gSkForceDeltaAA = false; break; case SkPaintFields::AntiAliasState::AnalyticAAForced: fPaintOverrides.fAntiAlias = SkPaintFields::AntiAliasState::DeltaAAEnabled; gSkUseAnalyticAA = gSkForceAnalyticAA = false; gSkUseDeltaAA = true; + gSkForceDeltaAA = false; break; case SkPaintFields::AntiAliasState::DeltaAAEnabled: fPaintOverrides.fAntiAlias = SkPaintFields::AntiAliasState::DeltaAAForced; - gSkForceDeltaAA = true; + gSkUseAnalyticAA = gSkForceAnalyticAA = false; + gSkUseDeltaAA = gSkForceDeltaAA = true; break; case SkPaintFields::AntiAliasState::DeltaAAForced: fPaintOverrides.fAntiAlias = SkPaintFields::AntiAliasState::Alias; @@ -1344,6 +1346,105 @@ void Viewer::drawImGui() { ImGui::SetNextTreeNodeOpen(true); } + if (ImGui::CollapsingHeader("Paint")) { + int hintingIdx = 0; + if (fPaintOverrides.fHinting) { + hintingIdx = fPaint.getHinting() + 1; + } + if (ImGui::Combo("Hinting", &hintingIdx, + "Default\0None\0Slight\0Normal\0Full\0\0")) + { + if (hintingIdx == 0) { + fPaintOverrides.fHinting = false; + fPaint.setHinting(SkPaint::kNo_Hinting); + } else { + fPaintOverrides.fHinting = true; + SkPaint::Hinting hinting = SkTo<SkPaint::Hinting>(hintingIdx - 1); + fPaint.setHinting(hinting); + } + paramsChanged = true; + } + + int aliasIdx = 0; + if (fPaintOverrides.fFlags & SkPaint::kAntiAlias_Flag) { + aliasIdx = SkTo<int>(fPaintOverrides.fAntiAlias) + 1; + } + if (ImGui::Combo("Anti-Alias", &aliasIdx, + "Default\0Alias\0Normal\0AnalyticAAEnabled\0AnalyticAAForced\0" + "DeltaAAEnabled\0DeltaAAForced\0\0")) + { + gSkUseAnalyticAA = fPaintOverrides.fOriginalSkUseAnalyticAA; + gSkForceAnalyticAA = fPaintOverrides.fOriginalSkForceAnalyticAA; + gSkUseDeltaAA = fPaintOverrides.fOriginalSkUseDeltaAA; + gSkForceDeltaAA = fPaintOverrides.fOriginalSkForceDeltaAA; + if (aliasIdx == 0) { + fPaintOverrides.fAntiAlias = SkPaintFields::AntiAliasState::Alias; + fPaintOverrides.fFlags &= ~SkPaint::kAntiAlias_Flag; + } else { + fPaintOverrides.fFlags |= SkPaint::kAntiAlias_Flag; + fPaintOverrides.fAntiAlias =SkTo<SkPaintFields::AntiAliasState>(aliasIdx-1); + fPaint.setAntiAlias(aliasIdx > 1); + switch (fPaintOverrides.fAntiAlias) { + case SkPaintFields::AntiAliasState::Alias: + break; + case SkPaintFields::AntiAliasState::Normal: + break; + case SkPaintFields::AntiAliasState::AnalyticAAEnabled: + gSkUseAnalyticAA = true; + gSkForceAnalyticAA = false; + gSkUseDeltaAA = gSkForceDeltaAA = false; + break; + case SkPaintFields::AntiAliasState::AnalyticAAForced: + gSkUseAnalyticAA = gSkForceAnalyticAA = true; + gSkUseDeltaAA = gSkForceDeltaAA = false; + break; + case SkPaintFields::AntiAliasState::DeltaAAEnabled: + gSkUseAnalyticAA = gSkForceAnalyticAA = false; + gSkUseDeltaAA = true; + gSkForceDeltaAA = false; + break; + case SkPaintFields::AntiAliasState::DeltaAAForced: + gSkUseAnalyticAA = gSkForceAnalyticAA = false; + gSkUseDeltaAA = gSkForceDeltaAA = true; + break; + } + } + paramsChanged = true; + } + + int subpixelAAIdx = 0; + if (fPaintOverrides.fFlags & SkPaint::kLCDRenderText_Flag) { + subpixelAAIdx = fPaint.isLCDRenderText() ? 2 : 1; + } + if (ImGui::Combo("Subpixel Anti-Alias", &subpixelAAIdx, + "Default\0lcd\0LCD\0\0")) + { + if (subpixelAAIdx == 0) { + fPaintOverrides.fFlags &= ~SkPaint::kLCDRenderText_Flag; + } else { + fPaintOverrides.fFlags |= SkPaint::kLCDRenderText_Flag; + fPaint.setLCDRenderText(subpixelAAIdx == 2); + } + paramsChanged = true; + } + + int subpixelPositionIdx = 0; + if (fPaintOverrides.fFlags & SkPaint::kSubpixelText_Flag) { + subpixelPositionIdx = fPaint.isSubpixelText() ? 2 : 1; + } + if (ImGui::Combo("Subpixel Position Glyphs", &subpixelPositionIdx, + "Default\0Pixel Glyphs\0Subpixel Glyphs\0\0")) + { + if (subpixelPositionIdx == 0) { + fPaintOverrides.fFlags &= ~SkPaint::kSubpixelText_Flag; + } else { + fPaintOverrides.fFlags |= SkPaint::kSubpixelText_Flag; + fPaint.setSubpixelText(subpixelPositionIdx == 2); + } + paramsChanged = true; + } + } + if (ImGui::CollapsingHeader("Slide")) { static ImGuiTextFilter filter; static ImVector<const char*> filteredSlideNames; diff --git a/tools/viewer/Viewer.h b/tools/viewer/Viewer.h index 2a8f12b466..760e3b8520 100644 --- a/tools/viewer/Viewer.h +++ b/tools/viewer/Viewer.h @@ -16,6 +16,7 @@ #include "SkAnimTimer.h" #include "SkExecutor.h" #include "SkJSONCPP.h" +#include "SkScan.h" #include "SkTouchGesture.h" #include "Slide.h" #include "StatsLayer.h" @@ -63,10 +64,10 @@ public: DeltaAAEnabled, DeltaAAForced, } fAntiAlias = AntiAliasState::Alias; - bool fOriginalSkUseAnalyticAA = false; - bool fOriginalSkForceAnalyticAA = false; - bool fOriginalSkUseDeltaAA = false; - bool fOriginalSkForceDeltaAA = false; + const bool fOriginalSkUseAnalyticAA = gSkUseAnalyticAA; + const bool fOriginalSkForceAnalyticAA = gSkForceAnalyticAA; + const bool fOriginalSkUseDeltaAA = gSkUseDeltaAA; + const bool fOriginalSkForceDeltaAA = gSkForceDeltaAA; bool fTextAlign = false; bool fCapType = false; |