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 SkRTreeFactory : public SkBBHFactory { 26 public: 27 virtual SkBBoxHierarchy* operator()(int width, int height) const SK_OVERRIDE; 28 private: 29 typedef SkBBHFactory INHERITED; 30 }; 31 32 class SK_API SkTileGridFactory : public SkBBHFactory { 33 public: 34 struct TileGridInfo { 35 /** Tile placement interval */ 36 SkISize fTileInterval; 37 38 /** Pixel coverage overlap between adjacent tiles */ 39 SkISize fMargin; 40 41 /** Offset added to device-space bounding box positions to convert 42 * them to tile-grid space. This can be used to adjust the "phase" 43 * of the tile grid to match probable query rectangles that will be 44 * used to search into the tile grid. As long as the offset is smaller 45 * or equal to the margin, there is no need to extend the domain of 46 * the tile grid to prevent data loss. 47 */ 48 SkIPoint fOffset; 49 }; 50 51 SkTileGridFactory(const TileGridInfo& info) : fInfo(info) { } 52 53 virtual SkBBoxHierarchy* operator()(int width, int height) const SK_OVERRIDE; 54 55 private: 56 TileGridInfo fInfo; 57 58 typedef SkBBHFactory INHERITED; 59 }; 60 61 #endif 62