
/*
\\    Prop.c - demonstriert Proportional-Gadgets
*/
#include "TOOL.h"
#define GS (0xFFFF/32)                 /* Gadget mit 32 'Schieberstellungen' */
#define VP &ACTIVE_SCREEN->ViewPort                   /* Zeiger auf ViewPort */

struct Window *win;
struct Image image;
struct PropInfo PInfo={
    FREEHORIZ|AUTOKNOB, GS*16,0, GS,0, 0,0,0,0,0,0
};

VOID error(Meldung)
    STRPTR Meldung;
{
    if(Meldung) printf("Kann %s nicht öffnen!?!\n",Meldung);
    if(win)     CloseWindow(win);
    CloseLib();
    exit(0);
}

VOID main()
{
    struct Gadget gad;

    ULONG class=0,idcmp=MOUSEMOVE|CLOSEWINDOW,
          flags=WINDOWCLOSE|WINDOWDEPTH|WINDOWDRAG|WINDOWSIZING|ACTIVATE;
    SHORT i, ok=0, r[4],g[4],b[4], wert, rot,gruen,blau;

    if(OpenLib()) error("Lib's");
    if(!(win=GetWindow(NULL,0,0,160,60,idcmp,flags,"Re-Darker",NULL)))
        error("Window");
    win->MinWidth=win->MinHeight=60;
    GetGadget(&gad,win,10,20,-20,-35,GRELWIDTH|GRELHEIGHT,FOLLOWMOUSE,
                                     PROPGADGET,&image,NULL,NULL,&PInfo,0);
    for(i=0;i<4;i++)  GetCol(VP,i,&r[i],&g[i],&b[i]);
    while(class!=CLOSEWINDOW){
        Wait(1<<win->UserPort->mp_SigBit);
        class=GetMessage(win,0,0,0);
        if(class==MOUSEMOVE){                  /* Das Gadget wurde angewählt */
            wert=PInfo.HorizPot/GS-16;             /* neuer Wert eingestellt */
            for(i=0;i<4;i++){           /* die 4 Farbregister des WB-Screens */
                rot  =(((r[i]-wert)<0)?0:r[i]-wert);
                if(rot>15) rot=15;
                gruen=(((g[i]-wert)<0)?0:g[i]-wert);
                if(gruen>15) gruen=15;
                blau =(((b[i]-wert)<0)?0:b[i]-wert);
                if(blau>15) blau=15;
                SetRGB4(VP,i,rot,gruen,blau);          /* neue Farben setzen */
            }
            while((class=GetMessage(win,0,0,0))==MOUSEMOVE);
        }
    }
    error(0);
}
