aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--include/private/SkTFitsIn.h2
-rw-r--r--tools/viewer/Viewer.cpp115
-rw-r--r--tools/viewer/Viewer.h9
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;