VOID AROSCycle__GM_RENDER(Class *cl, Object *o, struct gpRender *msg) { struct CycleData *data = INST_DATA(cl, o); /* Full redraw: clear and draw border */ DrawImageState(msg->gpr_RPort,IM(EG(o)->GadgetRender), EG(o)->LeftEdge, EG(o)->TopEdge, EG(o)->Flags&GFLG_SELECTED?IDS_SELECTED:IDS_NORMAL, msg->gpr_GInfo->gi_DrInfo); if (data->font) SetFont(msg->gpr_RPort, data->font); else SetFont(msg->gpr_RPort, msg->gpr_GInfo->gi_DrInfo->dri_Font); if (data->labels) renderlabel(EG(o), data->labels[data->active], msg->gpr_RPort, msg->gpr_GInfo); /* Draw disabled pattern */ if (G(o)->Flags & GFLG_DISABLED) drawdisabledpattern(msg->gpr_RPort, msg->gpr_GInfo->gi_DrInfo->dri_Pens[SHADOWPEN], G(o)->LeftEdge, G(o)->TopEdge, G(o)->Width, G(o)->Height); }
STATIC VOID drawimage(Class *cl, struct Gadget *gad, struct RastPort *rp, BOOL checked, BOOL disabled) { struct CheckBoxData *data; struct Image *img; ULONG state = IDS_NORMAL; data = INST_DATA(cl, (Object *)gad); if (checked) { if (gad->SelectRender) { img = gad->SelectRender; state = IDS_NORMAL; } else { img = gad->GadgetRender; state = IDS_SELECTED; } } else { img = gad->GadgetRender; state = IDS_NORMAL; } if (disabled) { if ((gad->Flags & GFLG_IMAGEDISABLE) && (state == IDS_NORMAL)) { state = IDS_DISABLED; } else if (gad->Flags & GFLG_IMAGEDISABLE) { state = IDS_SELECTEDDISABLED; } } DrawImageState(rp, img, gad->LeftEdge, gad->TopEdge, state, data->dri); /* Draw disabled pattern, if not supported by imageclass. */ if ((disabled) && !(gad->Flags & GFLG_IMAGEDISABLE)) { DoDisabledPattern(rp, gad->LeftEdge, gad->TopEdge, gad->LeftEdge + gad->Width - 1, gad->TopEdge + gad->Height - 1, data->dri->dri_Pens[SHADOWPEN], GadToolsBase); } }
IPTR GTSlider__GM_RENDER(Class *cl, struct Gadget *g, struct gpRender *msg) { struct SliderData *data = INST_DATA(cl, g); IPTR retval; if (msg->gpr_Redraw == GREDRAW_REDRAW) { DrawImageState(msg->gpr_RPort, (struct Image *)data->frame, g->LeftEdge - BORDERPROPSPACINGX, g->TopEdge - BORDERPROPSPACINGY, IDS_NORMAL, msg->gpr_GInfo->gi_DrInfo); } retval = DoSuperMethodA(cl, (Object *)g, (Msg)msg); renderlabel(GadToolsBase, g, msg->gpr_RPort, data->labelplace); ReturnInt("Slider::Render", IPTR, retval); }
IPTR AslProp__GM_RENDER(Class *cl, struct Gadget *g, struct gpRender *msg) { struct AslPropData *data; IPTR retval; data = INST_DATA(cl, g); if (msg->gpr_Redraw == GREDRAW_REDRAW) { struct TagItem im_tags[] = { {IA_Width , 0 }, {IA_Height , 0 }, {TAG_DONE } }; WORD x, y, w, h; getgadgetcoords(g, msg->gpr_GInfo, &x, &y, &w, &h); x -= BORDERPROPSPACINGX; y -= BORDERPROPSPACINGY; w += BORDERPROPSPACINGX * 2; h += BORDERPROPSPACINGY * 2; im_tags[0].ti_Data = w; im_tags[1].ti_Data = h; SetAttrsA(data->frame, im_tags); DrawImageState(msg->gpr_RPort, (struct Image *)data->frame, x, y, IDS_NORMAL, msg->gpr_GInfo->gi_DrInfo); #if AVOID_FLICKER { struct IBox ibox, fbox; fbox.Left = x; fbox.Top = y; fbox.Width = w; fbox.Height = h; ibox.Left = x + BORDERPROPSPACINGX; ibox.Top = y + BORDERPROPSPACINGY; ibox.Width = w - BORDERPROPSPACINGX * 2; ibox.Height = h - BORDERPROPSPACINGY * 2; PaintInnerFrame(msg->gpr_RPort, msg->gpr_GInfo->gi_DrInfo, data->frame, &fbox, &ibox, msg->gpr_GInfo->gi_DrInfo->dri_Pens[BACKGROUNDPEN], AslBase); } #endif } /* if (msg->gpr_Redraw == GREDRAW_REDRAW) */ retval = DoSuperMethodA(cl, (Object *)g, (Msg)msg); return retval; }
void main() { ULONG class,code; struct Gadget *gadget; struct IntuiMessage *message; struct DrawInfo *dri; BOOL running=TRUE; unless(Scr=LockPubScreen("Workbench")) LEAVE; unless(dri=GetScreenDrawInfo(Scr)) LEAVE; unless(SmartBitMapBase=OpenLibrary("images/smartbitmap.image",36L)) LEAVE; unless(ImClass=GetSmartBitMapClass()) LEAVE; GetRGB32(Scr->ViewPort.ColorMap,0,1,&pal[0].R); unless(Im=NewObject(ImClass,NULL, IA_Left,25, IA_Top,25, IA_Width,20, SMBM_Border,FALSE, SMBM_SelBorder,TRUE, SMBM_Screen,Scr, SMBM_BitMap,&TBCOLORWHEELBitMap, // SMBM_BitMap,&Size45UDBitMap, SMBM_Palette,pal, TAG_DONE)) LEAVE; unless(MainWnd=OpenWindowTags(NULL, WA_Left,0, WA_Top,0, WA_Width,600, WA_Height,200, WA_IDCMP,IDCMP_CLOSEWINDOW|IDCMP_GADGETUP, WA_Flags,WFLG_CLOSEGADGET|WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_ACTIVATE|WFLG_SIZEGADGET, WA_CustomScreen,Scr, TAG_DONE)) LEAVE; DrawImageState(MainWnd->RPort,(struct Image *)Im,0,0,IDS_NORMAL,dri); while(running) { Wait(1L<<MainWnd->UserPort->mp_SigBit); while(message=GT_GetIMsg(MainWnd->UserPort)) { class=message->Class; code=message->Code; gadget=(struct Gadget *)message->IAddress; GT_ReplyIMsg(message); switch(class) { case IDCMP_CLOSEWINDOW: running=FALSE; break; } } } end: if(MainWnd) { CloseWindow(MainWnd); } if(Im) DisposeObject(Im); if(SmartBitMapBase) CloseLibrary(SmartBitMapBase); if(dri) FreeScreenDrawInfo(Scr,dri); if(Scr) UnlockPubScreen(NULL,Scr); }
IPTR PUBLIC DispatchArrowImage(REG(a0, Class *cl), REG(a2, Object *o), REG(a1, Msg msg)) { struct ArrowIData *ad; struct ClassBase *cb; IPTR retval = 0; ad = INST_DATA(cl,o); cb = (APTR)cl->cl_UserData; switch(msg->MethodID) { case OM_NEW: if ((retval = DoSuperMethodA(cl,o,msg)) != 0) { IM(retval)->Width = GetTagData(IA_Width,16,((struct opSet *)msg)->ops_AttrList); IM(retval)->Height = GetTagData(IA_Height,13,((struct opSet *)msg)->ops_AttrList); if (IM(retval)->Width < 10) IM(retval)->Width = 10; if (IM(retval)->Height < 8) IM(retval)->Height = 8; ad = INST_DATA(cl,retval); ad->ad_Type = GetTagData(SYSIA_Which,0,((struct opSet *)msg)->ops_AttrList); ad->ad_Frame = NewObject(NULL,"frameiclass",IA_FrameType, FRAME_BUTTON, IA_Width, IM(retval)->Width, IA_Height, IM(retval)->Height, TAG_END); } break; case OM_DISPOSE: DisposeObject(ad->ad_Frame); retval = DoSuperMethodA(cl,o,msg); break; case IM_DRAW: case IM_DRAWFRAME: { struct impDraw *imp = (struct impDraw *)msg; long x,y,w,h; x = IM(o)->LeftEdge+imp->imp_Offset.X; y = IM(o)->TopEdge+imp->imp_Offset.Y; w = IM(o)->Width-9; h = IM(o)->Height-5; if (!(w % 2)) w++; DrawImageState(imp->imp_RPort,ad->ad_Frame,x,y,imp->imp_State,imp->imp_DrInfo); x += 4; y += 2; if (imp->imp_DrInfo) SetAPen(imp->imp_RPort,imp->imp_DrInfo->dri_Pens[TEXTPEN]); else SetAPen(imp->imp_RPort,1); if (ad->ad_Type == ADT_UP) { Move(imp->imp_RPort,x,y+h); /* up arrow */ Draw(imp->imp_RPort,x+w/2,y); Draw(imp->imp_RPort,x+w-1,y+h); Move(imp->imp_RPort,x+1,y+h); Draw(imp->imp_RPort,x+w/2+1,y); Draw(imp->imp_RPort,x+w,y+h); } else { Move(imp->imp_RPort,x,y); /* down arrow */ Draw(imp->imp_RPort,x+w/2,y+h); Draw(imp->imp_RPort,x+w-1,y); Move(imp->imp_RPort,x+1,y); Draw(imp->imp_RPort,x+w/2+1,y+h); Draw(imp->imp_RPort,x+w,y); } } break; default: retval = DoSuperMethodA(cl,o,msg); } return(retval); }
IPTR GTText__GM_RENDER(Class *cl, struct Gadget *g, struct gpRender *msg) { UWORD *pens = msg->gpr_GInfo->gi_DrInfo->dri_Pens; UBYTE textbuf[256], *str; struct TextData *data = INST_DATA(cl, g); WORD left, left2, top, width, height, numchars, tlength; struct TextFont *oldfont; struct RastPort *rp = msg->gpr_RPort; EnterFunc(bug("Text::Render()\n")); left = g->LeftEdge; top = g->TopEdge; width = g->Width; height = g->Height; if (msg->gpr_Redraw == GREDRAW_REDRAW) { if (data->frame) { DrawImageState(msg->gpr_RPort, (struct Image *)data->frame, left, top, IDS_NORMAL, msg->gpr_GInfo->gi_DrInfo); } renderlabel(GadToolsBase, g, msg->gpr_RPort, data->labelplace); } if (data->toprint || (data->gadgetkind != TEXT_KIND)) { /* preserve font */ oldfont = rp->Font; SetFont(rp, data->font); str = textbuf; if (data->gadgetkind == TEXT_KIND) { strncpy(str, (char *)data->toprint, sizeof(textbuf)); textbuf[sizeof(textbuf) - 1] = '\0'; } else /* NUMERIC_KIND or label of SLIDER_KIND */ { RawDoFmt(data->format, &(data->toprint), (VOID_FUNC)AROS_ASMSYMNAME(puttostr), &str); } D(bug("Text formatted into: %s\n", textbuf)); numchars = strlen(textbuf); if (data->flags & TEXTF_BORDER) { left += VBORDER + 1; top += HBORDER + 1; width = g->Width - (VBORDER + 1) * 2; height = g->Height - (HBORDER + 1) * 2; } if (data->flags & TEXTF_CLIPPED) { struct TextExtent te; /* See how many chars fits into the display area */ numchars = TextFit(rp, textbuf, numchars, &te, NULL, 1, width, g->Height); } tlength = TextLength(rp, textbuf, numchars); left2 = left; switch (data->justification) { case GTJ_LEFT: break; case GTJ_RIGHT: left2 += (width - tlength); break; case GTJ_CENTER: left2 += ((width - tlength) / 2); break; } /* Render text */ D(bug("Rendering text of lenghth %d at (%d, %d)\n", numchars, left, top)); SetABPenDrMd(rp, pens[data->backpen], pens[data->backpen], JAM2); RectFill(rp, left, top, left + width - 1, top + height - 1); SetAPen(rp, pens[data->frontpen]); Move(rp, left2, top + ((height - data->font->tf_YSize) / 2) + data->font->tf_Baseline); Text(rp, textbuf, numchars); SetFont(rp, oldfont); } /* if (data->toprint || (data->gadgetkind != TEXT_KIND)) */ ReturnInt("Text::Render", IPTR, 0); }