SelectionBox mit festen Seitenverhältnis programmieren
-
Hallo!
Ich versuche derzeit eine Art SelectionBox zu programmieren, bei der ein festes Seitenverhältnis erzwungen wird.
F---------------------+ | m | m | m | ^ <- m -> Bewegung | | m +mmmmmmmmmmmmmmmmmmmmmM | v Bewegung
Das hier ist die beispielhafte Box, so wie sie jetzt ist.
Ausgehend vom Punkt F wurde sie aufgezogen, bis zum Punkt M, an dem sich die Maus befindet. Mein Wunsch ist es jetzt, dass ich die Maus entlang dem mit "m" gekennzeichneten Rand bewegen kann und sich die Box proportional anpasst (z.B. im Verhältnis Breite/Höhe = 4/3).Das habe ich auch noch hinbekommen, mit einem Code der in etwa so aussieht:
int deltaX = MauspositionX - AlteMauspositionX; int deltaY = MauspositionY - AlteMauspositionY; // Die Seite der Box, dessen Größe "stärker" verändert wurde, bleibt erhalten // Die andere Seite wird angepasst if(deltaX > deltaY) { Box_X_Ende = Box_X_Start + neue Breite; // Höhe der Box wird proportional angepasst Box_Y_Ende = Box_Y_Start + neue Breite / aspectX * aspectY; } else { Box_Y_ende = Box_Y_Start + neue Höhe; // Breite der Box wird porportional angepasst Box_X_Ende = Box_X_Start + neue Höhe / aspectY * aspectX; }
Das funkioniert auch soweit supergut, allerdings nur in einem, und zwar dem vierten Qudranten! Hier noch eine Skizze zur Verdeutlichung:
| | II | I | ----------------F----------------> X | III | IV: In diesem Bereich darf sich die Maus befinden | | v Y
Ich möchte jetzt aber, dass ich genau dieses Verhalten über alle Quadranten hinweg nutzen kann! Allerdings habe ich das bisher noch nicht hinbekommen und wäre über Lösungsansätze, evtl. Pseudocode echt dankbar.
Hoffentlich lässt es sich einigermaßen nachvollziehen.
Danke im Voraus!