Bitte kurz warten...

AmigaOS Programmierung

Farbverlauf unter AmigaOS 4

Wie man auf einfachste Art und Weise einen Farbverlauf unter AmigaOS 4.x zeichnet, soll der folgende Quellcode zeigen:

//Headerdateien
#include <stdio.h>
#include <proto/exec.h>
#include <proto/dos.h>
#include <proto/intuition.h>
 
//Pointer auf die Library im Speicher und auf das entsprechende Interface
struct Library *IntuitionBase;
struct IntuitionIFace *IIntuition;
 
//Main Funktion. Kann alles, macht alles und ist immer dran schuld!
int main(int argc, char **argv)
{
struct Window *window=NULL;
struct Screen *screen = NULL;
struct GradientSpec gradspec;
struct IBox domain;
struct DrawInfo *drawinfo;
 
//Intuition.library öffnen
IntuitionBase = IExec->OpenLibrary("intuition.library", 50);
IIntuition = (struct IntuitionIFace *)IExec->GetInterface(IntuitionBase, "main", 1, NULL);
 
//Fenster mit einer Auflösung von 200x200 öffnen
window = IIntuition->OpenWindowTags(NULL,
WA_Width,200,
WA_Height,200,
TAG_DONE,0);
 
//Informationen des Bildschirms holen
screen = IIntuition->LockPubScreen(NULL);
drawinfo = IIntuition->GetScreenDrawInfo(screen);
IIntuition->UnlockPubScreen(NULL,screen);
 
//--------------------------------------------------
// Farbverlauf erstellen
//--------------------------------------------------
memset(&gradspec,0,sizeof(gradspec)); //Speicherbereich reservieren
//Rot-Wert (Start)
gradspec.Specs.Abs.RGBStart[0] = 0; //0-255
//Grün-Wert (Start)
gradspec.Specs.Abs.RGBStart[1] = 255; //0-255
//Blau-Wert (Start)
gradspec.Specs.Abs.RGBStart[2] = 0; //0-255
 
//Rot-Wert (Ende)
gradspec.Specs.Abs.RGBEnd[0] = 0; //0-255
//Grün-Wert (Ende)
gradspec.Specs.Abs.RGBEnd[1] = 0; //0-255
//Blau-Wert (Ende)
gradspec.Specs.Abs.RGBEnd[2] = 255; //0-255
 
//Winkel des Farbverlaufes
gradspec.Direction = IIntuition->DirectionVector(0); //0-359
 
//Modus
gradspec.Mode = GRADMODE_COLOR;
 
//Zeichne den Farbverlauf
IIntuition->DrawGradient(window->RPort, 0, 0, window->Width, window->Height, NULL, 0L, &gradspec,drawinfo);
//--------------------------------------------------
// Ende Farbverlauf
//--------------------------------------------------
 
//Eine Sekunde warten
IDOS->Delay(100);
 
//Informationen des Bildschirms freigeben
IIntuition->FreeDrawInfo(screen,drawinfo);
 
//Fenster schließen
IIntuition->CloseWindow(window);
 
//Library schließen
IExec->DropInterface((struct Interface *)IIntuition);
IExec->CloseLibrary ((struct Library *)IntuitionBase);
 
return 0;
}
Aufgrund der besseren Lesbarkeit habe ich in diesem Quellcode auf die Sicherheitsabfragen verzichtet. Diese sollten später im Programm eingebaut werden. Ich möchte an dieser Stelle lediglich die Funktionen zum Erzeugen des Farbverlaufes zeigen.
 
Fenster mit Farbverlauf unter AmigaOS 4