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