OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2016 Google Inc. | 2 * Copyright 2016 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #include "Viewer.h" | 8 #include "Viewer.h" |
9 | 9 |
10 #include "GMSlide.h" | 10 #include "GMSlide.h" |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
58 const char *kBackendTypeStrings[sk_app::Window::kBackendTypeCount] = { | 58 const char *kBackendTypeStrings[sk_app::Window::kBackendTypeCount] = { |
59 " [OpenGL]", | 59 " [OpenGL]", |
60 " [Vulkan]" | 60 " [Vulkan]" |
61 }; | 61 }; |
62 | 62 |
63 const char* kName = "name"; | 63 const char* kName = "name"; |
64 const char* kValue = "value"; | 64 const char* kValue = "value"; |
65 const char* kOptions = "options"; | 65 const char* kOptions = "options"; |
66 const char* kSlideStateName = "Slide"; | 66 const char* kSlideStateName = "Slide"; |
67 const char* kBackendStateName = "Backend"; | 67 const char* kBackendStateName = "Backend"; |
| 68 const char* kSoftkeyStateName = "Softkey"; |
| 69 const char* kSoftkeyHint = "Please select a softkey"; |
| 70 |
68 | 71 |
69 Viewer::Viewer(int argc, char** argv, void* platformData) | 72 Viewer::Viewer(int argc, char** argv, void* platformData) |
70 : fCurrentMeasurement(0) | 73 : fCurrentMeasurement(0) |
71 , fDisplayStats(false) | 74 , fDisplayStats(false) |
72 , fBackendType(sk_app::Window::kVulkan_BackendType) | 75 , fBackendType(sk_app::Window::kVulkan_BackendType) |
73 , fZoomCenterX(0.0f) | 76 , fZoomCenterX(0.0f) |
74 , fZoomCenterY(0.0f) | 77 , fZoomCenterY(0.0f) |
75 , fZoomLevel(0.0f) | 78 , fZoomLevel(0.0f) |
76 , fZoomScale(SK_Scalar1) | 79 , fZoomScale(SK_Scalar1) |
77 { | 80 { |
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
404 fCurrentMeasurement &= (kMeasurementCount - 1); // fast mod | 407 fCurrentMeasurement &= (kMeasurementCount - 1); // fast mod |
405 SkASSERT(fCurrentMeasurement < kMeasurementCount); | 408 SkASSERT(fCurrentMeasurement < kMeasurementCount); |
406 | 409 |
407 fAnimTimer.updateTime(); | 410 fAnimTimer.updateTime(); |
408 if (fSlides[fCurrentSlide]->animate(fAnimTimer) || fDisplayStats) { | 411 if (fSlides[fCurrentSlide]->animate(fAnimTimer) || fDisplayStats) { |
409 fWindow->inval(); | 412 fWindow->inval(); |
410 } | 413 } |
411 } | 414 } |
412 | 415 |
413 void Viewer::updateUIState() { | 416 void Viewer::updateUIState() { |
| 417 // Slide state |
414 Json::Value slideState(Json::objectValue); | 418 Json::Value slideState(Json::objectValue); |
415 slideState[kName] = kSlideStateName; | 419 slideState[kName] = kSlideStateName; |
416 slideState[kValue] = fSlides[fCurrentSlide]->getName().c_str(); | 420 slideState[kValue] = fSlides[fCurrentSlide]->getName().c_str(); |
417 Json::Value allSlideNames(Json::arrayValue); | 421 Json::Value allSlideNames(Json::arrayValue); |
418 for(auto slide : fSlides) { | 422 for(auto slide : fSlides) { |
419 allSlideNames.append(Json::Value(slide->getName().c_str())); | 423 allSlideNames.append(Json::Value(slide->getName().c_str())); |
420 } | 424 } |
421 slideState[kOptions] = allSlideNames; | 425 slideState[kOptions] = allSlideNames; |
422 | 426 |
423 // This state is currently a demo for the one without options. | 427 // Backend state |
424 // We will be able to change the backend too. | |
425 Json::Value backendState(Json::objectValue); | 428 Json::Value backendState(Json::objectValue); |
426 backendState[kName] = kBackendStateName; | 429 backendState[kName] = kBackendStateName; |
427 backendState[kValue] = kBackendTypeStrings[fBackendType]; | 430 backendState[kValue] = kBackendTypeStrings[fBackendType]; |
428 backendState[kOptions] = Json::Value(Json::arrayValue); | 431 backendState[kOptions] = Json::Value(Json::arrayValue); |
429 for(auto str : kBackendTypeStrings) { | 432 for (auto str : kBackendTypeStrings) { |
430 backendState[kOptions].append(Json::Value(str)); | 433 backendState[kOptions].append(Json::Value(str)); |
431 } | 434 } |
432 | 435 |
| 436 // Softkey state |
| 437 Json::Value softkeyState(Json::objectValue); |
| 438 softkeyState[kName] = kSoftkeyStateName; |
| 439 softkeyState[kValue] = kSoftkeyHint; |
| 440 softkeyState[kOptions] = Json::Value(Json::arrayValue); |
| 441 softkeyState[kOptions].append(kSoftkeyHint); |
| 442 for (const auto& softkey : fCommands.getCommandsAsSoftkeys()) { |
| 443 softkeyState[kOptions].append(Json::Value(softkey.c_str())); |
| 444 } |
| 445 |
433 Json::Value state(Json::arrayValue); | 446 Json::Value state(Json::arrayValue); |
434 state.append(slideState); | 447 state.append(slideState); |
435 state.append(backendState); | 448 state.append(backendState); |
| 449 state.append(softkeyState); |
436 | 450 |
437 fWindow->setUIState(state); | 451 fWindow->setUIState(state); |
438 } | 452 } |
439 | 453 |
440 void Viewer::onUIStateChanged(const SkString& stateName, const SkString& stateVa
lue) { | 454 void Viewer::onUIStateChanged(const SkString& stateName, const SkString& stateVa
lue) { |
441 // For those who will add more features to handle the state change in this f
unction: | 455 // For those who will add more features to handle the state change in this f
unction: |
442 // After the change, please call updateUIState no notify the frontend (e.g.,
Android app). | 456 // After the change, please call updateUIState no notify the frontend (e.g.,
Android app). |
443 // For example, after slide change, updateUIState is called inside setupCurr
entSlide; | 457 // For example, after slide change, updateUIState is called inside setupCurr
entSlide; |
444 // after backend change, updateUIState is called in this function. | 458 // after backend change, updateUIState is called in this function. |
445 if (stateName.equals(kSlideStateName)) { | 459 if (stateName.equals(kSlideStateName)) { |
(...skipping 17 matching lines...) Expand all Loading... |
463 fBackendType = (sk_app::Window::BackendType)i; | 477 fBackendType = (sk_app::Window::BackendType)i; |
464 fWindow->detach(); | 478 fWindow->detach(); |
465 fWindow->attach(fBackendType, DisplayParams()); | 479 fWindow->attach(fBackendType, DisplayParams()); |
466 fWindow->inval(); | 480 fWindow->inval(); |
467 updateTitle(); | 481 updateTitle(); |
468 updateUIState(); | 482 updateUIState(); |
469 } | 483 } |
470 break; | 484 break; |
471 } | 485 } |
472 } | 486 } |
| 487 } else if (stateName.equals(kSoftkeyStateName)) { |
| 488 if (!stateValue.equals(kSoftkeyHint)) { |
| 489 fCommands.onSoftkey(stateValue); |
| 490 updateUIState(); // This is still needed to reset the value to kSoft
keyHint |
| 491 } |
473 } else { | 492 } else { |
474 SkDebugf("Unknown stateName: %s", stateName.c_str()); | 493 SkDebugf("Unknown stateName: %s", stateName.c_str()); |
475 } | 494 } |
476 } | 495 } |
OLD | NEW |