From a580fb3f9ec5c177e4e8f827f6aa14239f984121 Mon Sep 17 00:00:00 2001 From: Ben Wagner Date: Tue, 17 Apr 2018 11:16:32 -0400 Subject: Add paint flags to viewer GUI. Overriding bits of the paint was added with keyboard bindings but without being reflected in the GUI. This adds these flags to the GUI. Change-Id: I633801fb776248952afe7cbe8857676ef8b57135 Reviewed-on: https://skia-review.googlesource.com/121796 Reviewed-by: Brian Osman Commit-Queue: Ben Wagner --- tools/viewer/Viewer.cpp | 115 +++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 108 insertions(+), 7 deletions(-) (limited to 'tools/viewer/Viewer.cpp') 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(hintingIdx - 1); + fPaint.setHinting(hinting); + } + paramsChanged = true; + } + + int aliasIdx = 0; + if (fPaintOverrides.fFlags & SkPaint::kAntiAlias_Flag) { + aliasIdx = SkTo(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(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 filteredSlideNames; -- cgit v1.2.3