feat(mouse-tracking): add last mouse position tracking to text components and update tooltip position
This commit is contained in:
2
pom.xml
2
pom.xml
@@ -4,7 +4,7 @@
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>de.extio</groupId>
|
||||
<artifactId>game-engine</artifactId>
|
||||
<version>1.0.4</version>
|
||||
<version>1.0.5</version>
|
||||
|
||||
<properties>
|
||||
<java.version>25</java.version>
|
||||
|
||||
@@ -24,6 +24,7 @@ import java.util.function.Consumer;
|
||||
import de.extio.game_engine.renderer.ThemeManager;
|
||||
import de.extio.game_engine.renderer.g2d.bo.rendering.G2DDrawFont;
|
||||
import de.extio.game_engine.renderer.model.Theme;
|
||||
import de.extio.game_engine.spatial2.model.CoordI2;
|
||||
import de.extio.game_engine.spatial2.model.ImmutableCoordI2;
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
@@ -72,6 +73,8 @@ public class CustomMultiLineTextArea extends Component {
|
||||
private int scrollbarThumbHeight = 0;
|
||||
|
||||
private boolean scrollbarDragging = false;
|
||||
|
||||
private CoordI2 lastMousePosition;
|
||||
|
||||
private int scrollbarDragStartY = 0;
|
||||
|
||||
@@ -150,6 +153,10 @@ public class CustomMultiLineTextArea extends Component {
|
||||
public void setDirty(final boolean dirty) {
|
||||
this.dirty = dirty;
|
||||
}
|
||||
|
||||
public CoordI2 getLastMousePosition() {
|
||||
return this.lastMousePosition;
|
||||
}
|
||||
|
||||
public CustomMultiLineTextArea(final ThemeManager themeManager, final Consumer<String> onTextChanged) {
|
||||
this.themeManager = themeManager;
|
||||
@@ -295,9 +302,16 @@ public class CustomMultiLineTextArea extends Component {
|
||||
});
|
||||
|
||||
this.addMouseListener(new MouseAdapter() {
|
||||
|
||||
@Override
|
||||
public void mouseEntered(final MouseEvent e) {
|
||||
CustomMultiLineTextArea.this.lastMousePosition = ImmutableCoordI2.create(e.getX(), e.getY());
|
||||
e.consume();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mousePressed(final MouseEvent e) {
|
||||
CustomMultiLineTextArea.this.lastMousePosition = ImmutableCoordI2.create(e.getX(), e.getY());
|
||||
CustomMultiLineTextArea.this.requestFocus();
|
||||
if (!CustomMultiLineTextArea.this.enabled) {
|
||||
e.consume();
|
||||
@@ -337,17 +351,25 @@ public class CustomMultiLineTextArea extends Component {
|
||||
CustomMultiLineTextArea.this.scrollbarDragging = false;
|
||||
e.consume();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseExited(final MouseEvent e) {
|
||||
CustomMultiLineTextArea.this.lastMousePosition = null;
|
||||
e.consume();
|
||||
}
|
||||
});
|
||||
|
||||
this.addMouseMotionListener(new MouseMotionListener() {
|
||||
|
||||
@Override
|
||||
public void mouseMoved(final MouseEvent e) {
|
||||
CustomMultiLineTextArea.this.lastMousePosition = ImmutableCoordI2.create(e.getX(), e.getY());
|
||||
e.consume();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseDragged(final MouseEvent e) {
|
||||
CustomMultiLineTextArea.this.lastMousePosition = ImmutableCoordI2.create(e.getX(), e.getY());
|
||||
if (!CustomMultiLineTextArea.this.enabled) {
|
||||
e.consume();
|
||||
return;
|
||||
|
||||
@@ -20,6 +20,7 @@ import java.util.function.Consumer;
|
||||
import de.extio.game_engine.renderer.ThemeManager;
|
||||
import de.extio.game_engine.renderer.g2d.bo.rendering.G2DDrawFont;
|
||||
import de.extio.game_engine.renderer.model.Theme;
|
||||
import de.extio.game_engine.spatial2.model.CoordI2;
|
||||
import de.extio.game_engine.spatial2.model.ImmutableCoordI2;
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
@@ -55,6 +56,8 @@ public class CustomSingleLineTextField extends Component {
|
||||
|
||||
private boolean caretVisible = true;
|
||||
|
||||
private CoordI2 lastMousePosition;
|
||||
|
||||
private int cachedRawFontHeight = 0;
|
||||
|
||||
private final ThemeManager themeManager;
|
||||
@@ -115,6 +118,10 @@ public class CustomSingleLineTextField extends Component {
|
||||
this.dirty = dirty;
|
||||
}
|
||||
|
||||
public CoordI2 getLastMousePosition() {
|
||||
return this.lastMousePosition;
|
||||
}
|
||||
|
||||
public CustomSingleLineTextField(final ThemeManager themeManager, final Consumer<String> onTextChanged, final Runnable onSubmit) {
|
||||
this.themeManager = themeManager;
|
||||
this.onTextChanged = onTextChanged;
|
||||
@@ -255,8 +262,15 @@ public class CustomSingleLineTextField extends Component {
|
||||
|
||||
this.addMouseListener(new MouseAdapter() {
|
||||
|
||||
@Override
|
||||
public void mouseEntered(final MouseEvent e) {
|
||||
CustomSingleLineTextField.this.lastMousePosition = ImmutableCoordI2.create(e.getX(), e.getY());
|
||||
e.consume();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mousePressed(final MouseEvent e) {
|
||||
CustomSingleLineTextField.this.lastMousePosition = ImmutableCoordI2.create(e.getX(), e.getY());
|
||||
CustomSingleLineTextField.this.requestFocus();
|
||||
if (!CustomSingleLineTextField.this.enabled) {
|
||||
e.consume();
|
||||
@@ -285,17 +299,25 @@ public class CustomSingleLineTextField extends Component {
|
||||
public void mouseReleased(final MouseEvent e) {
|
||||
e.consume();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseExited(final MouseEvent e) {
|
||||
CustomSingleLineTextField.this.lastMousePosition = null;
|
||||
e.consume();
|
||||
}
|
||||
});
|
||||
|
||||
this.addMouseMotionListener(new MouseMotionListener() {
|
||||
|
||||
@Override
|
||||
public void mouseMoved(final MouseEvent e) {
|
||||
CustomSingleLineTextField.this.lastMousePosition = ImmutableCoordI2.create(e.getX(), e.getY());
|
||||
e.consume();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseDragged(final MouseEvent e) {
|
||||
CustomSingleLineTextField.this.lastMousePosition = ImmutableCoordI2.create(e.getX(), e.getY());
|
||||
if (!CustomSingleLineTextField.this.enabled) {
|
||||
e.consume();
|
||||
return;
|
||||
|
||||
@@ -123,6 +123,7 @@ public class G2DMultiLineTextAreaControlImpl extends G2DBaseControlImpl implemen
|
||||
this.updateAllComponentZOrder();
|
||||
}
|
||||
|
||||
this.tooltipMousePosition = this.textArea.getLastMousePosition();
|
||||
this.textArea.paint(this.bufferedImageGraphics);
|
||||
|
||||
super.render();
|
||||
|
||||
@@ -118,6 +118,7 @@ public class G2DSingleLineTextfieldControlImpl extends G2DBaseControlImpl implem
|
||||
this.updateAllComponentZOrder();
|
||||
}
|
||||
|
||||
this.tooltipMousePosition = this.textField.getLastMousePosition();
|
||||
this.textField.paint(this.bufferedImageGraphics);
|
||||
|
||||
super.render();
|
||||
|
||||
Reference in New Issue
Block a user