diff window/picture.h @ 52:15a18fbe6f21

* Known bugs added to the README * Code cleaning (0 -> NULL when needed, indentation, spaces, ...)
author thib
date Sat, 18 Apr 2009 18:35:39 +0000
parents 5ae5533b3a9a
children e16e13d8cd68
line wrap: on
line diff
--- a/window/picture.h
+++ b/window/picture.h
@@ -28,8 +28,8 @@
 #ifndef __PICTURE__
 #define __PICTURE__
 
-#include<vector>
-#include<list>
+#include <vector>
+#include <list>
 #ifdef HAVE_CONFIG_H
 #  include "config.h"
 #endif
@@ -46,208 +46,212 @@ namespace Event {
 
 /* PicBase の内容をイベントと連動させるためのインターフェース */
 class PicAnm {
-public:
-	typedef std::vector<PicBase*>::iterator iterator;
-	std::vector<PicBase*> pic;
-	PicAnm(PicBase* pic);
-	PicAnm(std::vector<PicBase*> pic);
-	virtual ~PicAnm();
+	public:
+		typedef std::vector<PicBase*>::iterator iterator;
+		std::vector<PicBase*> pic;
+		PicAnm(PicBase* pic);
+		PicAnm(std::vector<PicBase*> pic);
+		virtual ~PicAnm();
 };
 
 class PicBase {
-	friend class PicContainer;
-	friend class PicWidget;
+	private:
+		friend class PicContainer;
+		friend class PicWidget;
 
-	typedef std::list<PicBase*> List;
-	typedef std::list<PicBase*>::iterator iterator;
+		typedef std::list<PicBase*> List;
+		typedef std::list<PicBase*>::iterator iterator;
 
-	PicContainer* parent;
-	class PicWidget* widget;
-	Rect rel_pos; // relative position to the parent
-	Rect rel_solid_area; // solid area(not alpha-blended) to the parent
-	Rect clip_area; // clip area on the parent
-	bool is_hidden;
-	bool is_hidden_now;
-	bool is_cached;
-public:
-	enum { /*MOBILE=1,*/ CACHE_BACK=2, /* CACHE_SELF=4,*/ NO_PICTURE=8, SOLID = 16, SURFACE_FREE = 32, FIT_SURFACE = 64, BLIT_SATURATE = 128, BLIT_MULTIPLY = 256, ALPHA_FREE=512};
-private:
-	int attribute;
+		PicContainer* parent;
+		class PicWidget* widget;
+		Rect rel_pos; // relative position to the parent
+		Rect rel_solid_area; // solid area(not alpha-blended) to the parent
+		Rect clip_area; // clip area on the parent
+		bool is_hidden;
+		bool is_hidden_now;
+		bool is_cached;
+	public:
+		enum { /*MOBILE=1,*/ CACHE_BACK=2, /* CACHE_SELF=4,*/ NO_PICTURE=8, SOLID = 16, SURFACE_FREE = 32, FIT_SURFACE = 64, BLIT_SATURATE = 128, BLIT_MULTIPLY = 256, ALPHA_FREE=512};
+	private:
+		int attribute;
 
-	PicRoot* root;
-	iterator z_pos;
-	int surface_x, surface_y, surface_w, surface_h;
-	Surface* surface_back;
-	Surface* surface_own;
-	const unsigned char* surface_alpha;
-	Rect surface_alpha_rect;
-	int distance_root;
+		PicRoot* root;
+		iterator z_pos;
+		int surface_x, surface_y, surface_w, surface_h;
+		Surface* surface_back;
+		Surface* surface_own;
+		const unsigned char* surface_alpha;
+		Rect surface_alpha_rect;
+		int distance_root;
 
-	void Blit(const Rect& rpos);
-	void Blit(void) {
-		is_cached = true;
-		Blit(Rect(0, 0, rel_pos.width(), rel_pos.height()));
-	}
-	/*
-	** rpos : relative position to the widget
-	** ppos : relative position to the parent
-	**	ppos = parent_pos(rpos)
-	**	rpos = child_pos(ppos, parent->this_widget)
-	** cpos : relative position to a child widget
-	**	cpos = child_pos(rpos, a_child_widget)
-	** apos : absolute position in the screen
-	**	apos = QueryAbsPos(rpos);
-	**	or
-	**	Rect ppos = rel_pos;
-	**	apos = parent->QueryAbsPos(ppos);
-	**		the latter form is used for 'rel_pos',
-	**		because rel_pos is defined as the relative position to the parent
-	*/
-	Rect QueryAbsPos(Rect& ppos); // この picture 内の rel_pos を表示するのに実際に必要な絶対座標を得る
+		void Blit(const Rect& rpos);
+		void Blit(void) {
+			is_cached = true;
+			Blit(Rect(0, 0, rel_pos.width(), rel_pos.height()));
+		}
+		/*
+		** rpos : relative position to the widget
+		** ppos : relative position to the parent
+		**	ppos = parent_pos(rpos)
+		**	rpos = child_pos(ppos, parent->this_widget)
+		** cpos : relative position to a child widget
+		**	cpos = child_pos(rpos, a_child_widget)
+		** apos : absolute position in the screen
+		**	apos = QueryAbsPos(rpos);
+		**	or
+		**	Rect ppos = rel_pos;
+		**	apos = parent->QueryAbsPos(ppos);
+		**		the latter form is used for 'rel_pos',
+		**		because rel_pos is defined as the relative position to the parent
+		*/
+		Rect QueryAbsPos(Rect& ppos); // この picture 内の rel_pos を表示するのに実際に必要な絶対座標を得る
 
-	static Rect child_pos(Rect rpos, PicBase* child) { /* return 'cpos' */
-		rpos.intersect(child->rel_pos);
-		rpos.rmove( -(child->rel_pos.lx), -(child->rel_pos.ty));
-		return rpos;
-	}
-	Rect parent_pos(Rect rpos) { /* return 'ppos' */
-		rpos.rmove(rel_pos.lx, rel_pos.ty);
-		rpos.intersect(rel_pos);
-		return rpos;
-	}
-	void SetEventWidget(class PicWidget* widget);
-public:
-	PicBase(const Rect& rel_pos, PicContainer* parent, int attr);
-	virtual ~PicBase();
-	void InitRoot(PicRoot* r) { root = r;} // only called from PicRoot::PicRoot
+		static Rect child_pos(Rect rpos, PicBase* child) { /* return 'cpos' */
+			rpos.intersect(child->rel_pos);
+			rpos.rmove( -(child->rel_pos.lx), -(child->rel_pos.ty));
+			return rpos;
+		}
+		Rect parent_pos(Rect rpos) { /* return 'ppos' */
+			rpos.rmove(rel_pos.lx, rel_pos.ty);
+			rpos.intersect(rel_pos);
+			return rpos;
+		}
+		void SetEventWidget(class PicWidget* widget);
+	public:
+		PicBase(const Rect& rel_pos, PicContainer* parent, int attr);
+		virtual ~PicBase();
+		void InitRoot(PicRoot* r) { root = r;} // only called from PicRoot::PicRoot
 
-	void ReBlit(const Rect& rpos);
-	void ReBlit(void) { ReBlit(Rect(0, 0, rel_pos.width(), rel_pos.height()));}
-	void ExecReBlit(const Rect& rpos);
-	void SimpleBlit(Surface* screen);
+		void ReBlit(const Rect& rpos);
+		void ReBlit(void) { ReBlit(Rect(0, 0, rel_pos.width(), rel_pos.height()));}
+		void ExecReBlit(const Rect& rpos);
+		void SimpleBlit(Surface* screen);
 
-	virtual void RMove(int add_x, int add_y);
-	void Move(int new_rx, int new_ry);
-	#define ZMOVE_TOP ((PicBase*)0xffff00ff) /* 最前面へ */
-	#define ZMOVE_BOTTOM ((PicBase*)0xffff0fff) /* 最背面へ */
-	void ZMove(PicBase* back); // back の前に移動(back と自分は同じ親を持つこと)
+		virtual void RMove(int add_x, int add_y);
+		void Move(int new_rx, int new_ry);
+		#define ZMOVE_TOP ((PicBase*)0xffff00ff) /* 最前面へ */
+		#define ZMOVE_BOTTOM ((PicBase*)0xffff0fff) /* 最背面へ */
+		void ZMove(PicBase* back); // back の前に移動(back と自分は同じ親を持つこと)
 
-	void SetSurface(Surface* new_surface, int x, int y, int attribute = 0);
-	void SetSurface(const char* new_surface, int x, int y);
-	void SetSurfacePos(int x, int y);
-	int SurfacePosX(void);
-	int SurfacePosY(void);
-	void SetSurfaceRect(const Rect& r);
-	void SetSurfaceAlpha(const unsigned char* alpha, const Rect& rect);
-	void SetSurfaceAlphaFile(const char* file);
-	void SetSurfaceColorKey(int r, int g, int b);
-	void SetSurfaceAttribute(int attribute);
-	void SetSurfaceFreeFlag(bool flag=true);
-	void SetClipArea(const Rect& r);
+		void SetSurface(Surface* new_surface, int x, int y, int attribute = 0);
+		void SetSurface(const char* new_surface, int x, int y);
+		void SetSurfacePos(int x, int y);
+		int SurfacePosX(void);
+		int SurfacePosY(void);
+		void SetSurfaceRect(const Rect& r);
+		void SetSurfaceAlpha(const unsigned char* alpha, const Rect& rect);
+		void SetSurfaceAlphaFile(const char* file);
+		void SetSurfaceColorKey(int r, int g, int b);
+		void SetSurfaceAttribute(int attribute);
+		void SetSurfaceFreeFlag(bool flag=true);
+		void SetClipArea(const Rect& r);
 
-	void hide(void);
-	void show_all(void);
-	void show(void);
+		void hide(void);
+		void show_all(void);
+		void show(void);
 
-	int PosX(void) const { return rel_pos.lx;}
-	int PosY(void) const { return rel_pos.ty;}
-	int Width(void) const { return rel_pos.width();}
-	int Height(void) const { return rel_pos.height();}
-	int DistanceRoot(void) const { return distance_root; }
-	bool IsHidden(void) { return is_hidden_now;}
-	bool IsParent(PicBase* pic);
+		int PosX(void) const { return rel_pos.lx;}
+		int PosY(void) const { return rel_pos.ty;}
+		int Width(void) const { return rel_pos.width();}
+		int Height(void) const { return rel_pos.height();}
+		int DistanceRoot(void) const { return distance_root; }
+		bool IsHidden(void) { return is_hidden_now;}
+		bool IsParent(PicBase* pic);
 
-	std::vector<PicAnm*> anm;
-	void ClearAnm(void);
+		std::vector<PicAnm*> anm;
+		void ClearAnm(void);
 };
 
 class PicContainer : public PicBase {
-	friend class PicBase;
+	private:
+		friend class PicBase;
 
-	void BlitBack(iterator z, Rect rpos); // z より後ろの領域を描画
-	void BlitFront(iterator z, Rect rpos); // z を含め、zより前の領域を描画
-	void BlitChildren(Rect rpos);
-	void BlitSelf(Rect rpos);
-	void BlitSelf(void) {
-		is_cached = true;
-		BlitSelf(Rect(0, 0, rel_pos.width(), rel_pos.height()));
-	}
-public:
-	List children;
-private:
+		void BlitBack(iterator z, Rect rpos); // z より後ろの領域を描画
+		void BlitFront(iterator z, Rect rpos); // z を含め、zより前の領域を描画
+		void BlitChildren(Rect rpos);
+		void BlitSelf(Rect rpos);
+		void BlitSelf(void) {
+			is_cached = true;
+			BlitSelf(Rect(0, 0, rel_pos.width(), rel_pos.height()));
+		}
+	public:
+		List children;
+	private:
 
-	void set_showflag(void);
-	void set_nowhiddenflag(bool is_hide);
-public:
-	PicContainer(const Rect& rel_pos, PicContainer* parent, int attr);
-	~PicContainer();
-	PicBase* create_leaf(const Rect& rel_pos, int attr);
-	PicContainer* create_node(const Rect& rel_pos, int attr);
-	PicRoot& Root(void) { return *root;}
-	void RMove(int add_x, int add_y);
+		void set_showflag(void);
+		void set_nowhiddenflag(bool is_hide);
+	public:
+		PicContainer(const Rect& rel_pos, PicContainer* parent, int attr);
+		~PicContainer();
+		PicBase* create_leaf(const Rect& rel_pos, int attr);
+		PicContainer* create_node(const Rect& rel_pos, int attr);
+		PicRoot& Root(void) { return *root;}
+		void RMove(int add_x, int add_y);
 };
 
 typedef enum { NO_MASK, ALPHA_MASK, COLOR_MASK} MaskType;
 struct PicRoot {
-	class PicContainer* root;
-private:
-	class FileToSurface* ftosurface;
-	struct UpdateItem {
-		PicBase* pic;
-		Rect rpos;
-		Rect apos;
-		static bool less(const UpdateItem&, const UpdateItem&);
-		UpdateItem(PicBase* p, const Rect& _rpos, const Rect& _apos) : pic(p), rpos(_rpos), apos(_apos) {}
-	};
-	std::vector<UpdateItem> update_rects;
+	public:
+		class PicContainer* root;
+	private:
+		class FileToSurface* ftosurface;
+		struct UpdateItem {
+			PicBase* pic;
+			Rect rpos;
+			Rect apos;
+			static bool less(const UpdateItem&, const UpdateItem&);
+			UpdateItem(PicBase* p, const Rect& _rpos, const Rect& _apos) : pic(p), rpos(_rpos), apos(_apos) {}
+		};
+		std::vector<UpdateItem> update_rects;
 
-	friend class FileToSurface;
-	void DeleteSurfaceImpl(Surface* s) const;
-public:
-	void Update(PicBase* pic, const Rect& rpos, const Rect& apos);
-	void DeleteUpdatePic(PicBase* pic);
-	void ExecUpdate(void);
-	void SetWindowCaption(const char* caption);
+		friend class FileToSurface;
+		void DeleteSurfaceImpl(Surface* s) const;
+	public:
+		void Update(PicBase* pic, const Rect& rpos, const Rect& apos);
+		void DeleteUpdatePic(PicBase* pic);
+		void ExecUpdate(void);
+		void SetWindowCaption(const char* caption);
 
-	// Surface 操作
-	Surface* NewSurfaceFromRGBAData(int w, int h, char* data, MaskType with_mask) const; // data は malloc されたものであること(SDLの内部仕様)
-	Surface* NewSurface(int w, int h, MaskType with_mask) const;
-	Surface* NewSurface(const char* filename, MaskType with_mask = ALPHA_MASK);
-	Surface* RotZoomSurface(Surface* from, double zoom, double rotate_angle);
-	void DeleteSurface(Surface* s);
-	void BlitSurface(Surface* src, const Rect& src_rpos, const unsigned char* alpha, const Rect& alpha_r,  Surface* dest, const Rect& dest_rpos, int attribute) const;
-	void BlitSurface(Surface* src, const Rect& src_rpos, Surface* dest, const Rect& dest_rpos) const {
-		BlitSurface(src, src_rpos, 0, Rect(0,0), dest, dest_rpos, 0);
-	}
-	static bool with_mask(Surface* src);
+		// Surface 操作
+		Surface* NewSurfaceFromRGBAData(int w, int h, char* data, MaskType with_mask) const; // data は malloc されたものであること(SDLの内部仕様)
+		Surface* NewSurface(int w, int h, MaskType with_mask) const;
+		Surface* NewSurface(const char* filename, MaskType with_mask = ALPHA_MASK);
+		Surface* RotZoomSurface(Surface* from, double zoom, double rotate_angle);
+		void DeleteSurface(Surface* s);
+		void BlitSurface(Surface* src, const Rect& src_rpos, const unsigned char* alpha, const Rect& alpha_r,  Surface* dest, const Rect& dest_rpos, int attribute) const;
+		void BlitSurface(Surface* src, const Rect& src_rpos, Surface* dest, const Rect& dest_rpos) const {
+			BlitSurface(src, src_rpos, 0, Rect(0,0), dest, dest_rpos, 0);
+		}
+		static bool with_mask(Surface* src);
 
-	Surface* surface;
-	Surface* hw_surface;
-	int width, height;
-	PicRoot(void);
-	~PicRoot();
-	PicBase* create_leaf(const Rect& apos, int attr) {
-		return root->create_leaf(apos, attr);
-	}
-	PicContainer* create_node(const Rect& apos, int attr) {
-		return root->create_node(apos, attr);
-	}
+		Surface* surface;
+		Surface* hw_surface;
+		int width, height;
+		PicRoot(void);
+		~PicRoot();
+		PicBase* create_leaf(const Rect& apos, int attr) {
+			return root->create_leaf(apos, attr);
+		}
+		PicContainer* create_node(const Rect& apos, int attr) {
+			return root->create_node(apos, attr);
+		}
 };
 
 class PicWidget {
-	PicBase* pic; /* 本来継承するべきだが、遅延初期化したいので instance */
-public:
-	PicWidget(void);
-	virtual ~PicWidget();
-	void SetPic(PicBase* new_pic);
-	PicBase* Pic(void);
-	PicContainer* PicNode(void);
-	virtual void activate(void);
-	virtual void deactivate(void);
-	virtual void SetRegion(const Rect& apos);
-	void show(void);
-	void hide(void);
-	void show_all(void);
+	private:
+		PicBase* pic; /* 本来継承するべきだが、遅延初期化したいので instance */
+	public:
+		PicWidget(void);
+		virtual ~PicWidget();
+		void SetPic(PicBase* new_pic);
+		PicBase* Pic(void);
+		PicContainer* PicNode(void);
+		virtual void activate(void);
+		virtual void deactivate(void);
+		virtual void SetRegion(const Rect& apos);
+		void show(void);
+		void hide(void);
+		void show_all(void);
 };
 
 #endif /* PICTURE */