xref: /aosp_15_r20/external/skia/src/core/SkCanvas_Raster.cpp (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
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