Spaces:
Running
Running
//======================================================================== | |
// | |
// SplashTypes.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) 2006, 2010, 2019, 2020 Albert Astals Cid <[email protected]> | |
// Copyright (C) 2008 Tomas Are Haavet <[email protected]> | |
// Copyright (C) 2009, 2011-2013 Thomas Freitag <[email protected]> | |
// Copyright (C) 2009 Stefan Thomas <[email protected]> | |
// Copyright (C) 2010 William Bader <[email protected]> | |
// Copyright (C) 2017 Adrian Johnson <[email protected]> | |
// Copyright (C) 2018 Stefan Brüns <[email protected]> | |
// | |
// 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 | |
// | |
//======================================================================== | |
//------------------------------------------------------------------------ | |
// coordinates | |
//------------------------------------------------------------------------ | |
typedef float SplashCoord; | |
typedef double SplashCoord; | |
//------------------------------------------------------------------------ | |
// antialiasing | |
//------------------------------------------------------------------------ | |
//------------------------------------------------------------------------ | |
// colors | |
//------------------------------------------------------------------------ | |
enum SplashColorMode | |
{ | |
splashModeMono1, // 1 bit per component, 8 pixels per byte, | |
// MSbit is on the left | |
splashModeMono8, // 1 byte per component, 1 byte per pixel | |
splashModeRGB8, // 1 byte per component, 3 bytes per pixel: | |
// RGBRGB... | |
splashModeBGR8, // 1 byte per component, 3 bytes per pixel: | |
// BGRBGR... | |
splashModeXBGR8, // 1 byte per component, 4 bytes per pixel: | |
// XBGRXBGR... | |
splashModeCMYK8, // 1 byte per component, 4 bytes per pixel: | |
// CMYKCMYK... | |
splashModeDeviceN8 // 1 byte per component, | |
// 4 bytes + n bytes spot colors per pixel: | |
// CMYKSSSSCMYKSSSS... | |
}; | |
enum SplashThinLineMode | |
{ | |
splashThinLineDefault, // if SA on: draw solid if requested line width, transformed into | |
// device space, is less than half a pixel and a shaped line else | |
splashThinLineSolid, // draw line solid at least with 1 pixel | |
splashThinLineShape // draw line shaped at least with 1 pixel | |
}; | |
// number of components in each color mode | |
// (defined in SplashState.cc) | |
extern int splashColorModeNComps[]; | |
// max number of components in any SplashColor | |
constexpr std::size_t splashMaxColorComps = SPOT_NCOMPS + 4; | |
typedef unsigned char SplashColor[splashMaxColorComps]; | |
typedef unsigned char *SplashColorPtr; | |
typedef const unsigned char *SplashColorConstPtr; | |
// RGB8 | |
static inline unsigned char splashRGB8R(SplashColorPtr rgb8) | |
{ | |
return rgb8[0]; | |
} | |
static inline unsigned char splashRGB8G(SplashColorPtr rgb8) | |
{ | |
return rgb8[1]; | |
} | |
static inline unsigned char splashRGB8B(SplashColorPtr rgb8) | |
{ | |
return rgb8[2]; | |
} | |
// BGR8 | |
static inline unsigned char splashBGR8R(SplashColorPtr bgr8) | |
{ | |
return bgr8[2]; | |
} | |
static inline unsigned char splashBGR8G(SplashColorPtr bgr8) | |
{ | |
return bgr8[1]; | |
} | |
static inline unsigned char splashBGR8B(SplashColorPtr bgr8) | |
{ | |
return bgr8[0]; | |
} | |
// CMYK8 | |
static inline unsigned char splashCMYK8C(SplashColorPtr cmyk8) | |
{ | |
return cmyk8[0]; | |
} | |
static inline unsigned char splashCMYK8M(SplashColorPtr cmyk8) | |
{ | |
return cmyk8[1]; | |
} | |
static inline unsigned char splashCMYK8Y(SplashColorPtr cmyk8) | |
{ | |
return cmyk8[2]; | |
} | |
static inline unsigned char splashCMYK8K(SplashColorPtr cmyk8) | |
{ | |
return cmyk8[3]; | |
} | |
// DEVICEN8 | |
static inline unsigned char splashDeviceN8C(SplashColorPtr deviceN8) | |
{ | |
return deviceN8[0]; | |
} | |
static inline unsigned char splashDeviceN8M(SplashColorPtr deviceN8) | |
{ | |
return deviceN8[1]; | |
} | |
static inline unsigned char splashDeviceN8Y(SplashColorPtr deviceN8) | |
{ | |
return deviceN8[2]; | |
} | |
static inline unsigned char splashDeviceN8K(SplashColorPtr deviceN8) | |
{ | |
return deviceN8[3]; | |
} | |
static inline unsigned char splashDeviceN8S(SplashColorPtr deviceN8, int nSpot) | |
{ | |
return deviceN8[4 + nSpot]; | |
} | |
static inline void splashClearColor(SplashColorPtr dest) | |
{ | |
dest[0] = 0; | |
dest[1] = 0; | |
dest[2] = 0; | |
dest[3] = 0; | |
for (int i = 4; i < SPOT_NCOMPS + 4; i++) { | |
dest[i] = 0; | |
} | |
} | |
static inline void splashColorCopy(SplashColorPtr dest, SplashColorConstPtr src) | |
{ | |
dest[0] = src[0]; | |
dest[1] = src[1]; | |
dest[2] = src[2]; | |
dest[3] = src[3]; | |
for (int i = 4; i < SPOT_NCOMPS + 4; i++) { | |
dest[i] = src[i]; | |
} | |
} | |
static inline bool splashColorEqual(SplashColorConstPtr dest, SplashColorConstPtr src) | |
{ | |
for (int i = 0; i < SPOT_NCOMPS + 4; i++) { | |
if (dest[i] != src[i]) { | |
return false; | |
} | |
} | |
return true; | |
} | |
static inline void splashColorXor(SplashColorPtr dest, SplashColorConstPtr src) | |
{ | |
dest[0] ^= src[0]; | |
dest[1] ^= src[1]; | |
dest[2] ^= src[2]; | |
dest[3] ^= src[3]; | |
for (int i = 4; i < SPOT_NCOMPS + 4; i++) { | |
dest[i] ^= src[i]; | |
} | |
} | |
//------------------------------------------------------------------------ | |
// blend functions | |
//------------------------------------------------------------------------ | |
typedef void (*SplashBlendFunc)(SplashColorPtr src, SplashColorPtr dest, SplashColorPtr blend, SplashColorMode cm); | |
//------------------------------------------------------------------------ | |
// screen parameters | |
//------------------------------------------------------------------------ | |
enum SplashScreenType | |
{ | |
splashScreenDispersed, | |
splashScreenClustered, | |
splashScreenStochasticClustered | |
}; | |
struct SplashScreenParams | |
{ | |
SplashScreenType type; | |
int size; | |
int dotRadius; | |
SplashCoord gamma; | |
SplashCoord blackThreshold; | |
SplashCoord whiteThreshold; | |
}; | |
//------------------------------------------------------------------------ | |
// error results | |
//------------------------------------------------------------------------ | |
typedef int SplashError; | |
//------------------------------------------------------------------------ | |
// image file formats | |
//------------------------------------------------------------------------ | |
enum SplashImageFileFormat | |
{ | |
splashFormatJpeg, | |
splashFormatPng, | |
splashFormatTiff, | |
splashFormatJpegCMYK | |
}; | |