OPT OSVERSION=37
OPT MODULE

CONST   IMAGEFIELDSIZEX    =   320,
        IMAGEFIELDSIZEY    =   77,
        IMAGECOLORS        =   32


MODULE  'tools/EasyGUI',
        'workbench/startup',
        'workbench/workbench',
        'graphics/rastport',
        'graphics/view',
        'graphics/gfx',
        'intuition/intuition',
        'intuition/screens'

EXPORT OBJECT imagefield OF plugin
    pens[IMAGECOLORS]:ARRAY OF LONG
    cmap:PTR TO colormap
    bitmap:PTR TO bitmap
ENDOBJECT

PROC imagefield(t=0,p=0) OF imagefield
DEF i,j,pic:PTR TO CHAR,scr:PTR TO screen,palette[256]:ARRAY OF CHAR
DEF colors:PTR TO LONG,rp:PTR TO rastport 


    colors:={palettedat}
    pic:={logodat}
    FOR i:=0 TO IMAGECOLORS-1
        self.pens[i]:=-1
    ENDFOR

    self.cmap:=0
    self.bitmap:=0

    -> rerender logo

    IF (scr:=LockPubScreen('Workbench'))
        self.cmap:=scr.viewport.colormap
        FOR i:=0 TO IMAGECOLORS-1
            self.pens[i]:=ObtainBestPenA(self.cmap,colors[]++,colors[]++,colors[]++,0)
        ENDFOR

        colors:={palettedat}
        FOR i:=0 TO IMAGECOLORS-1
            palette[i]:=FindColor(self.cmap,colors[]++,colors[]++,colors[]++,-1)
        ENDFOR
        FOR i:=0 TO (IMAGEFIELDSIZEX*IMAGEFIELDSIZEY)-1
            pic[i]:=palette[pic[i]]
        ENDFOR
        -> makeing bitmap
        self.bitmap:=AllocBitMap(IMAGEFIELDSIZEX,IMAGEFIELDSIZEY,scr.bitmap.depth,FALSE,NIL)
        IF self.bitmap
            NEW rp
            InitRastPort(rp)
            rp.bitmap:=self.bitmap
            pic:={logodat}
            FOR j:=0 TO IMAGEFIELDSIZEY-1
                FOR i:=0 TO IMAGEFIELDSIZEX-1
                    SetAPen(rp,pic[]++)
                    WritePixel(rp,i,j)
                ENDFOR
            ENDFOR
            Dispose(rp)
        ENDIF
        UnlockPubScreen('Workbench',scr)
    ELSE
        WriteF('cannot lock screen \n')
    ENDIF

ENDPROC

PROC    end() OF imagefield
DEF i,reg
    IF self.cmap
        FOR i:=0 TO IMAGECOLORS-1
            IF (reg:=self.pens[i])>=0 THEN ReleasePen(self.cmap,reg)
        ENDFOR
    ENDIF
    IF self.bitmap THEN FreeBitMap(self.bitmap)

    self.cmap:=0
    self.bitmap:=0
ENDPROC


PROC min_size(ta,fh) OF imagefield IS IMAGEFIELDSIZEX,IMAGEFIELDSIZEY

PROC will_resize() OF imagefield IS (RESIZEX OR RESIZEY)

PROC render(ta,x,y,xs,ys,w:PTR TO window) OF imagefield
DEF logo:PTR TO CHAR,rp,xst,yst
    rp:=w.rport
    xst:=x+((xs-IMAGEFIELDSIZEX)/2)
    yst:=y+((ys-IMAGEFIELDSIZEY)/2)
    logo:={logodat}
    Move(rp,x,y)
    SetAPen(rp,logo[0])
    RectFill(rp,x,y,x+xs,y+ys)
    IF self.bitmap
        BltBitMapRastPort(self.bitmap,0,0,rp,xst,yst,IMAGEFIELDSIZEX,IMAGEFIELDSIZEY,($40 OR $80))
    ENDIF
ENDPROC

PROC message_action(class,qual,code,win) OF imagefield IS TRUE


logodat:
    INCBIN  'logo'
palettedat:
    INCBIN  'logo.pal'

