/* Dice: 1> dcc -l0 -mD dpk.o tags.o Colours.c -o Colours
**
** This source demonstrates use of the Colours module.
*/

#include <proto/dpkernel.h>
#include <clib/colours_protos.h>

BYTE *ProgName      = "Colours Demo";
BYTE *ProgAuthor    = "Paul Manias";
BYTE *ProgDate      = "August 1998";
BYTE *ProgCopyright = "DreamWorld Productions (c) 1998.  Freely distributable.";
BYTE *ProgShort     = "Demonstration of the colours module.";

struct GScreen  *screen     = NULL;
struct Restore  *restore    = NULL;
struct JoyData  *joydata    = NULL;
struct Picture  *background = NULL;
struct Module   *ColoursMod = NULL;
APTR COLBase;

struct FileName BackFile = { ID_FILENAME, "GMS:demos/data/PIC.Green" };
struct FileName TmpFile  = { ID_FILENAME, "RAM:TempPic.00001" };

void Demo(void);

/***************************************************************************/

void main(void) {
  if (ColoursMod = OpenModule(MOD_COLOURS,"colours.mod")) {
     COLBase = ColoursMod->ModBase;

   if (background = Load(&BackFile, ID_PICTURE)) {
    if (screen = Get(ID_SCREEN)) {
       CopyStructure(background, screen);

     if (Init(screen,NULL)) {

      if (Copy(background->Bitmap,screen->Bitmap) IS ERR_OK) {

       if (joydata = Get(ID_JOYDATA)) {
          joydata->Port = 1;     /* Forces mouse control */

        if (Init(joydata, NULL)) {
           Display(screen); 
           Demo();
        }
       }
      }
     }
    }
   }
  }
  Free(screen);
  Free(joydata);
  Free(background);
  Free(ColoursMod);
}

/***************************************************************************/

void Demo(void)
{
  WORD XCoord = screen->Width/2;
  WORD YCoord = screen->Height/2;
  struct HSV HSV;

  ConvertRGBToHSV(DecRGB(100,90,30),&HSV);
  DPrintF("RGBToHSV:","$%.8x = Hue: %d, Sat: %d, Val %d",DecRGB(100,90,30),HSV.Hue,HSV.Sat,HSV.Val);
  DPrintF("Brightness:","%d",CalcBrightness(DecRGB(100,90,30)));

  ConvertRGBToHSV(DecRGB(75,150,105),&HSV);
  DPrintF("RGBToHSV:","$%.8x = Hue: %d, Sat: %d, Val %d",DecRGB(75,150,105),HSV.Hue,HSV.Sat,HSV.Val);
  DPrintF("Brightness:","%d",CalcBrightness(DecRGB(75,150,105)));

  ConvertRGBToHSV(DecRGB(80,160,255),&HSV);
  DPrintF("RGBToHSV:","$%.8x = Hue: %d, Sat: %d, Val %d",DecRGB(80,160,255),HSV.Hue,HSV.Sat,HSV.Val);
  DPrintF("Brightness:","%d",CalcBrightness(DecRGB(80,160,255)));

  SetRGBPen(screen->Bitmap,0xffffff);

  LightenArea(screen->Bitmap,128,164,64,64,20);

  BlurBitmap(screen->Bitmap,160,164,64,64,50);

  do
  {
    Query(joydata);
    XCoord += joydata->XChange;
    YCoord += joydata->YChange;
    if (XCoord < 0) XCoord = screen->Width + XCoord;
    if (YCoord < 0) YCoord = screen->Height + YCoord;
    if (XCoord >= screen->Width)  XCoord = XCoord - screen->Width;
    if (YCoord >= screen->Height) YCoord = YCoord - screen->Height;

    if (joydata->Buttons & JD_LMB) {
       BlurBitmap(screen->Bitmap,XCoord,YCoord,96,96,50);
    }

    LightenPixel(screen->Bitmap,XCoord,YCoord,50);

    WaitAVBL();
  } while (!(joydata->Buttons & JD_RMB));

  /*SaveToFile(screen->Bitmap,&TmpFile,NULL);*/
}

