117 lines
3.6 KiB
C
117 lines
3.6 KiB
C
//
|
|
// Created by bruno on 4/24/25.
|
|
//
|
|
|
|
#include "util.h"
|
|
//#include "font.h"
|
|
|
|
//The window we'll be rendering to
|
|
SDL_Window *window = NULL;
|
|
volatile bool running = true;
|
|
|
|
//The surface contained by the window
|
|
SDL_Renderer *renderer = NULL;
|
|
|
|
SDL_Texture* createFlippedTexture(SDL_Renderer* renderer, SDL_Texture* src, SDL_RendererFlip flip) {
|
|
int w, h;
|
|
SDL_QueryTexture(src, NULL, NULL, &w, &h);
|
|
|
|
SDL_Texture *renderTarget = SDL_GetRenderTarget(renderer);
|
|
|
|
SDL_Texture* target = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, w, h);
|
|
SDL_SetRenderTarget(renderer, target);
|
|
SDL_RenderCopyEx(renderer, src, NULL, NULL, 0, NULL, flip);
|
|
SDL_SetRenderTarget(renderer, renderTarget);
|
|
|
|
return target;
|
|
}
|
|
|
|
SDL_Texture* createRotatedTexture(SDL_Renderer* renderer, SDL_Texture* src, double angle) {
|
|
int w, h;
|
|
SDL_QueryTexture(src, NULL, NULL, &w, &h);
|
|
SDL_Texture *renderTarget = SDL_GetRenderTarget(renderer);
|
|
|
|
SDL_Texture* target = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, w, h);
|
|
SDL_SetRenderTarget(renderer, target);
|
|
SDL_RenderCopyEx(renderer, src, NULL, NULL, angle, NULL, SDL_FLIP_NONE);
|
|
SDL_SetRenderTarget(renderer, renderTarget);
|
|
|
|
return target;
|
|
}
|
|
|
|
SDL_Texture* ScaleTexture(SDL_Renderer* renderer, SDL_Texture* src, int newWidth, int newHeight) {
|
|
SDL_Texture* scaledTex = SDL_CreateTexture(renderer,
|
|
SDL_PIXELFORMAT_RGBA8888,
|
|
SDL_TEXTUREACCESS_TARGET,
|
|
newWidth,
|
|
newHeight);
|
|
|
|
if (!scaledTex) {
|
|
SDL_Log("Failed to create target texture: %s", SDL_GetError());
|
|
return nullptr;
|
|
}
|
|
|
|
// Save current render target
|
|
SDL_Texture* oldTarget = SDL_GetRenderTarget(renderer);
|
|
|
|
SDL_SetRenderTarget(renderer, scaledTex);
|
|
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0);
|
|
SDL_RenderClear(renderer);
|
|
|
|
SDL_Rect dst = { 0, 0, newWidth, newHeight };
|
|
SDL_RenderCopy(renderer, src, NULL, &dst);
|
|
|
|
SDL_SetRenderTarget(renderer, oldTarget); // Restore
|
|
|
|
return scaledTex;
|
|
}
|
|
|
|
void DrawThickRect(SDL_Renderer* renderer, SDL_Rect rect, int thickness) {
|
|
for (int i = 0; i < thickness; i++) {
|
|
SDL_Rect r = { rect.x - i, rect.y - i, rect.w + i * 2, rect.h + i * 2 };
|
|
SDL_RenderDrawRect(renderer, &r);
|
|
}
|
|
}
|
|
|
|
void renderBar(SDL_Renderer *renderer,
|
|
int x, int y, int width, int height,
|
|
int maxValue, int currentValue,
|
|
SDL_Color barColor, int margin)
|
|
{
|
|
if (maxValue <= 0) return; // Avoid division by zero
|
|
|
|
// Clamp value
|
|
if (currentValue < 0) currentValue = 0;
|
|
if (currentValue == 0) {
|
|
return;
|
|
}
|
|
if (currentValue > maxValue) currentValue = maxValue;
|
|
|
|
// Calculate filled width based on currentValue
|
|
int filledWidth = (width * currentValue) / maxValue;
|
|
|
|
// Bar rectangle
|
|
SDL_Rect barRect = { x, y, filledWidth, height };
|
|
|
|
// Background rectangle with margin
|
|
SDL_Rect bgRect = {
|
|
x - margin,
|
|
y - margin,
|
|
width + margin * 2,
|
|
height + margin * 2
|
|
};
|
|
|
|
// Draw background (black)
|
|
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
|
|
SDL_RenderFillRect(renderer, &bgRect);
|
|
|
|
// Draw bar with provided color
|
|
SDL_SetRenderDrawColor(renderer, barColor.r, barColor.g, barColor.b, barColor.a);
|
|
SDL_RenderFillRect(renderer, &barRect);
|
|
|
|
char barString[20];
|
|
sprintf(barString, "%d/%d", currentValue, maxValue);
|
|
|
|
//renderText(renderer, fonts[3], barString, width / 2, margin);
|
|
}
|