Skip to content

Commit

Permalink
Clean up DoBlitScreen
Browse files Browse the repository at this point in the history
  • Loading branch information
AJenbo committed Sep 15, 2024
1 parent fc45738 commit 8128086
Showing 1 changed file with 20 additions and 25 deletions.
45 changes: 20 additions & 25 deletions Source/engine/render/scrollrt.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1285,23 +1285,19 @@ void DrawFPS(const Surface &out)

/**
* @brief Update part of the screen from the back buffer
* @param x Back buffer coordinate
* @param y Back buffer coordinate
* @param w Back buffer coordinate
* @param h Back buffer coordinate
*/
void DoBlitScreen(int x, int y, int w, int h)
void DoBlitScreen(Rectangle area)
{
#ifdef DEBUG_DO_BLIT_SCREEN
const Surface &out = GlobalBackBuffer();
const uint8_t debugColor = PAL8_RED;
DrawHorizontalLine(out, Point(x, y), w, debugColor);
DrawHorizontalLine(out, Point(x, y + h - 1), w, debugColor);
DrawVerticalLine(out, Point(x, y), h, debugColor);
DrawVerticalLine(out, Point(x + w - 1, y), h, debugColor);
DrawHorizontalLine(out, area.position, area.size.width, debugColor);
DrawHorizontalLine(out, area.position + Displacement { 0, area.size.height - 1 }, area.size.width, debugColor);
DrawVerticalLine(out, area.position, area.size.height, debugColor);
DrawVerticalLine(out, area.position + Displacement { area.size.width - 1, 0 }, area.size.height, debugColor);
#endif
SDL_Rect srcRect = MakeSdlRect(x, y, w, h);
SDL_Rect dstRect = MakeSdlRect(x, y, w, h);
SDL_Rect srcRect = MakeSdlRect(area);
SDL_Rect dstRect = MakeSdlRect(area);
BltFast(&srcRect, &dstRect);
}

Expand All @@ -1324,43 +1320,42 @@ void DrawMain(int dwHgt, bool drawDesc, bool drawHp, bool drawMana, bool drawSba
assert(dwHgt >= 0 && dwHgt <= gnScreenHeight);

if (dwHgt > 0) {
DoBlitScreen(0, 0, gnScreenWidth, dwHgt);
DoBlitScreen({ { 0, 0 }, { gnScreenWidth, dwHgt } });
}
if (dwHgt < gnScreenHeight) {
const Point mainPanelPosition = GetMainPanel().position;
if (drawSbar) {
DoBlitScreen(mainPanelPosition.x + 204, mainPanelPosition.y + 5, 232, 28);
DoBlitScreen({ mainPanelPosition + Displacement { 204, 5 }, { 232, 28 } });
}
if (drawDesc) {
if (talkflag) {
// When chat input is displayed, the belt is hidden and the chat moves up.
DoBlitScreen(mainPanelPosition.x + 171, mainPanelPosition.y + 6, 298, 116);
DoBlitScreen({ mainPanelPosition + Displacement { 171, 6 }, { 298, 116 } });
} else {
DoBlitScreen(mainPanelPosition.x + InfoBoxTopLeft.deltaX, mainPanelPosition.y + InfoBoxTopLeft.deltaY,
InfoBoxSize.width, InfoBoxSize.height);
DoBlitScreen({ mainPanelPosition + InfoBoxTopLeft, InfoBoxSize });
}
}
if (drawMana) {
DoBlitScreen(mainPanelPosition.x + 460, mainPanelPosition.y, 88, 72);
DoBlitScreen(mainPanelPosition.x + 564, mainPanelPosition.y + 64, 56, 56);
DoBlitScreen({ mainPanelPosition + Displacement { 460, 0 }, { 88, 72 } });
DoBlitScreen({ mainPanelPosition + Displacement { 564, 64 }, { 56, 56 } });
}
if (drawHp) {
DoBlitScreen(mainPanelPosition.x + 96, mainPanelPosition.y, 88, 72);
DoBlitScreen({ mainPanelPosition + Displacement { 96, 0 }, { 88, 72 } });
}
if (drawBtn) {
DoBlitScreen(mainPanelPosition.x + 8, mainPanelPosition.y + 7, 74, 114);
DoBlitScreen(mainPanelPosition.x + 559, mainPanelPosition.y + 7, 74, 48);
DoBlitScreen({ mainPanelPosition + Displacement { 8, 7 }, { 74, 114 } });
DoBlitScreen({ mainPanelPosition + Displacement { 559, 7 }, { 74, 48 } });
if (gbIsMultiplayer) {
DoBlitScreen(mainPanelPosition.x + 86, mainPanelPosition.y + 91, 34, 32);
DoBlitScreen(mainPanelPosition.x + 526, mainPanelPosition.y + 91, 34, 32);
DoBlitScreen({ mainPanelPosition + Displacement { 86, 91 }, { 34, 32 } });
DoBlitScreen({ mainPanelPosition + Displacement { 526, 91 }, { 34, 32 } });
}
}
if (PrevCursorRect.size.width != 0 && PrevCursorRect.size.height != 0) {
DoBlitScreen(PrevCursorRect.position.x, PrevCursorRect.position.y, PrevCursorRect.size.width, PrevCursorRect.size.height);
DoBlitScreen(PrevCursorRect);
}
Rectangle &cursorRect = GetDrawnCursor().rect;
if (cursorRect.size.width != 0 && cursorRect.size.height != 0) {
DoBlitScreen(cursorRect.position.x, cursorRect.position.y, cursorRect.size.width, cursorRect.size.height);
DoBlitScreen(cursorRect);
}
}
}
Expand Down

0 comments on commit 8128086

Please sign in to comment.