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

Side by Side 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, 9 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/unix/XkeysToSkKeys.h » ('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 858 matching lines...) Expand 10 before | Expand all | Expand 10 after
869 fPerspAnim = false; 869 fPerspAnim = false;
870 fRequestGrabImage = false; 870 fRequestGrabImage = false;
871 fTilingMode = kNo_Tiling; 871 fTilingMode = kNo_Tiling;
872 fMeasureFPS = false; 872 fMeasureFPS = false;
873 fLCDState = SkOSMenu::kMixedState; 873 fLCDState = SkOSMenu::kMixedState;
874 fAAState = SkOSMenu::kMixedState; 874 fAAState = SkOSMenu::kMixedState;
875 fSubpixelState = SkOSMenu::kMixedState; 875 fSubpixelState = SkOSMenu::kMixedState;
876 fHintingState = 0; 876 fHintingState = 0;
877 fFilterQualityIndex = 0; 877 fFilterQualityIndex = 0;
878 fFlipAxis = 0; 878 fFlipAxis = 0;
879 fScrollTestX = fScrollTestY = 0;
880 879
881 fMouseX = fMouseY = 0; 880 fMouseX = fMouseY = 0;
882 fFatBitsScale = 8; 881 fFatBitsScale = 8;
883 fTypeface = SkTypeface::CreateFromTypeface(nullptr, SkTypeface::kBold); 882 fTypeface = SkTypeface::CreateFromTypeface(nullptr, SkTypeface::kBold);
884 fShowZoomer = false; 883 fShowZoomer = false;
885 884
886 fZoomLevel = 0; 885 fZoomLevel = 0;
887 fZoomScale = SK_Scalar1; 886 fZoomScale = SK_Scalar1;
887 fOffset = { 0, 0 };
888 888
889 fMagnify = false; 889 fMagnify = false;
890 890
891 fSaveToPdf = false; 891 fSaveToPdf = false;
892 fSaveToSKP = false; 892 fSaveToSKP = false;
893 893
894 int sinkID = this->getSinkID(); 894 int sinkID = this->getSinkID();
895 fAppMenu = new SkOSMenu; 895 fAppMenu = new SkOSMenu;
896 fAppMenu->setTitle("Global Settings"); 896 fAppMenu->setTitle("Global Settings");
897 int itemID; 897 int itemID;
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
1055 1055
1056 if (fMeasureFPS) { 1056 if (fMeasureFPS) {
1057 fMeasureFPS_Time = 0; 1057 fMeasureFPS_Time = 0;
1058 } 1058 }
1059 1059
1060 SkSize tile = this->tileSize(); 1060 SkSize tile = this->tileSize();
1061 1061
1062 if (kNo_Tiling == fTilingMode) { 1062 if (kNo_Tiling == fTilingMode) {
1063 this->INHERITED::draw(canvas); // no looping or surfaces needed 1063 this->INHERITED::draw(canvas); // no looping or surfaces needed
1064 } else { 1064 } else {
1065 const int w = SkScalarRoundToInt(tile.width()); 1065 const SkScalar w = SkScalarCeilToScalar(tile.width());
1066 const int h = SkScalarRoundToInt(tile.height()); 1066 const SkScalar h = SkScalarCeilToScalar(tile.height());
1067 SkImageInfo info = SkImageInfo::MakeN32Premul(w, h); 1067 SkImageInfo info = SkImageInfo::MakeN32Premul(SkScalarTruncToInt(w), SkS calarTruncToInt(h));
1068 SkAutoTUnref<SkSurface> surface(canvas->newSurface(info)); 1068 SkAutoTUnref<SkSurface> surface(canvas->newSurface(info));
1069 SkCanvas* tileCanvas = surface->getCanvas(); 1069 SkCanvas* tileCanvas = surface->getCanvas();
1070 1070
1071 for (SkScalar y = 0; y < height(); y += tile.height()) { 1071 for (SkScalar y = 0; y < height(); y += h) {
1072 for (SkScalar x = 0; x < width(); x += tile.width()) { 1072 for (SkScalar x = 0; x < width(); x += w) {
1073 SkAutoCanvasRestore acr(tileCanvas, true); 1073 SkAutoCanvasRestore acr(tileCanvas, true);
1074 tileCanvas->translate(-x, -y); 1074 tileCanvas->translate(-x, -y);
bungeman-skia 2016/03/03 22:42:37 Just to make things more clear, when x and y are n
1075 tileCanvas->clear(0); 1075 tileCanvas->clear(0);
1076 this->INHERITED::draw(tileCanvas); 1076 this->INHERITED::draw(tileCanvas);
1077 surface->draw(canvas, x, y, nullptr); 1077 surface->draw(canvas, x, y, nullptr);
1078 } 1078 }
1079 } 1079 }
1080 1080
1081 // for drawing the borders between tiles 1081 // for drawing the borders between tiles
1082 SkPaint paint; 1082 SkPaint paint;
1083 paint.setColor(0x60FF00FF); 1083 paint.setColor(0x60FF00FF);
1084 paint.setStyle(SkPaint::kStroke_Style); 1084 paint.setStyle(SkPaint::kStroke_Style);
(...skipping 370 matching lines...) Expand 10 before | Expand all | Expand 10 after
1455 (void)SampleView::SetRepeatDraw(child, FPS_REPEAT_COUNT); 1455 (void)SampleView::SetRepeatDraw(child, FPS_REPEAT_COUNT);
1456 fTimer.start(); 1456 fTimer.start();
1457 } else { 1457 } else {
1458 (void)SampleView::SetRepeatDraw(child, 1); 1458 (void)SampleView::SetRepeatDraw(child, 1);
1459 } 1459 }
1460 if (fPerspAnim || fRotate) { 1460 if (fPerspAnim || fRotate) {
1461 this->inval(nullptr); 1461 this->inval(nullptr);
1462 } 1462 }
1463 } 1463 }
1464 1464
1465 void SampleWindow::changeOffset(SkVector delta) {
1466 fOffset += delta;
1467 this->updateMatrix();
1468 }
1469
1465 void SampleWindow::changeZoomLevel(float delta) { 1470 void SampleWindow::changeZoomLevel(float delta) {
1466 fZoomLevel += delta; 1471 fZoomLevel += delta;
1467 if (fZoomLevel > 0) { 1472 if (fZoomLevel > 0) {
1468 fZoomLevel = SkMinScalar(fZoomLevel, MAX_ZOOM_LEVEL); 1473 fZoomLevel = SkMinScalar(fZoomLevel, MAX_ZOOM_LEVEL);
1469 fZoomScale = fZoomLevel + SK_Scalar1; 1474 fZoomScale = fZoomLevel + SK_Scalar1;
1470 } else if (fZoomLevel < 0) { 1475 } else if (fZoomLevel < 0) {
1471 fZoomLevel = SkMaxScalar(fZoomLevel, MIN_ZOOM_LEVEL); 1476 fZoomLevel = SkMaxScalar(fZoomLevel, MIN_ZOOM_LEVEL);
1472 fZoomScale = SK_Scalar1 / (SK_Scalar1 - fZoomLevel); 1477 fZoomScale = SK_Scalar1 / (SK_Scalar1 - fZoomLevel);
1473 } else { 1478 } else {
1474 fZoomScale = SK_Scalar1; 1479 fZoomScale = SK_Scalar1;
1475 } 1480 }
1476 this->updateMatrix(); 1481 this->updateMatrix();
1477 } 1482 }
1478 1483
1479 void SampleWindow::updateMatrix(){ 1484 void SampleWindow::updateMatrix(){
1480 SkMatrix m; 1485 SkMatrix m;
1481 m.reset(); 1486 m.reset();
1487
1482 if (fZoomLevel) { 1488 if (fZoomLevel) {
1483 SkPoint center; 1489 SkPoint center;
1484 //m = this->getLocalMatrix();//.invert(&m); 1490 //m = this->getLocalMatrix();//.invert(&m);
1485 m.mapXY(fZoomCenterX, fZoomCenterY, &center); 1491 m.mapXY(fZoomCenterX, fZoomCenterY, &center);
1486 SkScalar cx = center.fX; 1492 SkScalar cx = center.fX;
1487 SkScalar cy = center.fY; 1493 SkScalar cy = center.fY;
1488 1494
1489 m.setTranslate(-cx, -cy); 1495 m.setTranslate(-cx, -cy);
1490 m.postScale(fZoomScale, fZoomScale); 1496 m.postScale(fZoomScale, fZoomScale);
1491 m.postTranslate(cx, cy); 1497 m.postTranslate(cx, cy);
1492 } 1498 }
1493 1499
1500 m.postTranslate(fOffset.fX, fOffset.fY);
1501
1494 if (fFlipAxis) { 1502 if (fFlipAxis) {
1495 m.preTranslate(fZoomCenterX, fZoomCenterY); 1503 m.preTranslate(fZoomCenterX, fZoomCenterY);
1496 if (fFlipAxis & kFlipAxis_X) { 1504 if (fFlipAxis & kFlipAxis_X) {
1497 m.preScale(-SK_Scalar1, SK_Scalar1); 1505 m.preScale(-SK_Scalar1, SK_Scalar1);
1498 } 1506 }
1499 if (fFlipAxis & kFlipAxis_Y) { 1507 if (fFlipAxis & kFlipAxis_Y) {
1500 m.preScale(SK_Scalar1, -SK_Scalar1); 1508 m.preScale(SK_Scalar1, -SK_Scalar1);
1501 } 1509 }
1502 m.preTranslate(-fZoomCenterX, -fZoomCenterY); 1510 m.preTranslate(-fZoomCenterX, -fZoomCenterY);
1503 //canvas->concat(m); 1511 //canvas->concat(m);
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
1678 case '7': dx = -1; dy = -1; break; 1686 case '7': dx = -1; dy = -1; break;
1679 case '9': dx = 1; dy = -1; break; 1687 case '9': dx = 1; dy = -1; break;
1680 case '3': dx = 1; dy = 1; break; 1688 case '3': dx = 1; dy = 1; break;
1681 case '1': dx = -1; dy = 1; break; 1689 case '1': dx = -1; dy = 1; break;
1682 1690
1683 default: 1691 default:
1684 break; 1692 break;
1685 } 1693 }
1686 1694
1687 if (0xFF != dx && 0xFF != dy) { 1695 if (0xFF != dx && 0xFF != dy) {
1688 if ((dx | dy) == 0) { 1696 this->changeOffset({SkIntToScalar(dx / 32.0f), SkIntToScalar(dy / 32.0f) });
1689 fScrollTestX = fScrollTestY = 0;
1690 } else {
1691 fScrollTestX += dx;
1692 fScrollTestY += dy;
1693 }
1694 this->inval(nullptr);
1695 return true; 1697 return true;
1696 } 1698 }
1697 1699
1698 switch (uni) { 1700 switch (uni) {
1699 case 27: // ESC 1701 case 27: // ESC
1700 gAnimTimer.stop(); 1702 gAnimTimer.stop();
1701 if (this->sendAnimatePulse()) { 1703 if (this->sendAnimatePulse()) {
1702 this->inval(nullptr); 1704 this->inval(nullptr);
1703 } 1705 }
1704 break; 1706 break;
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
1848 { 1850 {
1849 SkView* view = curr_view(this); 1851 SkView* view = curr_view(this);
1850 if (view) { 1852 if (view) {
1851 SkEvent evt(gKeyEvtName); 1853 SkEvent evt(gKeyEvtName);
1852 evt.setFast32(key); 1854 evt.setFast32(key);
1853 if (view->doQuery(&evt)) { 1855 if (view->doQuery(&evt)) {
1854 return true; 1856 return true;
1855 } 1857 }
1856 } 1858 }
1857 } 1859 }
1860
1861 int dx = 0xFF;
1862 int dy = 0xFF;
1863
1858 switch (key) { 1864 switch (key) {
1859 case kRight_SkKey: 1865 case kRight_SkKey:
1860 if (this->nextSample()) { 1866 if (this->nextSample()) {
1861 return true; 1867 return true;
1862 } 1868 }
1863 break; 1869 break;
1864 case kLeft_SkKey: 1870 case kLeft_SkKey:
1865 if (this->previousSample()) { 1871 if (this->previousSample()) {
1866 return true; 1872 return true;
1867 } 1873 }
1868 return true; 1874 return true;
1869 case kUp_SkKey: 1875 case kUp_SkKey:
1870 this->changeZoomLevel(1.f / 32.f); 1876 this->changeZoomLevel(1.f / 32.f);
1871 return true; 1877 return true;
1872 case kDown_SkKey: 1878 case kDown_SkKey:
1873 this->changeZoomLevel(-1.f / 32.f); 1879 this->changeZoomLevel(-1.f / 32.f);
1874 return true; 1880 return true;
1875 case kOK_SkKey: { 1881 case kOK_SkKey: {
1876 SkString title; 1882 SkString title;
1877 if (curr_title(this, &title)) { 1883 if (curr_title(this, &title)) {
1878 writeTitleToPrefs(title.c_str()); 1884 writeTitleToPrefs(title.c_str());
1879 } 1885 }
1880 return true; 1886 return true;
1881 } 1887 }
1882 case kBack_SkKey: 1888 case kBack_SkKey:
1883 this->showOverview(); 1889 this->showOverview();
1884 return true; 1890 return true;
1891
1892 case k5_SkKey: dx = 0; dy = 0; break;
1893 case k8_SkKey: dx = 0; dy = -1; break;
1894 case k6_SkKey: dx = 1; dy = 0; break;
1895 case k2_SkKey: dx = 0; dy = 1; break;
1896 case k4_SkKey: dx = -1; dy = 0; break;
1897 case k7_SkKey: dx = -1; dy = -1; break;
1898 case k9_SkKey: dx = 1; dy = -1; break;
1899 case k3_SkKey: dx = 1; dy = 1; break;
1900 case k1_SkKey: dx = -1; dy = 1; break;
1901
1885 default: 1902 default:
1886 break; 1903 break;
1887 } 1904 }
1905
1906 if (0xFF != dx && 0xFF != dy) {
1907 this->changeOffset({SkIntToScalar(dx / 32.0f), SkIntToScalar(dy / 32.0f) });
1908 return true;
1909 }
1910
1888 return this->INHERITED::onHandleKey(key); 1911 return this->INHERITED::onHandleKey(key);
1889 } 1912 }
1890 1913
1891 /////////////////////////////////////////////////////////////////////////////// 1914 ///////////////////////////////////////////////////////////////////////////////
1892 1915
1893 static const char gGestureClickType[] = "GestureClickType"; 1916 static const char gGestureClickType[] = "GestureClickType";
1894 1917
1895 bool SampleWindow::onDispatchClick(int x, int y, Click::State state, 1918 bool SampleWindow::onDispatchClick(int x, int y, Click::State state,
1896 void* owner, unsigned modi) { 1919 void* owner, unsigned modi) {
1897 if (Click::kMoved_State == state) { 1920 if (Click::kMoved_State == state) {
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
2041 } 2064 }
2042 2065
2043 title.prepend(trystate_str(fLCDState, "LCD ", "lcd ")); 2066 title.prepend(trystate_str(fLCDState, "LCD ", "lcd "));
2044 title.prepend(trystate_str(fAAState, "AA ", "aa ")); 2067 title.prepend(trystate_str(fAAState, "AA ", "aa "));
2045 title.prepend(gFilterQualityStates[fFilterQualityIndex].fLabel); 2068 title.prepend(gFilterQualityStates[fFilterQualityIndex].fLabel);
2046 title.prepend(trystate_str(fSubpixelState, "S ", "s ")); 2069 title.prepend(trystate_str(fSubpixelState, "S ", "s "));
2047 title.prepend(fFlipAxis & kFlipAxis_X ? "X " : nullptr); 2070 title.prepend(fFlipAxis & kFlipAxis_X ? "X " : nullptr);
2048 title.prepend(fFlipAxis & kFlipAxis_Y ? "Y " : nullptr); 2071 title.prepend(fFlipAxis & kFlipAxis_Y ? "Y " : nullptr);
2049 title.prepend(gHintingStates[fHintingState].label); 2072 title.prepend(gHintingStates[fHintingState].label);
2050 2073
2074 if (fOffset.fX || fOffset.fY) {
2075 title.prependf("(%.2f, %.2f) ", SkScalarToFloat(fOffset.fX), SkScalarToF loat(fOffset.fY));
2076 }
2051 if (fZoomLevel) { 2077 if (fZoomLevel) {
2052 title.prependf("{%.2f} ", SkScalarToFloat(fZoomLevel)); 2078 title.prependf("{%.2f} ", SkScalarToFloat(fZoomLevel));
2053 } 2079 }
2054 2080
2055 if (fMeasureFPS) { 2081 if (fMeasureFPS) {
2056 title.appendf(" %8.4f ms", fMeasureFPS_Time / (float)FPS_REPEAT_COUNT); 2082 title.appendf(" %8.4f ms", fMeasureFPS_Time / (float)FPS_REPEAT_COUNT);
2057 } 2083 }
2058 2084
2059 #if SK_SUPPORT_GPU 2085 #if SK_SUPPORT_GPU
2060 if (IsGpuDeviceType(fDeviceType) && 2086 if (IsGpuDeviceType(fDeviceType) &&
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after
2303 #ifdef SK_BUILD_FOR_MAC 2329 #ifdef SK_BUILD_FOR_MAC
2304 setenv("ANDROID_ROOT", "/android/device/data", 0); 2330 setenv("ANDROID_ROOT", "/android/device/data", 0);
2305 #endif 2331 #endif
2306 SkGraphics::Init(); 2332 SkGraphics::Init();
2307 SkEvent::Init(); 2333 SkEvent::Init();
2308 } 2334 }
2309 2335
2310 void application_term() { 2336 void application_term() {
2311 SkEvent::Term(); 2337 SkEvent::Term();
2312 } 2338 }
OLDNEW
« 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