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: src/core/SkNinePatchIter.cpp

Issue 1992283002: Add drawBitmapLattice() API (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Rewrite picture impls Created 4 years, 4 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 | « src/core/SkNinePatchIter.h ('k') | src/core/SkPictureFlat.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /*
2 * Copyright 2015 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8 #include "SkNinePatchIter.h"
9 #include "SkRect.h"
10
11 bool SkNinePatchIter::Valid(int width, int height, const SkIRect& center) {
12 return !center.isEmpty() && SkIRect::MakeWH(width, height).contains(center);
13 }
14
15 SkNinePatchIter::SkNinePatchIter(int w, int h, const SkIRect& c, const SkRect& d st) {
16 SkASSERT(SkIRect::MakeWH(w, h).contains(c));
17
18 fSrcX[0] = 0;
19 fSrcX[1] = SkIntToScalar(c.fLeft);
20 fSrcX[2] = SkIntToScalar(c.fRight);
21 fSrcX[3] = SkIntToScalar(w);
22
23 fSrcY[0] = 0;
24 fSrcY[1] = SkIntToScalar(c.fTop);
25 fSrcY[2] = SkIntToScalar(c.fBottom);
26 fSrcY[3] = SkIntToScalar(h);
27
28 fDstX[0] = dst.fLeft;
29 fDstX[1] = dst.fLeft + SkIntToScalar(c.fLeft);
30 fDstX[2] = dst.fRight - SkIntToScalar(w - c.fRight);
31 fDstX[3] = dst.fRight;
32
33 fDstY[0] = dst.fTop;
34 fDstY[1] = dst.fTop + SkIntToScalar(c.fTop);
35 fDstY[2] = dst.fBottom - SkIntToScalar(h - c.fBottom);
36 fDstY[3] = dst.fBottom;
37
38 if (fDstX[1] > fDstX[2]) {
39 fDstX[1] = fDstX[0] + (fDstX[3] - fDstX[0]) * c.fLeft / (w - c.width());
40 fDstX[2] = fDstX[1];
41 }
42
43 if (fDstY[1] > fDstY[2]) {
44 fDstY[1] = fDstY[0] + (fDstY[3] - fDstY[0]) * c.fTop / (h - c.height());
45 fDstY[2] = fDstY[1];
46 }
47
48 fCurrX = fCurrY = 0;
49 fDone = false;
50 }
51
52 bool SkNinePatchIter::next(SkRect* src, SkRect* dst) {
53 if (fDone) {
54 return false;
55 }
56
57 const int x = fCurrX;
58 const int y = fCurrY;
59 SkASSERT(x >= 0 && x < 3);
60 SkASSERT(y >= 0 && y < 3);
61
62 src->set(fSrcX[x], fSrcY[y], fSrcX[x + 1], fSrcY[y + 1]);
63 dst->set(fDstX[x], fDstY[y], fDstX[x + 1], fDstY[y + 1]);
64 if (3 == ++fCurrX) {
65 fCurrX = 0;
66 fCurrY += 1;
67 if (fCurrY >= 3) {
68 fDone = true;
69 }
70 }
71 return true;
72 }
OLDNEW
« no previous file with comments | « src/core/SkNinePatchIter.h ('k') | src/core/SkPictureFlat.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698