PureBasic

Forums PureBasic
Nous sommes le Mer 19/Juin/2013 8:03

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 6 messages ] 
Auteur Message
 Sujet du message: Tuto CanvasGadget
MessagePosté: Lun 06/Mai/2013 18:12 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 20/Juin/2006 22:17
Messages: 804
Localisation: Lorraine
Salut Tous le monde, je suis à la recherche d'un tuto pour faire des GUI avec des CanvasGadget dans ce genre:

Image

Si quelqu'un à ca sous la main je suis preneur. Merci d'avance ;-)


Haut
 Profil  
 
 Sujet du message: Re: Tuto CanvasGadget
MessagePosté: Lun 06/Mai/2013 22:20 
En ligne

Inscription: Dim 10/Jan/2010 5:29
Messages: 2189
Les gui , c'est ce qu'il y a de plus simple à programmer.
il te faut des structure commune à tout les gadgets , qui contient position , taille , parent , enfant , image.
une autre structure globale pour les evenement.
chaque gadget dérive de la 1° structure (extends) , et tu spécialises.

ex :

Code:
#EVENT_BUTTON_PRESSED = 0x01

Structure sVecteur2i
  x.i
  y.i
EndStructure

Structure sGadget
  position.sVecteur2i ; position
  size.sVecteur2i     ; taille
  imageID.i           ; image
  List event.l()      ; evenement
  *func_render        ; fonction de rendu
  *func_event
EndStructure


Global NewList eventMessage.i() ;<- fait des fct pr géré ca


;
;- BOUTON
;

Structure toggleButton Extends sGadget
  state.b 
EndStructure


Procedure toggleButton_event(*b.toggleButton)
  If sourisclick ; <- a toi de jouer...
    state = #True
    AddElement(eventMessage())
      eventMessage() = #EVENT_BUTTON_PRESSED
  Else
    state = #False
  EndIf
EndProcedure


Procedure toggleButton_render(*b.toggleButton)
  ;dessine sur l'image du bouton
EndProcedure


Procedure createToggleButton()
  *b.toggleButton = AllocateMemory(SizeOf(toggleButton))
  *b\func_event   = @toggleButton_event()
  *b\func_render  = @toggleButton_render()
EndProcedure


ensuite il faut que tu codes une structure centrale "gui" , qui stocke tout les gadgets et qui appelle les fct° d'event et de rendu , après l'image du gadget tu la rend ou tu veut, sprite , fenetre , ecran , canvas, etc...


Haut
 Profil  
 
 Sujet du message: Re: Tuto CanvasGadget
MessagePosté: Mar 07/Mai/2013 2:02 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 21/Mai/2005 17:50
Messages: 937
Salut MetalOS, pour te donner un exemple, tu peux aller voir le travail que j'ai réaliser sur ce type de gadgets (et il y a plein de code dispo sur le fofo anglais, mais ils ne s'intègrent pas entre eux.)

Custom Gadget

_________________
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))


Haut
 Profil  
 
 Sujet du message: Re: Tuto CanvasGadget
MessagePosté: Mar 07/Mai/2013 3:21 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 20/Juin/2006 22:17
Messages: 804
Localisation: Lorraine
@G-Rom Merci pour ton explication et exemple, ça va me servir pour essayer comprendre le chmilblique ;-)

@Graph100 Je ne connaissais pas ton CustomGadget et sa semble très intéréssant, je voie en plus qu'il est compatible Windows et Linux et sûrement Mac OS X. Je vais tester sous Mac et je te donnerais des nouvelles.

Je vais déjà me mettre à bosser sur ce que vous avez mis voir ce que je peut faire. Merci les gars ;-)


Haut
 Profil  
 
 Sujet du message: Re: Tuto CanvasGadget
MessagePosté: Mar 07/Mai/2013 10:20 
En ligne

Inscription: Dim 10/Jan/2010 5:29
Messages: 2189
voila comment je structurerais le code :

Code:


;-GESTION DES EVENTS

Enumeration $FF
  #GUI_Event_Gadget
EndEnumeration

Structure sEvent
  type.w
  *gadget
EndStructure

;-GESTION DES GADGETS

Structure sVecteur2i
  x.i
  y.i
EndStructure

Structure sGadget
  position.sVecteur2i ; position
  size.sVecteur2i     ; taille
  imageID.i           ; image
  List event.l()      ; evenement
  *func_render        ; fonction de rendu
  *func_event
EndStructure

;-GESTION DE LA GUI
Structure sGui
  List event.sEvent()
  List gadgetList.sGadget()
EndStructure


Procedure.i initializeGUI()
  *g.sGui = AllocateMemory(SizeOf(sGui))
  InitializeStructure(*g,sGui)
  ProcedureReturn *g
EndProcedure


Procedure renderGui(*g.sGui, output)
  If *g
    ;
    ; gestion des event
    ;
    ForEach *g\gadgetList()
      CallCFunctionFast(*g\gadgetList()\func_event,*g\gadgetList())
    Next
   
    ;
    ; affichage ( rendu off screen )
    ;
    ForEach *g\gadgetList()
      CallCFunctionFast(*g\gadgetList()\func_render,*g\gadgetList())
    Next
   
   
    ;
    ; affichage ( rendu output ) canvas , sprite , screen, etc...
    ;
    StartDrawing(output)
      ForEach *g\gadgetList()
        DrawImage(ImageID( *g\gadgetList()\imageID ), *g\gadgetList()\position\x, *g\gadgetList()\position\y)
      Next
    StopDrawing()
   
   
     StartDrawing(output)
    StopDrawing()
  EndIf
EndProcedure


ca te permet de dérivé tout tes gadgets de la structure sGadget , la structure gui s'occupe de rendre le tout, faut juste que chaque gadget ai sa propre
fonction pour gerer les events & faire un rendu interne (si besoin) et de l'affiché sur ce que tu veut.


Haut
 Profil  
 
 Sujet du message: Re: Tuto CanvasGadget
MessagePosté: Jeu 09/Mai/2013 14:32 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 20/Juin/2006 22:17
Messages: 804
Localisation: Lorraine
Merci pour les précisions G-Rom. Sa sera un plus pour m'aider à comprendre :wink:


Haut
 Profil  
 
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 6 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye