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 14class SkBBoxHierarchy; 15 16class SK_API SkBBHFactory { 17public: 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 25class SK_API SkRTreeFactory : public SkBBHFactory { 26public: 27 virtual SkBBoxHierarchy* operator()(int width, int height) const SK_OVERRIDE; 28private: 29 typedef SkBBHFactory INHERITED; 30}; 31 32class SK_API SkTileGridFactory : public SkBBHFactory { 33public: 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 55private: 56 TileGridInfo fInfo; 57 58 typedef SkBBHFactory INHERITED; 59}; 60 61#endif 62