SkBounder.h revision 091f227385b467090b5a7169a8e2faf19eca7105
10910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/* 20910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project 30910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * 40910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 50910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * you may not use this file except in compliance with the License. 60910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * You may obtain a copy of the License at 70910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * 80910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 90910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * 100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * See the License for the specific language governing permissions and 140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * limitations under the License. 150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */ 160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifndef SkBounder_DEFINED 180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#define SkBounder_DEFINED 190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkTypes.h" 210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkRefCnt.h" 220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectstruct SkIRect; 240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectstruct SkPoint; 250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectstruct SkRect; 260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkPaint; 270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkPath; 280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkRegion; 290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/** \class SkBounder 310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project Base class for intercepting the device bounds of shapes before they are drawn. 330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project Install a subclass of this in your canvas. 340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project*/ 350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkBounder : public SkRefCnt { 360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic: 370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project /* Call to perform a clip test before calling onIRect. 380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project Returns the result from onIRect. 390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */ 400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project bool doIRect(const SkIRect&); 41091f227385b467090b5a7169a8e2faf19eca7105Mike Reed bool doIRect(const SkIRect& , uint16_t glyphID); 420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprotected: 430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project /** Override in your subclass. This is called with the device bounds of an 440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project object (text, geometry, image) just before it is drawn. If your method 450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project returns false, the drawing for that shape is aborted. If your method 460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project returns true, drawing continues. The bounds your method receives have already 470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project been transformed in to device coordinates, and clipped to the current clip. 480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */ 49091f227385b467090b5a7169a8e2faf19eca7105Mike Reed virtual bool onIRect(const SkIRect&) { 50091f227385b467090b5a7169a8e2faf19eca7105Mike Reed return false; 51091f227385b467090b5a7169a8e2faf19eca7105Mike Reed } 52091f227385b467090b5a7169a8e2faf19eca7105Mike Reed 53091f227385b467090b5a7169a8e2faf19eca7105Mike Reed /** Optionally, override in your subclass to receive the glyph ID when 54091f227385b467090b5a7169a8e2faf19eca7105Mike Reed text drawing supplies the device bounds of the object. 55091f227385b467090b5a7169a8e2faf19eca7105Mike Reed */ 56091f227385b467090b5a7169a8e2faf19eca7105Mike Reed virtual bool onIRect(const SkIRect& r, uint16_t glyphID) { 57091f227385b467090b5a7169a8e2faf19eca7105Mike Reed return onIRect(r); 58091f227385b467090b5a7169a8e2faf19eca7105Mike Reed } 590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project /** Called after each shape has been drawn. The default implementation does 610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project nothing, but your override could use this notification to signal itself 620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project that the offscreen being rendered into needs to be updated to the screen. 630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */ 640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void commit(); 650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprivate: 670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project bool doHairline(const SkPoint&, const SkPoint&, const SkPaint&); 680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project bool doRect(const SkRect&, const SkPaint&); 690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project bool doPath(const SkPath&, const SkPaint&, bool doFill); 700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project void setClip(const SkRegion* clip) { fClip = clip; } 710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const SkRegion* fClip; 730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project friend class SkAutoBounderCommit; 740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project friend class SkDraw; 750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project friend class SkDrawIter; 760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project friend struct Draw1Glyph; 770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project friend class SkMaskFilter; 780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 790910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 800910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 810910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 82