Tuto CanvasGadget

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
MetalOS
Messages : 1498
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Tuto CanvasGadget

Message par MetalOS »

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 ;-)
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Tuto CanvasGadget

Message par G-Rom »

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 : Tout sélectionner

#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...
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Tuto CanvasGadget

Message par graph100 »

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 ;))
Avatar de l’utilisateur
MetalOS
Messages : 1498
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: Tuto CanvasGadget

Message par MetalOS »

@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 ;-)
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Tuto CanvasGadget

Message par G-Rom »

voila comment je structurerais le code :

Code : Tout sélectionner



;-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.
Avatar de l’utilisateur
MetalOS
Messages : 1498
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: Tuto CanvasGadget

Message par MetalOS »

Merci pour les précisions G-Rom. Sa sera un plus pour m'aider à comprendre :wink:
Avatar de l’utilisateur
Atlante
Messages : 337
Inscription : mer. 29/juin/2011 18:35
Localisation : Paris

Re: Tuto CanvasGadget

Message par Atlante »

[déplacé section débutants]
Modérateur
Config : Intel I5 4670K, Nvidia Geforce GTX 1060, 16go RAM, SSD 256go, DD 2000go
Répondre