#ifndef Rahmen_H
#define Rahmen_H

#include "Zeichnung.h"

namespace Framework
{
    class Bild; // aus Bild.h

    class Rahmen : public Zeichnung
    {
    protected:
        int br;
        int farbe;
        bool alpha;

    public:
        // Konstruktor 
        __declspec( dllexport ) Rahmen();
        // Destruktor
        __declspec( dllexport ) virtual ~Rahmen();
        // Setzt die Breite des Rahmens
        //  br: Die Breite in Pixeln
        __declspec( dllexport ) void setRamenBreite( int br );
        // Gibt die Breite des Rahmens in Pixeln zur�ck
        __declspec( dllexport ) int getRBreite() const;
        // Legt fest, ob beim zeichnen alpha blending verwendet werden soll
        //  a: 1, falls alpha blending verwendet werden soll
        __declspec( dllexport ) void setAlpha( bool a );
        // Setzt die Fare des Rahmens
        //  f: Die Farbe im A8R8G8B8 Format
        __declspec( dllexport ) void setFarbe( int f );
        // Gibt die Farbe des Rahmens im A8R8G8B8 Format zur�ck
        __declspec( dllexport ) int getFarbe() const;
        // Gibt zur�ck, ob der Rahmen mit Alpha Blending gezeichnet wird
        __declspec( dllexport ) bool hatAlpha() const;
    };

    // Eine Zeichnung des 2D GUI Frameworks, die einen Linienrahmen um ein Rechteck zeichnet
    class LRahmen : public Rahmen
    {
    private:

    public:
        // Konstruktor 
        __declspec( dllexport ) LRahmen();
		// Destruktor
		__declspec( dllexport ) virtual ~LRahmen();
        // Zeichnet den Rahmen
        //  zRObj: Das Bild, in den der Rahmen gezeichnet werden soll
        __declspec( dllexport ) void render( Bild &zRObj ) override;
        // Kopiert den Rahmen, so dass er ohne auswirkungen auf das Original ver�ndert werden kann
        __declspec( dllexport ) Zeichnung *dublizieren() const override;
    };

    class Rahmen3D : public Rahmen
    {
    public:
        // Konstruktor 
        __declspec( dllexport ) Rahmen3D();
        // Destruktor
        __declspec( dllexport ) virtual ~Rahmen3D();
        // Zeichnet den Rahmen
        //  zRObj: Das Bild, in den der Rahmen gezeichnet werden soll
        __declspec( dllexport ) void render( Bild &zRObj ) override;
        // Kopiert den Rahmen, so dass er ohne auswirkungen auf das Original ver�ndert werden kann
        __declspec( dllexport ) Zeichnung *dublizieren() const override;
    };
}

#endif