aboutsummaryrefslogtreecommitdiffhomepage
path: root/samplecode
diff options
context:
space:
mode:
authorGravatar commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-12-06 20:14:55 +0000
committerGravatar commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-12-06 20:14:55 +0000
commitcc63b32eb8702bfa4d965fa443cf00fc1c1d10b7 (patch)
treeaa813ad903bfbe78fc82c6e5d97d06111fecd119 /samplecode
parentc2e9db30d393862bd3485cfe57b4ac06433f2f32 (diff)
Additional SampleApp tiling options.
Adding some more tiling options (both relative and fixed size): kNo_Tiling, kAbs_128x128_Tiling, kAbs_256x256_Tiling, kRel_4x4_Tiling, kRel_1x16_Tiling, kRel_16x1_Tiling, R=bungeman@google.com, reed@google.com, fmalita@google.com Author: fmalita@chromium.org Review URL: https://codereview.chromium.org/108213004 git-svn-id: http://skia.googlecode.com/svn/trunk@12545 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'samplecode')
-rw-r--r--samplecode/SampleApp.cpp87
-rw-r--r--samplecode/SampleApp.h3
2 files changed, 63 insertions, 27 deletions
diff --git a/samplecode/SampleApp.cpp b/samplecode/SampleApp.cpp
index 99d72f37b9..795f8021da 100644
--- a/samplecode/SampleApp.cpp
+++ b/samplecode/SampleApp.cpp
@@ -637,6 +637,35 @@ namespace skiagm {
//////////////////////////////////////////////////////////////////////////////
+enum TilingMode {
+ kNo_Tiling,
+ kAbs_128x128_Tiling,
+ kAbs_256x256_Tiling,
+ kRel_4x4_Tiling,
+ kRel_1x16_Tiling,
+ kRel_16x1_Tiling,
+
+ kLast_TilingMode_Enum
+};
+
+struct TilingInfo {
+ const char* label;
+ SkScalar w, h;
+};
+
+static struct TilingInfo gTilingInfo[] = {
+ { "No tiling", SK_Scalar1 , SK_Scalar1 }, // kNo_Tiling
+ { "128x128" , SkIntToScalar(128), SkIntToScalar(128) }, // kAbs_128x128_Tiling
+ { "256x256" , SkIntToScalar(256), SkIntToScalar(256) }, // kAbs_256x256_Tiling
+ { "1/4x1/4" , SK_Scalar1 / 4 , SK_Scalar1 / 4 }, // kRel_4x4_Tiling
+ { "1/1x1/16" , SK_Scalar1 , SK_Scalar1 / 16 }, // kRel_1x16_Tiling
+ { "1/16x1/1" , SK_Scalar1 / 16 , SK_Scalar1 }, // kRel_16x1_Tiling
+};
+SK_COMPILE_ASSERT((SK_ARRAY_COUNT(gTilingInfo) == kLast_TilingMode_Enum),
+ Incomplete_tiling_labels);
+
+//////////////////////////////////////////////////////////////////////////////
+
static SkView* curr_view(SkWindow* wind) {
SkView::F2BIter iter(wind);
return iter.next();
@@ -838,8 +867,7 @@ SampleWindow::SampleWindow(void* hwnd, int argc, char** argv, DeviceManager* dev
fPerspAnimTime = 0;
fRequestGrabImage = false;
fPipeState = SkOSMenu::kOffState;
- fTilingState = SkOSMenu::kOffState;
- fTileCount.set(1, 1);
+ fTilingMode = kNo_Tiling;
fMeasureFPS = false;
fLCDState = SkOSMenu::kMixedState;
fAAState = SkOSMenu::kMixedState;
@@ -898,7 +926,14 @@ SampleWindow::SampleWindow(void* hwnd, int argc, char** argv, DeviceManager* dev
fPipeState);
fAppMenu->assignKeyEquivalentToItem(fUsePipeMenuItemID, 'P');
- itemID = fAppMenu->appendTriState("Tiling", "Tiling", sinkID, fTilingState);
+ itemID =fAppMenu->appendList("Tiling", "Tiling", sinkID, fTilingMode,
+ gTilingInfo[kNo_Tiling].label,
+ gTilingInfo[kAbs_128x128_Tiling].label,
+ gTilingInfo[kAbs_256x256_Tiling].label,
+ gTilingInfo[kRel_4x4_Tiling].label,
+ gTilingInfo[kRel_1x16_Tiling].label,
+ gTilingInfo[kRel_16x1_Tiling].label,
+ NULL);
fAppMenu->assignKeyEquivalentToItem(itemID, 't');
itemID = fAppMenu->appendSwitch("Slide Show", "Slide Show" , sinkID, false);
@@ -1163,24 +1198,33 @@ void SampleWindow::draw(SkCanvas* canvas) {
if (bitmap_diff(canvas, orig, &diff)) {
}
} else {
- const SkScalar cw = SkScalarDiv(this->width(), SkIntToScalar(fTileCount.width()));
- const SkScalar ch = SkScalarDiv(this->height(), SkIntToScalar(fTileCount.height()));
-
- for (int y = 0; y < fTileCount.height(); ++y) {
- for (int x = 0; x < fTileCount.width(); ++x) {
+ SkSize tile;
+ SkASSERT((TilingMode)fTilingMode < kLast_TilingMode_Enum);
+ struct TilingInfo* info = gTilingInfo + fTilingMode;
+ tile.set(info->w > SK_Scalar1 ? info->w : width() * info->w,
+ info->h > SK_Scalar1 ? info->h : height() * info->h);
+
+ for (SkScalar y = 0; y < height(); y += tile.height()) {
+ for (SkScalar x = 0; x < width(); x += tile.width()) {
SkAutoCanvasRestore acr(canvas, true);
- canvas->clipRect(SkRect::MakeXYWH(x * cw, y * ch, cw, ch));
+ canvas->clipRect(SkRect::MakeXYWH(x, y,
+ tile.width(),
+ tile.height()));
this->INHERITED::draw(canvas);
}
}
- if (!fTileCount.equals(1, 1)) {
+ if (fTilingMode != kNo_Tiling) {
SkPaint paint;
paint.setColor(0x60FF00FF);
paint.setStyle(SkPaint::kStroke_Style);
- for (int y = 0; y < fTileCount.height(); ++y) {
- for (int x = 0; x < fTileCount.width(); ++x) {
- canvas->drawRect(SkRect::MakeXYWH(x * cw, y * ch, cw, ch), paint);
+
+ for (SkScalar y = 0; y < height(); y += tile.height()) {
+ for (SkScalar x = 0; x < width(); x += tile.width()) {
+ canvas->drawRect(SkRect::MakeXYWH(x, y,
+ tile.width(),
+ tile.height()),
+ paint);
}
}
}
@@ -1679,17 +1723,6 @@ bool SampleWindow::onEvent(const SkEvent& evt) {
this->inval(NULL);
return true;
}
- if (SkOSMenu::FindTriState(evt, "Tiling", &fTilingState)) {
- int nx = 1, ny = 1;
- switch (fTilingState) {
- case SkOSMenu::kOffState: nx = 1; ny = 1; break;
- case SkOSMenu::kMixedState: nx = 1; ny = 16; break;
- case SkOSMenu::kOnState: nx = 4; ny = 4; break;
- }
- fTileCount.set(nx, ny);
- this->inval(NULL);
- return true;
- }
if (SkOSMenu::FindSwitchState(evt, "Slide Show", NULL)) {
this->toggleSlideshow();
return true;
@@ -1703,7 +1736,8 @@ bool SampleWindow::onEvent(const SkEvent& evt) {
SkOSMenu::FindSwitchState(evt, "Zoomer", &fShowZoomer) ||
SkOSMenu::FindSwitchState(evt, "Magnify", &fMagnify) ||
SkOSMenu::FindListIndex(evt, "Transition-Next", &fTransitionNext) ||
- SkOSMenu::FindListIndex(evt, "Transition-Prev", &fTransitionPrev)) {
+ SkOSMenu::FindListIndex(evt, "Transition-Prev", &fTransitionPrev) ||
+ SkOSMenu::FindListIndex(evt, "Tiling", &fTilingMode)) {
this->inval(NULL);
this->updateTitle();
return true;
@@ -2119,6 +2153,9 @@ void SampleWindow::updateTitle() {
title.prepend(" ");
title.prepend(configToString(this->getBitmap().config()));
+ if (fTilingMode != kNo_Tiling) {
+ title.prependf("<T: %s> ", gTilingInfo[fTilingMode].label);
+ }
if (fAnimating) {
title.prepend("<A> ");
}
diff --git a/samplecode/SampleApp.h b/samplecode/SampleApp.h
index 9328f15570..64de6c5884 100644
--- a/samplecode/SampleApp.h
+++ b/samplecode/SampleApp.h
@@ -194,7 +194,7 @@ private:
SkMSec fMeasureFPS_Time;
SkMSec fMeasureFPS_StartTime;
bool fMagnify;
- SkISize fTileCount;
+ int fTilingMode;
SkOSMenu::TriState fPipeState; // Mixed uses a tiled pipe
@@ -215,7 +215,6 @@ private:
SkOSMenu::TriState fFilterState;
SkOSMenu::TriState fSubpixelState;
int fHintingState;
- SkOSMenu::TriState fTilingState;
unsigned fFlipAxis;
int fMSAASampleCount;