//========================================================================
//
// SplashTypes.h
//
//========================================================================

#ifndef SPLASHTYPES_H
#define SPLASHTYPES_H

#include "goo/gtypes.h"

//------------------------------------------------------------------------
// coordinates
//------------------------------------------------------------------------

typedef double SplashCoord;

//------------------------------------------------------------------------
// colors
//------------------------------------------------------------------------

enum SplashColorMode {
  splashModeMono1,
  splashModeMono8,
  splashModeRGB8,
  splashModeRGB8Packed,
  splashModeBGR8Packed
};

// max number of components in any SplashColor
#define splashMaxColorComps 3

// 1-bit gray or alpha
typedef Guchar SplashMono1;
typedef Guchar SplashMono1P; // packed

// 8-bit gray or alpha
typedef Guchar SplashMono8;

// 3x8-bit RGB: (MSB) 00RRGGBB (LSB)
typedef Guint SplashRGB8;
#define splashRGB8R(rgb8) (((rgb8) >> 16) & 0xff)
#define splashRGB8G(rgb8) (((rgb8) >> 8) & 0xff)
#define splashRGB8B(rgb8) ((rgb8) & 0xff)
#define splashMakeRGB8(r, g, b) \
  ((((r) & 0xff) << 16) | (((g) & 0xff) << 8) | ((b) & 0xff))

typedef Guchar SplashRGB8P; // packed

// 3x8-bit RGB: (MSB) 00BBGGRR (LSB)
typedef Guint SplashBGR8;
typedef Guchar SplashBGR8P; // packed
#define splashBGR8R(bgr8) ((bgr8) & 0xff)
#define splashBGR8G(bgr8) (((bgr8) >> 8) & 0xff)
#define splashBGR8B(bgr8) (((bgr8) >> 16) & 0xff)
#define splashMakeBGR8(r, g, b) \
  ((((b) & 0xff) << 16) | (((g) & 0xff) << 8) | ((r) & 0xff))

union SplashColor {
  SplashMono1 mono1;
  SplashMono8 mono8;
  SplashRGB8 rgb8;
  SplashBGR8 bgr8;
};

union SplashColorPtr {
  SplashMono1P *mono1;
  SplashMono8 *mono8;
  SplashRGB8 *rgb8;
  SplashRGB8P *rgb8p;
  SplashBGR8P *bgr8;
};

//------------------------------------------------------------------------
// error results
//------------------------------------------------------------------------

typedef int SplashError;

#endif
