diff options
author | Ben Wagner <bungeman@google.com> | 2018-04-13 14:30:23 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-04-16 22:46:50 +0000 |
commit | 37c5403890000289d7db9fd1d90cf96c2ee12bf3 (patch) | |
tree | 7d85406ae79f02f59f99146b117cdc63cee7c30b /tools/viewer | |
parent | e7fbafe1da930eba9e24f60fefef5a440f715219 (diff) |
Add pixel geometry and dft selection to viewer app.
Change-Id: I2fea84793383c44b102fa97b23f59235ef302ff9
Reviewed-on: https://skia-review.googlesource.com/121581
Commit-Queue: Ben Wagner <bungeman@google.com>
Reviewed-by: Herb Derby <herb@google.com>
Diffstat (limited to 'tools/viewer')
-rw-r--r-- | tools/viewer/Viewer.cpp | 103 | ||||
-rw-r--r-- | tools/viewer/Viewer.h | 1 |
2 files changed, 102 insertions, 2 deletions
diff --git a/tools/viewer/Viewer.cpp b/tools/viewer/Viewer.cpp index 9b6a89adf1..7695aab05a 100644 --- a/tools/viewer/Viewer.cpp +++ b/tools/viewer/Viewer.cpp @@ -346,6 +346,36 @@ Viewer::Viewer(int argc, char** argv, void* platformData) fSaveToSKP = true; fWindow->inval(); }); + fCommands.addCommand('G', "Modes", "Geometry", [this]() { + DisplayParams params = fWindow->getRequestedDisplayParams(); + uint32_t flags = params.fSurfaceProps.flags(); + if (!fPixelGeometryOverrides) { + fPixelGeometryOverrides = true; + params.fSurfaceProps = SkSurfaceProps(flags, kUnknown_SkPixelGeometry); + } else { + switch (params.fSurfaceProps.pixelGeometry()) { + case kUnknown_SkPixelGeometry: + params.fSurfaceProps = SkSurfaceProps(flags, kRGB_H_SkPixelGeometry); + break; + case kRGB_H_SkPixelGeometry: + params.fSurfaceProps = SkSurfaceProps(flags, kBGR_H_SkPixelGeometry); + break; + case kBGR_H_SkPixelGeometry: + params.fSurfaceProps = SkSurfaceProps(flags, kRGB_V_SkPixelGeometry); + break; + case kRGB_V_SkPixelGeometry: + params.fSurfaceProps = SkSurfaceProps(flags, kBGR_V_SkPixelGeometry); + break; + case kBGR_V_SkPixelGeometry: + params.fSurfaceProps = SkSurfaceProps(flags, SkSurfaceProps::kLegacyFontHost_InitType); + fPixelGeometryOverrides = false; + break; + } + } + fWindow->setRequestedDisplayParams(params); + this->updateTitle(); + fWindow->inval(); + }); fCommands.addCommand('H', "Paint", "Hinting mode", [this]() { if (!fPaintOverrides.fHinting) { fPaintOverrides.fHinting = true; @@ -418,6 +448,15 @@ Viewer::Viewer(int argc, char** argv, void* platformData) this->updateTitle(); fWindow->inval(); }); + fCommands.addCommand('D', "Modes", "DFT", [this]() { + DisplayParams params = fWindow->getRequestedDisplayParams(); + uint32_t flags = params.fSurfaceProps.flags(); + flags ^= SkSurfaceProps::kUseDeviceIndependentFonts_Flag; + params.fSurfaceProps = SkSurfaceProps(flags, params.fSurfaceProps.pixelGeometry()); + fWindow->setRequestedDisplayParams(params); + this->updateTitle(); + fWindow->inval(); + }); fCommands.addCommand('L', "Paint", "Subpixel Antialias Mode", [this]() { if (!(fPaintOverrides.fFlags & SkPaint::kLCDRenderText_Flag)) { fPaintOverrides.fFlags |= SkPaint::kLCDRenderText_Flag; @@ -703,6 +742,31 @@ void Viewer::updateTitle() { } } + const DisplayParams& params = fWindow->getRequestedDisplayParams(); + if (fPixelGeometryOverrides) { + switch (params.fSurfaceProps.pixelGeometry()) { + case kUnknown_SkPixelGeometry: + title.append( " Flat"); + break; + case kRGB_H_SkPixelGeometry: + title.append( " RGB"); + break; + case kBGR_H_SkPixelGeometry: + title.append( " BGR"); + break; + case kRGB_V_SkPixelGeometry: + title.append( " RGBV"); + break; + case kBGR_V_SkPixelGeometry: + title.append( " BGRV"); + break; + } + } + + if (params.fSurfaceProps.isUseDeviceIndependentFonts()) { + title.append(" DFT"); + } + title.append(" ["); title.append(kBackendTypeStrings[fBackendType]); int msaa = fWindow->sampleCount(); @@ -951,8 +1015,11 @@ void Viewer::drawSlide(SkCanvas* canvas) { (ColorMode::kColorManagedSRGB8888_NonLinearBlending == fColorMode) ? nullptr : cs; SkImageInfo info = SkImageInfo::Make(fWindow->width(), fWindow->height(), colorType, kPremul_SkAlphaType, std::move(offscreenColorSpace)); - offscreenSurface = Window::kRaster_BackendType == fBackendType ? SkSurface::MakeRaster(info) - : canvas->makeSurface(info); + SkSurfaceProps props(SkSurfaceProps::kLegacyFontHost_InitType); + canvas->getProps(&props); + offscreenSurface = Window::kRaster_BackendType == fBackendType + ? SkSurface::MakeRaster(info, &props) + : canvas->makeSurface(info); SkPixmap offscreenPixmap; if (fTileCnt > 0 && offscreenSurface->peekPixels(&offscreenPixmap)) { SkBitmap offscreenBitmap; @@ -1203,6 +1270,38 @@ void Viewer::drawImGui() { } } + int pixelGeometryIdx = 0; + if (fPixelGeometryOverrides) { + pixelGeometryIdx = params.fSurfaceProps.pixelGeometry() + 1; + } + if (ImGui::Combo("Pixel Geometry", &pixelGeometryIdx, + "Default\0Flat\0RGB\0BGR\0RGBV\0BGRV\0\0")) + { + uint32_t flags = params.fSurfaceProps.flags(); + if (pixelGeometryIdx == 0) { + fPixelGeometryOverrides = false; + params.fSurfaceProps = SkSurfaceProps(flags, SkSurfaceProps::kLegacyFontHost_InitType); + } else { + fPixelGeometryOverrides = true; + SkPixelGeometry pixelGeometry = SkTo<SkPixelGeometry>(pixelGeometryIdx - 1); + params.fSurfaceProps = SkSurfaceProps(flags, pixelGeometry); + } + paramsChanged = true; + } + + bool useDFT = params.fSurfaceProps.isUseDeviceIndependentFonts(); + if (ImGui::Checkbox("DFT", &useDFT)) { + uint32_t flags = params.fSurfaceProps.flags(); + if (useDFT) { + flags |= SkSurfaceProps::kUseDeviceIndependentFonts_Flag; + } else { + flags &= ~SkSurfaceProps::kUseDeviceIndependentFonts_Flag; + } + SkPixelGeometry pixelGeometry = params.fSurfaceProps.pixelGeometry(); + params.fSurfaceProps = SkSurfaceProps(flags, pixelGeometry); + paramsChanged = true; + } + if (ImGui::TreeNode("Path Renderers")) { GpuPathRenderers prevPr = params.fGrContextOptions.fGpuPathRenderers; auto prButton = [&](GpuPathRenderers x) { diff --git a/tools/viewer/Viewer.h b/tools/viewer/Viewer.h index 8a1e227ce3..2a8f12b466 100644 --- a/tools/viewer/Viewer.h +++ b/tools/viewer/Viewer.h @@ -165,6 +165,7 @@ private: SkPaint fPaint; SkPaintFields fPaintOverrides; + bool fPixelGeometryOverrides = false; }; |