2013-06-02 15:08:32 +00:00
# ifndef _IMAGECOMPONENT_H_
# define _IMAGECOMPONENT_H_
2012-08-02 01:43:55 +00:00
2013-05-13 19:53:28 +00:00
# include "../platform.h"
# include GLHEADER
2013-06-02 15:08:32 +00:00
# include "../GuiComponent.h"
2012-08-02 01:43:55 +00:00
# include <string>
2012-08-29 18:53:53 +00:00
# include <FreeImage.h>
2013-05-13 19:53:28 +00:00
2012-08-02 01:43:55 +00:00
2013-06-02 15:08:32 +00:00
class ImageComponent : public GuiComponent
2012-08-02 01:43:55 +00:00
{
public :
2012-09-07 21:44:07 +00:00
//Creates a new GuiImage at the given location. If given an image, it will be loaded. If maxWidth and/or maxHeight are nonzero, the image will be
2013-06-02 21:05:29 +00:00
//resized to fit. If only one axis is specified, the other will be set in accordance with the image's aspect ratio. If allowUpscale is false,
2012-09-07 21:44:07 +00:00
//the image will only be downscaled, never upscaled (the image's size must surpass at least one nonzero bound).
2013-06-02 21:05:29 +00:00
ImageComponent ( Window * window , int offsetX = 0 , int offsetY = 0 , std : : string path = " " , unsigned int maxWidth = 0 , unsigned int maxHeight = 0 , bool allowUpscale = false ) ;
2013-06-02 15:08:32 +00:00
virtual ~ ImageComponent ( ) ;
2012-08-02 01:43:55 +00:00
2012-09-07 21:44:07 +00:00
void setImage ( std : : string path ) ; //Loads the image at the given filepath.
void setOrigin ( float originX , float originY ) ; //Sets the origin as a percentage of this image (e.g. (0, 0) is top left, (0.5, 0.5) is the center)
void setTiling ( bool tile ) ; //Enables or disables tiling. Must be called before loading an image or resizing will be weird.
2013-06-02 21:05:29 +00:00
void setResize ( unsigned int width , unsigned int height , bool allowUpscale ) ;
2012-08-02 01:43:55 +00:00
2012-10-07 22:25:51 +00:00
void setFlipX ( bool flip ) ;
void setFlipY ( bool flip ) ;
2012-09-07 21:44:07 +00:00
unsigned int getWidth ( ) ; //Returns render width in pixels. May be different than actual texture width.
unsigned int getHeight ( ) ; //Returns render height in pixels. May be different than actual texture height.
2012-08-09 21:19:07 +00:00
2012-10-10 13:51:48 +00:00
bool hasImage ( ) ;
2012-09-07 21:44:07 +00:00
//Image textures will be deleted on renderer deinitialization, and recreated on reinitialization (if mPath is not empty).
2013-04-10 17:29:07 +00:00
void init ( ) ;
void deinit ( ) ;
2012-09-04 16:45:16 +00:00
2013-04-08 16:52:40 +00:00
unsigned char getOpacity ( ) ;
void setOpacity ( unsigned char opacity ) ;
2013-06-02 15:08:32 +00:00
2013-06-02 19:34:50 +00:00
protected :
void onRender ( ) ;
2012-08-02 01:43:55 +00:00
private :
2013-06-02 21:05:29 +00:00
Vector2 < unsigned int > mSize ;
Vector2 < unsigned int > mTargetSize ;
Vector2 < unsigned int > mTextureSize ;
Vector2f mOrigin ;
bool mAllowUpscale , mTiled , mFlipX , mFlipY ;
2012-08-09 21:19:07 +00:00
2013-04-08 16:52:40 +00:00
unsigned char mOpacity ;
2012-08-10 02:17:48 +00:00
void loadImage ( std : : string path ) ;
2012-10-05 20:04:12 +00:00
void resize ( ) ;
2012-10-10 15:21:03 +00:00
void buildImageArray ( int x , int y , GLfloat * points , GLfloat * texs , float percentageX = 1 , float percentageY = 1 ) ; //writes 12 GLfloat points and 12 GLfloat texture coordinates to a given array at a given position
2012-10-17 17:15:58 +00:00
void drawImageArray ( GLfloat * points , GLfloat * texs , GLubyte * colors , unsigned int count = 6 ) ; //draws the given set of points and texture coordinates, number of coordinate pairs may be specified (default 6)
2012-08-29 18:53:53 +00:00
void unloadImage ( ) ;
2012-08-10 02:17:48 +00:00
std : : string mPath ;
2012-08-09 21:19:07 +00:00
2012-08-29 18:53:53 +00:00
GLuint mTextureID ;
2012-08-02 01:43:55 +00:00
} ;
# endif