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

Unified Diff: samplecode/SampleApp.cpp

Issue 1763833002: Force tiles in SampleApp to integer boundaries. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 4 years, 10 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 | « samplecode/SampleApp.h ('k') | src/views/unix/XkeysToSkKeys.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: samplecode/SampleApp.cpp
diff --git a/samplecode/SampleApp.cpp b/samplecode/SampleApp.cpp
index 7ebac5f2151867e6d9604e9725cd08c80fe87785..6d5f647b158cee1df0baa5f8138a1afba6845474 100644
--- a/samplecode/SampleApp.cpp
+++ b/samplecode/SampleApp.cpp
@@ -876,7 +876,6 @@ SampleWindow::SampleWindow(void* hwnd, int argc, char** argv, DeviceManager* dev
fHintingState = 0;
fFilterQualityIndex = 0;
fFlipAxis = 0;
- fScrollTestX = fScrollTestY = 0;
fMouseX = fMouseY = 0;
fFatBitsScale = 8;
@@ -885,6 +884,7 @@ SampleWindow::SampleWindow(void* hwnd, int argc, char** argv, DeviceManager* dev
fZoomLevel = 0;
fZoomScale = SK_Scalar1;
+ fOffset = { 0, 0 };
fMagnify = false;
@@ -1062,14 +1062,14 @@ void SampleWindow::draw(SkCanvas* canvas) {
if (kNo_Tiling == fTilingMode) {
this->INHERITED::draw(canvas); // no looping or surfaces needed
} else {
- const int w = SkScalarRoundToInt(tile.width());
- const int h = SkScalarRoundToInt(tile.height());
- SkImageInfo info = SkImageInfo::MakeN32Premul(w, h);
+ const SkScalar w = SkScalarCeilToScalar(tile.width());
+ const SkScalar h = SkScalarCeilToScalar(tile.height());
+ SkImageInfo info = SkImageInfo::MakeN32Premul(SkScalarTruncToInt(w), SkScalarTruncToInt(h));
SkAutoTUnref<SkSurface> surface(canvas->newSurface(info));
SkCanvas* tileCanvas = surface->getCanvas();
- for (SkScalar y = 0; y < height(); y += tile.height()) {
- for (SkScalar x = 0; x < width(); x += tile.width()) {
+ for (SkScalar y = 0; y < height(); y += h) {
+ for (SkScalar x = 0; x < width(); x += w) {
SkAutoCanvasRestore acr(tileCanvas, true);
tileCanvas->translate(-x, -y);
bungeman-skia 2016/03/03 22:42:37 Just to make things more clear, when x and y are n
tileCanvas->clear(0);
@@ -1462,6 +1462,11 @@ void SampleWindow::beforeChild(SkView* child, SkCanvas* canvas) {
}
}
+void SampleWindow::changeOffset(SkVector delta) {
+ fOffset += delta;
+ this->updateMatrix();
+}
+
void SampleWindow::changeZoomLevel(float delta) {
fZoomLevel += delta;
if (fZoomLevel > 0) {
@@ -1479,6 +1484,7 @@ void SampleWindow::changeZoomLevel(float delta) {
void SampleWindow::updateMatrix(){
SkMatrix m;
m.reset();
+
if (fZoomLevel) {
SkPoint center;
//m = this->getLocalMatrix();//.invert(&m);
@@ -1491,6 +1497,8 @@ void SampleWindow::updateMatrix(){
m.postTranslate(cx, cy);
}
+ m.postTranslate(fOffset.fX, fOffset.fY);
+
if (fFlipAxis) {
m.preTranslate(fZoomCenterX, fZoomCenterY);
if (fFlipAxis & kFlipAxis_X) {
@@ -1685,13 +1693,7 @@ bool SampleWindow::onHandleChar(SkUnichar uni) {
}
if (0xFF != dx && 0xFF != dy) {
- if ((dx | dy) == 0) {
- fScrollTestX = fScrollTestY = 0;
- } else {
- fScrollTestX += dx;
- fScrollTestY += dy;
- }
- this->inval(nullptr);
+ this->changeOffset({SkIntToScalar(dx / 32.0f), SkIntToScalar(dy / 32.0f)});
return true;
}
@@ -1855,6 +1857,10 @@ bool SampleWindow::onHandleKey(SkKey key) {
}
}
}
+
+ int dx = 0xFF;
+ int dy = 0xFF;
+
switch (key) {
case kRight_SkKey:
if (this->nextSample()) {
@@ -1882,9 +1888,26 @@ bool SampleWindow::onHandleKey(SkKey key) {
case kBack_SkKey:
this->showOverview();
return true;
+
+ case k5_SkKey: dx = 0; dy = 0; break;
+ case k8_SkKey: dx = 0; dy = -1; break;
+ case k6_SkKey: dx = 1; dy = 0; break;
+ case k2_SkKey: dx = 0; dy = 1; break;
+ case k4_SkKey: dx = -1; dy = 0; break;
+ case k7_SkKey: dx = -1; dy = -1; break;
+ case k9_SkKey: dx = 1; dy = -1; break;
+ case k3_SkKey: dx = 1; dy = 1; break;
+ case k1_SkKey: dx = -1; dy = 1; break;
+
default:
break;
}
+
+ if (0xFF != dx && 0xFF != dy) {
+ this->changeOffset({SkIntToScalar(dx / 32.0f), SkIntToScalar(dy / 32.0f)});
+ return true;
+ }
+
return this->INHERITED::onHandleKey(key);
}
@@ -2048,6 +2071,9 @@ void SampleWindow::updateTitle() {
title.prepend(fFlipAxis & kFlipAxis_Y ? "Y " : nullptr);
title.prepend(gHintingStates[fHintingState].label);
+ if (fOffset.fX || fOffset.fY) {
+ title.prependf("(%.2f, %.2f) ", SkScalarToFloat(fOffset.fX), SkScalarToFloat(fOffset.fY));
+ }
if (fZoomLevel) {
title.prependf("{%.2f} ", SkScalarToFloat(fZoomLevel));
}
« no previous file with comments | « samplecode/SampleApp.h ('k') | src/views/unix/XkeysToSkKeys.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698