Page 1 sur 1

Equivalent de #WM_LBUTTONDOWN sous linux

Publié : mer. 12/mai/2010 16:16
par Geo Trouvpatou
Salut.

Je résume le début de conversation d'un autre post avec G-Rom :
Geo Trouvpatou a écrit :Je convertissais la vieille version du RPG de Comtois à mes minutes perdues où il y avait une structure POINT, mais bon, dans la suite de son code, je viens de voir :

Code : Tout sélectionner

If Event = #WM_LBUTTONUP
            BoutonGauche = 0
            
        ElseIf Event = #WM_LBUTTONDOWN Or BoutonGauche = 1 
Alors je sais pas si sous Linux ça va continuer.

Il me semble qu'on peut detecter les clics gauches et droits en Pb, mais je ne sais pas si Event = #WM_LBUTTONUP sous-entend la même chose.
G-Rom a écrit :tu as accès à l'api SDL sous linux , n'oublie pas.
y a des tutos partout pour SDL ;)
J'ai perdu plus de 30mn à essayer de reproduire le même effet que "#WM_LBUTTONDOWN" avec la lib "Mouse" et j'ai réussi à faire que cela fonctionne (presque) pareil, ensuite j'ai testé ça dans le vrai code et ç'est là que je me suis aperçu de la différence, c'est qu'avec #WM_LBUTTONDOWN, cela gère les clics du pointeur de la souris qui est présent alors qu'avec "MouseButton(#PB_MouseButton_Left)" et compagnie, le pointeur de la souris n'est pas présent :x .
J'ai donc Loadé un sprite de curseur pour combler le problème, mais quand j'ai vu le lag, j'ai lâché l'affaire :(.
G-Rom a écrit :tu as accès à l'api SDL sous linux , n'oublie pas.
y a des tutos partout pour SDL ;)
J'ai déjà suivit rapidou les 1er tuto du SDZ concernant la SDL.
Voici un exemple de la doc concernant apparemment la souris : 2ème exemple : SDL_MOUSEBUTTONDOWN qui a peut-être le même effet que #WM_LBUTTONDOWN enfin, je sais pas si après on se sert de : event.button.x et event.button.y pour savoir si c'est le bouton gauche ou droite qui a été enfoncé.

En tout cas j'espère que ça fonctionnera sur le même principe que #WM_LBUTTONDOWN c'est à dire avec le pointeur de la souris présente.

J'ai trouvé un code de Faith que j'ai réduit.

Code : Tout sélectionner

; Faith : http://www.purebasic.fr/english/viewtopic.php?f=15&t=28555&start=0

EnableExplicit

#SCREEN_WIDTH = 640
#SCREEN_HEIGHT = 480
#SCREEN_BPP = 32

Global *screen.SDL_Surface

If OpenLibrary(0, "libSDL.so")
Else
	MessageRequester("Error","Can't Open SDL Library", 0)
	End
EndIf

Procedure.i Main()
	
	If SDL_Init_(#SDL_INIT_EVERYTHING) >= 0
		
		*screen = SDL_SetVideoMode_(#SCREEN_WIDTH, #SCREEN_HEIGHT, #SCREEN_BPP, #SDL_SWSURFACE)
		
		If *screen
			SDL_WM_SetCaption_("Hello World", #Null)
			
			SDL_Delay_(4000) ; Grace à ça que la fenêtre reste ouverte.
			
		Else
			MessageRequester("error","")
		EndIf
		SDL_Quit_()
	Else
		MessageRequester("ERROR","Can't initialise SDL")
	EndIf
	ProcedureReturn 0
EndProcedure

Main()
Mais pour l'instant c'est "SDL_Delay_(4000)" qui permet de maintenir la fenêtre ouverte.

Donc, aurais-tu un bout de code montrant la boucle des évènements avec la SDL combinée à la boucle des évènements de PB.
Avec aussi la gestion des clics de souris.

Bye.

Re: Equivalent de #WM_LBUTTONDOWN sous linux

Publié : mer. 12/mai/2010 17:21
par G-Rom
je regarderais se soir ce qui reste sur ma bécane avec le pingouin ;)
sur le site du zéro c'est expliqué logiquement , tu n'a pas besoin d'importé les fonctions il me semble ( de mémoire hein... :D).

Re: Equivalent de #WM_LBUTTONDOWN sous linux

Publié : mer. 12/mai/2010 19:38
par Geo Trouvpatou
Ne cherche pas j'ai trouvé ça : http://forums.purebasic.com/english/vie ... d4#p290796

Je vais déjà voir ce que ça donne.
Ce que je cherchais c'est la conversion du C vers Pb pour la gestion des évènements.
Donc avec le code ci-dessus je devrais m'en sortir.
Sinon je relancerais le post.

En tous cas le moteur de recherche du Forum est merdique, j'ai fais une recherche avec SDL et il trouve 0 réponse 8O .
Merci à mon ami Google

Merci.

[EDIT]J'ai fais un exemple fonctionnel, je le posterai lorsque j'aurais finalisé le truc.