static void displayAISlider(WIDGET *psWidget, UDWORD xOffset, UDWORD yOffset, WZ_DECL_UNUSED PIELIGHT *pColours) { W_SLIDER *Slider = (W_SLIDER*)psWidget; UDWORD x = xOffset+psWidget->x; UDWORD y = yOffset+psWidget->y; SWORD sx; iV_DrawImage(IntImages,IMAGE_SLIDER_AI,x+STAT_SLD_OX,y+STAT_SLD_OY); // draw bdrop sx = (SWORD)((Slider->width-3 - Slider->barSize) * Slider->pos / Slider->numStops); // determine pos. iV_DrawImage(IntImages,IMAGE_SLIDER_BIGBUT,x+3+sx,y+3); //draw amount }
// //////////////////////////////////////////////////////////////////////////// // //////////////////////////////////////////////////////////////////////////// void displayRequestOption(WIDGET *psWidget, UDWORD xOffset, UDWORD yOffset, PIELIGHT *pColours) { UDWORD x = xOffset+psWidget->x; UDWORD y = yOffset+psWidget->y; UDWORD count; char butString[255]; strcpy(butString,((W_BUTTON *)psWidget)->pTip); drawBlueBox(x,y,psWidget->width,psWidget->height); //draw box iV_SetFont(font_regular); // font iV_SetTextColour(WZCOL_TEXT_BRIGHT); while(iV_GetTextWidth(butString) > psWidget->width -10 ) { butString[strlen(butString)-1]='\0'; } iV_DrawText(butString, x + 6, y + 12); //draw text // if map, then draw no. of players. for(count=0;count<psWidget->UserData;count++) { iV_DrawImage(FrontImages,IMAGE_WEE_GUY,(x+(6*count)+6),y+16); } }
/** Draws the current mouse cursor at the given coordinates * \param X,Y mouse coordinates */ void pie_DrawMouse(unsigned int X, unsigned int Y) { if (ColouredMouse && MouseVisible) { ASSERT(MouseCursors != NULL, "Drawing coloured mouse cursor while no coloured mouse cursors have been loaded yet!"); iV_DrawImage(MouseCursors, MouseCursorIDs[MouseCursor], X, Y); } }
// //////////////////////////////////////////////////////////////////////////// // //////////////////////////////////////////////////////////////////////////// void displayRequestOption(WIDGET *psWidget, UDWORD xOffset, UDWORD yOffset) { LEVEL_DATASET *mapData = (LEVEL_DATASET *)psWidget->pUserData; int x = xOffset + psWidget->x(); int y = yOffset + psWidget->y(); char butString[255]; sstrcpy(butString, ((W_BUTTON *)psWidget)->pTip.toUtf8().constData()); drawBlueBox(x, y, psWidget->width(), psWidget->height()); iV_SetFont(font_regular); // font iV_SetTextColour(WZCOL_TEXT_BRIGHT); while (iV_GetTextWidth(butString) > psWidget->width() - 10) { butString[strlen(butString)-1]='\0'; } iV_DrawText(butString, x + 6, y + 12); //draw text if (mapData != NULL) { // Display map hash, so we can see the difference between identically named maps. Sha256 hash = mapData->realFileHash; // levGetFileHash can be slightly expensive. static uint32_t lastHashTime = 0; if (lastHashTime != realTime && hash.isZero()) { hash = levGetFileHash(mapData); if (!hash.isZero()) { lastHashTime = realTime; // We just calculated a hash. Don't calculate any more hashes this frame. } } if (!hash.isZero()) { iV_SetFont(font_small); iV_SetTextColour(WZCOL_TEXT_DARK); sstrcpy(butString, hash.toString().c_str()); while (iV_GetTextWidth(butString) > psWidget->width() - 10 - (8 + mapData->players*6)) { butString[strlen(butString) - 1] = '\0'; } iV_DrawText(butString, x + 6 + 8 + mapData->players*6, y + 26); iV_SetFont(font_regular); } // if map, then draw no. of players. for (int count = 0; count < mapData->players; ++count) { iV_DrawImage(FrontImages, IMAGE_WEE_GUY, x + 6*count + 6, y + 16); } } }
/* displays the PIE view for the current message */ void intDisplayPIEView(WIDGET *psWidget, UDWORD xOffset, UDWORD yOffset, WZ_DECL_UNUSED PIELIGHT *pColours) { W_TABFORM *Form = (W_TABFORM*)psWidget; MESSAGE *psMessage = (MESSAGE *)Form->pUserData; UDWORD x0,y0,x1,y1; SWORD image = -1; RESEARCH *psResearch; //shouldn't have any proximity messages here... if (psMessage->type == MSG_PROXIMITY) { return; } if (psMessage && psMessage->pViewData) { x0 = xOffset+Form->x; y0 = yOffset+Form->y; x1 = x0 + Form->width; y1 = y0 + Form->height; //moved from after close render RenderWindowFrame(FRAME_NORMAL, x0 - 1, y0 - 1, x1 - x0 + 2, y1 - y0 + 2); OpenButtonRender((UWORD)(xOffset+Form->x), (UWORD)(yOffset+Form->y), Form->width, Form->height); //OpenButtonRender(Form->x, Form->y,Form->width, Form->height); if (((VIEWDATA *)psMessage->pViewData)->type != VIEW_RES) { ASSERT( false, "intDisplayPIEView: Invalid message type" ); return; } //render an object psResearch = getResearchForMsg((VIEWDATA *)psCurrentMsg->pViewData); renderResearchToBuffer(psResearch, x0+(x1-x0)/2, y0+(y1-y0)/2); CloseButtonRender(); //draw image icon in top left of window image = (SWORD)getResearchForMsg((VIEWDATA *)psMessage->pViewData)->iconID; if (image > 0) { iV_DrawImage(IntImages,image,x0,y0); } } }
static void DrawNorth() { iV_DrawImage(IntImages, RADAR_NORTH, -((radarWidth / 2.0) + iV_GetImageWidth(IntImages, RADAR_NORTH) + 1), -(radarHeight / 2.0)); }
void W_BUTTON::display(int xOffset, int yOffset) { int x0 = x() + xOffset; int y0 = y() + yOffset; int x1 = x0 + width(); int y1 = y0 + height(); bool haveText = !pText.isEmpty(); bool isDown = (state & (WBUT_DOWN | WBUT_LOCK | WBUT_CLICKLOCK)) != 0; bool isDisabled = (state & WBUT_DISABLE) != 0; bool isHighlight = (state & WBUT_HIGHLIGHT) != 0; // Display the button. if (!images.normal.isNull()) { iV_DrawImage(images.normal, x0, y0); if (isDown && !images.down.isNull()) { iV_DrawImage(images.down, x0, y0); } if (isDisabled && !images.disabled.isNull()) { iV_DrawImage(images.disabled, x0, y0); } if (isHighlight && !images.highlighted.isNull()) { iV_DrawImage(images.highlighted, x0, y0); } } else { iV_ShadowBox(x0, y0, x1, y1, 0, WZCOL_FORM_LIGHT, isDisabled ? WZCOL_FORM_LIGHT : WZCOL_FORM_DARK, WZCOL_FORM_BACKGROUND); if (isHighlight) { iV_Box(x0 + 2, y0 + 2, x1 - 3, y1 - 3, WZCOL_FORM_HILITE); } } if (haveText) { int fw = iV_GetTextWidth(pText.toUtf8().c_str(), FontID); int fx = x0 + (width() - fw) / 2; int fy = y0 + (height() - iV_GetTextLineSize(FontID)) / 2 - iV_GetTextAboveBase(FontID); if (isDisabled) { iV_SetTextColour(WZCOL_FORM_LIGHT); iV_DrawText(pText.toUtf8().c_str(), fx + 1, fy + 1, FontID); iV_SetTextColour(WZCOL_FORM_DISABLE); } else { iV_SetTextColour(WZCOL_FORM_TEXT); } iV_DrawText(pText.toUtf8().c_str(), fx, fy, FontID); } if (isDisabled && !images.normal.isNull() && images.disabled.isNull()) { // disabled, render something over it! iV_TransBoxFill(x0, y0, x0 + width(), y0 + height()); } }
// Render a window frame. // void RenderWindowFrame(FRAMETYPE frame, UDWORD x, UDWORD y, UDWORD Width, UDWORD Height, const glm::mat4 &modelViewProjectionMatrix) { SWORD WTopRight = 0; SWORD WTopLeft = 0; SWORD WBottomRight = 0; SWORD WBottomLeft = 0; SWORD HTopRight = 0; SWORD HTopLeft = 0; SWORD HBottomRight = 0; SWORD HBottomLeft = 0; UWORD RectI; const FRAMERECT *Rect; const IMAGEFRAME *Frame = (frame == FRAME_NORMAL) ? &FrameNormal : &FrameRadar; x += Frame->OffsetX0; y += Frame->OffsetY0; Width -= Frame->OffsetX1 + Frame->OffsetX0; Height -= Frame->OffsetY1 + Frame->OffsetY0; for (RectI = 0; RectI < 5; RectI++) { Rect = &Frame->FRect[RectI]; switch (Rect->Type) { case FR_FRAME: iV_TransBoxFill(x + Rect->TLXOffset, y + Rect->TLYOffset, x + Width - INCEND + Rect->BRXOffset, y + Height - INCEND + Rect->BRYOffset); break; case FR_LEFT: iV_TransBoxFill(x + Rect->TLXOffset, y + Rect->TLYOffset, x + Rect->BRXOffset, y + Height - INCEND + Rect->BRYOffset); break; case FR_RIGHT: iV_TransBoxFill(x + Width - INCEND + Rect->TLXOffset, y + Rect->TLYOffset, x + Width - INCEND + Rect->BRXOffset, y + Height - INCEND + Rect->BRYOffset); break; case FR_TOP: iV_TransBoxFill(x + Rect->TLXOffset, y + Rect->TLYOffset, x + Width - INCEND + Rect->BRXOffset, y + Rect->BRYOffset); break; case FR_BOTTOM: iV_TransBoxFill(x + Rect->TLXOffset, y + Height - INCEND + Rect->TLYOffset, x + Width - INCEND + Rect->BRXOffset, y + Height - INCEND + Rect->BRYOffset); break; case FR_IGNORE: break; // ignored } } if (Frame->TopLeft >= 0) { WTopLeft = (SWORD)iV_GetImageWidth(IntImages, Frame->TopLeft); HTopLeft = (SWORD)iV_GetImageHeight(IntImages, Frame->TopLeft); iV_DrawImage(IntImages, Frame->TopLeft, x, y); } if (Frame->TopRight >= 0) { WTopRight = (SWORD)iV_GetImageWidth(IntImages, Frame->TopRight); HTopRight = (SWORD)iV_GetImageHeight(IntImages, Frame->TopRight); iV_DrawImage(IntImages, Frame->TopRight, x + Width - WTopRight, y); } if (Frame->BottomRight >= 0) { WBottomRight = (SWORD)iV_GetImageWidth(IntImages, Frame->BottomRight); HBottomRight = (SWORD)iV_GetImageHeight(IntImages, Frame->BottomRight); iV_DrawImage(IntImages, Frame->BottomRight, x + Width - WBottomRight, y + Height - HBottomRight); } if (Frame->BottomLeft >= 0) { WBottomLeft = (SWORD)iV_GetImageWidth(IntImages, Frame->BottomLeft); HBottomLeft = (SWORD)iV_GetImageHeight(IntImages, Frame->BottomLeft); iV_DrawImage(IntImages, Frame->BottomLeft, x, y + Height - HBottomLeft); } if (Frame->TopEdge >= 0) { iV_DrawImageRepeatX(IntImages, Frame->TopEdge, x + iV_GetImageWidth(IntImages, Frame->TopLeft), y, Width - WTopLeft - WTopRight, modelViewProjectionMatrix); } if (Frame->BottomEdge >= 0) { iV_DrawImageRepeatX(IntImages, Frame->BottomEdge, x + WBottomLeft, y + Height - iV_GetImageHeight(IntImages, Frame->BottomEdge), Width - WBottomLeft - WBottomRight, modelViewProjectionMatrix); } if (Frame->LeftEdge >= 0) { iV_DrawImageRepeatY(IntImages, Frame->LeftEdge, x, y + HTopLeft, Height - HTopLeft - HBottomLeft, modelViewProjectionMatrix); } if (Frame->RightEdge >= 0) { iV_DrawImageRepeatY(IntImages, Frame->RightEdge, x + Width - iV_GetImageWidth(IntImages, Frame->RightEdge), y + HTopRight, Height - HTopRight - HBottomRight, modelViewProjectionMatrix); } }
static void DrawNorth(void) { iV_DrawImage(IntImages, RADAR_NORTH, -((radarWidth / 2.0) + (IntImages->ImageDefs[RADAR_NORTH].Width) + 1) , -(radarHeight / 2.0)); }
// //////////////////////////////////////////////////////////////////////////// // show warzone logo static void displayLogo(WIDGET *psWidget, UDWORD xOffset, UDWORD yOffset, WZ_DECL_UNUSED PIELIGHT *pColours) { iV_DrawImage(FrontImages,IMAGE_FE_LOGO,xOffset+psWidget->x,yOffset+psWidget->y); }
// ----------------------------------------------------------------------------------- static void drawStatBars(void) { UDWORD index; bool bMoreBars; UDWORD x,y; UDWORD width,height; if(!bDispStarted) { bDispStarted = true; dispST = gameTime2; audio_PlayTrack(ID_SOUND_BUTTON_CLICK_5); } fillUpStats(); pie_UniTransBoxFill(16 + D_W, MT_Y_POS - 16, pie_GetVideoBufferWidth() - D_W - 16, MT_Y_POS + 256+16, WZCOL_SCORE_BOX); iV_Box(16 + D_W, MT_Y_POS - 16, pie_GetVideoBufferWidth() - D_W - 16, MT_Y_POS + 256+16, WZCOL_SCORE_BOX_BORDER); iV_DrawText( _("Unit Losses"), LC_X + D_W, 80 + 16 + D_H ); iV_DrawText( _("Structure Losses"), LC_X + D_W, 140 + 16 + D_H ); iV_DrawText( _("Force Information"), LC_X + D_W, 200 + 16 + D_H ); index = 0; bMoreBars = true; while(bMoreBars) { /* Is it time to display this bar? */ if( infoBars[index].bActive) { /* Has it been queued before? */ if(infoBars[index].bQueued == false) { /* Don't do this next time...! */ infoBars[index].bQueued = true; /* Play a sound */ // audio_PlayTrack(ID_SOUND_BUTTON_CLICK_5); } x = infoBars[index].topX+D_W; y = infoBars[index].topY+D_H; width = infoBars[index].width; height = infoBars[index].height; iV_Box(x, y, x + width, y + height, WZCOL_BLACK); /* Draw the background border box */ pie_BoxFill(x - 1, y - 1, x + width + 1, y + height + 1, WZCOL_MENU_BACKGROUND); /* Draw the interior grey */ pie_BoxFill(x, y, x + width, y + height, WZCOL_MENU_SCORES_INTERIOR); if( ((gameTime2 - dispST) > infoBars[index].queTime) ) { /* Now draw amount filled */ const float mul = (gameTime2 - dispST < BAR_CRAWL_TIME) ? (float)(gameTime2 - dispST) / (float)BAR_CRAWL_TIME : 1.f; const float length = (float)infoBars[index].percent / 100.f * (float)infoBars[index].width * mul; if((int)length > 4) { /* Black shadow */ pie_BoxFill(x + 1, y + 3, x + length - 1, y + height - 1, WZCOL_MENU_SHADOW); /* Solid coloured bit */ pie_BoxFill(x + 1, y + 2, x + length - 4, y + height - 4, getColour(index)); } } /* Now render the text by the bar */ sprintf(text, getDescription((MR_STRING)infoBars[index].stringID), infoBars[index].number); iV_DrawText(text, x + width + 16, y + 12); /* If we're beyond STAT_ROOKIE, then we're on rankings */ if(index>=STAT_GREEN && index <= STAT_ACE) { iV_DrawImage(IntImages,(UWORD)(IMAGE_LEV_0 + (index - STAT_GREEN)),x-8,y+2); } } /* Move onto the next bar */ index++; if(infoBars[index].topX == 0 && infoBars[index].topY == 0) { bMoreBars = false; } } dispAdditionalInfo(); }
void scoreDataToScreen(WIDGET *psWidget, ScoreDataToScreenCache& cache) { int index, x, y, width, height; bool bMoreBars; if (!bDispStarted) { bDispStarted = true; dispST = realTime; audio_PlayTrack(ID_SOUND_BUTTON_CLICK_5); } fillUpStats(); pie_UniTransBoxFill(16 + D_W, MT_Y_POS - 16, pie_GetVideoBufferWidth() - D_W - 16, MT_Y_POS + 256 + 16, WZCOL_SCORE_BOX); iV_Box(16 + D_W, MT_Y_POS - 16, pie_GetVideoBufferWidth() - D_W - 16, MT_Y_POS + 256 + 16, WZCOL_SCORE_BOX_BORDER); cache.wzLabelText_UnitLosses.setText(_("Unit Losses"), font_regular); cache.wzLabelText_UnitLosses.render(LC_X + D_W, 80 + 16 + D_H, WZCOL_FORM_TEXT); cache.wzLabelText_StructureLosses.setText(_("Structure Losses"), font_regular); cache.wzLabelText_StructureLosses.render(LC_X + D_W, 140 + 16 + D_H, WZCOL_FORM_TEXT); cache.wzLabelText_ForceInformation.setText(_("Force Information"), font_regular); cache.wzLabelText_ForceInformation.render(LC_X + D_W, 200 + 16 + D_H, WZCOL_FORM_TEXT); index = 0; bMoreBars = true; while (bMoreBars) { /* Is it time to display this bar? */ if (infoBars[index].bActive) { /* Has it been queued before? */ if (infoBars[index].bQueued == false) { /* Don't do this next time...! */ infoBars[index].bQueued = true; /* Play a sound */ audio_PlayTrack(ID_SOUND_BUTTON_CLICK_5); } x = infoBars[index].topX + D_W; y = infoBars[index].topY + D_H; width = infoBars[index].width; height = infoBars[index].height; iV_Box(x, y, x + width, y + height, WZCOL_BLACK); /* Draw the background border box */ pie_BoxFill(x - 1, y - 1, x + width + 1, y + height + 1, WZCOL_MENU_BACKGROUND); /* Draw the interior grey */ pie_BoxFill(x, y, x + width, y + height, WZCOL_MENU_SCORES_INTERIOR); if (((realTime - dispST) > infoBars[index].queTime)) { /* Now draw amount filled */ const float mul = (realTime - dispST < BAR_CRAWL_TIME) ? (float)(realTime - dispST) / (float)BAR_CRAWL_TIME : 1.f; const float length = (float)infoBars[index].percent / 100.f * (float)infoBars[index].width * mul; if ((int)length > 4) { /* Black shadow */ pie_BoxFill(x + 1, y + 3, x + length - 1, y + height - 1, WZCOL_MENU_SHADOW); /* Solid coloured bit */ pie_BoxFill(x + 1, y + 2, x + length - 4, y + height - 4, getColour(index)); } } /* Now render the text by the bar */ sprintf(text, getDescription((MR_STRING)infoBars[index].stringID), infoBars[index].number); if (index >= cache.wzInfoBarText.size()) { cache.wzInfoBarText.resize(index + 1); } cache.wzInfoBarText[index].setText(text, font_regular); cache.wzInfoBarText[index].render(x + width + 16, y + 12, WZCOL_FORM_TEXT); /* If we're beyond STAT_ROOKIE, then we're on rankings */ if (index >= STAT_GREEN && index <= STAT_ACE) { iV_DrawImage(IntImages, (UWORD)(IMAGE_LEV_0 + (index - STAT_GREEN)), x - 8, y + 2); } } /* Move onto the next bar */ index++; if ((index > STAT_ACE) || (infoBars[index].topX == 0 && infoBars[index].topY == 0)) { bMoreBars = false; } } /* We now need to display the mission time, game time, average unit experience level an number of artefacts found */ /* Firstly, top of the screen, number of artefacts found */ sprintf(text, _("ARTIFACTS RECOVERED: %d"), missionData.artefactsFound); cache.wzInfoText_ArtifactsFound.setText(text, font_regular); cache.wzInfoText_ArtifactsFound.render((pie_GetVideoBufferWidth() - cache.wzInfoText_ArtifactsFound.width()) / 2, 300 + D_H, WZCOL_FORM_TEXT); /* Get the mission result time in a string - and write it out */ getAsciiTime((char *)&text2, gameTime - missionData.missionStarted); sprintf(text, _("Mission Time - %s"), text2); cache.wzInfoText_MissionTime.setText(text, font_regular); cache.wzInfoText_MissionTime.render((pie_GetVideoBufferWidth() - cache.wzInfoText_MissionTime.width()) / 2, 320 + D_H, WZCOL_FORM_TEXT); /* Write out total game time so far */ getAsciiTime((char *)&text2, gameTime); sprintf(text, _("Total Game Time - %s"), text2); cache.wzInfoText_TotalGameTime.setText(text, font_regular); cache.wzInfoText_TotalGameTime.render((pie_GetVideoBufferWidth() - cache.wzInfoText_TotalGameTime.width()) / 2, 340 + D_H, WZCOL_FORM_TEXT); if (Cheated) { // A quick way to flash the text PIELIGHT cheatedTextColor = ((realTime / 250) % 2) ? WZCOL_RED : WZCOL_YELLOW; sprintf(text, "%s", _("You cheated!")); cache.wzInfoText_Cheated.setText(text, font_regular); cache.wzInfoText_Cheated.render((pie_GetVideoBufferWidth() - cache.wzInfoText_Cheated.width()) / 2, 360 + D_H, cheatedTextColor); } }
/*Displays the buttons used on the intelligence map */ void intDisplayMessageButton(WIDGET *psWidget, UDWORD xOffset, UDWORD yOffset, WZ_DECL_UNUSED PIELIGHT *pColours) { W_CLICKFORM *psButton = (W_CLICKFORM*)psWidget; RENDERED_BUTTON *psBuffer = (RENDERED_BUTTON*)psButton->pUserData; MESSAGE *psMsg; BOOL Hilight = false; UDWORD Down = 0, IMDType = 0, compID; SDWORD image = -1; RESEARCH *pResearch = NULL; BASE_STATS *psResGraphic = NULL; BOOL MovieButton = false; OpenButtonRender((UWORD)(xOffset+psButton->x), (UWORD)(yOffset+psButton->y), psButton->width, psButton->height); Down = psButton->state & (WBUTS_DOWN | WBUTS_CLICKLOCK); Hilight = psButton->state & WBUTS_HILITE; // Get the object associated with this widget. psMsg = (MESSAGE *)psBuffer->Data; ASSERT_OR_RETURN( , psMsg != NULL, "psBuffer->Data empty. Why?" ); //shouldn't have any proximity messages here... if (psMsg->type == MSG_PROXIMITY) { return; } //set the graphic for the button switch (psMsg->type) { case MSG_RESEARCH: pResearch = getResearchForMsg((VIEWDATA *)psMsg->pViewData); //IMDType = IMDTYPE_RESEARCH; //set the IMDType depending on what stat is associated with the research if (pResearch && pResearch->psStat) { //we have a Stat associated with this research topic if (StatIsStructure(pResearch->psStat)) { //this defines how the button is drawn IMDType = IMDTYPE_STRUCTURESTAT; psResGraphic = pResearch->psStat; } else { compID = StatIsComponent(pResearch->psStat); if (compID != COMP_UNKNOWN) { //this defines how the button is drawn IMDType = IMDTYPE_COMPONENT; psResGraphic = pResearch->psStat; } else { ASSERT( false, "intDisplayMessageButton: invalid stat" ); IMDType = IMDTYPE_RESEARCH; psResGraphic = (BASE_STATS *)pResearch; } } } else { //no Stat for this research topic so use the research topic to define what is drawn psResGraphic = (BASE_STATS *)pResearch; IMDType = IMDTYPE_RESEARCH; } break; case MSG_CAMPAIGN: image = IMAGE_INTEL_CAMPAIGN; MovieButton = true; break; case MSG_MISSION: image = IMAGE_INTEL_MISSION; MovieButton = true; break; default: debug( LOG_ERROR, "Unknown message type: %i", psMsg->type ); return; } //if research message if (pResearch) { if (pResearch->iconID != NO_RESEARCH_ICON) { image = pResearch->iconID; } //do we have the same icon for the top right hand corner? if (image > 0) { RenderToButton(IntImages, (UWORD)image, psResGraphic, selectedPlayer, psBuffer,Down, IMDType, TOPBUTTON); } else { RenderToButton(NULL,0,pResearch,selectedPlayer,psBuffer,Down,IMDType,TOPBUTTON); //ajl, changed from 0 to selectedPlayer } } else //draw buttons for mission and general messages { if (image > 0) { if(MovieButton) { // draw the button with the relevant image, don't add Down to the image ID if it's // a movie button. RenderImageToButton(IntImages,(UWORD)(image),psBuffer,Down,TOPBUTTON); } else { //draw the button with the relevant image RenderImageToButton(IntImages,(UWORD)(image+Down),psBuffer,Down,TOPBUTTON); } } } CloseButtonRender(); if (Hilight) { iV_DrawImage(IntImages,IMAGE_BUT_HILITE,xOffset+psButton->x, yOffset+psButton->y); } }
// Render a window frame. // static void RenderWindow(FRAMETYPE frame, UDWORD x, UDWORD y, UDWORD Width, UDWORD Height, bool Opaque) { SWORD WTopRight = 0; SWORD WTopLeft = 0; SWORD WBottomRight = 0; SWORD WBottomLeft = 0; SWORD HTopRight = 0; SWORD HTopLeft = 0; SWORD HBottomRight = 0; SWORD HBottomLeft = 0; UWORD RectI; FRAMERECT *Rect; bool Masked = false; IMAGEFRAME *Frame; if (frame == 0) { Frame = &FrameNormal; } else { Frame = &FrameRadar; } x += Frame->OffsetX0; y += Frame->OffsetY0; Width -= Frame->OffsetX1+Frame->OffsetX0; Height -= Frame->OffsetY1+Frame->OffsetY0; for(RectI=0; RectI<5; RectI++) { Rect = &Frame->FRect[RectI]; switch(Rect->Type) { case FR_FRAME: if(Opaque==false) { if(Masked == false) { Width &= 0xfffc; // Software transboxfill needs to be a multiple of 4 pixels. Masked = true; } iV_TransBoxFill( x+Rect->TLXOffset, y+Rect->TLYOffset, x+Width-INCEND+Rect->BRXOffset, y+Height-INCEND+Rect->BRYOffset); } else { pie_BoxFill(x + Rect->TLXOffset, y + Rect->TLYOffset, x + Width - INCEND + Rect->BRXOffset, y + Height - INCEND + Rect->BRYOffset, psPalette[Rect->ColourIndex]); } break; case FR_LEFT: if(Opaque==false) { if(Masked == false) { Width &= 0xfffc; // Software transboxfill needs to be a multiple of 4 pixels. Masked = true; } iV_TransBoxFill( x+Rect->TLXOffset, y+Rect->TLYOffset, x+Rect->BRXOffset, y+Height-INCEND+Rect->BRYOffset); } else { pie_BoxFill(x + Rect->TLXOffset, y + Rect->TLYOffset, x + Rect->BRXOffset, y + Height - INCEND + Rect->BRYOffset, psPalette[Rect->ColourIndex]); } break; case FR_RIGHT: if(Opaque==false) { if(Masked == false) { Width &= 0xfffc; // Software transboxfill needs to be a multiple of 4 pixels. Masked = true; } iV_TransBoxFill( x+Width-INCEND+Rect->TLXOffset, y+Rect->TLYOffset, x+Width-INCEND+Rect->BRXOffset, y+Height-INCEND+Rect->BRYOffset); } else { pie_BoxFill(x + Width - INCEND + Rect->TLXOffset, y + Rect->TLYOffset, x + Width - INCEND + Rect->BRXOffset, y + Height - INCEND + Rect->BRYOffset, psPalette[Rect->ColourIndex]); } break; case FR_TOP: if(Opaque==false) { if(Masked == false) { Width &= 0xfffc; // Software transboxfill needs to be a multiple of 4 pixels. Masked = true; } iV_TransBoxFill( x+Rect->TLXOffset, y+Rect->TLYOffset, x+Width-INCEND+Rect->BRXOffset, y+Rect->BRYOffset); } else { pie_BoxFill(x + Rect->TLXOffset, y + Rect->TLYOffset, x + Width - INCEND + Rect->BRXOffset, y + Rect->BRYOffset, psPalette[Rect->ColourIndex]); } break; case FR_BOTTOM: if(Opaque==false) { if(Masked == false) { Width &= 0xfffc; // Software transboxfill needs to be a multiple of 4 pixels. Masked = true; } iV_TransBoxFill( x+Rect->TLXOffset, y+Height-INCEND+Rect->TLYOffset, x+Width-INCEND+Rect->BRXOffset, y+Height-INCEND+Rect->BRYOffset); } else { pie_BoxFill(x + Rect->TLXOffset, y + Height - INCEND + Rect->TLYOffset, x + Width - INCEND + Rect->BRXOffset, y + Height - INCEND + Rect->BRYOffset, psPalette[Rect->ColourIndex]); } break; case FR_IGNORE: break; // ignored } } if(Frame->TopLeft >= 0) { WTopLeft = (SWORD)iV_GetImageWidth(IntImages,Frame->TopLeft); HTopLeft = (SWORD)iV_GetImageHeight(IntImages,Frame->TopLeft); iV_DrawImage(IntImages,Frame->TopLeft,x,y); } if(Frame->TopRight >= 0) { WTopRight = (SWORD)iV_GetImageWidth(IntImages,Frame->TopRight); HTopRight = (SWORD)iV_GetImageHeight(IntImages,Frame->TopRight); iV_DrawImage(IntImages,Frame->TopRight,x+Width-WTopRight, y); } if(Frame->BottomRight >= 0) { WBottomRight = (SWORD)iV_GetImageWidth(IntImages,Frame->BottomRight); HBottomRight = (SWORD)iV_GetImageHeight(IntImages,Frame->BottomRight); iV_DrawImage(IntImages,Frame->BottomRight,x+Width-WBottomRight,y+Height-HBottomRight); } if(Frame->BottomLeft >= 0) { WBottomLeft = (SWORD)iV_GetImageWidth(IntImages,Frame->BottomLeft); HBottomLeft = (SWORD)iV_GetImageHeight(IntImages,Frame->BottomLeft); iV_DrawImage(IntImages,Frame->BottomLeft,x,y+Height-HBottomLeft); } if(Frame->TopEdge >= 0) { iV_DrawImageRect( IntImages, Frame->TopEdge, x + iV_GetImageWidth(IntImages, Frame->TopLeft), y, Width - WTopLeft - WTopRight, iV_GetImageHeight(IntImages, Frame->TopEdge) ); } if(Frame->BottomEdge >= 0) { iV_DrawImageRect( IntImages, Frame->BottomEdge, x + WBottomLeft, y + Height - iV_GetImageHeight(IntImages, Frame->BottomEdge), Width - WBottomLeft - WBottomRight, iV_GetImageHeight(IntImages, Frame->BottomEdge) ); } if(Frame->LeftEdge >= 0) { iV_DrawImageRect( IntImages, Frame->LeftEdge, x, y + HTopLeft, iV_GetImageWidth(IntImages, Frame->LeftEdge), Height - HTopLeft - HBottomLeft ); } if(Frame->RightEdge >= 0) { iV_DrawImageRect( IntImages, Frame->RightEdge, x + Width - iV_GetImageWidth(IntImages, Frame->RightEdge), y + HTopRight, iV_GetImageWidth(IntImages, Frame->RightEdge), Height - HTopRight - HBottomRight ); } }
static void DrawNorth(const glm::mat4 &modelViewProjectionMatrix) { iV_DrawImage(IntImages, RADAR_NORTH, -((radarWidth / 2.0) + iV_GetImageWidth(IntImages, RADAR_NORTH) + 1), -(radarHeight / 2.0), modelViewProjectionMatrix); }