
#ifndef $APPNAMEUC$_IMPL_H
#define $APPNAMEUC$_IMPL_H

struct SDL_Surface;

/**
 * @short This class is used for painting and supports some effects.
 * Note: This is used in Blurscope. Feel free to remove this and
 *       implement your own drawing routines!
 */
template<class Pixel> class Bitmap
{
public:
    int width, height, extra;
    Pixel *data;

    Bitmap(int e=0) : extra(e), data(0) { }
    ~Bitmap() { delete[] data; }

    inline void addPixel(int x, int y, int bright1, int bright2);
    void addVertLine(int x, int y, int y2, int br1, int br2);
    
    void fadeStar();
    
    void size(int w,int h)
    {
        delete[] data;
        width = w;
        height = h;
        data = new Pixel[w*h+extra];
        clear();
    }

    void clear()
    {
        memset(data,0,sizeof(Pixel)*(width*height+extra));
    }
};

/**
 * @short This class does:
 * o set up view
 * o drawing routines.
 */
class $APPNAME$View
{
public:
    $APPNAME$View(int in);
    ~$APPNAME$View();
    
protected:
    /** Screen initialization with SDL. Note, that you can initialize OpenGL with SDL!  */
    void startVideo();
    /** SDL event queue  */
    void checkInput();
    /** Used in Blurscope. Feel free to implement your own drawing routines!  */
    void setupPalette(double dummy=0.0);

    /** Draw everything.  */
    void repaint();

private:
    /** used for pipelining  */
    int mFd;

    /** SDL screen surface  */
    SDL_Surface *surface;
    Bitmap<unsigned short> outputBmp;
    
    bool fullscreen;
    int width;
    int height;
};

#endif // $APPNAMEUC$_IMPL_H

