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 13class GrRectanizerPurgeListener { 14public: 15 virtual ~GrRectanizerPurgeListener() {} 16 17 virtual void notifyPurgeStrip(void*, int yCoord) = 0; 18}; 19 20class GrRectanizer { 21public: 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 48private: 49 int fWidth; 50 int fHeight; 51}; 52 53#endif 54