//+----------------------------------------------------------------------------+
//| Description:  Magic Set Editor - Program to make Magic (tm) cards          |
//| Copyright:    (C) 2001 - 2008 Twan van Laarhoven and "coppro"              |
//| License:      GNU General Public License 2 or later (see file COPYING)     |
//+----------------------------------------------------------------------------+

#ifndef HEADER_RENDER_VALUE_IMAGE
#define HEADER_RENDER_VALUE_IMAGE

// ----------------------------------------------------------------------------- : Includes

#include <util/prec.hpp>
#include <render/value/viewer.hpp>
#include <data/field/image.hpp>

DECLARE_POINTER_TYPE(AlphaMask);

// ----------------------------------------------------------------------------- : ImageValueViewer

/// Viewer that displays an image value
class ImageValueViewer : public ValueViewer {
  public:
	DECLARE_VALUE_VIEWER(Image) : ValueViewer(parent,style) {}
	
	virtual void draw(RotatedDC& dc);
	
	virtual bool containsPoint(const RealPoint& p) const;
	
	virtual void onValueChange();
	virtual void onStyleChange(int);
			
  private:
	Bitmap bitmap; ///< Cached bitmap
	RealSize size; ///< Size of cached bitmap
	int    angle;  ///< Angle of cached bitmap
	int    is_default; ///< Is the default placeholder image used?
	mutable AlphaMaskP alpha_mask;
	
	void loadMask(const Rotation& rot) const;
	
	/// Generate a placeholder image
	static Bitmap imagePlaceholder(const Rotation& rot, UInt w, UInt h, const Image& background, bool editing);
	
	/// Draws a border around the field
	void drawFieldBorder(RotatedDC& dc);
};

// ----------------------------------------------------------------------------- : EOF
#endif
