mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2024-11-28 20:32:18 -05:00
Merge pull request #56 from MaikelChan/window_drag
Improved window dragging.
This commit is contained in:
commit
2722b688be
@ -18,6 +18,7 @@ Shader shader = { 0 };
|
|||||||
Light light = { 0 };
|
Light light = { 0 };
|
||||||
Vector3 lightPos = { -5.0f, 10.0f, 10.0f };
|
Vector3 lightPos = { -5.0f, 10.0f, 10.0f };
|
||||||
Vector2 dragOffset;
|
Vector2 dragOffset;
|
||||||
|
bool isDragging = false;
|
||||||
std::string sohFolder = NULLSTR;
|
std::string sohFolder = NULLSTR;
|
||||||
bool extracting = false;
|
bool extracting = false;
|
||||||
bool rom_ready = false;
|
bool rom_ready = false;
|
||||||
@ -95,20 +96,52 @@ void OTRGame::update(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
void OTRGame::draw() {
|
void OTRGame::draw() {
|
||||||
|
Vector2 windowSize(GetScreenWidth(), GetScreenHeight());
|
||||||
|
Rectangle titlebar = Rectangle(0, 0, windowSize.x - 50, 35);
|
||||||
|
Vector2 mousePos = GetMousePosition();
|
||||||
|
Vector2 mouseDelta = GetMouseDelta();
|
||||||
|
|
||||||
|
if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT) && !isDragging &&
|
||||||
|
mousePos.x >= titlebar.x && mousePos.y >= titlebar.y && mousePos.x <= titlebar.x + titlebar.width && mousePos.y <= titlebar.y + titlebar.height) {
|
||||||
|
isDragging = true;
|
||||||
|
dragOffset = mousePos;
|
||||||
|
}
|
||||||
|
else if (IsMouseButtonReleased(MOUSE_BUTTON_LEFT) && isDragging) {
|
||||||
|
isDragging = false;
|
||||||
|
dragOffset = Vector2(0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isDragging && (mouseDelta.x != 0.0f || mouseDelta.y != 0.0f)) {
|
||||||
|
Vector2 wndPos = GetWindowPosition();
|
||||||
|
wndPos = Vector2(wndPos.x + (mousePos.x - dragOffset.x), wndPos.y + (mousePos.y - dragOffset.y));
|
||||||
|
|
||||||
|
// Calculate virtual screen total size in case there are multiple monitors
|
||||||
|
|
||||||
|
int vsX1 = 0, vsY1 = 0, vsX2 = 0, vsY2 = 0;
|
||||||
|
int monitorCount = GetMonitorCount();
|
||||||
|
|
||||||
|
for (int m = 0; m < monitorCount; m++) {
|
||||||
|
Vector2 monitorPos = GetMonitorPosition(m);
|
||||||
|
Vector2 monitorSize = Vector2(GetMonitorWidth(m), GetMonitorHeight(m));
|
||||||
|
|
||||||
|
if (monitorPos.x < vsX1) vsX1 = monitorPos.x;
|
||||||
|
if (monitorPos.y < vsY1) vsY1 = monitorPos.y;
|
||||||
|
if (monitorPos.x + monitorSize.x > vsX2) vsX2 = monitorPos.x + monitorSize.x;
|
||||||
|
if (monitorPos.y + monitorSize.y > vsY2) vsY2 = monitorPos.y + monitorSize.y;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clamp the window to the borders of the monitors
|
||||||
|
|
||||||
|
if (wndPos.x < vsX1) wndPos.x = vsX1;
|
||||||
|
if (wndPos.y < vsY1) wndPos.y = vsY1;
|
||||||
|
if (wndPos.x + windowSize.x > vsX2) wndPos.x = vsX2 - windowSize.x;
|
||||||
|
if (wndPos.y + windowSize.y > vsY2) wndPos.y = vsY2 - windowSize.y;
|
||||||
|
|
||||||
|
SetWindowPosition(wndPos.x, wndPos.y);
|
||||||
|
}
|
||||||
|
|
||||||
BeginDrawing();
|
BeginDrawing();
|
||||||
ClearBackground(Color(40, 40, 40, 255));
|
ClearBackground(Color(40, 40, 40, 255));
|
||||||
Vector3 windowSize(GetScreenWidth(), GetScreenHeight());
|
|
||||||
Rectangle titlebar = Rectangle(0, 0, windowSize.x - 50, 35);
|
|
||||||
Vector2 mousePos = Vector2(GetMouseX(), GetMouseY());
|
|
||||||
bool hoveredTitlebar = mousePos.x >= titlebar.x && mousePos.y >= titlebar.y && mousePos.x <= titlebar.x + titlebar.width && mousePos.y <= titlebar.y + titlebar.height;
|
|
||||||
|
|
||||||
if (hoveredTitlebar && IsMouseButtonDown(MOUSE_BUTTON_LEFT)) {
|
|
||||||
if (dragOffset.x == 0 && dragOffset.y == 0) dragOffset = mousePos;
|
|
||||||
Vector2 wndPos = GetWindowPosition();
|
|
||||||
|
|
||||||
SetWindowPosition(wndPos.x + (mousePos.x - dragOffset.x), wndPos.y + (mousePos.y - dragOffset.y));
|
|
||||||
}
|
|
||||||
else dragOffset = Vector2(0, 0);
|
|
||||||
|
|
||||||
DrawTexture(Textures["Frame"], 0, 0, WHITE);
|
DrawTexture(Textures["Frame"], 0, 0, WHITE);
|
||||||
|
|
||||||
@ -120,7 +153,7 @@ void OTRGame::draw() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
BeginMode3D(camera);
|
BeginMode3D(camera);
|
||||||
DrawModelEx(Models["Ship"] ,Vector3Zero(), Vector3(.0f, 1.0f, .0f), this->ModelRotation, SCALE(1.0f), WHITE);
|
DrawModelEx(Models["Ship"], Vector3Zero(), Vector3(.0f, 1.0f, .0f), this->ModelRotation, SCALE(1.0f), WHITE);
|
||||||
EndMode3D();
|
EndMode3D();
|
||||||
|
|
||||||
constexpr float text_y = 125.f;
|
constexpr float text_y = 125.f;
|
||||||
@ -129,7 +162,7 @@ void OTRGame::draw() {
|
|||||||
UIUtils::GuiShadowText("OTR Version: 1.0", 32, text_y + 30, 10, WHITE, BLACK);
|
UIUtils::GuiShadowText("OTR Version: 1.0", 32, text_y + 30, 10, WHITE, BLACK);
|
||||||
UIUtils::GuiToggle(&single_thread, "Single Thread", 32, text_y + 40, currentStep != NULLSTR);
|
UIUtils::GuiToggle(&single_thread, "Single Thread", 32, text_y + 40, currentStep != NULLSTR);
|
||||||
|
|
||||||
if(!hide_second_btn && UIUtils::GuiIconButton("Folder", "Open\nShip Folder", 109, 50, currentStep != NULLSTR, "Select your Ship of Harkinian Folder\n\nYou could use another folder\nfor development purposes")) {
|
if (!hide_second_btn && UIUtils::GuiIconButton("Folder", "Open\nShip Folder", 109, 50, currentStep != NULLSTR, "Select your Ship of Harkinian Folder\n\nYou could use another folder\nfor development purposes")) {
|
||||||
const std::string path = NativeFS->LaunchFileExplorer(LaunchType::FOLDER);
|
const std::string path = NativeFS->LaunchFileExplorer(LaunchType::FOLDER);
|
||||||
sohFolder = path;
|
sohFolder = path;
|
||||||
}
|
}
|
||||||
@ -151,7 +184,7 @@ void OTRGame::draw() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(currentStep != NULLSTR) {
|
if (currentStep != NULLSTR) {
|
||||||
DrawRectangle(0, 0, windowSize.x, windowSize.y, Color(0, 0, 0, 160));
|
DrawRectangle(0, 0, windowSize.x, windowSize.y, Color(0, 0, 0, 160));
|
||||||
DrawTexture(Textures["Modal"], windowSize.x / 2 - Textures["Modal"].width / 2, windowSize.y / 2 - Textures["Modal"].height / 2, WHITE);
|
DrawTexture(Textures["Modal"], windowSize.x / 2 - Textures["Modal"].width / 2, windowSize.y / 2 - Textures["Modal"].height / 2, WHITE);
|
||||||
UIUtils::GuiShadowText(currentStep.c_str(), 0, windowSize.y / 2, 10, WHITE, BLACK, windowSize.x, true);
|
UIUtils::GuiShadowText(currentStep.c_str(), 0, windowSize.y / 2, 10, WHITE, BLACK, windowSize.x, true);
|
||||||
|
@ -18,7 +18,7 @@ void UpdateDrawFrame(void) {
|
|||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
constexpr Vector2 windowSize = Vector2(400, 200);
|
constexpr Vector2 windowSize = Vector2(400, 200);
|
||||||
SetTargetFPS(144);
|
SetConfigFlags(FLAG_VSYNC_HINT);
|
||||||
SetConfigFlags(FLAG_WINDOW_HIGHDPI);
|
SetConfigFlags(FLAG_WINDOW_HIGHDPI);
|
||||||
SetConfigFlags(FLAG_WINDOW_UNDECORATED);
|
SetConfigFlags(FLAG_WINDOW_UNDECORATED);
|
||||||
SetConfigFlags(FLAG_MSAA_4X_HINT);
|
SetConfigFlags(FLAG_MSAA_4X_HINT);
|
||||||
|
Loading…
Reference in New Issue
Block a user