blob: ca0e3bc0916223c234915825f2d1207495e4e301 [file] [log] [blame]
//========================================================================
//
// 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 Albert Astals Cid <aacid@kde.org>
// Copyright (C) 2008 Tomas Are Haavet <tomasare@gmail.com>
// Copyright (C) 2009, 2011-2013 Thomas Freitag <Thomas.Freitag@alfa.de>
// Copyright (C) 2009 Stefan Thomas <thomas@eload24.com>
// Copyright (C) 2010 William Bader <williambader@hotmail.com>
// Copyright (C) 2017 Adrian Johnson <ajohnson@redneon.com>
//
// 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 SPLASHTYPES_H
#define SPLASHTYPES_H
#include "goo/gtypes.h"
//------------------------------------------------------------------------
// coordinates
//------------------------------------------------------------------------
#if defined(USE_FIXEDPOINT)
#include "goo/FixedPoint.h"
typedef FixedPoint SplashCoord;
#elif defined(USE_FLOAT)
typedef float SplashCoord;
#else
typedef double SplashCoord;
#endif
//------------------------------------------------------------------------
// antialiasing
//------------------------------------------------------------------------
#define splashAASize 4
#ifndef SPOT_NCOMPS
#define SPOT_NCOMPS 4
#endif
//------------------------------------------------------------------------
// 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...
#ifdef SPLASH_CMYK
,
splashModeCMYK8, // 1 byte per component, 4 bytes per pixel:
// CMYKCMYK...
splashModeDeviceN8 // 1 byte per component,
// 4 bytes + n bytes spot colors per pixel:
// CMYKSSSSCMYKSSSS...
#endif
};
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
#ifdef SPLASH_CMYK
#define splashMaxColorComps SPOT_NCOMPS+4
#else
#define splashMaxColorComps 4
#endif
typedef Guchar SplashColor[splashMaxColorComps];
typedef Guchar *SplashColorPtr;
// RGB8
static inline Guchar splashRGB8R(SplashColorPtr rgb8) { return rgb8[0]; }
static inline Guchar splashRGB8G(SplashColorPtr rgb8) { return rgb8[1]; }
static inline Guchar splashRGB8B(SplashColorPtr rgb8) { return rgb8[2]; }
// BGR8
static inline Guchar splashBGR8R(SplashColorPtr bgr8) { return bgr8[2]; }
static inline Guchar splashBGR8G(SplashColorPtr bgr8) { return bgr8[1]; }
static inline Guchar splashBGR8B(SplashColorPtr bgr8) { return bgr8[0]; }
#ifdef SPLASH_CMYK
// CMYK8
static inline Guchar splashCMYK8C(SplashColorPtr cmyk8) { return cmyk8[0]; }
static inline Guchar splashCMYK8M(SplashColorPtr cmyk8) { return cmyk8[1]; }
static inline Guchar splashCMYK8Y(SplashColorPtr cmyk8) { return cmyk8[2]; }
static inline Guchar splashCMYK8K(SplashColorPtr cmyk8) { return cmyk8[3]; }
// DEVICEN8
static inline Guchar splashDeviceN8C(SplashColorPtr deviceN8) { return deviceN8[0]; }
static inline Guchar splashDeviceN8M(SplashColorPtr deviceN8) { return deviceN8[1]; }
static inline Guchar splashDeviceN8Y(SplashColorPtr deviceN8) { return deviceN8[2]; }
static inline Guchar splashDeviceN8K(SplashColorPtr deviceN8) { return deviceN8[3]; }
static inline Guchar splashDeviceN8S(SplashColorPtr deviceN8, int nSpot) { return deviceN8[4 + nSpot]; }
#endif
static inline void splashClearColor(SplashColorPtr dest) {
dest[0] = 0;
dest[1] = 0;
dest[2] = 0;
#ifdef SPLASH_CMYK
dest[3] = 0;
for (int i = SPOT_NCOMPS; i < SPOT_NCOMPS + 4; i++)
dest[i] = 0;
#endif
}
static inline void splashColorCopy(SplashColorPtr dest, SplashColorPtr src) {
dest[0] = src[0];
dest[1] = src[1];
dest[2] = src[2];
#ifdef SPLASH_CMYK
dest[3] = src[3];
for (int i = SPOT_NCOMPS; i < SPOT_NCOMPS + 4; i++)
dest[i] = src[i];
#endif
}
static inline void splashColorXor(SplashColorPtr dest, SplashColorPtr src) {
dest[0] ^= src[0];
dest[1] ^= src[1];
dest[2] ^= src[2];
#ifdef SPLASH_CMYK
dest[3] ^= src[3];
for (int i = SPOT_NCOMPS; i < SPOT_NCOMPS + 4; i++)
dest[i] ^= src[i];
#endif
}
//------------------------------------------------------------------------
// 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
};
#endif