void Amiga_SetScreenColors(void){ FILE *file; UWORD depth; int num_colors_on_file; long lokke; int lokke2; long num_colors=1; char temp[100]; ULONG rgb[3]; file=fopen("radium:radiumcolors.conf","r"); if(file==NULL) return; depth=GetBitMapAttr(mainscreen->RastPort.BitMap,BMA_DEPTH); for(lokke=0;lokke<depth;lokke++){ num_colors*=2; } fgets(temp,90,file); num_colors_on_file=atoi(temp); for(lokke=0;lokke<num_colors_on_file;lokke++){ if(lokke>=num_colors || lokke==256) break; for(lokke2=0;lokke2<3;lokke2++){ fgets(temp,90,file); rgb[lokke2]=strtoul(temp,NULL,10); } SetRGB32(&mainscreen->ViewPort,lokke,rgb[0],rgb[1],rgb[2]); } fclose(file); }
static void makegads(void) { struct ColorWheelRGB rgb; struct ColorWheelHSB hsb; Object *im; WORD sizeheight = 14; WORD gradx, grady, gradw, gradh; WORD wheelx, wheely, wheelw, wheelh; im = NewObject(NULL, SYSICLASS, SYSIA_DrawInfo, (IPTR)dri, SYSIA_Which, SIZEIMAGE, TAG_DONE); if (im) { sizeheight = ((struct Image *)im)->Height; DisposeObject(im); } wheelx = scr->WBorLeft + BORDERX; wheely = scr->WBorTop + scr->Font->ta_YSize + 1 + BORDERY; wheelw = -(scr->WBorLeft + scr->WBorRight + BORDERX * 2 + SPACINGX + GRADWIDTH); wheelh = -(scr->WBorTop + scr->Font->ta_YSize + 1 + sizeheight + BORDERY * 2); gradx = -(scr->WBorRight + BORDERX + GRADWIDTH) + 1; grady = scr->WBorTop + scr->Font->ta_YSize + 1 + BORDERY; gradw = GRADWIDTH; gradh = -(scr->WBorTop + scr->Font->ta_YSize + 1 + sizeheight + BORDERY * 2); gradgad = (struct Gadget *)NewObject(0, "gradientslider.gadget", GA_RelRight , gradx, GA_Top , grady, GA_Width , gradw, GA_RelHeight , gradh, GRAD_PenArray , (IPTR)pens, GRAD_KnobPixels , 10, PGA_Freedom , LORIENT_VERT, TAG_DONE); if (!gradgad) cleanup("Can't create gradientslider gadget!"); wheelgad = (struct Gadget *)NewObject(0, "colorwheel.gadget", GA_Left , wheelx, GA_Top , wheely, GA_RelWidth , wheelw, GA_RelHeight , wheelh, GA_RelVerify , TRUE, WHEEL_Screen , (IPTR)scr, WHEEL_BevelBox , TRUE, WHEEL_GradientSlider , (IPTR)gradgad, GA_Previous , (IPTR)gradgad, ICA_TARGET , ICTARGET_IDCMP, TAG_DONE); if (!wheelgad) cleanup("Can't create colorwheel gadget!"); GetAttr(WHEEL_HSB, (Object *)wheelgad, (IPTR *)&hsb); hsb.cw_Brightness = 0xFFFFFFFF; ConvertHSBToRGB(&hsb, &rgb); SetRGB32(vp, pen1, rgb.cw_Red, rgb.cw_Green, rgb.cw_Blue); }
static void handleall(void) { struct IntuiMessage *msg; BOOL quitme = FALSE; while(!quitme) { WaitPort(win->UserPort); while ((msg = (struct IntuiMessage *)GetMsg(win->UserPort))) { switch(msg->Class) { case IDCMP_CLOSEWINDOW: quitme = TRUE; break; case IDCMP_IDCMPUPDATE: { struct ColorWheelRGB rgb; struct ColorWheelHSB hsb; struct TagItem *tags = (struct TagItem *)msg->IAddress; hsb.cw_Hue = GetTagData(WHEEL_Hue, 0, tags); hsb.cw_Saturation = GetTagData(WHEEL_Saturation, 0, tags); hsb.cw_Brightness = 0xFFFFFFFF; ConvertHSBToRGB(&hsb, &rgb); SetRGB32(vp, pen1, rgb.cw_Red, rgb.cw_Green, rgb.cw_Blue); if (truecolor) { RefreshGList(gradgad, win, 0, 1); } } break; } /* switch(msg->Class) */ ReplyMsg((struct Message *)msg); } /* while ((msg = (struct IntuiMessage *)GetMsg(win->UserPort))) */ } /* while(!quitme) */ }
IPTR Colorfield__MUIM_Setup(struct IClass *cl, Object *obj, struct MUIP_Setup *msg) { struct Colorfield_DATA *data = INST_DATA(cl,obj); if (!(DoSuperMethodA(cl, obj, (Msg)msg))) return 0; if (data->flags & FLAG_FIXED_PEN) { SetRGB32(&_screen(obj)->ViewPort, data->pen, data->rgb[0], data->rgb[1], data->rgb[2]); } else { LONG pen; pen = ObtainPen(_screen(obj)->ViewPort.ColorMap, (ULONG)-1, data->rgb[0], data->rgb[1], data->rgb[2], PENF_EXCLUSIVE); if (pen == -1) { data->flags |= FLAG_NO_PEN; data->pen = 0; } else { data->pen = (UBYTE)pen; data->flags |= FLAG_PEN_ALLOCATED; } } return 1; }
IPTR Colorfield__OM_SET(struct IClass *cl, Object *obj, struct opSet *msg) { struct Colorfield_DATA *data; const struct TagItem *tags; struct TagItem *tag; ULONG *rgb; BOOL newcol = FALSE; IPTR retval; data = INST_DATA(cl, obj); for (tags = msg->ops_AttrList; (tag = NextTagItem(&tags)); ) { switch (tag->ti_Tag) { case MUIA_Colorfield_Red: data->rgb[0] = (ULONG)tag->ti_Data; newcol = TRUE; break; case MUIA_Colorfield_Green: data->rgb[1] = (ULONG)tag->ti_Data; newcol = TRUE; break; case MUIA_Colorfield_Blue: data->rgb[2] = (ULONG)tag->ti_Data; newcol = TRUE; break; case MUIA_Colorfield_RGB: rgb = (ULONG *)tag->ti_Data; data->rgb[0] = *rgb++; data->rgb[1] = *rgb++; data->rgb[2] = *rgb++; newcol = TRUE; break; case MUIA_Colorfield_Pen: if (data->flags & FLAG_PEN_ALLOCATED) { ReleasePen(_screen(obj)->ViewPort.ColorMap, data->pen); data->flags &= ~(FLAG_PEN_ALLOCATED | FLAG_NO_PEN); } data->pen = (UBYTE)data->pen; data->flags |= FLAG_FIXED_PEN; break; } } retval = DoSuperMethodA(cl, obj, (Msg)msg); if (newcol && (_flags(obj) & MADF_SETUP) && !(data->flags & FLAG_NO_PEN)) { SetRGB32(&_screen(obj)->ViewPort, data->pen, data->rgb[0], data->rgb[1], data->rgb[2]); if (GetBitMapAttr(_rp(obj)->BitMap, BMA_DEPTH) > 8) { MUI_Redraw(obj, MADF_DRAWUPDATE); } } return retval; }
LONG Blank( PrefObject *Prefs ) { LONG delay_rate, i, j, counter = 0, RetVal = OK; struct RastPort *Rast; struct Screen *FTScr; struct Window *FTWin; struct Window *Wnd; NumToasters = Prefs[OBJECTS].po_Level; delay_rate = 11 - Prefs[SPEED].po_Level; Toasters = AllocVec( sizeof( Toaster ) * NumToasters, MEMF_CLEAR ); FTScr = OpenScreenTags( NULL, SA_DisplayID, Prefs[MODE].po_ModeID, SA_Depth, 4, SA_Overscan, OSCAN_STANDARD, SA_Type, CUSTOMSCREEN, SA_Quiet, TRUE, SA_Behind, TRUE, TAG_DONE ); if( Toasters && FTScr ) { for( i = 0; i < 48; i += 3 ) if( GfxBase->lib_Version < 39 ) SetRGB4(&( FTScr->ViewPort ), i/3, ( cmap[i] * 16 ) / 256, ( cmap[i+1] * 16 ) / 256, ( cmap[i+2] * 16 ) / 256 ); else SetRGB32(&( FTScr->ViewPort ), i/3, cmap[i]<<24, cmap[i+1]<<24, cmap[i+2]<<24 ); FTWin = OpenWindowTags( 0L, WA_Width, FTScr->Width, WA_Height, FTScr->Height, WA_IDCMP, 0L, WA_Flags, WFLG_SIMPLE_REFRESH|WFLG_BORDERLESS, WA_CustomScreen, FTScr, TAG_DONE ); if( FTWin ) { Rast = FTWin->RPort; SetAPen( Rast, 0 ); for( i = 0; i < NumToasters; i++ ) if( !FindLaunchPos( i, ( LONG )FTWin->Width, ( LONG )FTWin->Height )) Toasters[i].delay = 30; Wnd = BlankMousePointer( FTScr ); ScreenToFront( FTScr ); while( RetVal == OK ) { WaitTOF(); if(!( ++counter % 60 )) ScreenToFront( FTScr ); if(!( counter % delay_rate )) { for( i = 0; i < NumToasters; i++ ) { if( !Toasters[i].delay ) { Toasters[i].old_x = Toasters[i].x; Toasters[i].old_y = Toasters[i].y; Toasters[i].x -= Toasters[i].xspeed; Toasters[i].y += Toasters[i].yspeed; Toasters[i].xcol = -1; Toasters[i].ycol = -1; } } for( i = 0; i < NumToasters; i++ ) { if( !Toasters[i].delay ) { j = -1; while(( j = TestExtent( j+1, i, Toasters[i].x, Toasters[i].y )) >= 0 ) { if( abs( Toasters[j].old_x - Toasters[i].old_x ) < IM_WIDBUF ) { if( Toasters[i].y < Toasters[j].y ) Toasters[i].ycol = j; if( Toasters[i].xspeed == Toasters[j].xspeed ) Toasters[i].xspeed++; } else { if( Toasters[i].x > Toasters[j].x ) Toasters[i].xcol = j; if( Toasters[i].yspeed == Toasters[j].yspeed ) Toasters[i].yspeed++; } if( abs( Toasters[j].old_y - Toasters[i].old_y ) < IM_HEIBUF ) { if( Toasters[i].x > Toasters[j].x ) Toasters[i].xcol = j; if( Toasters[i].yspeed == Toasters[j].yspeed ) Toasters[i].yspeed++; } } } } for( i = 0; i < NumToasters; i++ ) { if( !Toasters[i].delay ) { Toasters[i].x = Toasters[i].old_x - ActXSpeed( i ); Toasters[i].y = Toasters[i].old_y + ActYSpeed( i ); } } for( i = 0; i < NumToasters; i++ ) { if( !Toasters[i].delay ) { j = -1; while(( j = TestExtent( j+1, i, Toasters[i].x, Toasters[i].y )) >= 0 ) { if( abs( Toasters[j].old_x - Toasters[i].old_x ) < IM_WIDBUF ) if( Toasters[i].x > Toasters[j].x ) Toasters[i].x = Toasters[i].old_x; else if( Toasters[i].y < Toasters[j].y ) Toasters[i].y = Toasters[i].old_y; if( abs( Toasters[j].old_y - Toasters[i].old_y ) < IM_HEIBUF ) if( Toasters[i].y < Toasters[j].y ) Toasters[i].y = Toasters[i].old_y; } } } for( i = 0; i < NumToasters; i++ ) { if( !Toasters[i].delay ) { Toasters[i].phase = ( Toasters[i].phase + 1 ) % IMAGEMAX; EraseRect( Rast, Toasters[i].x + IM_WIDTH, Toasters[i].old_y, Toasters[i].x + IM_WIDTH + Toasters[i].xspeed, Toasters[i].old_y + IM_HEIGHT ); EraseRect( Rast, Toasters[i].old_x, Toasters[i].old_y, Toasters[i].old_x + IM_WIDTH, Toasters[i].old_y + Toasters[i].yspeed ); DrawImage( Rast, img[Toasters[i].phase], Toasters[i].x, Toasters[i].y ); if(( Toasters[i].x < -IM_WIDTH-1 )|| ( Toasters[i].y > FTWin->Height )) Toasters[i].delay = RangeRand( 50 ); } else if(!( --Toasters[i].delay )) Toasters[i].delay = FindLaunchPos( i, ( LONG )FTWin->Width, ( LONG )FTWin->Height ) ? 0 : 30; } } RetVal = ContinueBlanking(); } SetSignal( 0L, SIGBREAKF_CTRL_C ); UnblankMousePointer( Wnd ); CloseWindow( FTWin ); } else RetVal = FAILED; CloseScreen( FTScr ); } else RetVal = FAILED; FreeVec( Toasters ); return RetVal; }
/************************************************************************************** ** Main *************************************************************************************** */ VOID main() { struct Screen *pubscreen; struct ViewPort *vp; if ( !(GfxBase = OpenLibrary("graphics.library",0)) ) return(NULL); if ( !(IntuitionBase = OpenLibrary("intuition.library",0)) ) { CloseLibrary(GfxBase); return(NULL); } pubscreen = LockPubScreen(NULL); vp = &pubscreen->ViewPort; SetRGB32 (vp, 4, 123<<24, 123<<24, 123<<24 ); SetRGB32 (vp, 5, 175<<24, 175<<24, 175<<24 ); SetRGB32 (vp, 6, 170<<24, 144<<24, 124<<24 ); SetRGB32 (vp, 7, 255<<24, 169<<24, 151<<24 ); SetRGB32 (vp, 8, 0, 0, 255<<24 ); SetRGB32 (vp, 9, 50<<24, 50<<24, 50<<24 ); SetRGB32 (vp, 10, 96<<24, 128<<24, 96<<24 ); SetRGB32 (vp, 11, 226<<24, 209<<24, 119<<24 ); SetRGB32 (vp, 12, 255<<24, 212<<24, 203<<24 ); SetRGB32 (vp, 13, 122<<24, 96<<24, 72<<24 ); SetRGB32 (vp, 14, 210<<24, 210<<24, 210<<24 ); SetRGB32 (vp, 15, 229<<24, 93<<24, 93<<24 ); UnlockPubScreen(NULL,pubscreen); CloseLibrary(IntuitionBase); CloseLibrary(GfxBase); return(NULL); }