1 /* 2 * Copyright 2014 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 SkBBHFactory_DEFINED 9 #define SkBBHFactory_DEFINED 10 11 #include "SkSize.h" 12 #include "SkPoint.h" 13 14 class SkBBoxHierarchy; 15 16 class SK_API SkBBHFactory { 17 public: 18 /** 19 * Allocate a new SkBBoxHierarchy. Return NULL on failure. 20 */ 21 virtual SkBBoxHierarchy* operator()(int width, int height) const = 0; 22 virtual ~SkBBHFactory() {}; 23 }; 24 25 class SK_API SkQuadTreeFactory : public SkBBHFactory { 26 public: 27 virtual SkBBoxHierarchy* operator()(int width, int height) const SK_OVERRIDE; 28 private: 29 typedef SkBBHFactory INHERITED; 30 }; 31 32 33 class SK_API SkRTreeFactory : public SkBBHFactory { 34 public: 35 virtual SkBBoxHierarchy* operator()(int width, int height) const SK_OVERRIDE; 36 private: 37 typedef SkBBHFactory INHERITED; 38 }; 39 40 class SK_API SkTileGridFactory : public SkBBHFactory { 41 public: 42 struct TileGridInfo { 43 /** Tile placement interval */ 44 SkISize fTileInterval; 45 46 /** Pixel coverage overlap between adjacent tiles */ 47 SkISize fMargin; 48 49 /** Offset added to device-space bounding box positions to convert 50 * them to tile-grid space. This can be used to adjust the "phase" 51 * of the tile grid to match probable query rectangles that will be 52 * used to search into the tile grid. As long as the offset is smaller 53 * or equal to the margin, there is no need to extend the domain of 54 * the tile grid to prevent data loss. 55 */ 56 SkIPoint fOffset; 57 }; 58 59 SkTileGridFactory(const TileGridInfo& info) : fInfo(info) { } 60 61 virtual SkBBoxHierarchy* operator()(int width, int height) const SK_OVERRIDE; 62 63 private: 64 TileGridInfo fInfo; 65 66 typedef SkBBHFactory INHERITED; 67 }; 68 69 #endif 70