]> git.ipfire.org Git - thirdparty/cups.git/blob - pdftops/SplashState.cxx
Load cups into easysw/current.
[thirdparty/cups.git] / pdftops / SplashState.cxx
1 //========================================================================
2 //
3 // SplashState.cc
4 //
5 //========================================================================
6
7 #include <config.h>
8
9 #ifdef USE_GCC_PRAGMAS
10 #pragma implementation
11 #endif
12
13 #include <string.h>
14 #include "gmem.h"
15 #include "SplashPattern.h"
16 #include "SplashScreen.h"
17 #include "SplashClip.h"
18 #include "SplashState.h"
19
20 //------------------------------------------------------------------------
21 // SplashState
22 //------------------------------------------------------------------------
23
24 // number of components in each color mode
25 int splashColorModeNComps[] = {
26 1, 1, 2, 3, 3, 4, 4
27 };
28
29 SplashState::SplashState(int width, int height) {
30 SplashColor color;
31
32 memset(&color, 0, sizeof(SplashColor));
33 strokePattern = new SplashSolidColor(color);
34 fillPattern = new SplashSolidColor(color);
35 screen = new SplashScreen(10);
36 blendFunc = NULL;
37 strokeAlpha = 1;
38 fillAlpha = 1;
39 lineWidth = 0;
40 lineCap = splashLineCapButt;
41 lineJoin = splashLineJoinMiter;
42 miterLimit = 10;
43 flatness = 1;
44 lineDash = NULL;
45 lineDashLength = 0;
46 lineDashPhase = 0;
47 clip = new SplashClip(0, 0, width - 1, height - 1);
48 next = NULL;
49 }
50
51 SplashState::SplashState(SplashState *state) {
52 strokePattern = state->strokePattern->copy();
53 fillPattern = state->fillPattern->copy();
54 screen = state->screen->copy();
55 blendFunc = state->blendFunc;
56 strokeAlpha = state->strokeAlpha;
57 fillAlpha = state->fillAlpha;
58 lineWidth = state->lineWidth;
59 lineCap = state->lineCap;
60 lineJoin = state->lineJoin;
61 miterLimit = state->miterLimit;
62 flatness = state->flatness;
63 if (state->lineDash) {
64 lineDashLength = state->lineDashLength;
65 lineDash = (SplashCoord *)gmallocn(lineDashLength, sizeof(SplashCoord));
66 memcpy(lineDash, state->lineDash, lineDashLength * sizeof(SplashCoord));
67 } else {
68 lineDash = NULL;
69 lineDashLength = 0;
70 }
71 lineDashPhase = state->lineDashPhase;
72 clip = state->clip->copy();
73 next = NULL;
74 }
75
76 SplashState::~SplashState() {
77 delete strokePattern;
78 delete fillPattern;
79 delete screen;
80 gfree(lineDash);
81 delete clip;
82 }
83
84 void SplashState::setStrokePattern(SplashPattern *strokePatternA) {
85 delete strokePattern;
86 strokePattern = strokePatternA;
87 }
88
89 void SplashState::setFillPattern(SplashPattern *fillPatternA) {
90 delete fillPattern;
91 fillPattern = fillPatternA;
92 }
93
94 void SplashState::setScreen(SplashScreen *screenA) {
95 delete screen;
96 screen = screenA;
97 }
98
99 void SplashState::setLineDash(SplashCoord *lineDashA, int lineDashLengthA,
100 SplashCoord lineDashPhaseA) {
101 gfree(lineDash);
102 lineDashLength = lineDashLengthA;
103 if (lineDashLength > 0) {
104 lineDash = (SplashCoord *)gmallocn(lineDashLength, sizeof(SplashCoord));
105 memcpy(lineDash, lineDashA, lineDashLength * sizeof(SplashCoord));
106 } else {
107 lineDash = NULL;
108 }
109 lineDashPhase = lineDashPhaseA;
110 }