/* Функция построения информационного объекта анимации. * АРГУМЕНТЫ: * - указатель на "себя" - сам объект анимации: * vg4UNIT *Unit; * - указатель на контекст анимации: * vg4UNIT_INFO *Ani; * ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Нет. */ static VOID InfoUnitRender( vg4UNIT_INFO *Unit, vg4ANIM *Ani ) { INT x, y; static CHAR Buf[1000]; SetBkMode(Ani->hDC, TRANSPARENT); SetTextColor(Ani->hDC, RGB(255, 255, 155)); TextOut(Ani->hDC, 10, 10, Buf, sprintf(Buf, "FPS: %.3f", Ani->FPS)); TextOut(Ani->hDC, 10, 30, Buf, sprintf(Buf, "x:% i y:% i dx:% i dy:% i w:% i", Ani->MsX, Ani->MsY, Ani->MsDeltaX, Ani->MsDeltaY, Ani->MsWheel)); x = sprintf(Buf, "jx:% f jy:% f jz:% f jr:% f ju:% f POV: %i", Ani->JX, Ani->JY, Ani->JZ, Ani->JR, Ani->JU, Ani->JPOV); for (y = 0; y < 32; y++) x += sprintf(Buf + x, "%s", Ani->JButs[y] ? "#" : "_"); TextOut(Ani->hDC, 10, 50, Buf, x); x = (Ani->W - Unit->And.W) + Ani->JX * Unit->Amp * sin(Ani->Time * 0.30 + Unit->Shift); y = (Ani->H - Unit->And.H) + Ani->JY * Unit->Amp * cos(Ani->Time * 0.30 + Unit->Shift); ImageDraw(&Unit->And, Ani->hDC, x, y, SRCAND); ImageDraw(&Unit->Xor, Ani->hDC, x, y, SRCINVERT); } /* End of 'InfoUnitRender' function */
static void LabelElementDraw( void *clientData, void *elementRecord, Tk_Window tkwin, Drawable d, Ttk_Box b, Ttk_State state) { LabelElement *l = elementRecord; Tk_Anchor anchor = TK_ANCHOR_CENTER; LabelSetup(l, tkwin, state); /* * Adjust overall parcel based on -anchor: */ Tk_GetAnchorFromObj(NULL, l->text.anchorObj, &anchor); b = Ttk_AnchorBox(b, l->totalWidth, l->totalHeight, anchor); /* * Draw text and/or image parts based on -compound: */ switch (l->compound) { case TTK_COMPOUND_NONE: /* Can't happen */ break; case TTK_COMPOUND_TEXT: TextDraw(&l->text,tkwin,d,b); break; case TTK_COMPOUND_IMAGE: ImageDraw(&l->image,tkwin,d,b,state); break; case TTK_COMPOUND_CENTER: { Ttk_Box pb = Ttk_AnchorBox( b, l->image.width, l->image.height, TK_ANCHOR_CENTER); ImageDraw(&l->image, tkwin, d, pb, state); pb = Ttk_AnchorBox( b, l->text.width, l->text.height, TK_ANCHOR_CENTER); TextDraw(&l->text, tkwin, d, pb); break; } case TTK_COMPOUND_TOP: DrawCompound(l, b, tkwin, d, state, TTK_SIDE_TOP, TTK_SIDE_BOTTOM); break; case TTK_COMPOUND_BOTTOM: DrawCompound(l, b, tkwin, d, state, TTK_SIDE_BOTTOM, TTK_SIDE_TOP); break; case TTK_COMPOUND_LEFT: DrawCompound(l, b, tkwin, d, state, TTK_SIDE_LEFT, TTK_SIDE_RIGHT); break; case TTK_COMPOUND_RIGHT: DrawCompound(l, b, tkwin, d, state, TTK_SIDE_RIGHT, TTK_SIDE_LEFT); break; } LabelCleanup(l); }
/* * DrawCompound -- * Helper routine for LabelElementDraw; * Handles layout for -compound {left,right,top,bottom} */ static void DrawCompound( LabelElement *l, Ttk_Box b, Tk_Window tkwin, Drawable d, Ttk_State state, int imageSide, int textSide) { Ttk_Box imageBox = Ttk_PlaceBox(&b, l->image.width, l->image.height, imageSide, 0); Ttk_Box textBox = Ttk_PlaceBox(&b, l->text.width, l->text.height, textSide, 0); ImageDraw(&l->image,tkwin,d,imageBox,state); TextDraw(&l->text,tkwin,d,textBox); }
static void ImageElementDraw( void *clientData, void *elementRecord, Tk_Window tkwin, Drawable d, Ttk_Box b, Ttk_State state) { ImageElement *image = elementRecord; if (ImageSetup(image, tkwin, state)) { ImageDraw(image, tkwin, d, b, state); ImageCleanup(image); } }
void CreditsDraw(SDL_Surface* screen) { ImageDraw(screen, &c_background); TextDraw(&t, screen, "Programmed by: Nenad Palinkasevic... level over 9000."); ButtonDraw(&back, screen); }