forked from chromium/chromium
-
Notifications
You must be signed in to change notification settings - Fork 0
/
skia_paint_canvas.h
136 lines (115 loc) · 4.89 KB
/
skia_paint_canvas.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CC_PAINT_SKIA_PAINT_CANVAS_H_
#define CC_PAINT_SKIA_PAINT_CANVAS_H_
#include <memory>
#include "base/compiler_specific.h"
#include "base/logging.h"
#include "base/macros.h"
#include "build/build_config.h"
#include "cc/paint/paint_canvas.h"
#include "cc/paint/paint_flags.h"
#include "cc/paint/paint_record.h"
#include "cc/paint/paint_text_blob.h"
#include "third_party/skia/include/core/SkCanvas.h"
namespace cc {
class PaintFlags;
// A PaintCanvas derived class that passes PaintCanvas APIs through to
// an SkCanvas. This is more efficient than recording to a PaintRecord
// and then playing back to an SkCanvas.
class CC_PAINT_EXPORT SkiaPaintCanvas final : public PaintCanvas {
public:
explicit SkiaPaintCanvas(SkCanvas* canvas);
explicit SkiaPaintCanvas(const SkBitmap& bitmap);
explicit SkiaPaintCanvas(const SkBitmap& bitmap, const SkSurfaceProps& props);
// If |target_color_space| is non-nullptr, then this will wrap |canvas| in a
// SkColorSpaceXformCanvas.
SkiaPaintCanvas(SkCanvas* canvas, sk_sp<SkColorSpace> target_color_space);
~SkiaPaintCanvas() override;
SkMetaData& getMetaData() override;
SkImageInfo imageInfo() const override;
void flush() override;
int save() override;
int saveLayer(const SkRect* bounds, const PaintFlags* flags) override;
int saveLayerAlpha(const SkRect* bounds,
uint8_t alpha,
bool preserve_lcd_text_requests) override;
void restore() override;
int getSaveCount() const override;
void restoreToCount(int save_count) override;
void translate(SkScalar dx, SkScalar dy) override;
void scale(SkScalar sx, SkScalar sy) override;
void rotate(SkScalar degrees) override;
void concat(const SkMatrix& matrix) override;
void setMatrix(const SkMatrix& matrix) override;
void clipRect(const SkRect& rect, SkClipOp op, bool do_anti_alias) override;
void clipRRect(const SkRRect& rrect,
SkClipOp op,
bool do_anti_alias) override;
void clipPath(const SkPath& path, SkClipOp op, bool do_anti_alias) override;
SkRect getLocalClipBounds() const override;
bool getLocalClipBounds(SkRect* bounds) const override;
SkIRect getDeviceClipBounds() const override;
bool getDeviceClipBounds(SkIRect* bounds) const override;
void drawColor(SkColor color, SkBlendMode mode) override;
void clear(SkColor color) override;
void drawLine(SkScalar x0,
SkScalar y0,
SkScalar x1,
SkScalar y1,
const PaintFlags& flags) override;
void drawRect(const SkRect& rect, const PaintFlags& flags) override;
void drawIRect(const SkIRect& rect, const PaintFlags& flags) override;
void drawOval(const SkRect& oval, const PaintFlags& flags) override;
void drawRRect(const SkRRect& rrect, const PaintFlags& flags) override;
void drawDRRect(const SkRRect& outer,
const SkRRect& inner,
const PaintFlags& flags) override;
void drawRoundRect(const SkRect& rect,
SkScalar rx,
SkScalar ry,
const PaintFlags& flags) override;
void drawPath(const SkPath& path, const PaintFlags& flags) override;
void drawImage(const PaintImage& image,
SkScalar left,
SkScalar top,
const PaintFlags* flags) override;
void drawImageRect(const PaintImage& image,
const SkRect& src,
const SkRect& dst,
const PaintFlags* flags,
SrcRectConstraint constraint) override;
void drawBitmap(const SkBitmap& bitmap,
SkScalar left,
SkScalar top,
const PaintFlags* flags) override;
void drawTextBlob(scoped_refptr<PaintTextBlob> blob,
SkScalar x,
SkScalar y,
const PaintFlags& flags) override;
void drawPicture(sk_sp<const PaintRecord> record) override;
bool isClipEmpty() const override;
bool isClipRect() const override;
const SkMatrix& getTotalMatrix() const override;
void Annotate(AnnotationType type,
const SkRect& rect,
sk_sp<SkData> data) override;
// Don't shadow non-virtual helper functions.
using PaintCanvas::clipRect;
using PaintCanvas::clipRRect;
using PaintCanvas::clipPath;
using PaintCanvas::drawBitmap;
using PaintCanvas::drawColor;
using PaintCanvas::drawImage;
using PaintCanvas::drawPicture;
private:
void WrapCanvasInColorSpaceXformCanvas(
sk_sp<SkColorSpace> target_color_space);
SkCanvas* canvas_;
std::unique_ptr<SkCanvas> owned_;
std::unique_ptr<SkCanvas> color_space_xform_canvas_;
DISALLOW_COPY_AND_ASSIGN(SkiaPaintCanvas);
};
} // namespace cc
#endif // CC_PAINT_SKIA_PAINT_CANVAS_H_