Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(242)

Unified Diff: tools/viewer/Viewer.cpp

Issue 2058753002: Display JPGs in Viewer with Split Screen and ColorSpaceXform (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Bitmap Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« tools/viewer/Viewer.h ('K') | « tools/viewer/Viewer.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/viewer/Viewer.cpp
diff --git a/tools/viewer/Viewer.cpp b/tools/viewer/Viewer.cpp
index 499673572b4d296541768aafcd1c08e84a3815e8..5a3af32e0fd57e5e86e23edd452096af95f981d3 100644
--- a/tools/viewer/Viewer.cpp
+++ b/tools/viewer/Viewer.cpp
@@ -9,12 +9,14 @@
#include "GMSlide.h"
#include "SKPSlide.h"
+#include "ImageSlide.h"
#include "SkCanvas.h"
#include "SkCommonFlags.h"
#include "SkOSFile.h"
#include "SkRandom.h"
#include "SkStream.h"
+#include "SkMetaData.h"
msarett 2016/06/13 14:56:26 nit: alphabetical order
liyuqian 2016/06/13 16:10:40 Done.
using namespace sk_app;
@@ -52,10 +54,13 @@ DEFINE_string2(match, m, nullptr,
"^ and $ requires an exact match\n"
"If a bench does not match any list entry,\n"
"it is skipped unless some list entry starts with ~");
-DEFINE_string(skps, "skps", "Directory to read skps from.");
#ifdef SK_BUILD_FOR_ANDROID
+DEFINE_string(skps, "/data/local/tmp/skia", "Directory to read skps from.");
+DEFINE_string(jpgs, "/data/local/tmp/skia", "Directory to read jpgs from.");
DEFINE_bool(vulkan, false, "Run with Vulkan.");
#else
+DEFINE_string(skps, "skps", "Directory to read skps from.");
+DEFINE_string(jpgs, "jpgs", "Directory to read jpgs from.");
DEFINE_bool(vulkan, true, "Run with Vulkan.");
#endif
@@ -73,6 +78,9 @@ const char* kBackendStateName = "Backend";
const char* kSoftkeyStateName = "Softkey";
const char* kSoftkeyHint = "Please select a softkey";
const char* kFpsStateName = "FPS";
+const char* kSplitScreenStateName = "Split screen";
+const char* kON = "ON";
+const char* kOFF = "OFF";
Viewer::Viewer(int argc, char** argv, void* platformData)
: fCurrentMeasurement(0)
@@ -224,6 +232,19 @@ void Viewer::initSlides() {
}
}
}
+
+ // JPGs
+ for (int i = 0; i < FLAGS_jpgs.count(); i++) {
+ SkOSFile::Iter it(FLAGS_jpgs[i], ".jpg");
+ SkString skpName;
msarett 2016/06/13 14:56:26 nit: More appropriate variable name?
liyuqian 2016/06/13 16:10:40 Done.
+ while (it.next(&skpName)) {
+ SkString path = SkOSPath::Join(FLAGS_jpgs[i], skpName.c_str());
+ sk_sp<ImageSlide> slide(new ImageSlide(skpName, path));
+ if (slide) {
+ fSlides.push_back(slide);
+ }
+ }
+ }
}
@@ -247,6 +268,8 @@ void Viewer::setupCurrentSlide(int previousSlide) {
return; // no change; do nothing
}
+ fSlides[fCurrentSlide]->load(); // prepare dimensions for image slides
+
fGesture.reset();
fDefaultMatrix.reset();
fDefaultMatrixInv.reset();
@@ -272,7 +295,6 @@ void Viewer::setupCurrentSlide(int previousSlide) {
this->updateTitle();
this->updateUIState();
- fSlides[fCurrentSlide]->load();
if (previousSlide >= 0) {
fSlides[previousSlide]->unload();
}
@@ -317,11 +339,14 @@ SkMatrix Viewer::computeMatrix() {
return m;
}
-void Viewer::onPaint(SkCanvas* canvas) {
+void Viewer::drawSlide(SkCanvas* canvas, bool inSplitScreen) {
+ SkASSERT(!inSplitScreen || fWindow->supportsContentRect());
+
int count = canvas->save();
if (fWindow->supportsContentRect()) {
SkRect contentRect = fWindow->getContentRect();
+ contentRect.fLeft += inSplitScreen ? (contentRect.fRight - contentRect.fLeft) * 0.5 : 0;
msarett 2016/06/13 14:56:26 What's going on here? Are we upscaling?
liyuqian 2016/06/13 16:10:40 We are translating the image half screen to the ri
msarett 2016/06/13 16:57:35 Can you add a comment here?
liyuqian 2016/06/13 19:02:29 Done.
canvas->clipRect(contentRect);
canvas->translate(contentRect.fLeft, contentRect.fTop);
}
@@ -330,8 +355,16 @@ void Viewer::onPaint(SkCanvas* canvas) {
canvas->concat(fDefaultMatrix);
canvas->concat(computeMatrix());
+ canvas->getMetaData().setBool(kImageColorXformMetaData, inSplitScreen);
fSlides[fCurrentSlide]->draw(canvas);
canvas->restoreToCount(count);
+}
+
+void Viewer::onPaint(SkCanvas* canvas) {
+ drawSlide(canvas);
+ if (fSplitScreen && fWindow->supportsContentRect()) {
+ drawSlide(canvas, true);
msarett 2016/06/13 14:56:26 Is it ok/intentional to call this twice?
liyuqian 2016/06/13 16:10:40 Yes, this is used to draw the same slide twice. Th
+ }
if (fDisplayStats) {
drawStats(canvas);
@@ -461,11 +494,20 @@ void Viewer::updateUIState() {
fpsState[kValue] = SkStringPrintf("%8.3lf ms", measurement).c_str();
fpsState[kOptions] = Json::Value(Json::arrayValue);
+ // Split screen state
+ Json::Value splitScreenState(Json::objectValue);
+ splitScreenState[kName] = kSplitScreenStateName;
+ splitScreenState[kValue] = fSplitScreen ? kON : kOFF;
+ splitScreenState[kOptions] = Json::Value(Json::arrayValue);
+ splitScreenState[kOptions].append(kON);
+ splitScreenState[kOptions].append(kOFF);
+
Json::Value state(Json::arrayValue);
state.append(slideState);
state.append(backendState);
state.append(softkeyState);
state.append(fpsState);
+ state.append(splitScreenState);
fWindow->setUIState(state);
}
@@ -508,6 +550,13 @@ void Viewer::onUIStateChanged(const SkString& stateName, const SkString& stateVa
fCommands.onSoftkey(stateValue);
updateUIState(); // This is still needed to reset the value to kSoftkeyHint
}
+ } else if (stateName.equals(kSplitScreenStateName)) {
+ bool newSplitScreen = stateValue.equals(kON);
+ if (newSplitScreen != fSplitScreen) {
+ fSplitScreen = newSplitScreen;
+ fWindow->inval();
+ updateUIState();
+ }
} else {
SkDebugf("Unknown stateName: %s", stateName.c_str());
}
« tools/viewer/Viewer.h ('K') | « tools/viewer/Viewer.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698