mirror of
https://github.com/Shiewk/Widgets.git
synced 2026-04-28 11:34:17 +02:00
Rework widget positioning
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
package de.shiewk.widgets;
|
||||
|
||||
import org.joml.Vector2i;
|
||||
|
||||
public enum Anchor {
|
||||
TOP_LEFT,
|
||||
TOP_CENTER,
|
||||
TOP_RIGHT,
|
||||
CENTER_LEFT,
|
||||
CENTER,
|
||||
CENTER_RIGHT,
|
||||
BOTTOM_LEFT,
|
||||
BOTTOM_CENTER,
|
||||
BOTTOM_RIGHT;
|
||||
|
||||
public int getAlignStartPosX(int scaledScreenWidth){
|
||||
return switch (this){
|
||||
case TOP_LEFT, CENTER_LEFT, BOTTOM_LEFT -> 0;
|
||||
case TOP_CENTER, CENTER, BOTTOM_CENTER -> scaledScreenWidth / 2;
|
||||
case TOP_RIGHT, CENTER_RIGHT, BOTTOM_RIGHT -> scaledScreenWidth;
|
||||
};
|
||||
}
|
||||
|
||||
public int getAlignStartPosY(int scaledScreenHeight){
|
||||
return switch (this){
|
||||
case TOP_LEFT, TOP_CENTER, TOP_RIGHT -> 0;
|
||||
case CENTER_LEFT, CENTER, CENTER_RIGHT -> scaledScreenHeight / 2;
|
||||
case BOTTOM_LEFT, BOTTOM_CENTER, BOTTOM_RIGHT -> scaledScreenHeight;
|
||||
};
|
||||
}
|
||||
|
||||
public Vector2i getTopLeft(int scaledScreenWidth, int scaledScreenHeight){
|
||||
return new Vector2i(
|
||||
// X component
|
||||
switch (this){
|
||||
case TOP_LEFT, CENTER_LEFT, BOTTOM_LEFT -> 0;
|
||||
case TOP_CENTER, CENTER, BOTTOM_CENTER -> scaledScreenWidth / 3;
|
||||
case TOP_RIGHT, CENTER_RIGHT, BOTTOM_RIGHT -> (int) (scaledScreenWidth / 3d * 2d);
|
||||
},
|
||||
// Y component
|
||||
switch (this){
|
||||
case TOP_LEFT, TOP_CENTER, TOP_RIGHT -> 0;
|
||||
case CENTER_LEFT, CENTER, CENTER_RIGHT -> scaledScreenHeight / 3;
|
||||
case BOTTOM_LEFT, BOTTOM_CENTER, BOTTOM_RIGHT -> (int) (scaledScreenHeight / 3d * 2d);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
public static Anchor getAnchor(int scaledScreenWidth, int scaledScreenHeight, int posX, int posY){
|
||||
for (Anchor anchor : values()) {
|
||||
Vector2i topLeft = anchor.getTopLeft(scaledScreenWidth, scaledScreenHeight);
|
||||
if (
|
||||
topLeft.x <= posX && topLeft.x + scaledScreenWidth / 3 >= posX &&
|
||||
topLeft.y <= posY && topLeft.y + scaledScreenHeight / 3 >= posY
|
||||
){
|
||||
return anchor;
|
||||
}
|
||||
}
|
||||
return Anchor.TOP_LEFT;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user