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 54