|
1 /* |
|
2 * Copyright 2010 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 #ifndef GrRectanizer_DEFINED |
|
9 #define GrRectanizer_DEFINED |
|
10 |
|
11 #include "GrPoint.h" |
|
12 |
|
13 class GrRectanizerPurgeListener { |
|
14 public: |
|
15 virtual ~GrRectanizerPurgeListener() {} |
|
16 |
|
17 virtual void notifyPurgeStrip(void*, int yCoord) = 0; |
|
18 }; |
|
19 |
|
20 class GrRectanizer { |
|
21 public: |
|
22 GrRectanizer(int width, int height) : fWidth(width), fHeight(height) { |
|
23 SkASSERT(width >= 0); |
|
24 SkASSERT(height >= 0); |
|
25 } |
|
26 |
|
27 virtual ~GrRectanizer() {} |
|
28 |
|
29 virtual void reset() = 0; |
|
30 |
|
31 int width() const { return fWidth; } |
|
32 int height() const { return fHeight; } |
|
33 |
|
34 virtual bool addRect(int width, int height, GrIPoint16* loc) = 0; |
|
35 virtual float percentFull() const = 0; |
|
36 |
|
37 // return the Y-coordinate of a strip that should be purged, given height |
|
38 // i.e. return the oldest such strip, or some other criteria. Return -1 |
|
39 // if there is no candidate |
|
40 virtual int stripToPurge(int height) const = 0; |
|
41 virtual void purgeStripAtY(int yCoord) = 0; |
|
42 |
|
43 /** |
|
44 * Our factory, which returns the subclass du jour |
|
45 */ |
|
46 static GrRectanizer* Factory(int width, int height); |
|
47 |
|
48 private: |
|
49 int fWidth; |
|
50 int fHeight; |
|
51 }; |
|
52 |
|
53 #endif |