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