
/*
\\    Lupe.c - vergrößert die Pixel unter dem Pointer
*/
#include "TOOL.h"

#define RP_S (&ACTIVE_SCREEN->RastPort)
#define RP_W (win->RPort)
#define XPos (ACTIVE_SCREEN->MouseX)
#define YPos (ACTIVE_SCREEN->MouseY)

struct Window *win;

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

VOID main()
{
    ULONG idcmp=CLOSEWINDOW|NEWSIZE|MOUSEMOVE,
          flags=REPORTMOUSE|WINDOWDRAG|WINDOWSIZING|
                SIZEBBOTTOM|WINDOWCLOSE|ACTIVATE,
          class=0;
    SHORT x1,y1,x2,y2,
          width=21,height=8;
    COUNT i,j;

    if(OpenLib()) error("Lib's");
    if(!(win=GetWindow(NULL,0,0,110,60,idcmp,flags,"Gummi-Lupe",NULL)))
                  error("Window");
    SetDrMd(RP_W,JAM1);
    SetOPen(RP_W,3);
    while(class!=CLOSEWINDOW){          /* Programmende über CloseGadget */
        Wait(1<<win->UserPort->mp_SigBit);
        class=GetMessage(win,0,0,0);
        if(class==MOUSEMOVE){
            for(i=-2;i<3;i++){
                for(j=-2;j<3;j++){
                    SetAPen(RP_W, ReadPixel(RP_S,XPos+j,YPos+i));
                    x1= 2+(j+2)*width;
                    y1=10+(i+2)*height;
                    x2= 2+(j+3)*width;
                    y2=10+(i+3)*height;
                    RectFill(RP_W,x1,y1,x2,y2);
                }
            }                /* eventuell gepufferte MOUSEMOVEs löschen: */
            while((class=GetMessage(win,0,0,0))==MOUSEMOVE);
        }
        if(class==NEWSIZE){          /* die Window-Größe wurde verändert */
            width =(SHORT)(win->Width - 5)/5;    /* Breite der Rechtecke */
            height=(SHORT)(win->Height-20)/5;      /* Höhe der Rechtecke */
            SetRast(RP_W, 0);               /* RastPort komplett löschen */
            RefreshWindowFrame(win);              /* Rahmen neu zeichnen */
        }
    }
    error(0);
}

