1cb93a386Sopenharmony_ci/*
2cb93a386Sopenharmony_ci * Copyright 2017 Google Inc.
3cb93a386Sopenharmony_ci *
4cb93a386Sopenharmony_ci * Use of this source code is governed by a BSD-style license that can be
5cb93a386Sopenharmony_ci * found in the LICENSE file.
6cb93a386Sopenharmony_ci */
7cb93a386Sopenharmony_ci
8cb93a386Sopenharmony_ci#ifndef SkWritePixelsRec_DEFINED
9cb93a386Sopenharmony_ci#define SkWritePixelsRec_DEFINED
10cb93a386Sopenharmony_ci
11cb93a386Sopenharmony_ci#include "include/core/SkImageInfo.h"
12cb93a386Sopenharmony_ci#include "include/core/SkPixmap.h"
13cb93a386Sopenharmony_ci
14cb93a386Sopenharmony_ci/**
15cb93a386Sopenharmony_ci *  Helper class to package and trim the parameters passed to writePixels()
16cb93a386Sopenharmony_ci */
17cb93a386Sopenharmony_cistruct SkWritePixelsRec {
18cb93a386Sopenharmony_ci    SkWritePixelsRec(const SkImageInfo& info, const void* pixels, size_t rowBytes, int x, int y)
19cb93a386Sopenharmony_ci        : fPixels(pixels)
20cb93a386Sopenharmony_ci        , fRowBytes(rowBytes)
21cb93a386Sopenharmony_ci        , fInfo(info)
22cb93a386Sopenharmony_ci        , fX(x)
23cb93a386Sopenharmony_ci        , fY(y)
24cb93a386Sopenharmony_ci    {}
25cb93a386Sopenharmony_ci
26cb93a386Sopenharmony_ci    SkWritePixelsRec(const SkPixmap& pm, int x, int y)
27cb93a386Sopenharmony_ci        : fPixels(pm.addr())
28cb93a386Sopenharmony_ci        , fRowBytes(pm.rowBytes())
29cb93a386Sopenharmony_ci        , fInfo(pm.info())
30cb93a386Sopenharmony_ci        , fX(x)
31cb93a386Sopenharmony_ci        , fY(y)
32cb93a386Sopenharmony_ci    {}
33cb93a386Sopenharmony_ci
34cb93a386Sopenharmony_ci    const void* fPixels;
35cb93a386Sopenharmony_ci    size_t      fRowBytes;
36cb93a386Sopenharmony_ci    SkImageInfo fInfo;
37cb93a386Sopenharmony_ci    int         fX;
38cb93a386Sopenharmony_ci    int         fY;
39cb93a386Sopenharmony_ci
40cb93a386Sopenharmony_ci    /*
41cb93a386Sopenharmony_ci     *  On true, may have modified its fields (except fRowBytes) to make it a legal subset
42cb93a386Sopenharmony_ci     *  of the specified dst width/height.
43cb93a386Sopenharmony_ci     *
44cb93a386Sopenharmony_ci     *  On false, leaves self unchanged, but indicates that it does not overlap dst, or
45cb93a386Sopenharmony_ci     *  is not valid (e.g. bad fInfo) for writePixels().
46cb93a386Sopenharmony_ci     */
47cb93a386Sopenharmony_ci    bool trim(int dstWidth, int dstHeight);
48cb93a386Sopenharmony_ci};
49cb93a386Sopenharmony_ci
50cb93a386Sopenharmony_ci#endif
51