From 5a221e5e2498ed5134584aad7fd1a66c49feb5f7 Mon Sep 17 00:00:00 2001 From: maiconpintoabreu Date: Tue, 30 Sep 2025 23:24:25 +0100 Subject: [PATCH] Show info and window position inside the rectangle --- examples/core/core_monitor_change.c | 72 +++++++++++++++----------- examples/core/core_monitor_change.png | Bin 16852 -> 17430 bytes 2 files changed, 43 insertions(+), 29 deletions(-) diff --git a/examples/core/core_monitor_change.c b/examples/core/core_monitor_change.c index 14758c3a5..8983556af 100644 --- a/examples/core/core_monitor_change.c +++ b/examples/core/core_monitor_change.c @@ -56,6 +56,13 @@ int main(void) // Update //---------------------------------------------------------------------------------- + // Variables to find the max x and Y to calculate the scale + int maxWidth = 1; + int maxHeight = 1; + + // Monitor offset is to fix when monitor position x is negative + int monitorOffsetX = 0; + // Rebuild monitors array every frame monitorCount = GetMonitorCount(); for (int i = 0; i < monitorCount; i++) @@ -69,6 +76,13 @@ int main(void) GetMonitorPhysicalHeight(i), GetMonitorRefreshRate(i) }; + if (monitors[i].position.x < monitorOffsetX) monitorOffsetX = monitors[i].position.x*-1; + + const int width = monitors[i].position.x + monitors[i].width; + const int height = monitors[i].position.y + monitors[i].height; + + if (maxWidth < width) maxWidth = width; + if (maxHeight < height) maxHeight = height; } if (IsKeyPressed(KEY_ENTER) && monitorCount > 1) @@ -76,10 +90,8 @@ int main(void) currentMonitorIndex += 1; // Set index to 0 if the last one - if(currentMonitorIndex == GetMonitorCount()) - { - currentMonitorIndex = 0; - } + if(currentMonitorIndex == monitorCount) currentMonitorIndex = 0; + SetWindowMonitor(currentMonitorIndex); // Move window to currentMonitorIndex } else @@ -89,7 +101,10 @@ int main(void) } const Monitor currentMonitor = monitors[currentMonitorIndex]; - const float monitorScale = 0.2 / monitorCount; + float monitorScale = 0.6; + + if(maxHeight > maxWidth + monitorOffsetX) monitorScale *= ((float)screenHeight/(float)maxHeight); + else monitorScale *= ((float)screenWidth/(float)(maxWidth + monitorOffsetX)); // Draw //---------------------------------------------------------------------------------- @@ -99,46 +114,45 @@ int main(void) DrawText("Press [Enter] to move window to next monitor available", 20, 20, 20, DARKGRAY); - DrawText( - TextFormat("Resolution: [%ipx x %ipx]\nRefreshRate: [%ihz]\nPhysical Size: [%imm x %imm]\nPosition: %3.2f x %3.2f", - currentMonitor.width, - currentMonitor.height, - currentMonitor.refreshRate, - currentMonitor.physicalWidth, - currentMonitor.physicalHeight, - currentMonitor.position.x, - currentMonitor.position.y - ), 30, 80, 20, GRAY); - - // List available Monitors - for (int i = 0; i < monitorCount; i++) - { - DrawText(TextFormat("%s", monitors[i].name), 40, 180 + 20*i, 20, GRAY); - if (i == currentMonitorIndex) - { - DrawCircle(30, 190 + 20*i, 5, RED); - } - } DrawRectangleLines(20, 60, screenWidth - 40, screenHeight - 100, DARKGRAY); - // Draw Monitors + // Draw Monitor Rectangles with information inside for (int i = 0; i < monitorCount; i++) { + // Calculate retangle position and size using monitorScale const Rectangle rec = (Rectangle){ - monitors[i].position.x * monitorScale + 140, - monitors[i].position.y * monitorScale + 180, + (monitors[i].position.x + monitorOffsetX) * monitorScale + 140, + monitors[i].position.y * monitorScale + 80, monitors[i].width * monitorScale, monitors[i].height * monitorScale }; + + // Draw monitor name and information inside the rectangle + DrawText(TextFormat("[%i] %s", i, monitors[i].name), rec.x + 10, rec.y + (int)(100*monitorScale), (int)(120*monitorScale), BLUE); + DrawText( + TextFormat("Resolution: [%ipx x %ipx]\nRefreshRate: [%ihz]\nPhysical Size: [%imm x %imm]\nPosition: %3.0f x %3.0f", + monitors[i].width, + monitors[i].height, + monitors[i].refreshRate, + monitors[i].physicalWidth, + monitors[i].physicalHeight, + monitors[i].position.x, + monitors[i].position.y + ), rec.x + 10, rec.y + (int)(200*monitorScale), (int)(120*monitorScale), DARKGRAY); + + // Highlight current monitor if (i == currentMonitorIndex) { DrawRectangleLinesEx(rec, 5, RED); + Vector2 windowPosition = (Vector2){ (GetWindowPosition().x + monitorOffsetX)*monitorScale + 140, GetWindowPosition().y*monitorScale + 80 }; + + // Draw window position based on monitors + DrawRectangleV(windowPosition, (Vector2){screenWidth * monitorScale, screenHeight * monitorScale}, Fade(GREEN, 0.5)); } else { DrawRectangleLinesEx(rec, 5, GRAY); } - DrawText(TextFormat("%i", i), rec.x + rec.width * 0.5 - 10, rec.y + rec.height * 0.5 - 25, 50, GRAY); } diff --git a/examples/core/core_monitor_change.png b/examples/core/core_monitor_change.png index 5b8d1aedbd658c271c540ce2dba40dc61eca28a7..81f9eed875bf8edf2c11e911cad5265418e054ed 100644 GIT binary patch delta 5434 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