• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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:
~GrRectanizerPurgeListener()15     virtual ~GrRectanizerPurgeListener() {}
16 
17     virtual void notifyPurgeStrip(void*, int yCoord) = 0;
18 };
19 
20 class GrRectanizer {
21 public:
GrRectanizer(int width,int height)22     GrRectanizer(int width, int height) : fWidth(width), fHeight(height) {
23         SkASSERT(width >= 0);
24         SkASSERT(height >= 0);
25     }
26 
~GrRectanizer()27     virtual ~GrRectanizer() {}
28 
29     virtual void reset() = 0;
30 
width()31     int width() const { return fWidth; }
height()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
54