Page 1 sur 1

Tuto CanvasGadget

Publié : lun. 06/mai/2013 18:12
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 ;-)

Re: Tuto CanvasGadget

Publié : lun. 06/mai/2013 22:20
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...

Re: Tuto CanvasGadget

Publié : mar. 07/mai/2013 2:02
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

Re: Tuto CanvasGadget

Publié : mar. 07/mai/2013 3:21
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 ;-)

Re: Tuto CanvasGadget

Publié : mar. 07/mai/2013 10:20
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.

Re: Tuto CanvasGadget

Publié : jeu. 09/mai/2013 14:32
par MetalOS
Merci pour les précisions G-Rom. Sa sera un plus pour m'aider à comprendre :wink:

Re: Tuto CanvasGadget

Publié : ven. 21/juin/2013 21:20
par Atlante
[déplacé section débutants]