aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/viewer
diff options
context:
space:
mode:
authorGravatar Ben Wagner <bungeman@google.com>2018-04-13 14:30:23 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-04-16 22:46:50 +0000
commit37c5403890000289d7db9fd1d90cf96c2ee12bf3 (patch)
tree7d85406ae79f02f59f99146b117cdc63cee7c30b /tools/viewer
parente7fbafe1da930eba9e24f60fefef5a440f715219 (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.cpp103
-rw-r--r--tools/viewer/Viewer.h1
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;
};