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

Side by Side Diff: samplecode/SampleApp.cpp

Issue 108213004: Additional SampleApp tiling options. (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Cleanup. Created 7 years 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 | Annotate | Revision Log
« no previous file with comments | « samplecode/SampleApp.h ('k') | no next file » | 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 #include "SampleApp.h" 7 #include "SampleApp.h"
8 8
9 #include "SkData.h" 9 #include "SkData.h"
10 #include "SkCanvas.h" 10 #include "SkCanvas.h"
(...skipping 619 matching lines...) Expand 10 before | Expand all | Expand 10 after
630 630
631 // some GMs rely on having a skiagm::GetGr function defined 631 // some GMs rely on having a skiagm::GetGr function defined
632 namespace skiagm { 632 namespace skiagm {
633 // FIXME: this should be moved into a header 633 // FIXME: this should be moved into a header
634 GrContext* GetGr(); 634 GrContext* GetGr();
635 GrContext* GetGr() { return SampleCode::GetGr(); } 635 GrContext* GetGr() { return SampleCode::GetGr(); }
636 } 636 }
637 637
638 ////////////////////////////////////////////////////////////////////////////// 638 //////////////////////////////////////////////////////////////////////////////
639 639
640 enum TilingMode {
641 kNo_Tiling,
642 kAbs_128x128_Tiling,
643 kAbs_256x256_Tiling,
644 kRel_4x4_Tiling,
645 kRel_1x16_Tiling,
646 kRel_16x1_Tiling,
647
648 kLast_TilingMode_Enum
649 };
650
651 struct TilingInfo {
652 const char* label;
653 SkScalar w, h;
654 };
655
656 static struct TilingInfo gTilingInfo[] = {
657 { "No tiling", SK_Scalar1 , SK_Scalar1 }, // kNo_Tiling
658 { "128x128" , SkIntToScalar(128), SkIntToScalar(128) }, // kAbs_128x128_Til ing
659 { "256x256" , SkIntToScalar(256), SkIntToScalar(256) }, // kAbs_256x256_Til ing
660 { "1/4x1/4" , SK_Scalar1 / 4 , SK_Scalar1 / 4 }, // kRel_4x4_Tiling
661 { "1/1x1/16" , SK_Scalar1 , SK_Scalar1 / 16 }, // kRel_1x16_Tiling
662 { "1/16x1/1" , SK_Scalar1 / 16 , SK_Scalar1 }, // kRel_16x1_Tiling
663 };
664 SK_COMPILE_ASSERT((SK_ARRAY_COUNT(gTilingInfo) == kLast_TilingMode_Enum),
665 Incomplete_tiling_labels);
666
667 //////////////////////////////////////////////////////////////////////////////
668
640 static SkView* curr_view(SkWindow* wind) { 669 static SkView* curr_view(SkWindow* wind) {
641 SkView::F2BIter iter(wind); 670 SkView::F2BIter iter(wind);
642 return iter.next(); 671 return iter.next();
643 } 672 }
644 673
645 static bool curr_title(SkWindow* wind, SkString* title) { 674 static bool curr_title(SkWindow* wind, SkString* title) {
646 SkView* view = curr_view(wind); 675 SkView* view = curr_view(wind);
647 if (view) { 676 if (view) {
648 SkEvent evt(gTitleEvtName); 677 SkEvent evt(gTitleEvtName);
649 if (view->doQuery(&evt)) { 678 if (view->doQuery(&evt)) {
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
831 860
832 fUseClip = false; 861 fUseClip = false;
833 fNClip = false; 862 fNClip = false;
834 fAnimating = false; 863 fAnimating = false;
835 fRotate = false; 864 fRotate = false;
836 fRotateAnimTime = 0; 865 fRotateAnimTime = 0;
837 fPerspAnim = false; 866 fPerspAnim = false;
838 fPerspAnimTime = 0; 867 fPerspAnimTime = 0;
839 fRequestGrabImage = false; 868 fRequestGrabImage = false;
840 fPipeState = SkOSMenu::kOffState; 869 fPipeState = SkOSMenu::kOffState;
841 fTilingState = SkOSMenu::kOffState; 870 fTilingMode = kNo_Tiling;
842 fTileCount.set(1, 1);
843 fMeasureFPS = false; 871 fMeasureFPS = false;
844 fLCDState = SkOSMenu::kMixedState; 872 fLCDState = SkOSMenu::kMixedState;
845 fAAState = SkOSMenu::kMixedState; 873 fAAState = SkOSMenu::kMixedState;
846 fFilterState = SkOSMenu::kMixedState; 874 fFilterState = SkOSMenu::kMixedState;
847 fSubpixelState = SkOSMenu::kMixedState; 875 fSubpixelState = SkOSMenu::kMixedState;
848 fHintingState = 0; 876 fHintingState = 0;
849 fFlipAxis = 0; 877 fFlipAxis = 0;
850 fScrollTestX = fScrollTestY = 0; 878 fScrollTestX = fScrollTestY = 0;
851 879
852 fMouseX = fMouseY = 0; 880 fMouseX = fMouseY = 0;
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
891 gHintingStates[2].name, 919 gHintingStates[2].name,
892 gHintingStates[3].name, 920 gHintingStates[3].name,
893 gHintingStates[4].name, 921 gHintingStates[4].name,
894 NULL); 922 NULL);
895 fAppMenu->assignKeyEquivalentToItem(itemID, 'h'); 923 fAppMenu->assignKeyEquivalentToItem(itemID, 'h');
896 924
897 fUsePipeMenuItemID = fAppMenu->appendTriState("Pipe", "Pipe" , sinkID, 925 fUsePipeMenuItemID = fAppMenu->appendTriState("Pipe", "Pipe" , sinkID,
898 fPipeState); 926 fPipeState);
899 fAppMenu->assignKeyEquivalentToItem(fUsePipeMenuItemID, 'P'); 927 fAppMenu->assignKeyEquivalentToItem(fUsePipeMenuItemID, 'P');
900 928
901 itemID = fAppMenu->appendTriState("Tiling", "Tiling", sinkID, fTilingState); 929 itemID =fAppMenu->appendList("Tiling", "Tiling", sinkID, fTilingMode,
930 gTilingInfo[kNo_Tiling].label,
931 gTilingInfo[kAbs_128x128_Tiling].label,
932 gTilingInfo[kAbs_256x256_Tiling].label,
933 gTilingInfo[kRel_4x4_Tiling].label,
934 gTilingInfo[kRel_1x16_Tiling].label,
935 gTilingInfo[kRel_16x1_Tiling].label,
936 NULL);
902 fAppMenu->assignKeyEquivalentToItem(itemID, 't'); 937 fAppMenu->assignKeyEquivalentToItem(itemID, 't');
903 938
904 itemID = fAppMenu->appendSwitch("Slide Show", "Slide Show" , sinkID, false); 939 itemID = fAppMenu->appendSwitch("Slide Show", "Slide Show" , sinkID, false);
905 fAppMenu->assignKeyEquivalentToItem(itemID, 'a'); 940 fAppMenu->assignKeyEquivalentToItem(itemID, 'a');
906 itemID = fAppMenu->appendSwitch("Clip", "Clip" , sinkID, fUseClip); 941 itemID = fAppMenu->appendSwitch("Clip", "Clip" , sinkID, fUseClip);
907 fAppMenu->assignKeyEquivalentToItem(itemID, 'c'); 942 fAppMenu->assignKeyEquivalentToItem(itemID, 'c');
908 itemID = fAppMenu->appendSwitch("Flip X", "Flip X" , sinkID, false); 943 itemID = fAppMenu->appendSwitch("Flip X", "Flip X" , sinkID, false);
909 fAppMenu->assignKeyEquivalentToItem(itemID, 'x'); 944 fAppMenu->assignKeyEquivalentToItem(itemID, 'x');
910 itemID = fAppMenu->appendSwitch("Flip Y", "Flip Y" , sinkID, false); 945 itemID = fAppMenu->appendSwitch("Flip Y", "Flip Y" , sinkID, false);
911 fAppMenu->assignKeyEquivalentToItem(itemID, 'y'); 946 fAppMenu->assignKeyEquivalentToItem(itemID, 'y');
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after
1156 } 1191 }
1157 canvas->clipRect(r); 1192 canvas->clipRect(r);
1158 this->INHERITED::draw(canvas); 1193 this->INHERITED::draw(canvas);
1159 } 1194 }
1160 } 1195 }
1161 1196
1162 SkBitmap diff; 1197 SkBitmap diff;
1163 if (bitmap_diff(canvas, orig, &diff)) { 1198 if (bitmap_diff(canvas, orig, &diff)) {
1164 } 1199 }
1165 } else { 1200 } else {
1166 const SkScalar cw = SkScalarDiv(this->width(), SkIntToScalar(fTileCount. width())); 1201 SkSize tile;
1167 const SkScalar ch = SkScalarDiv(this->height(), SkIntToScalar(fTileCount .height())); 1202 SkASSERT((TilingMode)fTilingMode < kLast_TilingMode_Enum);
1203 struct TilingInfo* info = gTilingInfo + fTilingMode;
1204 tile.set(info->w > SK_Scalar1 ? info->w : width() * info->w,
1205 info->h > SK_Scalar1 ? info->h : height() * info->h);
1168 1206
1169 for (int y = 0; y < fTileCount.height(); ++y) { 1207 for (SkScalar y = 0; y < height(); y += tile.height()) {
1170 for (int x = 0; x < fTileCount.width(); ++x) { 1208 for (SkScalar x = 0; x < width(); x += tile.width()) {
1171 SkAutoCanvasRestore acr(canvas, true); 1209 SkAutoCanvasRestore acr(canvas, true);
1172 canvas->clipRect(SkRect::MakeXYWH(x * cw, y * ch, cw, ch)); 1210 canvas->clipRect(SkRect::MakeXYWH(x, y,
1211 tile.width(),
1212 tile.height()));
1173 this->INHERITED::draw(canvas); 1213 this->INHERITED::draw(canvas);
1174 } 1214 }
1175 } 1215 }
1176 1216
1177 if (!fTileCount.equals(1, 1)) { 1217 if (fTilingMode != kNo_Tiling) {
1178 SkPaint paint; 1218 SkPaint paint;
1179 paint.setColor(0x60FF00FF); 1219 paint.setColor(0x60FF00FF);
1180 paint.setStyle(SkPaint::kStroke_Style); 1220 paint.setStyle(SkPaint::kStroke_Style);
1181 for (int y = 0; y < fTileCount.height(); ++y) { 1221
1182 for (int x = 0; x < fTileCount.width(); ++x) { 1222 for (SkScalar y = 0; y < height(); y += tile.height()) {
1183 canvas->drawRect(SkRect::MakeXYWH(x * cw, y * ch, cw, ch), p aint); 1223 for (SkScalar x = 0; x < width(); x += tile.width()) {
1224 canvas->drawRect(SkRect::MakeXYWH(x, y,
1225 tile.width(),
1226 tile.height()),
1227 paint);
1184 } 1228 }
1185 } 1229 }
1186 } 1230 }
1187 } 1231 }
1188 if (fShowZoomer && !fSaveToPdf) { 1232 if (fShowZoomer && !fSaveToPdf) {
1189 showZoomer(canvas); 1233 showZoomer(canvas);
1190 } 1234 }
1191 if (fMagnify && !fSaveToPdf) { 1235 if (fMagnify && !fSaveToPdf) {
1192 magnify(canvas); 1236 magnify(canvas);
1193 } 1237 }
(...skipping 478 matching lines...) Expand 10 before | Expand all | Expand 10 after
1672 if (SkOSMenu::FindTriState(evt, "Pipe", &fPipeState)) { 1716 if (SkOSMenu::FindTriState(evt, "Pipe", &fPipeState)) {
1673 #ifdef PIPE_NET 1717 #ifdef PIPE_NET
1674 if (!fPipeState != SkOSMenu::kOnState) 1718 if (!fPipeState != SkOSMenu::kOnState)
1675 gServer.disconnectAll(); 1719 gServer.disconnectAll();
1676 #endif 1720 #endif
1677 (void)SampleView::SetUsePipe(curr_view(this), fPipeState); 1721 (void)SampleView::SetUsePipe(curr_view(this), fPipeState);
1678 this->updateTitle(); 1722 this->updateTitle();
1679 this->inval(NULL); 1723 this->inval(NULL);
1680 return true; 1724 return true;
1681 } 1725 }
1682 if (SkOSMenu::FindTriState(evt, "Tiling", &fTilingState)) {
1683 int nx = 1, ny = 1;
1684 switch (fTilingState) {
1685 case SkOSMenu::kOffState: nx = 1; ny = 1; break;
1686 case SkOSMenu::kMixedState: nx = 1; ny = 16; break;
1687 case SkOSMenu::kOnState: nx = 4; ny = 4; break;
1688 }
1689 fTileCount.set(nx, ny);
1690 this->inval(NULL);
1691 return true;
1692 }
1693 if (SkOSMenu::FindSwitchState(evt, "Slide Show", NULL)) { 1726 if (SkOSMenu::FindSwitchState(evt, "Slide Show", NULL)) {
1694 this->toggleSlideshow(); 1727 this->toggleSlideshow();
1695 return true; 1728 return true;
1696 } 1729 }
1697 if (SkOSMenu::FindTriState(evt, "AA", &fAAState) || 1730 if (SkOSMenu::FindTriState(evt, "AA", &fAAState) ||
1698 SkOSMenu::FindTriState(evt, "LCD", &fLCDState) || 1731 SkOSMenu::FindTriState(evt, "LCD", &fLCDState) ||
1699 SkOSMenu::FindTriState(evt, "Filter", &fFilterState) || 1732 SkOSMenu::FindTriState(evt, "Filter", &fFilterState) ||
1700 SkOSMenu::FindTriState(evt, "Subpixel", &fSubpixelState) || 1733 SkOSMenu::FindTriState(evt, "Subpixel", &fSubpixelState) ||
1701 SkOSMenu::FindListIndex(evt, "Hinting", &fHintingState) || 1734 SkOSMenu::FindListIndex(evt, "Hinting", &fHintingState) ||
1702 SkOSMenu::FindSwitchState(evt, "Clip", &fUseClip) || 1735 SkOSMenu::FindSwitchState(evt, "Clip", &fUseClip) ||
1703 SkOSMenu::FindSwitchState(evt, "Zoomer", &fShowZoomer) || 1736 SkOSMenu::FindSwitchState(evt, "Zoomer", &fShowZoomer) ||
1704 SkOSMenu::FindSwitchState(evt, "Magnify", &fMagnify) || 1737 SkOSMenu::FindSwitchState(evt, "Magnify", &fMagnify) ||
1705 SkOSMenu::FindListIndex(evt, "Transition-Next", &fTransitionNext) || 1738 SkOSMenu::FindListIndex(evt, "Transition-Next", &fTransitionNext) ||
1706 SkOSMenu::FindListIndex(evt, "Transition-Prev", &fTransitionPrev)) { 1739 SkOSMenu::FindListIndex(evt, "Transition-Prev", &fTransitionPrev) ||
1740 SkOSMenu::FindListIndex(evt, "Tiling", &fTilingMode)) {
1707 this->inval(NULL); 1741 this->inval(NULL);
1708 this->updateTitle(); 1742 this->updateTitle();
1709 return true; 1743 return true;
1710 } 1744 }
1711 if (SkOSMenu::FindSwitchState(evt, "Flip X", NULL)) { 1745 if (SkOSMenu::FindSwitchState(evt, "Flip X", NULL)) {
1712 fFlipAxis ^= kFlipAxis_X; 1746 fFlipAxis ^= kFlipAxis_X;
1713 this->updateMatrix(); 1747 this->updateMatrix();
1714 return true; 1748 return true;
1715 } 1749 }
1716 if (SkOSMenu::FindSwitchState(evt, "Flip Y", NULL)) { 1750 if (SkOSMenu::FindSwitchState(evt, "Flip Y", NULL)) {
(...skipping 395 matching lines...) Expand 10 before | Expand all | Expand 10 after
2112 SkString title; 2146 SkString title;
2113 if (!curr_title(this, &title)) { 2147 if (!curr_title(this, &title)) {
2114 title.set("<unknown>"); 2148 title.set("<unknown>");
2115 } 2149 }
2116 2150
2117 title.prepend(gDeviceTypePrefix[fDeviceType]); 2151 title.prepend(gDeviceTypePrefix[fDeviceType]);
2118 2152
2119 title.prepend(" "); 2153 title.prepend(" ");
2120 title.prepend(configToString(this->getBitmap().config())); 2154 title.prepend(configToString(this->getBitmap().config()));
2121 2155
2156 if (fTilingMode != kNo_Tiling) {
2157 title.prependf("<T: %s> ", gTilingInfo[fTilingMode].label);
2158 }
2122 if (fAnimating) { 2159 if (fAnimating) {
2123 title.prepend("<A> "); 2160 title.prepend("<A> ");
2124 } 2161 }
2125 if (fRotate) { 2162 if (fRotate) {
2126 title.prepend("<R> "); 2163 title.prepend("<R> ");
2127 } 2164 }
2128 if (fNClip) { 2165 if (fNClip) {
2129 title.prepend("<C> "); 2166 title.prepend("<C> ");
2130 } 2167 }
2131 if (fPerspAnim) { 2168 if (fPerspAnim) {
(...skipping 414 matching lines...) Expand 10 before | Expand all | Expand 10 after
2546 SkGraphics::Init(); 2583 SkGraphics::Init();
2547 SkEvent::Init(); 2584 SkEvent::Init();
2548 } 2585 }
2549 2586
2550 // FIXME: this should be in a header 2587 // FIXME: this should be in a header
2551 void application_term(); 2588 void application_term();
2552 void application_term() { 2589 void application_term() {
2553 SkEvent::Term(); 2590 SkEvent::Term();
2554 SkGraphics::Term(); 2591 SkGraphics::Term();
2555 } 2592 }
OLDNEW
« no previous file with comments | « samplecode/SampleApp.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698