/*! \file surfacenew.h
** \brief Template Header
**
-** $Id: surfacenew.h,v 1.1 2005/01/21 19:29:10 darco Exp $
+** $Id$
**
** \legal
** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
{
COLORSYS_RGB,
COLORSYS_YUV,
-
+
COLORSYS_END
}; // END of enum SurfaceColorSystem
-- ** -- T Y P E S -----------------------------------------------------------
*/
-public:
+public:
//! \writeme
typedef etl::handle<SurfaceNew> Handle;
//! \writeme
typedef etl::handle<const SurfaceNew> HandleConst;
-
+
//! \writeme
typedef etl::loose_handle<SurfaceNew> LooseHandle;
//! \writeme
typedef SurfaceColorSystem;
-
+
//! \writeme
class Lock
{
public:
Lock(const Handle& x):x(x) { x->lock(); }
void unlock() { if(x){ x->unlock(); x=0; } }
- ~Lock() { unlock(); }
+ ~Lock() { unlock(); }
}; // END of class Lock
friend class Lock;
-
+
private:
//! \writeme
class ChannelData;
-
+
/*
-- ** -- D A T A -------------------------------------------------------------
*/
private:
-
+
//! \writeme
RecMutex mutex_;
-
+
//! \writeme
int w_,h_;
//! \writeme
ColorSystem color_system_;
-
+
//! \writeme
bool premult_flag_;
//! \writeme
std::map<Channel,ChannelData> channel_map_;
-
+
/*
-- ** -- S I G N A L S -------------------------------------------------------
*/
*/
protected:
-
+
//! \writeme
SurfaceNew();
//! \writeme
int get_w()const;
-
+
//! \writeme
int get_h()const;
-
+
//! \writeme
void set_wh(int w, int h);
//! Should only be used in certain circumstances
Color get_color(int x, int y)const;
-
+
//! \writeme
void lock();
-
+
//! \writeme
void unlock();
-
+
//! \writeme
bool trylock();
-
+
//! \writeme
ChannelLock lock_channel(Channel chan);
//! \writeme
bool is_channel_defined(Channel chan)const;
-
+
//! \writeme
bool get_premult()const;
//! \writeme
void set_premult();
-
+
/*
-- ** -- S T A T I C F U N C T I O N S -------------------------------------
*/
//! Converts an old Surface to a SurfaceNew
static Handle create(const Surface&);
- //! Dupilcates a surface
+ //! Duplicates a surface
static Handle create(HandleConst);
//! Creates a cropped copy of a surface
static Handle crop(HandleConst, int x, int y, int w, int h);
-
+
static void blit(
Handle dest,
int x_dest,
float amount=1.0,
Color::BlendMethod bm=Color::BLEND_COMPOSITE
);
-
+
static void blit(
Handle dest,
int x_dest,
float amount=1.0,
Color::BlendMethod bm=Color::BLEND_COMPOSITE
);
-
-
+
+
static void chan_mlt(ChannelLock& dest, float x);
static void chan_mlt(ChannelLock& dest, const ChannelLockConst& x);
-- ** -- T Y P E S -----------------------------------------------------------
*/
-public:
+public:
/*
-- ** -- D A T A -------------------------------------------------------------
*/
protected:
-
+
//! \writeme
SurfaceNew::Handle surface_;
-
+
//! \writeme
etl::reference_counter ref_count_;
//! \writeme
bool data_ptr_checked_out_;
-
+
/*
-- ** -- C O N S T R U C T O R S ---------------------------------------------
*/
public:
SurfaceChannelLockConst();
-
+
//! \writeme
~SurfaceChannelLockConst();
*/
public:
-
+
//! \writeme
SurfaceChannel get_channel()const;
-
+
//! \writeme
int get_w()const;
-
+
//! \writeme
int get_h()const;
-
+
//! \writeme
float get_value(int x, int y);
-
+
//! \writeme
const float* get_data_ptr()const;
-
+
//! \writeme
int get_data_ptr_stride()const;
-
+
//! Releases the pointer obtained with get_data_ptr()
void release_data_ptr()const;
-
+
//! \writeme
operator bool()const;
}; // END of class SurfaceChannelLockConst
friend class SurfaceNew;
using SurfaceChannelLock::get_data_ptr;
-
+
/*
-- ** -- T Y P E S -----------------------------------------------------------
*/
-public:
+public:
/*
-- ** -- D A T A -------------------------------------------------------------
*/
private:
-
+
/*
-- ** -- C O N S T R U C T O R S ---------------------------------------------
*/
//! \writeme
void clear();
-
+
//! \writeme
void fill(float value);
-
+
//! \writeme
void set_value(int x, int y, float v);