Gambas France BETA


Pas de compte ? Incription

Gambas sous wayland

Ce sujet est résolu.

1
AuteurMessages
valaquarus#1 Posté le 25/1/2023 à 21:21:54
-- Unus Ex Altera --Bonsoir à tous,
un petit souci avec gambas sous wayland, toutes les applications ne sont plus centrées sur mes deux écrans mais apparaissent systématiquement dans l'angle haut, gauche de mon écran principal. Une idée ou un réglage pour corriger cette gêne bizarre ?
valaquarus
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
spheris#2 Posté le 25/1/2023 à 22:03:09
Bonsoir,
Peut etre une idée. Le multi-écran n'avait pas bien été pris en charge à l'époque, et sur les dernières versions de gb3, il faut définir sur quel écran il faut afficher tes form par la commande screen[0].
Peut etre qu'une mise à jour t'a produit ce problème. Depuis quand as tu vu ce problème apparaître?
valaquarus#3 Posté le 25/1/2023 à 22:09:28
-- Unus Ex Altera --Bonsoir Sphéris,
effectivement depuis plusieurs mises à jour de mon système (pas de gambas). Je pense que c'est wayland qui en est la cause car ça le fait avec d'autres applications non écrites en gambas. pas avec Java mais avec python.
Je vais voir si screen(0) corrige cette bizarrerie.
Valaquarus
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
valaquarus#4 Posté le 25/1/2023 à 22:34:53
-- Unus Ex Altera --Bouh, Je ne comprends pas comment on se sert de screen[0]
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
spheris#5 Posté le 26/1/2023 à 20:17:47
Un petit tuto s'impose alors...
;)

Remarque: C'est vrai que pour programmer, le multi écran est quand même un sacré confort.
Le premier écran affiche le code, le deuxième l'exécution.
valaquarus#6 Posté le 26/1/2023 à 22:51:02
-- Unus Ex Altera --La doc n'est pas très bavarde sur ce thème, c'est le moins qu'on puisse dire. Fais péter le tuto !
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
spheris#7 Posté le 27/1/2023 à 15:33:48
Je regarde ça en rentrant tout à l'heure.
;)
valaquarus#8 Posté le 28/1/2023 à 16:07:30
-- Unus Ex Altera --Bonjour sphéris,
bon j'ai un peu fouiné à droite à gauche. J'ai essayé ça qui fonctionne sous Xorg :
1
ME.Move(Screens[0].Width / 2 - 180, Screens[0].Height / 2)
qui est totalement la même chose que :
1
ME.center

Le moins 180 correspond à la moitié de la largeur du formulaire à afficher au départ.
Mais je n'ai pas réussi sous wayland, cela ne fonctionne pas, l'écran affiche toujours les choses dans l'angle supérieur gauche au démarrage.

On peut afficher les écrans et leur affichage dans un click bouton ou ailleurs :
1
2
3
4
5
6
7
8
9
10
11
12
DIM iCount AS INTEGER
DIM sMessage AS STRING
DIM hScreen AS Screen

sMessage = ("<hr> <b> Propriétés des écrans branchés </b> <hr>"
FOR EACH hScreen IN Screens
sMessage &= ("Écran " & Str(iCount) & (" de hauteur ") & " = " & Screens[iCount].Height & " Pixel "
sMessage &= ("<br> écran " & Str(iCount) & (" de largeur ") & " = " & Screens[iCount].Width & " Pixel "
sMessage &= "< hr >"
INC iCount
NEXT
Message.Info(sMessage)


Valaquarus
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
spheris#9 Posté le 28/1/2023 à 21:37:00
Valaquarus,
Je ne comprends pas bien le principe de Wayland. Qu'apporte il de plus que xorg?
A l'époque sous gb2, j'avais tenté une appli multiple écran et c'était super mal géré.
Maintenant, cela semble bien mieux géré, mais uniquement sur qt5.
Je me suis un peu trop avancé, désolé, pas trop le temps en ce moment pour potasser screen...
Déjà faut deux écrans, héhé...
valaquarus#10 Posté le 28/1/2023 à 22:43:46
-- Unus Ex Altera --Pas de souci,
rien n'est urgent. L'idée était de comprendre certains fonctionnement en gambas.
D'après beaucoup de programmeurs système, wayland est l'avenir car Xorg ne va plus évoluer car trop patché et trop difficile à maintenir.
Moi je ne vois que l'utilisation qui pour avoir bien progressé n'est pas encore abouti totalement.

Pour ce qui est de gambas, le centrage ou même le déplacement d'un formulaire n'est pas gérable facilement sous wayland alors que cela ne pose pas de souci sous Xorg.
Philippe
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
valaquarus#11 Posté le 30/1/2023 à 12:26:42
-- Unus Ex Altera --J'ai une réponse de Benoît :
Hi,

Alas Wayland forbids to move a window to a specific screen absolute
position. So the result of the Move() method is usually not what you expect.

Regards,
--
Benoît Minisini.


Bon maintenant je sais pourquoi ça ne fonctionne pas sous wayland mais ça ne me dit pas comment jt'y fais pour placer ma fenêtre au centre de l'écran car même
1
ME.center
ne fonctionne pas sous wayland.

Philippe
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
spheris#12 Posté le 31/1/2023 à 00:35:17
Bricolage :
Ce que tu peux faire, tu ouvres ta form et dans l'evènement resize, tu récupères les coordonnées de X et de Y dans ta form dans un premier temps comme ceci :

1
2
3
4
5
6
7
myX AS INTEGER
myY AS INTEGER

PUBLIC SUB Form_Resize()
myx = ME.X
myy= ME.Y
END


Pourquoi?
Tout simplement pour savoir où Alan est allé mettre sa référence de moveto() de truc machin chose de benoit.
en d'autre terme, de quel offset ta fenêtre est déplacée.
Ainsi, il te suffira de calculer en fonction de ta résolution d'écran et d'ajouter un nombre dont toi seul connait le secret pour centrer ta fenêtre dans la méthode resize comme ceci :



1
2
3
4
5
6
7
myX AS INTEGER
myY AS INTEGER

PUBLIC SUB Form_Resize()
ME.X = ME.X + 456
ME.Y = ME.Y + 35
END



...En espérant que tous les offsets wayland soient les mêmes sur tous les screen[x].
Si tu t'en sens l'âme d'un debuggueur, je te laisse le soin de tester cette option... héhé
valaquarus#13 Posté le 31/1/2023 à 11:23:54
-- Unus Ex Altera --Sauf que ça ne marche pas sous wayland. Sous Xorg, pas de souci :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
DIM iCount AS INTEGER
DIM sMessage AS STRING
DIM hScreen AS Screen

sMessage = ("<hr> <b> Propriétés des écrans branchés </b> <hr>"
FOR EACH hScreen IN Screens
sMessage &= ("Écran " & Str(iCount) & (" hauteur ") & " = " & Screens[iCount].Height & " Pixel "
sMessage &= ("<br> écran " & Str(iCount) & (" largeur ") & " = " & Screens[iCount].Width & " Pixel "
sMessage &= ("<br> écran " & Str(iCount) & (" coordonnée gauche ") & " = " & Screens[iCount].X & " Pixel "
sMessage &= ("<br> écran " & Str(iCount) & (" coordonnée supérieure ") & " = " & Screens[iCount].y & " Pixel " ""
sMessage &= "< hr >"
INC iCount
NEXT
Message.Info(sMessage)

IF Screens.Count > 1 THEN
ME.Move(Screens[1].x + Screens[1].Width / 2 - 180, Screens[1].y + Screens[1].Height / 2 - 231)
ELSE
ME.Move(Screens[0].x + Screens[0].Width / 2 - 180, Screens[0].y + Screens[0].Height / 2 - 231)
ENDIF

Ici c'est pour un formulaire (360,462) d'où 180 et 231, on peut encore généraliser en prenant Me.Width/2 et Me.Height/2.
Philippe
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
valaquarus#14 Posté le 31/1/2023 à 13:59:52
-- Unus Ex Altera --La question est à quoi sert ceci, puisque cela ne centre pas le formulaire
1
ME.center

Philippe
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
1