1 /*
2 * Copyright 2023 Google LLC
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 #include "include/core/SkCanvas.h"
9 #include "include/core/SkRasterHandleAllocator.h"
10 #include "include/core/SkRefCnt.h"
11 #include "src/core/SkBitmapDevice.h"
12 #include "src/core/SkDevice.h"
13 #include "src/core/SkSurfacePriv.h"
14 #include "src/text/GlyphRun.h" // IWYU pragma: keep
15
16 #include <memory>
17 #include <utility>
18
19 class SkBitmap;
20 class SkSurfaceProps;
21
22 #if defined(SK_BUILD_FOR_ANDROID_FRAMEWORK)
23 #include "include/core/SkBitmap.h"
24 #include "include/core/SkColorSpace.h"
25 #include "include/core/SkImageInfo.h"
26
27 #endif
28
SkCanvas(const SkBitmap & bitmap,const SkSurfaceProps & props)29 SkCanvas::SkCanvas(const SkBitmap& bitmap, const SkSurfaceProps& props)
30 : fMCStack(sizeof(MCRec), fMCRecStorage, sizeof(fMCRecStorage)), fProps(props) {
31 this->init(sk_make_sp<SkBitmapDevice>(bitmap, fProps));
32 }
33
SkCanvas(const SkBitmap & bitmap,std::unique_ptr<SkRasterHandleAllocator> alloc,SkRasterHandleAllocator::Handle hndl,const SkSurfaceProps * props)34 SkCanvas::SkCanvas(const SkBitmap& bitmap,
35 std::unique_ptr<SkRasterHandleAllocator> alloc,
36 SkRasterHandleAllocator::Handle hndl,
37 const SkSurfaceProps* props)
38 : fMCStack(sizeof(MCRec), fMCRecStorage, sizeof(fMCRecStorage))
39 , fProps(SkSurfacePropsCopyOrDefault(props))
40 , fAllocator(std::move(alloc)) {
41 this->init(sk_make_sp<SkBitmapDevice>(bitmap, fProps, hndl));
42 }
43
SkCanvas(const SkBitmap & bitmap)44 SkCanvas::SkCanvas(const SkBitmap& bitmap) : SkCanvas(bitmap, nullptr, nullptr, nullptr) {}
45
46 #if defined(SK_BUILD_FOR_ANDROID_FRAMEWORK)
SkCanvas(const SkBitmap & bitmap,ColorBehavior)47 SkCanvas::SkCanvas(const SkBitmap& bitmap, ColorBehavior)
48 : fMCStack(sizeof(MCRec), fMCRecStorage, sizeof(fMCRecStorage)) {
49 SkBitmap tmp(bitmap);
50 *const_cast<SkImageInfo*>(&tmp.info()) = tmp.info().makeColorSpace(nullptr);
51 this->init(sk_make_sp<SkBitmapDevice>(tmp, fProps));
52 }
53 #endif
54
55