summaryrefslogtreecommitdiff
path: root/splash/SplashState.h
blob: ebb428ad509a03fe02faec33cd7bcf6f3358b8dd (plain)
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
//========================================================================
//
// SplashState.h
//
//========================================================================

//========================================================================
//
// Modified under the Poppler project - http://poppler.freedesktop.org
//
// All changes made under the Poppler project to this file are licensed
// under GPL version 2 or later
//
// Copyright (C) 2011, 2012, 2015 Thomas Freitag <Thomas.Freitag@alfa.de>
// Copyright (C) 2017 Adrian Johnson <ajohnson@redneon.com>
// Copyright (C) 2018 Albert Astals Cid <aacid@kde.org>
//
// To see a description of the changes please see the Changelog file that
// came with your tarball or type make ChangeLog if you are building from git
//
//========================================================================

#ifndef SPLASHSTATE_H
#define SPLASHSTATE_H

#include "SplashTypes.h"

class SplashPattern;
class SplashScreen;
class SplashClip;
class SplashBitmap;

//------------------------------------------------------------------------
// line cap values
//------------------------------------------------------------------------

#define splashLineCapButt 0
#define splashLineCapRound 1
#define splashLineCapProjecting 2

//------------------------------------------------------------------------
// line join values
//------------------------------------------------------------------------

#define splashLineJoinMiter 0
#define splashLineJoinRound 1
#define splashLineJoinBevel 2

//------------------------------------------------------------------------
// SplashState
//------------------------------------------------------------------------

class SplashState
{
public:
    // Create a new state object, initialized with default settings.
    SplashState(int width, int height, bool vectorAntialias, SplashScreenParams *screenParams);
    SplashState(int width, int height, bool vectorAntialias, SplashScreen *screenA);

    // Copy a state object.
    SplashState *copy() { return new SplashState(this); }

    ~SplashState();

    SplashState(const SplashState &) = delete;
    SplashState &operator=(const SplashState &) = delete;

    // Set the stroke pattern.  This does not copy <strokePatternA>.
    void setStrokePattern(SplashPattern *strokePatternA);

    // Set the fill pattern.  This does not copy <fillPatternA>.
    void setFillPattern(SplashPattern *fillPatternA);

    // Set the screen.  This does not copy <screenA>.
    void setScreen(SplashScreen *screenA);

    // Set the line dash pattern.  This copies the <lineDashA> array.
    void setLineDash(SplashCoord *lineDashA, int lineDashLengthA, SplashCoord lineDashPhaseA);

    // Set the soft mask bitmap.
    void setSoftMask(SplashBitmap *softMaskA);

    // Set the overprint parametes.
    void setFillOverprint(bool fillOverprintA) { fillOverprint = fillOverprintA; }
    void setStrokeOverprint(bool strokeOverprintA) { strokeOverprint = strokeOverprintA; }
    void setOverprintMode(int overprintModeA) { overprintMode = overprintModeA; }

    // Set the transfer function.
    void setTransfer(unsigned char *red, unsigned char *green, unsigned char *blue, unsigned char *gray);

private:
    SplashState(SplashState *state);

    SplashCoord matrix[6];
    SplashPattern *strokePattern;
    SplashPattern *fillPattern;
    SplashScreen *screen;
    SplashBlendFunc blendFunc;
    SplashCoord strokeAlpha;
    SplashCoord fillAlpha;
    bool multiplyPatternAlpha;
    SplashCoord patternStrokeAlpha;
    SplashCoord patternFillAlpha;
    SplashCoord lineWidth;
    int lineCap;
    int lineJoin;
    SplashCoord miterLimit;
    SplashCoord flatness;
    SplashCoord *lineDash;
    int lineDashLength;
    SplashCoord lineDashPhase;
    bool strokeAdjust;
    SplashClip *clip;
    SplashBitmap *softMask;
    bool deleteSoftMask;
    bool inNonIsolatedGroup;
    bool fillOverprint;
    bool strokeOverprint;
    int overprintMode;
    unsigned char rgbTransferR[256], rgbTransferG[256], rgbTransferB[256];
    unsigned char grayTransfer[256];
    unsigned char cmykTransferC[256], cmykTransferM[256], cmykTransferY[256], cmykTransferK[256];
    unsigned char deviceNTransfer[SPOT_NCOMPS + 4][256];
    unsigned int overprintMask;
    bool overprintAdditive;

    SplashState *next; // used by Splash class

    friend class Splash;
};

#endif