• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2011, The Android Open Source Project
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  *  * Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  *  * Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25 
26 #ifndef InspectorCanvas_h
27 #define InspectorCanvas_h
28 
29 #include "SkBounder.h"
30 #include "SkCanvas.h"
31 
32 namespace WebCore {
33 
34 class InspectorBounder : public SkBounder {
onIRect(const SkIRect & rect)35     virtual bool onIRect(const SkIRect& rect)
36     {
37         return false;
38     }
39 };
40 
41 class InspectorCanvas : public SkCanvas {
42 public:
InspectorCanvas(SkBounder * bounder,SkPicture * picture,SkBitmap & bitmap)43     InspectorCanvas(SkBounder* bounder, SkPicture* picture, SkBitmap& bitmap)
44         : SkCanvas(bitmap)
45         , m_picture(picture)
46         , m_hasText(false)
47         , m_hasContent(false)
48     {
49         setBounder(bounder);
50     }
51 
hasText()52     bool hasText() {return m_hasText;}
hasContent()53     bool hasContent() {return m_hasContent;}
54 
clipPath(const SkPath &,SkRegion::Op)55     virtual bool clipPath(const SkPath&, SkRegion::Op) {
56         return true;
57     }
58 
59     virtual void commonDrawBitmap(const SkBitmap& bitmap,
60                                   const SkIRect* rect,
61                                   const SkMatrix&,
62                                   const SkPaint&);
63     virtual void drawBitmapRectToRect(const SkBitmap& bitmap,
64                                       const SkRect* src,
65                                       const SkRect& dst,
66                                       const SkPaint* paint);
67 
68     virtual void drawPaint(const SkPaint& paint);
69     virtual void drawPath(const SkPath&, const SkPaint& paint);
70     virtual void drawPoints(PointMode, size_t,
71                             const SkPoint [], const SkPaint& paint);
72 
73     virtual void drawRect(const SkRect& , const SkPaint& paint);
74     virtual void drawSprite(const SkBitmap& , int , int ,
75                             const SkPaint* paint = NULL);
76 
77     virtual void drawText(const void*, size_t byteLength, SkScalar,
78                           SkScalar, const SkPaint& paint);
79     virtual void drawPosText(const void* , size_t byteLength,
80                              const SkPoint [], const SkPaint& paint);
81     virtual void drawPosTextH(const void*, size_t byteLength,
82                               const SkScalar [], SkScalar,
83                               const SkPaint& paint);
84     virtual void drawTextOnPath(const void*, size_t byteLength,
85                                 const SkPath&, const SkMatrix*,
86                                 const SkPaint& paint);
87 
88 private:
89 
90     // vector instructions exist, must repaint at any scale
91     void setHasText();
92 
93     // painting is required
94     void setHasContent();
95 
96     // rect covering entire content, don't need to use a texture if nothing else
97     // is painted
98     void setIsBackground(const SkPaint& paint);
99 
100     SkPicture* m_picture;
101     bool m_hasText;
102     bool m_hasContent;
103 };
104 
105 } // namespace WebCore
106 
107 #endif // InspectorCanvas_h
108