Bascule.pbi
Code : Tout sélectionner
Structure CouleurBascule
Fond.i
Actif.i
Inactif.i ; Si -1 : sans bordure
Texte_Actif.i
Texte_Inactif.i
Porteurs.i
EndStructure
Structure Bascule
ImageID.i
Espacement.i
Style_Arrondi.i ; (var utilisée comme "facteur" tous azimuths)!, vous devrez entrer la couleur en ABGR ou RGBA
TaillePorteurs.i ; si > 0 ; l'inverseur aura quelques trucs fantaisiste..
FontID.i
Orientation.i
Texte__Actif.s
Texte_Inactif.s
TexteEspacementX.i
TexteEspacementY.i
Etat.i
Couleur.CouleurBascule
EndStructure
Global NewList Bascule.Bascule()
;- Procédures
Procedure CreerBascule(*Objet.Bascule,GadgetID.i)
Protected Controle.i, Resultat.i
Protected Porteur.i
Shared ListeImage()
If *Objet
If IsGadget(GadgetID.i)
*Objet\ImageID.i = CreateImage(#PB_Any,GadgetWidth(GadgetID.i), GadgetHeight(GadgetID.i), 32)
StartDrawing(ImageOutput(*Objet\ImageID))
DrawingMode(#PB_2DDrawing_AlphaChannel)
Box(0,0,ImageWidth(*Objet\ImageID.i),ImageHeight(*Objet\ImageID.i),$00FFFFFF)
DrawingMode(#PB_2DDrawing_AllChannels)
RoundBox(0,0,ImageWidth(*Objet\ImageID.i),ImageHeight(*Objet\ImageID.i),*Objet\Style_Arrondi.i,
*Objet\Style_Arrondi,*Objet\Couleur\Fond.i)
; Activé
RoundBox(ImageWidth(*Objet\ImageID.i) - (TextWidth(*Objet\Texte__Actif.s) +
*Objet\TexteEspacementX.i + *Objet\Style_Arrondi.i) ,
0,TextWidth(*Objet\Texte__Actif.s) + *Objet\TexteEspacementX.i + *Objet\Style_Arrondi.i,
ImageHeight(*Objet\ImageID.i),*Objet\Style_Arrondi,*Objet\Style_Arrondi,
*Objet\Couleur\Actif.i)
Box(ImageWidth(*Objet\ImageID.i) - (TextWidth(*Objet\Texte__Actif.s) + *Objet\TexteEspacementX.i +
*Objet\Style_Arrondi.i),0,*Objet\Style_Arrondi.i,
ImageHeight(*Objet\ImageID.i),*Objet\Couleur\Fond.i)
DrawingMode(#PB_2DDrawing_Transparent)
;Désactivé
RoundBox(0 ,0,TextWidth(*Objet\Texte_Inactif.s) + *Objet\TexteEspacementX.i +
*Objet\Style_Arrondi.i,
ImageHeight(*Objet\ImageID.i),*Objet\Style_Arrondi,*Objet\Style_Arrondi,
*Objet\Couleur\Inactif.i)
Box(TextWidth(*Objet\Texte_Inactif.s) + *Objet\TexteEspacementX.i,0,*Objet\Style_Arrondi.i,
ImageHeight(*Objet\ImageID.i),*Objet\Couleur\Fond.i)
If IsFont(*Objet\FontID.i)
DrawingFont(FontID(*Objet\FontID.i))
EndIf
DrawText(ImageWidth(*Objet\ImageID.i) - (TextWidth(*Objet\Texte__Actif.s) +
(*Objet\TexteEspacementX.i / 2)),*Objet\TexteEspacementY.i,
*Objet\Texte__Actif.s,*Objet\Couleur\Texte_Actif.i,$00000000)
DrawText(*Objet\TexteEspacementX.i / 2,*Objet\TexteEspacementY.i,*Objet\Texte_Inactif.s,
*Objet\Couleur\Texte_Inactif.i,$00000000)
StopDrawing()
Controle.i = CreateImage(#PB_Any,GadgetWidth(GadgetID.i)*2,GadgetHeight(GadgetID.i),32)
StartDrawing(ImageOutput(Controle.i))
DrawingMode(#PB_2DDrawing_AlphaChannel)
Box(0,0,ImageWidth(*Objet\ImageID.i)*2,ImageHeight(*Objet\ImageID.i),$00FFFFFF)
DrawingMode(#PB_2DDrawing_AllChannels)
;Activé // X = 0
RoundBox(0,0,ImageWidth(*Objet\ImageID.i),ImageHeight(*Objet\ImageID.i),*Objet\Style_Arrondi.i,
*Objet\Style_Arrondi,*Objet\Couleur\Fond.i)
Box(ImageWidth(*Objet\ImageID.i) - (TextWidth(*Objet\Texte__Actif.s) + *Objet\TexteEspacementX.i +
*Objet\Style_Arrondi.i),0,TextWidth(*Objet\Texte__Actif.s) +
*Objet\TexteEspacementX.i +
*Objet\Style_Arrondi.i,
ImageHeight(*Objet\ImageID.i),$00FFFFFF)
;Désactivé // X = ImageWidth
RoundBox(ImageWidth(*Objet\ImageID.i),0,ImageWidth(*Objet\ImageID.i),ImageHeight(*Objet\ImageID.i),
*Objet\Style_Arrondi.i,*Objet\Style_Arrondi,*Objet\Couleur\Fond.i)
Box(ImageWidth(*Objet\ImageID.i),0,TextWidth(*Objet\Texte_Inactif.s) + *Objet\TexteEspacementX.i +
*Objet\Style_Arrondi.i,ImageHeight(*Objet\ImageID.i),$00FFFFFF)
; Certains trucs fantaisistes
If *Objet\TaillePorteurs.i > 0
Porteur.i = (ImageHeight(*Objet\ImageID.i) / 2) - (*Objet\TaillePorteurs.i * 3)
Debug Porteur
For a = 1 To 3
Circle(*Objet\TaillePorteurs.i * 4,(Porteur.i - (*Objet\TaillePorteurs * 3)) +
((*Objet\TaillePorteurs * a)) + (*Objet\TaillePorteurs.i * a * 2),
*Objet\TaillePorteurs.i,*Objet\Couleur\Porteurs.i)
Circle((ImageWidth(*Objet\ImageID.i)*2) - *Objet\TaillePorteurs.i * 4,
(Porteur.i - (*Objet\TaillePorteurs * 3)) + ((*Objet\TaillePorteurs * a)) +
(*Objet\TaillePorteurs.i * a * 2),*Objet\TaillePorteurs.i,*Objet\Couleur\Porteurs.i)
Next
EndIf
StopDrawing()
;voici le résultat après un pack de bière..
Bidon1.i = GrabImage(Controle.i,#PB_Any,0,0,ImageWidth(*Objet\ImageID.i),
ImageWidth(*Objet\ImageID.i))
Bidon2.i = GrabImage(Controle.i,#PB_Any,ImageWidth(*Objet\ImageID.i),0,ImageWidth(*Objet\ImageID.i),
ImageHeight(*Objet\ImageID.i))
FreeImage(Controle.i)
Controle.i = CreateImage(#PB_Any,GadgetWidth(GadgetID.i)*4,GadgetHeight(GadgetID.i),32)
StartDrawing(ImageOutput(Controle.i))
DrawingMode(#PB_2DDrawing_AlphaChannel)
Box(0,0,ImageWidth(*Objet\ImageID.i)*4,ImageHeight(*Objet\ImageID.i),$00FFFFFF)
DrawingMode(#PB_2DDrawing_AlphaBlend)
DrawImage(ImageID(Bidon1.i),0,0)
DrawImage(ImageID(Bidon2.i),ImageWidth(*Objet\ImageID.i)*2,0)
StopDrawing()
Resultat.i = CreateImage(#PB_Any,GadgetWidth(GadgetID.i),GadgetHeight(GadgetID.i),32)
StartDrawing(ImageOutput(Resultat.i))
DrawingMode(#PB_2DDrawing_AlphaChannel)
Box(0,0,ImageWidth(*Objet\ImageID.i),ImageHeight(*Objet\ImageID.i),$00FFFFFF)
DrawingMode(#PB_2DDrawing_AlphaBlend)
DrawImage(ImageID(*Objet\ImageID.i),0,0)
If *Objet\Etat.i = #True
DrawImage(ImageID(Controle.i),0,0)
ElseIf *Objet\Etat.i = #False
DrawImage(ImageID(Controle.i),- ImageWidth(*Objet\ImageID.i)*2,0)
EndIf
StopDrawing()
AddElement(ListeImage())
ListeImage()\Fond.i = *Objet\ImageID.i
ListeImage()\Controle.i = Controle.i
ListeImage()\Resultat.i = Resultat.i
; Solution paresseuse
*Objet\ImageID.i = ListeImage()\Resultat.i
SetGadgetState(GadgetID.i,ImageID(Resultat.i))
EndIf
EndIf
EndProcedure
Procedure RedessinerBascule(GadgetID.i, Etat.i)
Protected GadgetImage.i
Shared Bascule()
Shared ListeImage()
If IsGadget(GadgetID.i)
GadgetImage.i = GetGadgetState(GadgetID.i)
ForEach Bascule()
If ImageID(Bascule()\ImageID.i) = GadgetImage.i
Break
EndIf
Next
ForEach ListeImage()
If ImageID(ListeImage()\Resultat.i) = GadgetImage.i
StartDrawing(ImageOutput(ListeImage()\Resultat.i))
DrawingMode(#PB_2DDrawing_AlphaChannel)
Box(0,0,ImageWidth(ListeImage()\Resultat.i),ImageHeight(ListeImage()\Resultat.i),$00FFFFFF)
DrawingMode(#PB_2DDrawing_AlphaBlend)
DrawImage(ImageID(ListeImage()\Fond.i),0,0)
If Etat.i =#True
DrawImage(ImageID(ListeImage()\Controle.i),0,0)
ElseIf Etat.i = #False
DrawImage(ImageID(ListeImage()\Controle.i),-ImageWidth(ListeImage()\Resultat.i) * 2, 0)
EndIf
StopDrawing()
Bascule()\Etat.i = Etat.i
SetGadgetState(GadgetID.i,ImageID(ListeImage()\Resultat.i))
ProcedureReturn #True
EndIf
Next
EndIf
EndProcedure