-/* === S I N F G =========================================================== */
+/* === S Y N F I G ========================================================= */
/*! \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 Robert B. Quattlebaum Jr.
+** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
**
-** This software and associated documentation
-** are CONFIDENTIAL and PROPRIETARY property of
-** the above-mentioned copyright holder.
+** This package is free software; you can redistribute it and/or
+** modify it under the terms of the GNU General Public License as
+** published by the Free Software Foundation; either version 2 of
+** the License, or (at your option) any later version.
**
-** You may not copy, print, publish, or in any
-** other way distribute this software without
-** a prior written agreement with
-** the copyright holder.
+** This package is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+** General Public License for more details.
** \endlegal
*/
/* ========================================================================= */
/* === S T A R T =========================================================== */
-#ifndef __SINFG_SURFACENEW_H
-#define __SINFG_SURFACENEW_H
+#ifndef __SYNFIG_SURFACENEW_H
+#define __SYNFIG_SURFACENEW_H
/* === H E A D E R S ======================================================= */
/* === C L A S S E S & S T R U C T S ======================================= */
-namespace sinfg {
+namespace synfig {
class Surface;
class SurfaceChannelLock;
{
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 -------------------------------------
*/
//! 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);
}; // END of class ChannelLock
-}; // END of namespace sinfg
+}; // END of namespace synfig
/* === E N D =============================================================== */