J'aurais dit en utilisant Cursor.NONE, mais ca reste inutile si la version macOS ne prend pas le changement en compte. Ou alors en mettant un pointeur customisé doté d'un PNG vide, mais si la version macOS ne prend aucun curseur customisé comme ce que j'ai tester hier, c'est mal barre
En faisant plus de tests sous macOS, j'ai pu brièvement corriger le soucis en déportant l'initialisation du pointeur sur le JavaFX Application Thread en faisant a la fin de l'initiation de l'application.
Pour rappel, aucun besoin de faire ca, ou ce qui est décrit après, sous Windows et Linux.
Platform.runLater(() -> cmdrailMainScene.setCursor(theCursor));
A noter que cela fonctionne avec les pointeurs customs, mais pas les pointeurs par défaut (toujours impossible d'afficher le curseur WAIT ou NONE par exemple), mais que ce la casse presque immédiatement des qu'on sort le pointeur de la fenêtre.
J'ai ensuite rajouté :
cmdrailMainScene.onMouseEntered(event -> cmdrailMainScene.setCursor(theCursor));
Et cela fonctionne parfois(mais pas toujours) un peu plus longtemps, mais invariablement. au bout d'un certain temps et de quelques aller-retour en dehors de la fenêtre, le pointeur rebascule définitivement sur le pointeur par défaut.
Pourtant la méthode est bien invoquée comme il se doit.
Alors je me suis dit "peut-être il y a un soucis de garbage collection qui arrive trop top ?" donc j'ai changé en :
1 2 3 4 5 6 7 8 9 10
| Platform.runLater(() -> {
final var image = new Image(getClass().getResource("cursor.png").toExternalForm());
Cursor theCursor = new ImageCursor(image, image.getWidth()/2, image.getHeight()/2);
cdmrailMainScene.setCursor(theCursor);
});
cmdrailMainScene.onMouseEntered(event -> {
final var image = new Image(getClass().getResource("cursor.png").toExternalForm());
Cursor theCursor = new ImageCursor(image, image.getWidth()/2, image.getHeight()/2);
cmdrailMainScene.setCursor(theCursor));
}; |
Et la c'est la fete du slip : parfois le pointer custom est restauré lorsque je passe sur le coin supérieur gauche de la fenêtre, parfois non et on garde le pointeur par défaut.
Ah oui et j'oubliais : quand il fonctionne, souvent le pointeur custom persiste sur tout le bureau de macOS quand on sort de la fenêtre, notamment en passant par la bordure supérieure...
Parfois il persiste également plusieurs secondes apres avoir fermé le stage...
Bref, je pense que la gestion du pointeur sous macOS est boinker... pour rester poli...

Si c'est pour un jeu qu'il va falloir faire disparaître le curseur, oui ca va être gênant.
Si le curseur wait est destine a indiquer qu'il faut attendre le temps d'une initialisation ou que des traitements de longue durée s'effectuent, il y a moyen de contourner le soucis avec l'affichage d'une ProgressBar ou d'un panneau d'information par dessus l'interface, ou en désactivant la saisie souris + clavier / désactivant le composant, etc.
Partager