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

Unified Diff: tools/viewer/Viewer.cpp

Issue 1955293002: Add flexible keybinding/command system to sk_app (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Rebase Created 4 years, 7 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
« no previous file with comments | « tools/viewer/Viewer.h ('k') | tools/viewer/sk_app/CommandSet.h » ('j') | 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 62c3048d914e720ed392f466c168231eb980c878..7dd265e6e2183cd75c4e726410be8a845aa12d41 100644
--- a/tools/viewer/Viewer.cpp
+++ b/tools/viewer/Viewer.cpp
@@ -22,19 +22,6 @@ Application* Application::Create(int argc, char** argv, void* platformData) {
return new Viewer(argc, argv, platformData);
}
-static bool on_key_handler(Window::Key key, Window::InputState state, uint32_t modifiers,
- void* userData) {
- Viewer* vv = reinterpret_cast<Viewer*>(userData);
-
- return vv->onKey(key, state, modifiers);
-}
-
-static bool on_char_handler(SkUnichar c, uint32_t modifiers, void* userData) {
- Viewer* vv = reinterpret_cast<Viewer*>(userData);
-
- return vv->onChar(c, modifiers);
-}
-
static void on_paint_handler(SkCanvas* canvas, void* userData) {
Viewer* vv = reinterpret_cast<Viewer*>(userData);
@@ -76,10 +63,47 @@ Viewer::Viewer(int argc, char** argv, void* platformData)
fWindow->attach(Window::kVulkan_BackendType, DisplayParams());
// register callbacks
- fWindow->registerKeyFunc(on_key_handler, this);
- fWindow->registerCharFunc(on_char_handler, this);
+ fCommands.attach(fWindow);
fWindow->registerPaintFunc(on_paint_handler, this);
+ // add key-bindings
+ fCommands.addCommand('s', "Overlays", "Toggle stats display", [this]() {
+ this->fDisplayStats = !this->fDisplayStats;
+ fWindow->inval();
+ });
+ fCommands.addCommand('c', "Modes", "Toggle sRGB color mode", [this]() {
+ DisplayParams params = fWindow->getDisplayParams();
+ params.fProfileType = (kLinear_SkColorProfileType == params.fProfileType)
+ ? kSRGB_SkColorProfileType : kLinear_SkColorProfileType;
+ fWindow->setDisplayParams(params);
+ this->updateTitle();
+ fWindow->inval();
+ });
+ fCommands.addCommand(Window::Key::kRight, "Right", "Navigation", "Next slide", [this]() {
+ int previousSlide = fCurrentSlide;
+ fCurrentSlide++;
+ if (fCurrentSlide >= fSlides.count()) {
+ fCurrentSlide = 0;
+ }
+ this->setupCurrentSlide(previousSlide);
+ });
+ fCommands.addCommand(Window::Key::kLeft, "Left", "Navigation", "Previous slide", [this]() {
+ int previousSlide = fCurrentSlide;
+ fCurrentSlide--;
+ if (fCurrentSlide < 0) {
+ fCurrentSlide = fSlides.count() - 1;
+ }
+ this->setupCurrentSlide(previousSlide);
+ });
+ fCommands.addCommand(Window::Key::kUp, "Up", "Transform", "Zoom in", [this]() {
+ this->changeZoomLevel(1.f / 32.f);
+ fWindow->inval();
+ });
+ fCommands.addCommand(Window::Key::kDown, "Down", "Transform", "Zoom out", [this]() {
+ this->changeZoomLevel(-1.f / 32.f);
+ fWindow->inval();
+ });
+
// set up slides
this->initSlides();
@@ -208,67 +232,6 @@ void Viewer::updateMatrix(){
fLocalMatrix = m;
}
-bool Viewer::onKey(Window::Key key, Window::InputState state, uint32_t modifiers) {
- if (Window::kDown_InputState == state) {
- switch (key) {
- case Window::kRight_Key: {
- int previousSlide = fCurrentSlide;
- fCurrentSlide++;
- if (fCurrentSlide >= fSlides.count()) {
- fCurrentSlide = 0;
- }
- setupCurrentSlide(previousSlide);
- return true;
- }
-
- case Window::kLeft_Key: {
- int previousSlide = fCurrentSlide;
- fCurrentSlide--;
- if (fCurrentSlide < 0) {
- fCurrentSlide = fSlides.count() - 1;
- }
- setupCurrentSlide(previousSlide);
- return true;
- }
-
- case Window::kUp_Key: {
- this->changeZoomLevel(1.f / 32.f);
- fWindow->inval();
- return true;
- }
-
- case Window::kDown_Key: {
- this->changeZoomLevel(-1.f / 32.f);
- fWindow->inval();
- return true;
- }
-
- default:
- break;
- }
- }
-
- return false;
-}
-
-bool Viewer::onChar(SkUnichar c, uint32_t modifiers) {
- switch (c) {
- case 's':
- fDisplayStats = !fDisplayStats;
- return true;
- case 'c':
- DisplayParams params = fWindow->getDisplayParams();
- params.fProfileType = (kLinear_SkColorProfileType == params.fProfileType)
- ? kSRGB_SkColorProfileType : kLinear_SkColorProfileType;
- fWindow->setDisplayParams(params);
- this->updateTitle();
- fWindow->inval();
- return true;
- }
-
- return false;
-}
-
void Viewer::onPaint(SkCanvas* canvas) {
int count = canvas->save();
@@ -296,6 +259,7 @@ void Viewer::onPaint(SkCanvas* canvas) {
if (fDisplayStats) {
drawStats(canvas);
}
+ fCommands.drawHelp(canvas);
}
void Viewer::drawStats(SkCanvas* canvas) {
« no previous file with comments | « tools/viewer/Viewer.h ('k') | tools/viewer/sk_app/CommandSet.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698