#include "CanvasElement.hxx"
#include <simgear/canvas/canvas_fwd.hxx>
-#include <simgear/math/SGRect.hxx>
+#include <simgear/misc/CSSBorder.hxx>
#include <osg/Texture2D>
namespace simgear
{
+namespace HTTP { class Request; }
namespace canvas
{
public Element
{
public:
+ static const std::string TYPE_NAME;
+ static void staticInit();
+
/**
* @param node Property node containing settings for this image:
* rect/[left/right/top/bottom] Dimensions of source
*/
Image( const CanvasWeakPtr& canvas,
const SGPropertyNode_ptr& node,
- const Style& parent_style,
+ const Style& parent_style = Style(),
Element* parent = 0 );
virtual ~Image();
const SGRect<float>& getRegion() const;
- bool handleMouseEvent(MouseEventPtr event);
+ bool handleEvent(EventPtr event);
protected:
enum ImageAttributes
{
SRC_RECT = LAST_ATTRIBUTE << 1, // Source image rectangle
- DEST_SIZE = SRC_RECT << 1 // Element size
- };
-
- union CSSOffsets
- {
- float val[4];
- struct { float t, r, b, l; };
- };
-
- union CSSOffsetsTypes
- {
- bool rel[4];
- struct { bool t_rel, r_rel, b_rel, l_rel; };
- };
-
- struct CSSBorder
- {
- CSSBorder():
- valid(false)
- {}
-
- CSSOffsets getRelOffsets(const SGRect<int>& dim) const;
- CSSOffsets getAbsOffsets(const SGRect<int>& dim) const;
-
- CSSOffsets offsets;
- CSSOffsetsTypes types;
- std::string keyword;
- bool valid;
+ DEST_SIZE = SRC_RECT << 1, // Element size
+ SRC_CANVAS = DEST_SIZE << 1
};
virtual void childChanged(SGPropertyNode * child);
void setQuad(size_t index, const SGVec2f& tl, const SGVec2f& br);
void setQuadUV(size_t index, const SGVec2f& tl, const SGVec2f& br);
- CSSBorder parseSideOffsets(const std::string& str) const;
+ void handleImageLoadDone(HTTP::Request*);
osg::ref_ptr<osg::Texture2D> _texture;
// TODO optionally forward events to canvas