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

Side by Side Diff: samplecode/SampleApp.cpp

Issue 1549483002: SampleApp: Build list of devices dynamically Base URL: https://skia.googlesource.com/skia.git@sampleapp-01-no-picturedevice
Patch Set: Created 4 years, 11 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 unified diff | Download patch
« no previous file with comments | « samplecode/SampleApp.h ('k') | src/views/SkOSMenu.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2011 Google Inc. 2 * Copyright 2011 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 "SampleApp.h" 8 #include "SampleApp.h"
9 9
10 #include "OverView.h" 10 #include "OverView.h"
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 class PdfFileViewerFactory : public SkViewFactory { 62 class PdfFileViewerFactory : public SkViewFactory {
63 SkString fFilename; 63 SkString fFilename;
64 public: 64 public:
65 PdfFileViewerFactory(const SkString& filename) : fFilename(filename) {} 65 PdfFileViewerFactory(const SkString& filename) : fFilename(filename) {}
66 SkView* operator() () const override { 66 SkView* operator() () const override {
67 return CreateSamplePdfFileViewer(fFilename.c_str()); 67 return CreateSamplePdfFileViewer(fFilename.c_str());
68 } 68 }
69 }; 69 };
70 #endif // SAMPLE_PDF_FILE_VIEWER 70 #endif // SAMPLE_PDF_FILE_VIEWER
71 71
72 #if SK_COMMAND_BUFFER
73 #define DEFAULT_TO_COMMAND_BUFFER 1
74 #elif SK_ANGLE
75 //#define DEFAULT_TO_ANGLE 1
76 #else
77 #define DEFAULT_TO_GPU 0 // if 1 default rendering is on GPU
78 #endif
79
80 #define ANIMATING_EVENTTYPE "nextSample" 72 #define ANIMATING_EVENTTYPE "nextSample"
81 #define ANIMATING_DELAY 250 73 #define ANIMATING_DELAY 250
82 74
83 #ifdef SK_DEBUG 75 #ifdef SK_DEBUG
84 #define FPS_REPEAT_MULTIPLIER 1 76 #define FPS_REPEAT_MULTIPLIER 1
85 #else 77 #else
86 #define FPS_REPEAT_MULTIPLIER 10 78 #define FPS_REPEAT_MULTIPLIER 10
87 #endif 79 #endif
88 #define FPS_REPEAT_COUNT (10 * FPS_REPEAT_MULTIPLIER) 80 #define FPS_REPEAT_COUNT (10 * FPS_REPEAT_MULTIPLIER)
89 81
(...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after
429 ////////////////////////////////////////////////////////////////////////////// 421 //////////////////////////////////////////////////////////////////////////////
430 422
431 enum FlipAxisEnum { 423 enum FlipAxisEnum {
432 kFlipAxis_X = (1 << 0), 424 kFlipAxis_X = (1 << 0),
433 kFlipAxis_Y = (1 << 1) 425 kFlipAxis_Y = (1 << 1)
434 }; 426 };
435 427
436 #include "SkDrawFilter.h" 428 #include "SkDrawFilter.h"
437 429
438 struct HintingState { 430 struct HintingState {
439 SkPaint::Hinting hinting; 431 SkPaint::Hinting fHinting;
440 const char* name; 432 const char* fMenuLabel;
441 const char* label; 433 const char* fTitleLabel;
442 }; 434 };
443 static HintingState gHintingStates[] = { 435 static HintingState gHintingStates[] = {
444 {SkPaint::kNo_Hinting, "Mixed", nullptr }, 436 {SkPaint::kNo_Hinting, "Mixed", nullptr },
445 {SkPaint::kNo_Hinting, "None", "H0 " }, 437 {SkPaint::kNo_Hinting, "None", "H0 " },
446 {SkPaint::kSlight_Hinting, "Slight", "Hs " }, 438 {SkPaint::kSlight_Hinting, "Slight", "Hs " },
447 {SkPaint::kNormal_Hinting, "Normal", "Hn " }, 439 {SkPaint::kNormal_Hinting, "Normal", "Hn " },
448 {SkPaint::kFull_Hinting, "Full", "Hf " }, 440 {SkPaint::kFull_Hinting, "Full", "Hf " },
449 }; 441 };
450 442
451 struct FilterQualityState { 443 struct FilterQualityState {
452 SkFilterQuality fQuality; 444 SkFilterQuality fQuality;
453 const char* fName; 445 const char* fMenuLabel;
454 const char* fLabel; 446 const char* fTitleLabel;
455 }; 447 };
456 static FilterQualityState gFilterQualityStates[] = { 448 static FilterQualityState gFilterQualityStates[] = {
457 { kNone_SkFilterQuality, "Mixed", nullptr }, 449 { kNone_SkFilterQuality, "Mixed", nullptr },
458 { kNone_SkFilterQuality, "None", "F0 " }, 450 { kNone_SkFilterQuality, "None", "F0 " },
459 { kLow_SkFilterQuality, "Low", "F1 " }, 451 { kLow_SkFilterQuality, "Low", "F1 " },
460 { kMedium_SkFilterQuality, "Medium", "F2 " }, 452 { kMedium_SkFilterQuality, "Medium", "F2 " },
461 { kHigh_SkFilterQuality, "High", "F3 " }, 453 { kHigh_SkFilterQuality, "High", "F3 " },
462 }; 454 };
463 455
464 class FlagsFilterCanvas : public SkPaintFilterCanvas { 456 class FlagsFilterCanvas : public SkPaintFilterCanvas {
(...skipping 21 matching lines...) Expand all
486 if (SkOSMenu::kMixedState != fAAState) { 478 if (SkOSMenu::kMixedState != fAAState) {
487 paint->writable()->setAntiAlias(SkOSMenu::kOnState == fAAState); 479 paint->writable()->setAntiAlias(SkOSMenu::kOnState == fAAState);
488 } 480 }
489 if (0 != fFilterQualityIndex) { 481 if (0 != fFilterQualityIndex) {
490 paint->writable()->setFilterQuality(gFilterQualityStates[fFilterQual ityIndex].fQuality); 482 paint->writable()->setFilterQuality(gFilterQualityStates[fFilterQual ityIndex].fQuality);
491 } 483 }
492 if (SkOSMenu::kMixedState != fSubpixelState) { 484 if (SkOSMenu::kMixedState != fSubpixelState) {
493 paint->writable()->setSubpixelText(SkOSMenu::kOnState == fSubpixelSt ate); 485 paint->writable()->setSubpixelText(SkOSMenu::kOnState == fSubpixelSt ate);
494 } 486 }
495 if (0 != fHintingState && fHintingState < (int)SK_ARRAY_COUNT(gHintingSt ates)) { 487 if (0 != fHintingState && fHintingState < (int)SK_ARRAY_COUNT(gHintingSt ates)) {
496 paint->writable()->setHinting(gHintingStates[fHintingState].hinting) ; 488 paint->writable()->setHinting(gHintingStates[fHintingState].fHinting );
497 } 489 }
498 return true; 490 return true;
499 } 491 }
500 492
501 private: 493 private:
502 SkOSMenu::TriState fLCDState; 494 SkOSMenu::TriState fLCDState;
503 SkOSMenu::TriState fAAState; 495 SkOSMenu::TriState fAAState;
504 SkOSMenu::TriState fSubpixelState; 496 SkOSMenu::TriState fSubpixelState;
505 int fHintingState; 497 int fHintingState;
506 int fFilterQualityIndex; 498 int fFilterQualityIndex;
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
585 kRel_16x1_Tiling, 577 kRel_16x1_Tiling,
586 578
587 kLast_TilingMode_Enum 579 kLast_TilingMode_Enum
588 }; 580 };
589 581
590 struct TilingInfo { 582 struct TilingInfo {
591 const char* label; 583 const char* label;
592 SkScalar w, h; 584 SkScalar w, h;
593 }; 585 };
594 586
595 static const struct TilingInfo gTilingInfo[] = { 587 static const struct TilingInfo gTilingInfos[] = {
596 { "No tiling", SK_Scalar1 , SK_Scalar1 }, // kNo_Tiling 588 { "No tiling", SK_Scalar1 , SK_Scalar1 }, // kNo_Tiling
597 { "128x128" , SkIntToScalar(128), SkIntToScalar(128) }, // kAbs_128x128_Til ing 589 { "128x128" , SkIntToScalar(128), SkIntToScalar(128) }, // kAbs_128x128_Til ing
598 { "256x256" , SkIntToScalar(256), SkIntToScalar(256) }, // kAbs_256x256_Til ing 590 { "256x256" , SkIntToScalar(256), SkIntToScalar(256) }, // kAbs_256x256_Til ing
599 { "1/4x1/4" , SK_Scalar1 / 4 , SK_Scalar1 / 4 }, // kRel_4x4_Tiling 591 { "1/4x1/4" , SK_Scalar1 / 4 , SK_Scalar1 / 4 }, // kRel_4x4_Tiling
600 { "1/1x1/16" , SK_Scalar1 , SK_Scalar1 / 16 }, // kRel_1x16_Tiling 592 { "1/1x1/16" , SK_Scalar1 , SK_Scalar1 / 16 }, // kRel_1x16_Tiling
601 { "1/16x1/1" , SK_Scalar1 / 16 , SK_Scalar1 }, // kRel_16x1_Tiling 593 { "1/16x1/1" , SK_Scalar1 / 16 , SK_Scalar1 }, // kRel_16x1_Tiling
602 }; 594 };
603 static_assert((SK_ARRAY_COUNT(gTilingInfo) == kLast_TilingMode_Enum), 595 static_assert((SK_ARRAY_COUNT(gTilingInfos) == kLast_TilingMode_Enum),
604 "Incomplete_tiling_labels"); 596 "Incomplete_tiling_labels");
605 597
606 SkSize SampleWindow::tileSize() const { 598 SkSize SampleWindow::tileSize() const {
607 SkASSERT((TilingMode)fTilingMode < kLast_TilingMode_Enum); 599 SkASSERT((TilingMode)fTilingMode < kLast_TilingMode_Enum);
608 const struct TilingInfo* info = gTilingInfo + fTilingMode; 600 const struct TilingInfo* info = &gTilingInfos[fTilingMode];
609 return SkSize::Make(info->w > SK_Scalar1 ? info->w : this->width() * info->w , 601 return SkSize::Make(info->w > SK_Scalar1 ? info->w : this->width() * info->w ,
610 info->h > SK_Scalar1 ? info->h : this->height() * info-> h); 602 info->h > SK_Scalar1 ? info->h : this->height() * info-> h);
611 } 603 }
612 ////////////////////////////////////////////////////////////////////////////// 604 //////////////////////////////////////////////////////////////////////////////
613 605
614 static SkView* curr_view(SkWindow* wind) { 606 static SkView* curr_view(SkWindow* wind) {
615 SkView::F2BIter iter(wind); 607 SkView::F2BIter iter(wind);
616 return iter.next(); 608 return iter.next();
617 } 609 }
618 610
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
657 } 649 }
658 650
659 void SampleWindow::updatePointer(int x, int y) { 651 void SampleWindow::updatePointer(int x, int y) {
660 fMouseX = x; 652 fMouseX = x;
661 fMouseY = y; 653 fMouseY = y;
662 if (fShowZoomer) { 654 if (fShowZoomer) {
663 this->inval(nullptr); 655 this->inval(nullptr);
664 } 656 }
665 } 657 }
666 658
667 static inline SampleWindow::DeviceType cycle_devicetype(SampleWindow::DeviceType ct) {
668 static const SampleWindow::DeviceType gCT[] = {
669 SampleWindow::kRaster_DeviceType
670 #if SK_SUPPORT_GPU
671 , SampleWindow::kGPU_DeviceType
672 #if SK_ANGLE
673 , SampleWindow::kANGLE_DeviceType
674 #endif // SK_ANGLE
675 #if SK_COMMAND_BUFFER
676 , SampleWindow::kCommandBuffer_DeviceType
677 #endif // SK_COMMAND_BUFFER
678 #endif // SK_SUPPORT_GPU
679 };
680 static_assert(SK_ARRAY_COUNT(gCT) == SampleWindow::kDeviceTypeCnt, "array_si ze_mismatch");
681 return gCT[ct];
682 }
683
684 static SkString getSampleTitle(const SkViewFactory* sampleFactory) { 659 static SkString getSampleTitle(const SkViewFactory* sampleFactory) {
685 SkView* view = (*sampleFactory)(); 660 SkView* view = (*sampleFactory)();
686 SkString title; 661 SkString title;
687 SampleCode::RequestTitle(view, &title); 662 SampleCode::RequestTitle(view, &title);
688 view->unref(); 663 view->unref();
689 return title; 664 return title;
690 } 665 }
691 666
692 static bool compareSampleTitle(const SkViewFactory* first, const SkViewFactory* second) { 667 static bool compareSampleTitle(const SkViewFactory* first, const SkViewFactory* second) {
693 return strcmp(getSampleTitle(first).c_str(), getSampleTitle(second).c_str()) < 0; 668 return strcmp(getSampleTitle(first).c_str(), getSampleTitle(second).c_str()) < 0;
(...skipping 23 matching lines...) Expand all
717 } 692 }
718 } 693 }
719 694
720 DEFINE_string(slide, "", "Start on this sample."); 695 DEFINE_string(slide, "", "Start on this sample.");
721 DEFINE_int32(msaa, 0, "Request multisampling with this count."); 696 DEFINE_int32(msaa, 0, "Request multisampling with this count.");
722 DEFINE_string(pictureDir, "", "Read pictures from here."); 697 DEFINE_string(pictureDir, "", "Read pictures from here.");
723 DEFINE_string(picture, "", "Path to single picture."); 698 DEFINE_string(picture, "", "Path to single picture.");
724 DEFINE_string(sequence, "", "Path to file containing the desired samples/gms to show."); 699 DEFINE_string(sequence, "", "Path to file containing the desired samples/gms to show.");
725 DEFINE_bool(sort, false, "Sort samples by title."); 700 DEFINE_bool(sort, false, "Sort samples by title.");
726 DEFINE_bool(list, false, "List samples?"); 701 DEFINE_bool(list, false, "List samples?");
727 DEFINE_bool(gpu, false, "Start up with gpu?");
728 DEFINE_string(key, "", ""); // dummy to enable gm tests that have platform-spec ific names 702 DEFINE_string(key, "", ""); // dummy to enable gm tests that have platform-spec ific names
729 #ifdef SAMPLE_PDF_FILE_VIEWER 703 #ifdef SAMPLE_PDF_FILE_VIEWER
730 DEFINE_string(pdfPath, "", "Path to direcotry of pdf files."); 704 DEFINE_string(pdfPath, "", "Path to direcotry of pdf files.");
731 #endif 705 #endif
732 706
707 static const char startWithHelp[] = "Start with backend. Options: raster"
708 #if SK_SUPPORT_GPU
709 " gpu"
710 #if SK_ANGLE
711 #ifdef SK_BUILD_FOR_WIN
712 " angle"
713 #endif
714 #endif
715 #if SK_COMMAND_BUFFER
716 " commandbuffer"
717 #endif
718 #endif
719 "";
720 DEFINE_string(startWith, "raster", startWithHelp);
721
722
723 struct DeviceInfo {
724 const char* fName;
725 const char* fMenuLabel;
726 SampleWindow::DeviceType fType;
727 };
728 static const DeviceInfo gDeviceInfos[] = {
729 { "raster", "Raster", SampleWindow::kRaster_DeviceType }
730 #if SK_SUPPORT_GPU
731 , { "gpu", "GPU", SampleWindow::kGPU_DeviceType }
732 #if SK_ANGLE
733 #ifdef SK_BUILD_FOR_WIN
734 , { "angle", "ANGLE DirectX", SampleWindow::kANGLE_DeviceType }
735 #endif
736 #endif
737 #if SK_COMMAND_BUFFER
738 , { "commandbuffer", "Command Buffer", kCommandBuffer_DeviceType }
739 #endif
740 #endif
741 };
742
733 #include "SkTaskGroup.h" 743 #include "SkTaskGroup.h"
734 744
735 SampleWindow::SampleWindow(void* hwnd, int argc, char** argv, DeviceManager* dev Manager) 745 SampleWindow::SampleWindow(void* hwnd, int argc, char** argv, DeviceManager* dev Manager)
736 : INHERITED(hwnd) 746 : INHERITED(hwnd)
737 , fDevManager(nullptr) { 747 , fDevManager(nullptr) {
738 748
739 SkCommandLineFlags::Parse(argc, argv); 749 SkCommandLineFlags::Parse(argc, argv);
750 for (fDeviceIndex = 0; fDeviceIndex < SK_ARRAY_COUNT(gDeviceInfos); ++fDevic eIndex) {
751 SkString name(gDeviceInfos[fDeviceIndex].fName);
752 if (name.equals(FLAGS_startWith[0])) {
753 break;
754 }
755 }
756 if (fDeviceIndex == SK_ARRAY_COUNT(gDeviceInfos)) {
757 SkDebugf("WARNING: can not start with unknown device %s\n", FLAGS_start With[0]);
758 fDeviceIndex = 0;
759 }
740 760
741 fCurrIndex = -1; 761 fCurrIndex = -1;
742 762
743 if (!FLAGS_pictureDir.isEmpty()) { 763 if (!FLAGS_pictureDir.isEmpty()) {
744 SkOSFile::Iter iter(FLAGS_pictureDir[0], "skp"); 764 SkOSFile::Iter iter(FLAGS_pictureDir[0], "skp");
745 SkString filename; 765 SkString filename;
746 while (iter.next(&filename)) { 766 while (iter.next(&filename)) {
747 *fSamples.append() = new PictFileFactory( 767 *fSamples.append() = new PictFileFactory(
748 SkOSPath::Join(FLAGS_pictureDir[0], filename.c_str())); 768 SkOSPath::Join(FLAGS_pictureDir[0], filename.c_str()));
749 } 769 }
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
798 } 818 }
799 819
800 if (!FLAGS_slide.isEmpty()) { 820 if (!FLAGS_slide.isEmpty()) {
801 fCurrIndex = findByTitle(FLAGS_slide[0]); 821 fCurrIndex = findByTitle(FLAGS_slide[0]);
802 if (fCurrIndex < 0) { 822 if (fCurrIndex < 0) {
803 fprintf(stderr, "Unknown sample \"%s\"\n", FLAGS_slide[0]); 823 fprintf(stderr, "Unknown sample \"%s\"\n", FLAGS_slide[0]);
804 listTitles(); 824 listTitles();
805 } 825 }
806 } 826 }
807 827
808 fMSAASampleCount = FLAGS_msaa;
809
810 if (FLAGS_list) { 828 if (FLAGS_list) {
811 listTitles(); 829 listTitles();
812 } 830 }
813 831
814 if (fCurrIndex < 0) { 832 if (fCurrIndex < 0) {
815 SkString title; 833 SkString title;
816 if (readTitleFromPrefs(&title)) { 834 if (readTitleFromPrefs(&title)) {
817 fCurrIndex = findByTitle(title.c_str()); 835 fCurrIndex = findByTitle(title.c_str());
818 } 836 }
819 } 837 }
820 838
821 if (fCurrIndex < 0) { 839 if (fCurrIndex < 0) {
822 fCurrIndex = 0; 840 fCurrIndex = 0;
823 } 841 }
824 842
825 static SkTaskGroup::Enabler enabled(-1); 843 static SkTaskGroup::Enabler enabled(-1);
826 gSampleWindow = this; 844 gSampleWindow = this;
827 845
828 fDeviceType = kRaster_DeviceType;
829 #if SK_SUPPORT_GPU
830 if (FLAGS_gpu) {
831 fDeviceType = kGPU_DeviceType;
832 }
833 #endif
834
835 #if DEFAULT_TO_GPU
836 fDeviceType = kGPU_DeviceType;
837 #endif
838 #if SK_ANGLE && DEFAULT_TO_ANGLE
839 fDeviceType = kANGLE_DeviceType;
840 #endif
841 #if SK_COMMAND_BUFFER && DEFAULT_TO_COMMAND_BUFFER
842 fDeviceType = kCommandBuffer_DeviceType;
843 #endif
844
845 fUseClip = false; 846 fUseClip = false;
846 fUsePicture = false; 847 fUsePicture = false;
847 fAnimating = false; 848 fAnimating = false;
848 fRotate = false; 849 fRotate = false;
849 fPerspAnim = false; 850 fPerspAnim = false;
850 fRequestGrabImage = false; 851 fRequestGrabImage = false;
851 fTilingMode = kNo_Tiling; 852 fTilingMode = kNo_Tiling;
852 fMeasureFPS = false; 853 fMeasureFPS = false;
853 fLCDState = SkOSMenu::kMixedState; 854 fLCDState = SkOSMenu::kMixedState;
854 fAAState = SkOSMenu::kMixedState; 855 fAAState = SkOSMenu::kMixedState;
(...skipping 14 matching lines...) Expand all
869 fMagnify = false; 870 fMagnify = false;
870 871
871 fSaveToPdf = false; 872 fSaveToPdf = false;
872 fSaveToSKP = false; 873 fSaveToSKP = false;
873 874
874 int sinkID = this->getSinkID(); 875 int sinkID = this->getSinkID();
875 fAppMenu = new SkOSMenu; 876 fAppMenu = new SkOSMenu;
876 fAppMenu->setTitle("Global Settings"); 877 fAppMenu->setTitle("Global Settings");
877 int itemID; 878 int itemID;
878 879
879 itemID = fAppMenu->appendList("Device Type", "Device Type", sinkID, 0, 880 SkTArray<const char*> deviceLabels;
880 "Raster", 881 for (auto& deviceInfo : gDeviceInfos) {
881 "OpenGL", 882 deviceLabels.push_back(deviceInfo.fMenuLabel);
882 #if SK_ANGLE 883 }
883 "ANGLE", 884 itemID = fAppMenu->appendList("Device Type", "Device Type", sinkID, 0, devic eLabels);
884 #endif
885 #if SK_COMMAND_BUFFER
886 "Command Buffer",
887 #endif
888 nullptr);
889 fAppMenu->assignKeyEquivalentToItem(itemID, 'd'); 885 fAppMenu->assignKeyEquivalentToItem(itemID, 'd');
890 itemID = fAppMenu->appendTriState("AA", "AA", sinkID, fAAState); 886 itemID = fAppMenu->appendTriState("AA", "AA", sinkID, fAAState);
891 fAppMenu->assignKeyEquivalentToItem(itemID, 'b'); 887 fAppMenu->assignKeyEquivalentToItem(itemID, 'b');
892 itemID = fAppMenu->appendTriState("LCD", "LCD", sinkID, fLCDState); 888 itemID = fAppMenu->appendTriState("LCD", "LCD", sinkID, fLCDState);
893 fAppMenu->assignKeyEquivalentToItem(itemID, 'l'); 889 fAppMenu->assignKeyEquivalentToItem(itemID, 'l');
890 SkTArray<const char*> filterQualityLabels;
891 for (auto& state : gFilterQualityStates) {
892 filterQualityLabels.push_back(state.fMenuLabel);
893 }
894 itemID = fAppMenu->appendList("FilterQuality", "FilterQuality", sinkID, fFil terQualityIndex, 894 itemID = fAppMenu->appendList("FilterQuality", "FilterQuality", sinkID, fFil terQualityIndex,
895 gFilterQualityStates[0].fName, 895 filterQualityLabels);
896 gFilterQualityStates[1].fName,
897 gFilterQualityStates[2].fName,
898 gFilterQualityStates[3].fName,
899 gFilterQualityStates[4].fName,
900 nullptr);
901 fAppMenu->assignKeyEquivalentToItem(itemID, 'n'); 896 fAppMenu->assignKeyEquivalentToItem(itemID, 'n');
902 itemID = fAppMenu->appendTriState("Subpixel", "Subpixel", sinkID, fSubpixelS tate); 897 itemID = fAppMenu->appendTriState("Subpixel", "Subpixel", sinkID, fSubpixelS tate);
903 fAppMenu->assignKeyEquivalentToItem(itemID, 's'); 898 fAppMenu->assignKeyEquivalentToItem(itemID, 's');
904 itemID = fAppMenu->appendList("Hinting", "Hinting", sinkID, fHintingState, 899 SkTArray<const char*> hintingStates;
905 gHintingStates[0].name, 900 for (auto& hintingState : gHintingStates) {
906 gHintingStates[1].name, 901 hintingStates.push_back(hintingState.fMenuLabel);
907 gHintingStates[2].name, 902 }
908 gHintingStates[3].name, 903 itemID = fAppMenu->appendList("Hinting", "Hinting", sinkID, fHintingState, h intingStates);
909 gHintingStates[4].name,
910 nullptr);
911 fAppMenu->assignKeyEquivalentToItem(itemID, 'h'); 904 fAppMenu->assignKeyEquivalentToItem(itemID, 'h');
912 905
913 itemID =fAppMenu->appendList("Tiling", "Tiling", sinkID, fTilingMode, 906 SkTArray<const char*> tilingInfos;
914 gTilingInfo[kNo_Tiling].label, 907 for (auto& tilingInfo : gTilingInfos) {
915 gTilingInfo[kAbs_128x128_Tiling].label, 908 tilingInfos.push_back(tilingInfo.label);
916 gTilingInfo[kAbs_256x256_Tiling].label, 909 }
917 gTilingInfo[kRel_4x4_Tiling].label, 910 itemID = fAppMenu->appendList("Tiling", "Tiling", sinkID, fTilingMode, tilin gInfos);
918 gTilingInfo[kRel_1x16_Tiling].label,
919 gTilingInfo[kRel_16x1_Tiling].label,
920 nullptr);
921 fAppMenu->assignKeyEquivalentToItem(itemID, 't'); 911 fAppMenu->assignKeyEquivalentToItem(itemID, 't');
922 912
923 itemID = fAppMenu->appendSwitch("Slide Show", "Slide Show" , sinkID, false); 913 itemID = fAppMenu->appendSwitch("Slide Show", "Slide Show" , sinkID, false);
924 fAppMenu->assignKeyEquivalentToItem(itemID, 'a'); 914 fAppMenu->assignKeyEquivalentToItem(itemID, 'a');
925 itemID = fAppMenu->appendSwitch("Clip", "Clip" , sinkID, fUseClip); 915 itemID = fAppMenu->appendSwitch("Clip", "Clip" , sinkID, fUseClip);
926 fAppMenu->assignKeyEquivalentToItem(itemID, 'c'); 916 fAppMenu->assignKeyEquivalentToItem(itemID, 'c');
927 itemID = fAppMenu->appendSwitch("Flip X", "Flip X" , sinkID, false); 917 itemID = fAppMenu->appendSwitch("Flip X", "Flip X" , sinkID, false);
928 fAppMenu->assignKeyEquivalentToItem(itemID, 'x'); 918 fAppMenu->assignKeyEquivalentToItem(itemID, 'x');
929 itemID = fAppMenu->appendSwitch("Flip Y", "Flip Y" , sinkID, false); 919 itemID = fAppMenu->appendSwitch("Flip Y", "Flip Y" , sinkID, false);
930 fAppMenu->assignKeyEquivalentToItem(itemID, 'y'); 920 fAppMenu->assignKeyEquivalentToItem(itemID, 'y');
(...skipping 13 matching lines...) Expand all
944 this->setClipToBounds(false); 934 this->setClipToBounds(false);
945 935
946 this->loadView((*fSamples[fCurrIndex])()); 936 this->loadView((*fSamples[fCurrIndex])());
947 937
948 if (nullptr == devManager) { 938 if (nullptr == devManager) {
949 fDevManager = new DefaultDeviceManager(); 939 fDevManager = new DefaultDeviceManager();
950 } else { 940 } else {
951 devManager->ref(); 941 devManager->ref();
952 fDevManager = devManager; 942 fDevManager = devManager;
953 } 943 }
954 fDevManager->setUpBackend(this, fMSAASampleCount); 944 fDeviceType = gDeviceInfos[fDeviceIndex].fType;
945 fDevManager->setUpBackend(this, FLAGS_msaa);
955 946
956 // If another constructor set our dimensions, ensure that our 947 // If another constructor set our dimensions, ensure that our
957 // onSizeChange gets called. 948 // onSizeChange gets called.
958 if (this->height() && this->width()) { 949 if (this->height() && this->width()) {
959 this->onSizeChange(); 950 this->onSizeChange();
960 } 951 }
961 952
962 // can't call this synchronously, since it may require a subclass to 953 // can't call this synchronously, since it may require a subclass to
963 // to implement, or the caller may need us to have returned from the 954 // to implement, or the caller may need us to have returned from the
964 // constructor first. Hence we post an event to ourselves. 955 // constructor first. Hence we post an event to ourselves.
(...skipping 582 matching lines...) Expand 10 before | Expand all | Expand 10 after
1547 if (evt.isType("set-curr-index")) { 1538 if (evt.isType("set-curr-index")) {
1548 this->goToSample(evt.getFast32()); 1539 this->goToSample(evt.getFast32());
1549 return true; 1540 return true;
1550 } 1541 }
1551 if (isInvalEvent(evt)) { 1542 if (isInvalEvent(evt)) {
1552 this->inval(nullptr); 1543 this->inval(nullptr);
1553 return true; 1544 return true;
1554 } 1545 }
1555 int selected = -1; 1546 int selected = -1;
1556 if (SkOSMenu::FindListIndex(evt, "Device Type", &selected)) { 1547 if (SkOSMenu::FindListIndex(evt, "Device Type", &selected)) {
1557 this->setDeviceType((DeviceType)selected); 1548 this->setDevice(static_cast<size_t>(selected));
1558 return true; 1549 return true;
1559 } 1550 }
1560 if (SkOSMenu::FindSwitchState(evt, "Slide Show", nullptr)) { 1551 if (SkOSMenu::FindSwitchState(evt, "Slide Show", nullptr)) {
1561 this->toggleSlideshow(); 1552 this->toggleSlideshow();
1562 return true; 1553 return true;
1563 } 1554 }
1564 if (SkOSMenu::FindTriState(evt, "AA", &fAAState) || 1555 if (SkOSMenu::FindTriState(evt, "AA", &fAAState) ||
1565 SkOSMenu::FindTriState(evt, "LCD", &fLCDState) || 1556 SkOSMenu::FindTriState(evt, "LCD", &fLCDState) ||
1566 SkOSMenu::FindListIndex(evt, "FilterQuality", &fFilterQualityIndex) || 1557 SkOSMenu::FindListIndex(evt, "FilterQuality", &fFilterQualityIndex) ||
1567 SkOSMenu::FindTriState(evt, "Subpixel", &fSubpixelState) || 1558 SkOSMenu::FindTriState(evt, "Subpixel", &fSubpixelState) ||
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
1751 } 1742 }
1752 1743
1753 if (fAppMenu->handleKeyEquivalent(uni)|| fSlideMenu->handleKeyEquivalent(uni )) { 1744 if (fAppMenu->handleKeyEquivalent(uni)|| fSlideMenu->handleKeyEquivalent(uni )) {
1754 this->onUpdateMenu(fAppMenu); 1745 this->onUpdateMenu(fAppMenu);
1755 this->onUpdateMenu(fSlideMenu); 1746 this->onUpdateMenu(fSlideMenu);
1756 return true; 1747 return true;
1757 } 1748 }
1758 return this->INHERITED::onHandleChar(uni); 1749 return this->INHERITED::onHandleChar(uni);
1759 } 1750 }
1760 1751
1761 void SampleWindow::setDeviceType(DeviceType type) { 1752 void SampleWindow::setDevice(size_t deviceIndex) {
1762 if (type == fDeviceType) 1753 if (fDeviceIndex == deviceIndex)
1763 return; 1754 return;
1764 1755
1765 fDevManager->tearDownBackend(this); 1756 fDevManager->tearDownBackend(this);
1766 1757 fDeviceIndex = deviceIndex;
1767 fDeviceType = type; 1758 fDeviceType = gDeviceInfos[fDeviceIndex].fType;
1768 1759 fDevManager->setUpBackend(this, FLAGS_msaa);
1769 fDevManager->setUpBackend(this, fMSAASampleCount);
1770 1760
1771 this->updateTitle(); 1761 this->updateTitle();
1772 this->inval(nullptr); 1762 this->inval(nullptr);
1773 } 1763 }
1774 1764
1775 void SampleWindow::toggleSlideshow() { 1765 void SampleWindow::toggleSlideshow() {
1776 fAnimating = !fAnimating; 1766 fAnimating = !fAnimating;
1777 this->postAnimatingEvent(); 1767 this->postAnimatingEvent();
1778 this->updateTitle(); 1768 this->updateTitle();
1779 } 1769 }
1780 1770
1781 void SampleWindow::toggleRendering() { 1771 void SampleWindow::toggleRendering() {
1782 this->setDeviceType(cycle_devicetype(fDeviceType)); 1772 this->setDevice((fDeviceIndex + 1) % SK_ARRAY_COUNT(gDeviceInfos));
1783 this->updateTitle(); 1773 this->updateTitle();
1784 this->inval(nullptr); 1774 this->inval(nullptr);
1785 } 1775 }
1786 1776
1787 void SampleWindow::toggleFPS() { 1777 void SampleWindow::toggleFPS() {
1788 fMeasureFPS = !fMeasureFPS; 1778 fMeasureFPS = !fMeasureFPS;
1789 this->updateTitle(); 1779 this->updateTitle();
1790 this->inval(nullptr); 1780 this->inval(nullptr);
1791 } 1781 }
1792 1782
1793 void SampleWindow::toggleDistanceFieldFonts() { 1783 void SampleWindow::toggleDistanceFieldFonts() {
1794 // reset backend 1784 // reset backend
1795 fDevManager->tearDownBackend(this); 1785 fDevManager->tearDownBackend(this);
1796 fDevManager->setUpBackend(this, fMSAASampleCount); 1786 fDevManager->setUpBackend(this, FLAGS_msaa);
1797 1787
1798 SkSurfaceProps props = this->getSurfaceProps(); 1788 SkSurfaceProps props = this->getSurfaceProps();
1799 uint32_t flags = props.flags() ^ SkSurfaceProps::kUseDeviceIndependentFonts_ Flag; 1789 uint32_t flags = props.flags() ^ SkSurfaceProps::kUseDeviceIndependentFonts_ Flag;
1800 this->setSurfaceProps(SkSurfaceProps(flags, props.pixelGeometry())); 1790 this->setSurfaceProps(SkSurfaceProps(flags, props.pixelGeometry()));
1801 1791
1802 this->updateTitle(); 1792 this->updateTitle();
1803 this->inval(nullptr); 1793 this->inval(nullptr);
1804 } 1794 }
1805 1795
1806 #include "SkDumpCanvas.h" 1796 #include "SkDumpCanvas.h"
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
1938 this->attachChildToFront(view)->unref(); 1928 this->attachChildToFront(view)->unref();
1939 view->setSize(this->width(), this->height()); 1929 view->setSize(this->width(), this->height());
1940 1930
1941 //repopulate the slide menu when a view is loaded 1931 //repopulate the slide menu when a view is loaded
1942 fSlideMenu->reset(); 1932 fSlideMenu->reset();
1943 1933
1944 this->onUpdateMenu(fSlideMenu); 1934 this->onUpdateMenu(fSlideMenu);
1945 this->updateTitle(); 1935 this->updateTitle();
1946 } 1936 }
1947 1937
1948 static const char* gDeviceTypePrefix[] = {
1949 "raster: ",
1950 #if SK_SUPPORT_GPU
1951 "opengl: ",
1952 #if SK_ANGLE
1953 "angle: ",
1954 #endif // SK_ANGLE
1955 #if SK_COMMAND_BUFFER
1956 "command buffer: ",
1957 #endif // SK_COMMAND_BUFFER
1958 #endif // SK_SUPPORT_GPU
1959 };
1960 static_assert(SK_ARRAY_COUNT(gDeviceTypePrefix) == SampleWindow::kDeviceTypeCnt,
1961 "array_size_mismatch");
1962
1963 static const char* trystate_str(SkOSMenu::TriState state, 1938 static const char* trystate_str(SkOSMenu::TriState state,
1964 const char trueStr[], const char falseStr[]) { 1939 const char trueStr[], const char falseStr[]) {
1965 if (SkOSMenu::kOnState == state) { 1940 if (SkOSMenu::kOnState == state) {
1966 return trueStr; 1941 return trueStr;
1967 } else if (SkOSMenu::kOffState == state) { 1942 } else if (SkOSMenu::kOffState == state) {
1968 return falseStr; 1943 return falseStr;
1969 } 1944 }
1970 return nullptr; 1945 return nullptr;
1971 } 1946 }
1972 1947
1973 bool SampleWindow::getRawTitle(SkString* title) { 1948 bool SampleWindow::getRawTitle(SkString* title) {
1974 return curr_title(this, title); 1949 return curr_title(this, title);
1975 } 1950 }
1976 1951
1977 void SampleWindow::updateTitle() { 1952 void SampleWindow::updateTitle() {
1978 SkString title; 1953 SkString title;
1979 if (!this->getRawTitle(&title)) { 1954 if (!this->getRawTitle(&title)) {
1980 title.set("<unknown>"); 1955 title.set("<unknown>");
1981 } 1956 }
1957 title.prependf(" %s: ", gDeviceInfos[fDeviceIndex].fName);
1982 1958
1983 title.prepend(gDeviceTypePrefix[fDeviceType]);
1984
1985 title.prepend(" ");
1986 title.prepend(sk_tool_utils::colortype_name(this->getBitmap().colorType())); 1959 title.prepend(sk_tool_utils::colortype_name(this->getBitmap().colorType()));
1987 1960
1988 if (fTilingMode != kNo_Tiling) { 1961 if (fTilingMode != kNo_Tiling) {
1989 title.prependf("<T: %s> ", gTilingInfo[fTilingMode].label); 1962 title.prependf("<T: %s> ", gTilingInfos[fTilingMode].label);
1990 } 1963 }
1991 if (fAnimating) { 1964 if (fAnimating) {
1992 title.prepend("<A> "); 1965 title.prepend("<A> ");
1993 } 1966 }
1994 if (fRotate) { 1967 if (fRotate) {
1995 title.prepend("<R> "); 1968 title.prepend("<R> ");
1996 } 1969 }
1997 if (fPerspAnim) { 1970 if (fPerspAnim) {
1998 title.prepend("<K> "); 1971 title.prepend("<K> ");
1999 } 1972 }
2000 if (this->getSurfaceProps().flags() & SkSurfaceProps::kUseDeviceIndependentF onts_Flag) { 1973 if (this->getSurfaceProps().flags() & SkSurfaceProps::kUseDeviceIndependentF onts_Flag) {
2001 title.prepend("<DIF> "); 1974 title.prepend("<DIF> ");
2002 } 1975 }
2003 if (fUsePicture) { 1976 if (fUsePicture) {
2004 title.prepend("<P> "); 1977 title.prepend("<P> ");
2005 } 1978 }
2006 1979
2007 title.prepend(trystate_str(fLCDState, "LCD ", "lcd ")); 1980 title.prepend(trystate_str(fLCDState, "LCD ", "lcd "));
2008 title.prepend(trystate_str(fAAState, "AA ", "aa ")); 1981 title.prepend(trystate_str(fAAState, "AA ", "aa "));
2009 title.prepend(gFilterQualityStates[fFilterQualityIndex].fLabel); 1982 title.prepend(gFilterQualityStates[fFilterQualityIndex].fTitleLabel);
2010 title.prepend(trystate_str(fSubpixelState, "S ", "s ")); 1983 title.prepend(trystate_str(fSubpixelState, "S ", "s "));
2011 title.prepend(fFlipAxis & kFlipAxis_X ? "X " : nullptr); 1984 title.prepend(fFlipAxis & kFlipAxis_X ? "X " : nullptr);
2012 title.prepend(fFlipAxis & kFlipAxis_Y ? "Y " : nullptr); 1985 title.prepend(fFlipAxis & kFlipAxis_Y ? "Y " : nullptr);
2013 title.prepend(gHintingStates[fHintingState].label); 1986 title.prepend(gHintingStates[fHintingState].fTitleLabel);
2014 1987
2015 if (fZoomLevel) { 1988 if (fZoomLevel) {
2016 title.prependf("{%.2f} ", SkScalarToFloat(fZoomLevel)); 1989 title.prependf("{%.2f} ", SkScalarToFloat(fZoomLevel));
2017 } 1990 }
2018 1991
2019 if (fMeasureFPS) { 1992 if (fMeasureFPS) {
2020 title.appendf(" %8.4f ms", fMeasureFPS_Time / (float)FPS_REPEAT_COUNT); 1993 title.appendf(" %8.4f ms", fMeasureFPS_Time / (float)FPS_REPEAT_COUNT);
2021 } 1994 }
2022 1995
2023 #if SK_SUPPORT_GPU 1996 #if SK_SUPPORT_GPU
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
2265 #ifdef SK_BUILD_FOR_MAC 2238 #ifdef SK_BUILD_FOR_MAC
2266 setenv("ANDROID_ROOT", "/android/device/data", 0); 2239 setenv("ANDROID_ROOT", "/android/device/data", 0);
2267 #endif 2240 #endif
2268 SkGraphics::Init(); 2241 SkGraphics::Init();
2269 SkEvent::Init(); 2242 SkEvent::Init();
2270 } 2243 }
2271 2244
2272 void application_term() { 2245 void application_term() {
2273 SkEvent::Term(); 2246 SkEvent::Term();
2274 } 2247 }
OLDNEW
« no previous file with comments | « samplecode/SampleApp.h ('k') | src/views/SkOSMenu.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698