You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
99 lines
2.6 KiB
99 lines
2.6 KiB
//======================================================================== |
|
// |
|
// SplashState.cc |
|
// |
|
//======================================================================== |
|
|
|
#include <aconf.h> |
|
|
|
#ifdef USE_GCC_PRAGMAS |
|
#pragma implementation |
|
#endif |
|
|
|
#include <string.h> |
|
#include "gmem.h" |
|
#include "SplashPattern.h" |
|
#include "SplashScreen.h" |
|
#include "SplashClip.h" |
|
#include "SplashState.h" |
|
|
|
//------------------------------------------------------------------------ |
|
// SplashState |
|
//------------------------------------------------------------------------ |
|
|
|
SplashState::SplashState(int width, int height) { |
|
SplashColor color; |
|
|
|
memset(&color, 0, sizeof(SplashColor)); |
|
strokePattern = new SplashSolidColor(color); |
|
fillPattern = new SplashSolidColor(color); |
|
screen = new SplashScreen(10); |
|
lineWidth = 0; |
|
lineCap = splashLineCapButt; |
|
lineJoin = splashLineJoinMiter; |
|
miterLimit = 10; |
|
flatness = 1; |
|
lineDash = NULL; |
|
lineDashLength = 0; |
|
lineDashPhase = 0; |
|
clip = new SplashClip(0, 0, width - 1, height - 1); |
|
next = NULL; |
|
} |
|
|
|
SplashState::SplashState(SplashState *state) { |
|
strokePattern = state->strokePattern->copy(); |
|
fillPattern = state->fillPattern->copy(); |
|
screen = state->screen->copy(); |
|
lineWidth = state->lineWidth; |
|
lineCap = state->lineCap; |
|
lineJoin = state->lineJoin; |
|
miterLimit = state->miterLimit; |
|
flatness = state->flatness; |
|
if (state->lineDash) { |
|
lineDashLength = state->lineDashLength; |
|
lineDash = (SplashCoord *)gmalloc(lineDashLength * sizeof(SplashCoord)); |
|
memcpy(lineDash, state->lineDash, lineDashLength * sizeof(SplashCoord)); |
|
} else { |
|
lineDash = NULL; |
|
lineDashLength = 0; |
|
} |
|
lineDashPhase = state->lineDashPhase; |
|
clip = state->clip->copy(); |
|
next = NULL; |
|
} |
|
|
|
SplashState::~SplashState() { |
|
delete strokePattern; |
|
delete fillPattern; |
|
delete screen; |
|
gfree(lineDash); |
|
delete clip; |
|
} |
|
|
|
void SplashState::setStrokePattern(SplashPattern *strokePatternA) { |
|
delete strokePattern; |
|
strokePattern = strokePatternA; |
|
} |
|
|
|
void SplashState::setFillPattern(SplashPattern *fillPatternA) { |
|
delete fillPattern; |
|
fillPattern = fillPatternA; |
|
} |
|
|
|
void SplashState::setScreen(SplashScreen *screenA) { |
|
delete screen; |
|
screen = screenA; |
|
} |
|
|
|
void SplashState::setLineDash(SplashCoord *lineDashA, int lineDashLengthA, |
|
SplashCoord lineDashPhaseA) { |
|
gfree(lineDash); |
|
lineDashLength = lineDashLengthA; |
|
if (lineDashLength > 0) { |
|
lineDash = (SplashCoord *)gmalloc(lineDashLength * sizeof(SplashCoord)); |
|
memcpy(lineDash, lineDashA, lineDashLength * sizeof(SplashCoord)); |
|
} else { |
|
lineDash = NULL; |
|
} |
|
lineDashPhase = lineDashPhaseA; |
|
}
|
|
|