GaugeGadget - Version 2.1.0

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: GaugeGadget - Version 1.1.0

Message par Guimauve »

MetalOS a écrit :Quelqu'un peut me dire comment faire pour gérer 2 gauges indépendament l'une de l'autre ? Merci.
Euh !!!!! Peut-être en utilisant la structure GaugeGadget 2 fois en créant 2 jauges l'une à coté de l'autre.

Exemple:

Code : Tout sélectionner

GaugeGadget(GaugeA.Gauge, 5, 55, 5, 100, FontName, 1) 
GaugeGadget(GaugeB.Gauge, 105, 55, 5, 100, FontName, 1) 
Par la suite, le contrôle d'affichage est le même que celui de l'exemple présenté dans le premier message à la différence que l'on doit passer la variable structuré GaugeA pour contrôler la jauge A et la variable GaugeB pour contrôler la jauge B.

Il est certain que c'est un peut plate de devoir traîner 1 variable structuré par GaugeGadget mais on n'a pas tellement le choix. Il faudrait voir s'il est possible d'attacher l'adresse de la structure à l'ImageGadget avec la commande SetGadgetData() pour ne plus avoir à manipuler les variables de contrôle obligatoire pour chacun des GaugeGadget(). Moi je n'ai pas vraiment le temps de plancher là dessus mais si quelqu'un veut tenter le coup, qu'il ne se gène pas.

A+
Guimauve
Avatar de l’utilisateur
MetalOS
Messages : 1492
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: GaugeGadget - Version 1.1.0

Message par MetalOS »

1 variable structuré par GaugeGadget, ok c'est ce qu'il me manquait. Merci Guimauve.
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: GaugeGadget - Version 1.1.0

Message par Le Soldat Inconnu »

Ce que je trouve dommage, c'est que l'aiguille est magnifique mais l'arc de cercle avec les les valeurs est plutôt moche car sans antialiasing.
Mais quand je regarde ton code, j'ai du mal à extraire la partie de l'aiguille et pourquoi celle ci à de l'antialiasing.
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
case
Messages : 1527
Inscription : lun. 10/sept./2007 11:13

Re: GaugeGadget - Version 1.1.0

Message par case »

pour le dessin de l'aiguille regarde là c'est marqué dessus pourtant ;)

Code : Tout sélectionner

Macro PaintGaugeNeedle(GaugeA)
 
  DrawingMode(#PB_2DDrawing_AllChannels)
 
  HalfSize = GetGaugeLayerSize(GaugeA) >> 1

  StartDegree.i = ((360 - GetGaugeSectorDegrees(GaugeA)) >> 1)
  DirDegrees.d = StartDegree + (GetGaugeMax(GaugeA) - GetGaugeValue(GaugeA)) / GetGaugeMax(GaugeA) * GetGaugeSectorDegrees(GaugeA)

  SinAngle.d = Sin(Radian(-DirDegrees))
  CosAngle.d = Cos(Radian(-DirDegrees))

  x1 = HalfSize + (GetGaugeNeedleCenWidth(GaugeA) * CosAngle); - 0 * SinAngle)
  y1 = HalfSize + (GetGaugeNeedleCenWidth(GaugeA) * SinAngle); + 0 * CosAngle)

  x2 = HalfSize + (-GetGaugeNeedleCenWidth(GaugeA) * CosAngle); - 0 * SinAngle)
  y2 = HalfSize + (-GetGaugeNeedleCenWidth(GaugeA) * SinAngle); + 0 * CosAngle)

  x3 = HalfSize + (-GetGaugeNeedleTipWidth(GaugeA) * CosAngle - GetGaugeNeedleLength(GaugeA) * SinAngle)
  y3 = HalfSize + (-GetGaugeNeedleTipWidth(GaugeA) * SinAngle + GetGaugeNeedleLength(GaugeA) * CosAngle)

  x4 = HalfSize + (GetGaugeNeedleTipWidth(GaugeA) * CosAngle - GetGaugeNeedleLength(GaugeA) * SinAngle)
  y4 = HalfSize + (GetGaugeNeedleTipWidth(GaugeA) * SinAngle + GetGaugeNeedleLength(GaugeA) * CosAngle)
 
  x5 = HalfSize + (-15 * SinAngle); + 0 * CosAngle)
  y5 = HalfSize + (15 * CosAngle); + 0 * SinAngle)
 
  LineXY(x1, y1, x2, y2, GetGaugeNeedleColor(GaugeA))
  LineXY(x2, y2, x3, y3, GetGaugeNeedleColor(GaugeA))
  LineXY(x3, y3, x4, y4, GetGaugeNeedleColor(GaugeA))
  LineXY(x4, y4, x1, y1, GetGaugeNeedleColor(GaugeA))
 
  FillArea(x5, y5, GetGaugeNeedleColor(GaugeA), GetGaugeNeedleColor(GaugeA))
 
  Circle(HalfSize, HalfSize, GetGaugeNeedlePivotRadius(GaugeA), GetGaugeNeedleColor(GaugeA))
 
EndMacro
ImageImage
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: GaugeGadget - Version 1.1.0

Message par Guimauve »

Le Soldat Inconnu a écrit :Ce que je trouve dommage, c'est que l'aiguille est magnifique mais l'arc de cercle avec les les valeurs est plutôt moche car sans antialiasing.
Mais quand je regarde ton code, j'ai du mal à extraire la partie de l'aiguille et pourquoi celle ci à de l'antialiasing.
En fait ce n'est pas le cas, l'astuce utilisé pour dessiner l'aiguille avec antialiasing est que je la dessine sur une image 4 fois plus grande et je fais un ResizeImage() à la bonne taille

Extrait de la procedure RefreshGaugeGadget()

Code : Tout sélectionner

	SetGaugeNeedleLayer(*GaugeA, CreateImage(#PB_Any, GetGaugeLayerSize(*GaugeA), GetGaugeLayerSize(*GaugeA), 32 | #PB_Image_Transparent))
	
	If StartDrawing(ImageOutput(GetGaugeNeedleLayer(*GaugeA)))
		PaintGaugeNeedle(*GaugeA)
		StopDrawing()
	EndIf 
	
	ResizeImage(GetGaugeNeedleLayer(*GaugeA), GetGaugeSize(*GaugeA), GetGaugeSize(*GaugeA))
Le problème c'est que faire ça augmente le temps de dessin et ralenti énormément l'affichage qui est déjà lent. De plus, je ne suis pas certain de comment le dessin du texte va se comporter pendant de le ResizeImage() dans le cas où j'applique la même technique pour le dessin de l'échelle (arc de cercle avec les valeurs).

Je fais des tests là dessus et je vous revient avec peut-être la version 2.0.0 dans les prochains jours.

A+
Guimauve
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: GaugeGadget - Version 2.0.0

Message par Guimauve »

Bonjour à tous,

Désolé pour le double message à environ 1 heure d'intervale, la version 2.0.0 est disponible (Voir le 1er message de ce sujet). L'affichage est lissée sur tout les éléments de la jauge. De plus, les dessins sont effectué uniquement lorsque nécessaire. Le rafraîchissement de l'affichage de la jauge devrait, en théorie, être plus rapide.

A+
Guimauve
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: GaugeGadget - Version 2.1.0

Message par Le Soldat Inconnu »

Vraiment classe :D
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: GaugeGadget - Version 2.1.0

Message par Le Soldat Inconnu »

j'ai juste ajouté une procedure ResizeAlphaImage qui corrige un bug de PB sur le redimensionnement des images avec couche alpha

Ainsi, en regardant bien, tu verra que sur ton code, il y a une sorte de bordure noire autour de l'aiguille, cette bordure n'a pas lieu d'exister et c'est corriger avec cette petite procedure.
Ce n'est pas forcément gênant ici, cette bordure noire, mais dans certain code, c'est très très génant et Fred fait la sourde oreille :(
Hésitez pas à râler vous aussi sur ce post pour soutenir la résolution de ce bug :
http://www.purebasic.fr/english/viewtop ... 14#p353314

Code : Tout sélectionner

Procedure ResizeAlphaImage(Image, Width, Height, Quality = #PB_Image_Smooth)
	Protected x, x1, x2, Memoire, Image_HDC, Image_Ancienne, Image_Bitmap.BITMAP, Image_BitmapInfo.BITMAPINFO
	If IsImage(Image)
		
		; Chargement du HDC
		Image_HDC = CreateCompatibleDC_(#Null)
		Image_Ancienne = SelectObject_(Image_HDC, ImageID(Image))
		
		; Dimension de l'image
		GetObject_(ImageID(Image), SizeOf(BITMAP), @Image_Bitmap)
		Image_BitmapInfo\bmiHeader\biSize = SizeOf(BITMAPINFOHEADER)
		Image_BitmapInfo\bmiHeader\biWidth = Image_Bitmap\bmWidth
		Image_BitmapInfo\bmiHeader\biHeight = Image_Bitmap\bmHeight
		Image_BitmapInfo\bmiHeader\biPlanes = 1
		Image_BitmapInfo\bmiHeader\biBitCount = 32
		
		; Zone mémoire pour copier l'image
		xx = Image_Bitmap\bmWidth * Image_Bitmap\bmHeight - 1
		Protected Dim Memoire(xx)
		
		; Copie de l'image en mémoire
		GetDIBits_(Image_HDC, ImageID(Image), 0, Image_Bitmap\bmHeight, @Memoire(), @Image_BitmapInfo, #DIB_RGB_COLORS)
		
		; Modification de l'image en mémoire
		For x = 0 To xx
			If Memoire(x) = 0
				Memoire(x) = $00FFFFFF
			EndIf
		Next
		
		; Transfert de la mémoire dans la l'image de base
		SetDIBits_(Image_HDC, ImageID(Image), 0, Image_Bitmap\bmHeight,  @Memoire(), @Image_BitmapInfo, #DIB_RGB_COLORS)
		
		; Fermeture du HDC
		SelectObject_(Image_HDC, Image_Ancienne)
		DeleteDC_(Image_HDC)
		
		ResizeImage(Image, Width, Height, Quality)
	EndIf
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Project name : GaugeGadget
; File Name : GaugeGadget.pb
; File version: 2.1.0
; Programmation : OK
; Programmed by : Trond
; Modified by : Guimauve
; Date : 20-02-2011
; Mise à jour : 22-05-2011
; PureBasic code : 4.51
; Plateform : Windows, Linux, MacOS X
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Notes :
;
; Some field in the Gauge Structure has been 
; renamed or suppressed.
; 
; A layer has been added for the Needle. The size 
; for this layer is 4 times larger than other 
; layer. This is needed to draw the needle more 
; smootly. 
;
; Finally, the GaugeGadget shape can be square
; only.
;
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Déclaration de la Structure <<<<<

Structure Gauge
	
	PosX.w
	PosY.w
	Size.w
	Center.w
	ScaleRadius.w
	Min.l
	Max.l
	BigStep.l
	SmallStep.l
	SectorDegrees.w
	Value.l
	Text.s
	SubText.s
	GadgetID.l
	GadgetHandle.l
	BackGroundColor.l
	ScaleColor.l
	ScaleBackGroundColor.l
	TextColor.l
	SubTextColor.l
	NeedleColor.l
	ScaleFontHandle.i
	TextFontHandle.i
	SubTextFontHandle.i
	LayerSize.w
	NeedleLength.l
	NeedlePivotRadius.l
	NeedleTipWidth.l
	NeedleCenWidth.l
	ScaleLayer.l
	NeedleLayer.l
	ComposedLayer.l
	
EndStructure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les observateurs <<<<<

Macro GetGaugePosX(GaugeA)
	
	GaugeA\PosX
	
EndMacro

Macro GetGaugePosY(GaugeA)
	
	GaugeA\PosY
	
EndMacro

Macro GetGaugeSize(GaugeA)
	
	GaugeA\Size
	
EndMacro

Macro GetGaugeCenter(GaugeA)
	
	GaugeA\Center
	
EndMacro

Macro GetGaugeScaleRadius(GaugeA)
	
	GaugeA\ScaleRadius
	
EndMacro

Macro GetGaugeMin(GaugeA)
	
	GaugeA\Min
	
EndMacro

Macro GetGaugeMax(GaugeA)
	
	GaugeA\Max
	
EndMacro

Macro GetGaugeBigStep(GaugeA)
	
	GaugeA\BigStep
	
EndMacro

Macro GetGaugeSmallStep(GaugeA)
	
	GaugeA\SmallStep
	
EndMacro

Macro GetGaugeSectorDegrees(GaugeA)
	
	GaugeA\SectorDegrees
	
EndMacro

Macro GetGaugeValue(GaugeA)
	
	GaugeA\Value
	
EndMacro

Macro GetGaugeText(GaugeA)
	
	GaugeA\Text
	
EndMacro

Macro GetGaugeSubText(GaugeA)
	
	GaugeA\SubText
	
EndMacro

Macro GetGaugeGadgetID(GaugeA)
	
	GaugeA\GadgetID
	
EndMacro

Macro GetGaugeGadgetHandle(GaugeA)
	
	GaugeA\GadgetHandle
	
EndMacro

Macro GetGaugeBackGroundColor(GaugeA)
	
	GaugeA\BackGroundColor
	
EndMacro

Macro GetGaugeScaleColor(GaugeA)
	
	GaugeA\ScaleColor
	
EndMacro

Macro GetGaugeScaleBackGroundColor(GaugeA)
	
	GaugeA\ScaleBackGroundColor
	
EndMacro

Macro GetGaugeTextColor(GaugeA)
	
	GaugeA\TextColor
	
EndMacro

Macro GetGaugeSubTextColor(GaugeA)
	
	GaugeA\SubTextColor
	
EndMacro

Macro GetGaugeNeedleColor(GaugeA)
	
	GaugeA\NeedleColor
	
EndMacro

Macro GetGaugeScaleFontHandle(GaugeA)
	
	GaugeA\ScaleFontHandle
	
EndMacro

Macro GetGaugeTextFontHandle(GaugeA)
	
	GaugeA\TextFontHandle
	
EndMacro

Macro GetGaugeSubTextFontHandle(GaugeA)
	
	GaugeA\SubTextFontHandle
	
EndMacro

Macro GetGaugeLayerSize(GaugeA)
	
	GaugeA\LayerSize
	
EndMacro

Macro GetGaugeNeedleLength(GaugeA)
	
	GaugeA\NeedleLength
	
EndMacro

Macro GetGaugeNeedlePivotRadius(GaugeA)
	
	GaugeA\NeedlePivotRadius
	
EndMacro

Macro GetGaugeNeedleTipWidth(GaugeA)
	
	GaugeA\NeedleTipWidth
	
EndMacro

Macro GetGaugeNeedleCenWidth(GaugeA)
	
	GaugeA\NeedleCenWidth
	
EndMacro

Macro GetGaugeScaleLayer(GaugeA)
	
	GaugeA\ScaleLayer
	
EndMacro

Macro GetGaugeNeedleLayer(GaugeA)
	
	GaugeA\NeedleLayer
	
EndMacro

Macro GetGaugeComposedLayer(GaugeA)
	
	GaugeA\ComposedLayer
	
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs <<<<<

Macro SetGaugePosX(GaugeA, P_PosX)
	
	GetGaugePosX(GaugeA) = P_PosX
	
EndMacro

Macro SetGaugePosY(GaugeA, P_PosY)
	
	GetGaugePosY(GaugeA) = P_PosY
	
EndMacro

Macro SetGaugeSize(GaugeA, P_Size)
	
	GetGaugeSize(GaugeA) = P_Size
	
EndMacro

Macro SetGaugeCenter(GaugeA, P_Center)
	
	GetGaugeCenter(GaugeA) = P_Center
	
EndMacro

Macro SetGaugeScaleRadius(GaugeA, P_ScaleRadius)
	
	GetGaugeScaleRadius(GaugeA) = P_ScaleRadius
	
EndMacro

Macro SetGaugeMin(GaugeA, P_Min)
	
	GetGaugeMin(GaugeA) = P_Min
	
EndMacro

Macro SetGaugeMax(GaugeA, P_Max)
	
	GetGaugeMax(GaugeA) = P_Max
	
EndMacro

Macro SetGaugeBigStep(GaugeA, P_BigStep)
	
	GetGaugeBigStep(GaugeA) = P_BigStep
	
EndMacro

Macro SetGaugeSmallStep(GaugeA, P_SmallStep)
	
	GetGaugeSmallStep(GaugeA) = P_SmallStep
	
EndMacro

Macro SetGaugeSectorDegrees(GaugeA, P_SectorDegrees)
	
	GetGaugeSectorDegrees(GaugeA) = P_SectorDegrees
	
EndMacro

Macro SetGaugeValue(GaugeA, P_Value)
	
	GetGaugeValue(GaugeA) = P_Value
	
EndMacro

Macro SetGaugeText(GaugeA, P_Text)
	
	GetGaugeText(GaugeA) = P_Text
	
EndMacro

Macro SetGaugeSubText(GaugeA, P_SubText)
	
	GetGaugeSubText(GaugeA) = P_SubText
	
EndMacro

Macro SetGaugeGadgetID(GaugeA, P_GadgetID)
	
	GetGaugeGadgetID(GaugeA) = P_GadgetID
	
EndMacro

Macro SetGaugeGadgetHandle(GaugeA, P_GadgetHandle)
	
	GetGaugeGadgetHandle(GaugeA) = P_GadgetHandle
	
EndMacro

Macro SetGaugeBackGroundColor(GaugeA, P_BackGroundColor)
	
	GetGaugeBackGroundColor(GaugeA) = P_BackGroundColor
	
EndMacro

Macro SetGaugeScaleColor(GaugeA, P_ScaleColor)
	
	GetGaugeScaleColor(GaugeA) = P_ScaleColor
	
EndMacro

Macro SetGaugeScaleBackGroundColor(GaugeA, P_ScaleBackGroundColor)
	
	GetGaugeScaleBackGroundColor(GaugeA) = P_ScaleBackGroundColor
	
EndMacro

Macro SetGaugeTextColor(GaugeA, P_TextColor)
	
	GetGaugeTextColor(GaugeA) = P_TextColor
	
EndMacro

Macro SetGaugeSubTextColor(GaugeA, P_SubTextColor)
	
	GetGaugeSubTextColor(GaugeA) = P_SubTextColor
	
EndMacro

Macro SetGaugeNeedleColor(GaugeA, P_NeedleColor)
	
	GetGaugeNeedleColor(GaugeA) = P_NeedleColor
	
EndMacro

Macro SetGaugeScaleFontHandle(GaugeA, P_ScaleFontHandle)
	
	GetGaugeScaleFontHandle(GaugeA) = P_ScaleFontHandle
	
EndMacro

Macro SetGaugeTextFontHandle(GaugeA, P_TextFontHandle)
	
	GetGaugeTextFontHandle(GaugeA) = P_TextFontHandle
	
EndMacro

Macro SetGaugeSubTextFontHandle(GaugeA, P_SubTextFontHandle)
	
	GetGaugeSubTextFontHandle(GaugeA) = P_SubTextFontHandle
	
EndMacro

Macro SetGaugeLayerSize(GaugeA, P_LayerSize)
	
	GetGaugeLayerSize(GaugeA) = P_LayerSize
	
EndMacro

Macro SetGaugeNeedleLength(GaugeA, P_NeedleLength)
	
	GetGaugeNeedleLength(GaugeA) = P_NeedleLength
	
EndMacro

Macro SetGaugeNeedlePivotRadius(GaugeA, P_NeedlePivotRadius)
	
	GetGaugeNeedlePivotRadius(GaugeA) = P_NeedlePivotRadius
	
EndMacro

Macro SetGaugeNeedleTipWidth(GaugeA, P_NeedleTipWidth)
	
	GetGaugeNeedleTipWidth(GaugeA) = P_NeedleTipWidth
	
EndMacro

Macro SetGaugeNeedleCenWidth(GaugeA, P_NeedleCenWidth)
	
	GetGaugeNeedleCenWidth(GaugeA) = P_NeedleCenWidth
	
EndMacro

Macro SetGaugeScaleLayer(GaugeA, P_ScaleLayer)
	
	GetGaugeScaleLayer(GaugeA) = P_ScaleLayer
	
EndMacro

Macro SetGaugeNeedleLayer(GaugeA, P_NeedleLayer)
	
	GetGaugeNeedleLayer(GaugeA) = P_NeedleLayer
	
EndMacro

Macro SetGaugeComposedLayer(GaugeA, P_ComposedLayer)
	
	GetGaugeComposedLayer(GaugeA) = P_ComposedLayer
	
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Code généré en : 00.010 secondes (49500.00 lignes/seconde) <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Reset <<<<<

Macro ResetGauge(GaugeA)
	
	SetGaugePosX(GaugeA, 0)
	SetGaugePosY(GaugeA, 0)
	SetGaugeSize(GaugeA, 0)
	SetGaugeScaleRadius(GaugeA, 0)
	SetGaugeMin(GaugeA, 0)
	SetGaugeMax(GaugeA, 0)
	SetGaugeBigStep(GaugeA, 0)
	SetGaugeSmallStep(GaugeA, 0)
	SetGaugeValue(GaugeA, 0)
	SetGaugeText(GaugeA, "")
	SetGaugeSubText(GaugeA, "")
	SetGaugeGadgetID(GaugeA, 0)
	SetGaugeGadgetHandle(GaugeA, 0)
	SetGaugeBackGroundColor(GaugeA, 0)
	SetGaugeScaleColor(GaugeA, 0)
	SetGaugeScaleBackGroundColor(GaugeA, 0)
	SetGaugeTextColor(GaugeA, 0)
	SetGaugeSubTextColor(GaugeA, 0)
	SetGaugeNeedleColor(GaugeA, 0)
	SetGaugeLayerSize(GaugeA, 0)
	SetGaugeNeedleLength(GaugeA, 0)
	SetGaugeNeedlePivotRadius(GaugeA, 0)
	SetGaugeNeedleTipWidth(GaugeA, 0)
	SetGaugeNeedleCenWidth(GaugeA, 0)
	
	If GetGaugeScaleFontHandle(GaugeA)
		FreeFont(GetGaugeScaleFontHandle(GaugeA))
		SetGaugeScaleFontHandle(GaugeA, 0)
	EndIf
	
	If GetGaugeTextFontHandle(GaugeA)
		FreeFont(GetGaugeTextFontHandle(GaugeA))
		SetGaugeTextFontHandle(GaugeA, 0)
	EndIf
	
	If GetGaugeSubTextFontHandle(GaugeA)
		FreeFont(GetGaugeSubTextFontHandle(GaugeA))
		SetGaugeSubTextFontHandle(GaugeA, 0)
	EndIf
	
	If GetGaugeScaleLayer(GaugeA)
		FreeImage(GetGaugeScaleLayer(GaugeA))
		SetGaugeScaleLayer(GaugeA, 0)
	EndIf 
	
	If GetGaugeNeedleLayer(GaugeA)
		FreeImage(GetGaugeNeedleLayer(GaugeA))
		SetGaugeNeedleLayer(GaugeA, 0)
	EndIf 
	
	If GetGaugeComposedLayer(GaugeA)
		FreeImage(GetGaugeComposedLayer(GaugeA))
		SetGaugeComposedLayer(GaugeA, 0)
	EndIf 
	
EndMacro

Macro ResizeGaugeGadget(GaugeA)
	
	If GetGaugeGadgetID(GaugeA) <> #PB_Any
		ResizeGadget(GetGaugeGadgetID(GaugeA), GetGaugePosX(GaugeA), GetGaugePosY(GaugeA), #PB_Ignore, #PB_Ignore)
	Else     
		ResizeGadget(GetGaugeGadgetHandle(GaugeA), GetGaugePosX(GaugeA), GetGaugePosY(GaugeA), #PB_Ignore, #PB_Ignore)
	EndIf 
	
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Dessiner un texte centré en x, y <<<<<

Macro DrawTextCentered(x, y, Text, FrontColor, BackColor)
	
	DrawText(x - TextWidth(Text) >> 1, y - TextHeight("Wg") >> 1, Text, FrontColor, BackColor)
	
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Trouver la plus grande valeur de type double <<<<<

Procedure.d MaxDouble(P_Number01.d, P_Number02.d)
	
	Biggest_Double.d = P_Number01
	
	If P_Number02 > Biggest_Double
		Biggest_Double = P_Number02
	EndIf
	
	ProcedureReturn Biggest_Double
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Trouver la plus grande valeur de type long <<<<<

Procedure.l MaxLong(P_Number01.l, P_Number02.l)
	
	Biggest_Long.l = P_Number01
	
	If P_Number02 > Biggest_Long
		Biggest_Long = P_Number02
	EndIf
	
	ProcedureReturn Biggest_Long
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs spéciaux <<<<<

Macro SetGaugePositionSize(GaugeA, P_X, P_Y, P_Size)
	
	SetGaugePosX(GaugeA, P_X)
	SetGaugePosY(GaugeA, P_Y)
	SetGaugeSize(GaugeA, P_Size)
	
EndMacro 

Macro SetGaugeTextEx(GaugeA, Text, Color_RGBA)
	
	SetGaugeText(GaugeA, Text)
	SetGaugeTextColor(GaugeA, Color_RGBA)
	
EndMacro 

Macro SetGaugeSubTextEx(GaugeA, SubText, Color_RGBA)
	
	SetGaugeSubText(GaugeA, SubText)
	SetGaugeSubTextColor(GaugeA, Color_RGBA)
	
EndMacro 

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur PaintGaugeBackground <<<<<

Macro PaintGaugeBackground(GaugeA)
	
	DrawingMode(#PB_2DDrawing_AllChannels)
	Box(0, 0, GetGaugeLayerSize(GaugeA), GetGaugeLayerSize(GaugeA), GetGaugeBackGroundColor(GaugeA))
	
	; DrawingMode(#PB_2DDrawing_AllChannels | #PB_2DDrawing_Outlined)
	; Box(0, 0, GetGaugeSize(GaugeA), GetGaugeSize(GaugeA), RGBA(0, 0, 0, 32))
	
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur PaintGaugeScale <<<<<

Macro PaintGaugeScale(GaugeA)
	
	StartDegree.i = ((360 - GetGaugeSectorDegrees(GaugeA)) >> 1)
	
	wpx = GetGaugeLayerSize(GaugeA) / 33
	wpx2 = wpx / 4.0 * 3 - 1
	
	SmallStepDegrees.d = GetGaugeSmallStep(GaugeA) / GetGaugeMax(GaugeA) * GetGaugeSectorDegrees(GaugeA)
	BigStepDegrees.d = GetGaugeBigStep(GaugeA) / GetGaugeMax(GaugeA) * GetGaugeSectorDegrees(GaugeA)
	
	DrawingMode(#PB_2DDrawing_AllChannels)
	
	For I = 0 To GetGaugeSectorDegrees(GaugeA)
		x = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + I)) * GetGaugeScaleRadius(GaugeA)
		y = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + I)) * GetGaugeScaleRadius(GaugeA)
		Circle(x, y, wpx, GetGaugeScaleColor(GaugeA))
	Next
	
	DrawingMode(#PB_2DDrawing_AllChannels)
	
	For I = 0 To GetGaugeSectorDegrees(GaugeA)
		x = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + I)) * GetGaugeScaleRadius(GaugeA)
		y = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + I)) * GetGaugeScaleRadius(GaugeA)
		Circle(x, y, wpx2, GetGaugeScaleBackGroundColor(GaugeA))
	Next
	
	dI.d = 0
	
	While dI <= GetGaugeSectorDegrees(GaugeA)
		x1 = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - wpx2)
		y1 = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - wpx2)
		x2 = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - (wpx2 / 2))
		y2 = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - (wpx2 / 2))
		LineXY(x1, y1, x2, y2, GetGaugeScaleColor(GaugeA))
		dI + SmallStepDegrees
	Wend
	
	dI = 0
	
	While dI <= GetGaugeSectorDegrees(GaugeA) + 1 ;?!
		x1 = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - wpx)
		y1 = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - wpx)
		x2 = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) + wpx)
		y2 = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) + wpx)
		LineXY(x1, y1, x2, y2, GetGaugeScaleColor(GaugeA))
		dI + BigStepDegrees
	Wend
	
	DrawingMode(#PB_2DDrawing_AlphaBlend | #PB_2DDrawing_Transparent)
	DrawingFont(FontID(GetGaugeScaleFontHandle(GaugeA)))
	
	dI = 0
	I = 0
	
	While dI <= GetGaugeSectorDegrees(GaugeA) + 1 ; not sure why that is needed
		
		Offset.w = MaxLong(3, Len(Str(GetGaugeMax(GaugeA) - I)))
		
		x = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) + wpx * Offset)
		y = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) + wpx * Offset)
		DrawTextCentered(x, y, Str(GetGaugeMax(GaugeA) - I), GetGaugeTextColor(GaugeA), RGBA(0, 0, 0, 0))
		dI + BigStepDegrees
		I + GetGaugeBigStep(GaugeA)
		
	Wend
	
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur PaintGaugeDescription <<<<<

Macro PaintGaugeDescription(GaugeA)
	
	DrawingMode(#PB_2DDrawing_AlphaBlend | #PB_2DDrawing_Transparent)
	DrawingFont(FontID(GetGaugeTextFontHandle(GaugeA)))
	
	x = GetGaugeCenter(GaugeA)
	y = 32 * GetGaugeSize(GaugeA) / 10
	
	DrawTextCentered(x, y, GetGaugeText(GaugeA), GetGaugeTextColor(GaugeA), RGBA(0, 0, 0, 0))
	y + TextHeight("Wg")
	
	DrawingFont(FontID(GetGaugeSubTextFontHandle(GaugeA)))
	DrawTextCentered(x, y, GetGaugeSubText(GaugeA), GetGaugeSubTextColor(GaugeA), RGBA(0, 0, 0, 0))
	
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur PaintGaugeHand <<<<<

Macro PaintGaugeNeedle(GaugeA)
	
	DrawingMode(#PB_2DDrawing_AllChannels)
	
	HalfSize = GetGaugeLayerSize(GaugeA) >> 1
	
	StartDegree.i = ((360 - GetGaugeSectorDegrees(GaugeA)) >> 1)
	DirDegrees.d = StartDegree + (GetGaugeMax(GaugeA) - GetGaugeValue(GaugeA)) / GetGaugeMax(GaugeA) * GetGaugeSectorDegrees(GaugeA)
	
	SinAngle.d = Sin(Radian(-DirDegrees))
	CosAngle.d = Cos(Radian(-DirDegrees))
	
	x1 = HalfSize + (GetGaugeNeedleCenWidth(GaugeA) * CosAngle); - 0 * SinAngle)
	y1 = HalfSize + (GetGaugeNeedleCenWidth(GaugeA) * SinAngle); + 0 * CosAngle)
	
	x2 = HalfSize + (-GetGaugeNeedleCenWidth(GaugeA) * CosAngle); - 0 * SinAngle)
	y2 = HalfSize + (-GetGaugeNeedleCenWidth(GaugeA) * SinAngle); + 0 * CosAngle)
	
	x3 = HalfSize + (-GetGaugeNeedleTipWidth(GaugeA) * CosAngle - GetGaugeNeedleLength(GaugeA) * SinAngle)
	y3 = HalfSize + (-GetGaugeNeedleTipWidth(GaugeA) * SinAngle + GetGaugeNeedleLength(GaugeA) * CosAngle)
	
	x4 = HalfSize + (GetGaugeNeedleTipWidth(GaugeA) * CosAngle - GetGaugeNeedleLength(GaugeA) * SinAngle)
	y4 = HalfSize + (GetGaugeNeedleTipWidth(GaugeA) * SinAngle + GetGaugeNeedleLength(GaugeA) * CosAngle)
	
	x5 = HalfSize + (-15 * SinAngle); + 0 * CosAngle)
	y5 = HalfSize + (15 * CosAngle); + 0 * SinAngle)
	
	LineXY(x1, y1, x2, y2, GetGaugeNeedleColor(GaugeA))
	LineXY(x2, y2, x3, y3, GetGaugeNeedleColor(GaugeA))
	LineXY(x3, y3, x4, y4, GetGaugeNeedleColor(GaugeA))
	LineXY(x4, y4, x1, y1, GetGaugeNeedleColor(GaugeA))
	
	FillArea(x5, y5, GetGaugeNeedleColor(GaugeA), GetGaugeNeedleColor(GaugeA))
	
	Circle(HalfSize, HalfSize, GetGaugeNeedlePivotRadius(GaugeA), GetGaugeNeedleColor(GaugeA))
	
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur LoadGaugeFont <<<<<

Procedure LoadGaugeFont(*GaugeA.Gauge, FontName.s)
	
	If GetGaugeScaleFontHandle(*GaugeA)
		FreeFont(GetGaugeScaleFontHandle(*GaugeA))
	EndIf
	
	If GetGaugeTextFontHandle(*GaugeA)
		FreeFont(GetGaugeTextFontHandle(*GaugeA))
	EndIf
	
	If GetGaugeSubTextFontHandle(*GaugeA)
		FreeFont(GetGaugeSubTextFontHandle(*GaugeA))
	EndIf
	
	SetGaugeScaleFontHandle(*GaugeA, LoadFont(#PB_Any, FontName, 4 * MaxDouble(8, 0.04 * GetGaugeSize(*GaugeA))))
	SetGaugeTextFontHandle(*GaugeA, LoadFont(#PB_Any, FontName, 4 * MaxDouble(9, 0.056 * GetGaugeSize(*GaugeA)), #PB_Font_Bold))
	SetGaugeSubTextFontHandle(*GaugeA, LoadFont(#PB_Any, FontName, 4 * MaxDouble(8, 0.04 * GetGaugeSize(*GaugeA))))
	
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur RepaintGaugeLayer <<<<<

Procedure RepaintGaugeLayer(*GaugeA.Gauge, Needle.b, Scale.b)
	
	If Needle = #True
		
		If GetGaugeNeedleLayer(*GaugeA)
			FreeImage(GetGaugeNeedleLayer(*GaugeA))
		EndIf 
		
		SetGaugeNeedleLayer(*GaugeA, CreateImage(#PB_Any, GetGaugeLayerSize(*GaugeA), GetGaugeLayerSize(*GaugeA), 32 | #PB_Image_Transparent))
		
		If StartDrawing(ImageOutput(GetGaugeNeedleLayer(*GaugeA)))
				PaintGaugeNeedle(*GaugeA)
			StopDrawing()
		EndIf 
		
		ResizeAlphaImage(GetGaugeNeedleLayer(*GaugeA), GetGaugeSize(*GaugeA), GetGaugeSize(*GaugeA))
		
	EndIf
	
	If Scale = #True 
		
		If GetGaugeScaleLayer(*GaugeA)
			FreeImage(GetGaugeScaleLayer(*GaugeA))
		EndIf 
		
		SetGaugeScaleLayer(*GaugeA, CreateImage(#PB_Any, GetGaugeLayerSize(*GaugeA), GetGaugeLayerSize(*GaugeA), 32 | #PB_Image_Transparent))
		
		If StartDrawing(ImageOutput(GetGaugeScaleLayer(*GaugeA)))
				PaintGaugeBackground(*GaugeA)
				PaintGaugeScale(*GaugeA)
				PaintGaugeDescription(*GaugeA)
			StopDrawing()
		EndIf 
		
		ResizeAlphaImage(GetGaugeScaleLayer(*GaugeA), GetGaugeSize(*GaugeA), GetGaugeSize(*GaugeA))
		
	EndIf
	
EndProcedure 

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur RefreshGaugeGadget <<<<<

Procedure RefreshGaugeGadget(*GaugeA.Gauge)
	
	If GetGaugeComposedLayer(*GaugeA)
		FreeImage(GetGaugeComposedLayer(*GaugeA))
	EndIf
	
	SetGaugeComposedLayer(*GaugeA, CreateImage(#PB_Any, GetGaugeSize(*GaugeA), GetGaugeSize(*GaugeA), 32 | #PB_Image_Transparent))
	
	If StartDrawing(ImageOutput(GetGaugeComposedLayer(*GaugeA)))
			
			DrawingMode(#PB_2DDrawing_AlphaBlend)
			DrawImage(ImageID(GetGaugeScaleLayer(*GaugeA)), 0, 0)
			DrawImage(ImageID(GetGaugeNeedleLayer(*GaugeA)), 0, 0)
		StopDrawing()
		
	EndIf 
	
	If GetGaugeGadgetID(*GaugeA) <> #PB_Any
		SetGadgetState(GetGaugeGadgetID(*GaugeA), ImageID(GetGaugeComposedLayer(*GaugeA)))
	Else     
		SetGadgetState(GetGaugeGadgetHandle(*GaugeA), ImageID(GetGaugeComposedLayer(*GaugeA)))
	EndIf 
	
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur GaugeGadget <<<<<

Procedure GaugeGadget(*GaugeA.Gauge, GaugeID.l, x.w, y.w, Size.w, FontName.s = "", Options.l = 0)
	
	SetGaugeGadgetID(*GaugeA, GaugeID)
	SetGaugeGadgetHandle(*GaugeA, ImageGadget(GetGaugeGadgetID(*GaugeA), x, y, Size, Size, 0, Options))
	
	If GetGaugeGadgetID(*GaugeA) <> #PB_Any
		SetGadgetData(GetGaugeGadgetID(*GaugeA), *GaugeA)
	Else
		
	EndIf 
	
	SetGaugePositionSize(*GaugeA, x, y, Size)
	
	SetGaugeCenter(*GaugeA, (4*Size) >> 1)
	SetGaugeScaleRadius(*GaugeA, 4 * Size * 3 / 10)
	
	SetGaugeLayerSize(*GaugeA, Size * 4)
	
	SetGaugeNeedleLength(*GaugeA, (1 + GetGaugeScaleRadius(*GaugeA)))
	SetGaugeNeedlePivotRadius(*GaugeA, GetGaugeNeedleLength(*GaugeA) / 10)
	SetGaugeNeedleTipWidth(*GaugeA, GetGaugeNeedlePivotRadius(*GaugeA) / 7)
	SetGaugeNeedleCenWidth(*GaugeA, GetGaugeNeedlePivotRadius(*GaugeA) / 2)
	
	If FontName <> ""
		LoadGaugeFont(*GaugeA, FontName)
	EndIf 
	
	SetGaugeSectorDegrees(*GaugeA, 270)
	
	SetGaugeBackGroundColor(*GaugeA, RGBA(0, 0, 0, 0))
	SetGaugeScaleColor(*GaugeA, RGBA(62, 62, 128, 192))
	SetGaugeScaleBackGroundColor(*GaugeA, RGBA(64, 64, 64, 32))
	SetGaugeTextColor(*GaugeA, RGBA(0, 0, 0, 255))
	SetGaugeSubTextColor(*GaugeA, RGBA(92, 92, 92, 255))
	SetGaugeNeedleColor(*GaugeA, RGBA(255, 000, 000, 255))
	SetGaugeMin(*GaugeA, 0)
	SetGaugeMax(*GaugeA, 100)
	SetGaugeBigStep(*GaugeA, 10)
	SetGaugeSmallStep(*GaugeA, 5)
	SetGaugeValue(*GaugeA, 0)
	SetGaugeText(*GaugeA, "Value")
	SetGaugeSubText(*GaugeA, "in units")
	
	RepaintGaugeLayer(*GaugeA, #True, #True)
	RefreshGaugeGadget(*GaugeA)
	
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur ChangeGaugeGadgetValue <<<<<

Procedure ChangeGaugeGadgetValue(*GaugeA.Gauge, P_Value.l)
	
	SetGaugeValue(*GaugeA, P_Value)
	RepaintGaugeLayer(*GaugeA, #True, #False)
	RefreshGaugeGadget(*GaugeA)
	
EndProcedure

Procedure ChangeGaugeGadgetSectorDegrees(*GaugeA.Gauge, P_SectorDegrees.l)
	
	SetGaugeSectorDegrees(*GaugeA, P_SectorDegrees)
	RepaintGaugeLayer(*GaugeA, #True, #True)
	RefreshGaugeGadget(*GaugeA)
	
EndProcedure

Procedure ChangeGaugeGadgetMinMaxSteps(*GaugeA.Gauge, P_Min.l, P_Max.l, P_BigStep.l, P_SmallStep.l)
	
	SetGaugeMin(*GaugeA, P_Min)
	SetGaugeMax(*GaugeA, P_Max)
	SetGaugeBigStep(*GaugeA, P_BigStep)
	SetGaugeSmallStep(*GaugeA, P_SmallStep)
	RepaintGaugeLayer(*GaugeA, #False, #True)
	RefreshGaugeGadget(*GaugeA)
	
EndProcedure

Procedure ChangeGaugeGadgetDescription(*GaugeA.Gauge, P_Text.s, P_SubText.s)
	
	SetGaugeText(*GaugeA, P_Text)
	SetGaugeSubText(*GaugeA, P_SubText)
	RepaintGaugeLayer(*GaugeA, #False, #True)
	RefreshGaugeGadget(*GaugeA)
	
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
; <<<<< !!! WARNING - YOU ARE NOW IN A TESTING ZONE - WARNING !!! <<<<< 
; <<<<< !!! WARNING - THIS CODE SHOULD BE COMMENTED - WARNING !!! <<<<< 
; <<<<< !!! WARNING - BEFORE THE FINAL COMPILATION. - WARNING !!! <<<<< 
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 

#Size = 200

#W = 2 * #Size + 145
#H = 2 * #Size + 25

CompilerSelect #PB_Compiler_OS
		
	CompilerCase #PB_OS_Linux
		FontName.s = "Liberation Sans"
		
	CompilerCase #PB_OS_Windows
		FontName.s = "Tahoma"
		
CompilerEndSelect

If OpenWindow(0, 0, 0, #W, #H, "Gauge Gadget Demo", #PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
	
	TrackBarGadget(0, 5, 5, 20, #Size, 0, 3600, #PB_TrackBar_Vertical)
	TrackBarGadget(1, 30, 5, 20, #Size, 1, 360, #PB_TrackBar_Vertical)  
	SetGadgetState(0, 0)
	SetGadgetState(1, 270)
	
	GaugeGadget(Pressure.Gauge, 3, 55, 5, #Size, FontName, 1)
	ChangeGaugeGadgetMinMaxSteps(Pressure, 0, 3600, 300, 150)
	ChangeGaugeGadgetDescription(Pressure, "Pressure", "in kPa")
	
	
	TrackBarGadget(4, 85 + #Size, 5, 20, #Size, 0, 200, #PB_TrackBar_Vertical)
	TrackBarGadget(5, 110 + #Size, 5, 20, #Size, 1, 360, #PB_TrackBar_Vertical)
	SetGadgetState(4, 0)
	SetGadgetState(5, 250)
	
	GaugeGadget(Temperature.Gauge, 6, 135 + #Size, 5, #Size, FontName, 1)
	ChangeGaugeGadgetMinMaxSteps(Temperature, 0, 200, 20, 5)
	ChangeGaugeGadgetDescription(Temperature, "Temperature", "in K")
	ChangeGaugeGadgetSectorDegrees(Temperature, 250)
	
	
	
	TrackBarGadget(7, 5 , 15 + #Size, 20, #Size, 0, 100, #PB_TrackBar_Vertical)
	TrackBarGadget(8, 30, 15 + #Size, 20, #Size, 1, 360, #PB_TrackBar_Vertical)
	SetGadgetState(7, 0)
	SetGadgetState(8, 270)
	
	GaugeGadget(Humidity.Gauge, 9, 55, 15 + #Size, #Size, FontName, 1)
	ChangeGaugeGadgetMinMaxSteps(Humidity, 0, 100, 10, 5)
	ChangeGaugeGadgetDescription(Humidity, "Humidity", "in %")
	
	
	
	
	TrackBarGadget(10, 85 + #Size, 15 + #Size, 20, #Size, 0, 50, #PB_TrackBar_Vertical)
	TrackBarGadget(11, 110 + #Size, 15 + #Size, 20, #Size, 1, 360, #PB_TrackBar_Vertical)
	SetGadgetState(10, 0)
	SetGadgetState(11, 250)
	
	GaugeGadget(Density.Gauge, 12, 135 + #Size, 15 + #Size, #Size, FontName, 1)
	ChangeGaugeGadgetMinMaxSteps(Density, 0, 50, 5, 1)
	ChangeGaugeGadgetDescription(Density, "Density", "kg/m³")
	
	
	
	Repeat
		
		Select WaitWindowEvent()
				
			Case #PB_Event_Gadget 
				
				Select EventGadget()
						
					Case 0 ; Change value
						ChangeGaugeGadgetValue(Pressure, GetGadgetState(0))
						
					Case 1 ; Change size in degrees
						ChangeGaugeGadgetSectorDegrees(Pressure, GetGadgetState(1))
						
					Case 4 ; Change value
						ChangeGaugeGadgetValue(Temperature, GetGadgetState(4))
						
					Case 5 ; Change size in degrees
						ChangeGaugeGadgetSectorDegrees(Temperature, GetGadgetState(5))
						
					Case 7 ; Change value
						ChangeGaugeGadgetValue(Humidity, GetGadgetState(7))
						
					Case 8 ; Change size in degrees
						ChangeGaugeGadgetSectorDegrees(Humidity, GetGadgetState(8))
						
					Case 10 ; Change value
						ChangeGaugeGadgetValue(Density, GetGadgetState(10))
						
					Case 11 ; Change size in degrees
						ChangeGaugeGadgetSectorDegrees(Density, GetGadgetState(11)) 
						
				EndSelect
				
			Case #PB_Event_CloseWindow
				Break
				
		EndSelect
		
	ForEver
	
	ResetGauge(Pressure)
	ResetGauge(Temperature)
	ResetGauge(Humidity)
	ResetGauge(Density)
	
EndIf 

; <<<<<<<<<<<<<<<<<<<<<<<
; <<<<< END OF FILE <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: GaugeGadget - Version 2.1.0

Message par Ar-S »

C'est vrai que ça lag pas mal mais c'est bien joli.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: GaugeGadget - Version 2.1.0

Message par Guimauve »

Bonjour à tous,

Est-ce que certain d'entre vous on remarqué une amélioration de la vitesse de rafraîchissement ?

@ Ar-S

Quel est la puissance de ta machine ? Est-ce que tu peux faire un essai en modifiant la constante #Size = 200 pour #Size = 150 ? De mon coté, le problème de lagging commence à apparaître pour une
grandeur 350 et plus. Ce problème vient de l'utilisation de couche de dessin 4 fois plus grande et du ResizeImage(). Il faudrait vraiment avoir des commandes de dessin avec une option pour l'antialiasing
qui permettrait de se passer des images intermédiaires (Layer) 4 fois plus grande et de la commande ResizeImage().

@ Le Soldat Inconnu

Ton astuce pour la fonction ResizeAlphaImage() fonctionne uniquement sous Windows et en tant sous Linux à moins de faire une recherche pour les fonctions équivalentes ton correctif ne fonctionnera pas.
Ceci étant dit l'apparition d'une bordure noir pendant un ResizeImage() est effectivement un problème qui mérite d'être corrigé. Je me demande si ce problème n'est pas lié avec la fonction BackColor() qui
sans avoir été utilisée insère une couleur noir par défaut dans le dessin.

A+
Guimauve
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: GaugeGadget - Version 2.1.0

Message par Le Soldat Inconnu »

Non, non, pas du tout, regarde ici :
http://www.purebasic.fr/french/viewtopi ... =6&t=11880
Je te fais une version compatible Linux sur ce sujet mais ce sera plus lent
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
MetalOS
Messages : 1492
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: GaugeGadget - Version 2.1.0

Message par MetalOS »

Salut tous le monde,

J'aimerais pouvoir modifier la position de l'aiguille d'une gauge avec le contenue d'un StringGadget, mais à chaque fois j'ai une erreur de pointeur vide. Voici ma source de test (Désoler mais elle est dégueu comme source :oops:).

Code : Tout sélectionner


;- Global Variables and Constants
Global BubbleTipStyle.l:BubbleTipStyle=0

;- Window Constants
Enumeration 1
  #Window_Form1
EndEnumeration
#WindowIndex=#PB_Compiler_EnumerationValue


;- Gadget Constants
Enumeration 1
  ;Window_Form1

  #Gadget_Form1_StringGauge
  #Gadget_Form1_ButtonCalculer

EndEnumeration
#GadgetIndex=#PB_Compiler_EnumerationValue


;- MenuBar Constants
Enumeration 1
  #MenuBar_Form1
EndEnumeration
#MenuBarIndex=#PB_Compiler_EnumerationValue


;- StatusBar Constants
Enumeration 1
  #StatusBar_Form1
EndEnumeration
#StatusBarIndex=#PB_Compiler_EnumerationValue


XIncludeFile "Module_Constants.pb"

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Déclaration de la Structure <<<<<

Structure Gauge
 
  PosX.w
  PosY.w
  Size.w
  Center.w
  ScaleRadius.w
  Min.l
  Max.l
  BigStep.l
  SmallStep.l
  SectorDegrees.w
  Value.l
  Text.s
  SubText.s
  GadgetID.l
  GadgetHandle.l
  BackGroundColor.l
  ScaleColor.l
  ScaleBackGroundColor.l
  TextColor.l
  SubTextColor.l
  NeedleColor.l
  ScaleFontHandle.i
  TextFontHandle.i
  SubTextFontHandle.i
  LayerSize.w
  NeedleLength.l
  NeedlePivotRadius.l
  NeedleTipWidth.l
  NeedleCenWidth.l
  ScaleLayer.l
  NeedleLayer.l
  ComposedLayer.l
 
EndStructure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les observateurs <<<<<

Macro GetGaugePosX(GaugeA)
 
  GaugeA\PosX
 
EndMacro

Macro GetGaugePosY(GaugeA)
 
  GaugeA\PosY
 
EndMacro

Macro GetGaugeSize(GaugeA)
 
  GaugeA\Size
 
EndMacro

Macro GetGaugeCenter(GaugeA)
 
  GaugeA\Center
 
EndMacro

Macro GetGaugeScaleRadius(GaugeA)
 
  GaugeA\ScaleRadius
 
EndMacro

Macro GetGaugeMin(GaugeA)
 
  GaugeA\Min
 
EndMacro

Macro GetGaugeMax(GaugeA)
 
  GaugeA\Max
 
EndMacro

Macro GetGaugeBigStep(GaugeA)
 
  GaugeA\BigStep
 
EndMacro

Macro GetGaugeSmallStep(GaugeA)
 
  GaugeA\SmallStep
 
EndMacro

Macro GetGaugeSectorDegrees(GaugeA)
 
  GaugeA\SectorDegrees
 
EndMacro

Macro GetGaugeValue(GaugeA)
 
  GaugeA\Value
 
EndMacro

Macro GetGaugeText(GaugeA)
 
  GaugeA\Text
 
EndMacro

Macro GetGaugeSubText(GaugeA)
 
  GaugeA\SubText
 
EndMacro

Macro GetGaugeGadgetID(GaugeA)
 
  GaugeA\GadgetID
 
EndMacro

Macro GetGaugeGadgetHandle(GaugeA)
 
  GaugeA\GadgetHandle
 
EndMacro

Macro GetGaugeBackGroundColor(GaugeA)
 
  GaugeA\BackGroundColor
 
EndMacro

Macro GetGaugeScaleColor(GaugeA)
 
  GaugeA\ScaleColor
 
EndMacro

Macro GetGaugeScaleBackGroundColor(GaugeA)
 
  GaugeA\ScaleBackGroundColor
 
EndMacro

Macro GetGaugeTextColor(GaugeA)
 
  GaugeA\TextColor
 
EndMacro

Macro GetGaugeSubTextColor(GaugeA)
 
  GaugeA\SubTextColor
 
EndMacro

Macro GetGaugeNeedleColor(GaugeA)
 
  GaugeA\NeedleColor
 
EndMacro

Macro GetGaugeScaleFontHandle(GaugeA)
 
  GaugeA\ScaleFontHandle
 
EndMacro

Macro GetGaugeTextFontHandle(GaugeA)
 
  GaugeA\TextFontHandle
 
EndMacro

Macro GetGaugeSubTextFontHandle(GaugeA)
 
  GaugeA\SubTextFontHandle
 
EndMacro

Macro GetGaugeLayerSize(GaugeA)
 
  GaugeA\LayerSize
 
EndMacro

Macro GetGaugeNeedleLength(GaugeA)
 
  GaugeA\NeedleLength
 
EndMacro

Macro GetGaugeNeedlePivotRadius(GaugeA)
 
  GaugeA\NeedlePivotRadius
 
EndMacro

Macro GetGaugeNeedleTipWidth(GaugeA)
 
  GaugeA\NeedleTipWidth
 
EndMacro

Macro GetGaugeNeedleCenWidth(GaugeA)
 
  GaugeA\NeedleCenWidth
 
EndMacro

Macro GetGaugeScaleLayer(GaugeA)
 
  GaugeA\ScaleLayer
 
EndMacro

Macro GetGaugeNeedleLayer(GaugeA)
 
  GaugeA\NeedleLayer
 
EndMacro

Macro GetGaugeComposedLayer(GaugeA)
 
  GaugeA\ComposedLayer
 
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs <<<<<

Macro SetGaugePosX(GaugeA, P_PosX)
 
  GetGaugePosX(GaugeA) = P_PosX
 
EndMacro

Macro SetGaugePosY(GaugeA, P_PosY)
 
  GetGaugePosY(GaugeA) = P_PosY
 
EndMacro

Macro SetGaugeSize(GaugeA, P_Size)
 
  GetGaugeSize(GaugeA) = P_Size
 
EndMacro

Macro SetGaugeCenter(GaugeA, P_Center)
 
  GetGaugeCenter(GaugeA) = P_Center
 
EndMacro

Macro SetGaugeScaleRadius(GaugeA, P_ScaleRadius)
 
  GetGaugeScaleRadius(GaugeA) = P_ScaleRadius
 
EndMacro

Macro SetGaugeMin(GaugeA, P_Min)
 
  GetGaugeMin(GaugeA) = P_Min
 
EndMacro

Macro SetGaugeMax(GaugeA, P_Max)
 
  GetGaugeMax(GaugeA) = P_Max
 
EndMacro

Macro SetGaugeBigStep(GaugeA, P_BigStep)
 
  GetGaugeBigStep(GaugeA) = P_BigStep
 
EndMacro

Macro SetGaugeSmallStep(GaugeA, P_SmallStep)
 
  GetGaugeSmallStep(GaugeA) = P_SmallStep
 
EndMacro

Macro SetGaugeSectorDegrees(GaugeA, P_SectorDegrees)
 
  GetGaugeSectorDegrees(GaugeA) = P_SectorDegrees
 
EndMacro

Macro SetGaugeValue(GaugeA, P_Value)
 
  GetGaugeValue(GaugeA) = P_Value
 
EndMacro

Macro SetGaugeText(GaugeA, P_Text)
 
  GetGaugeText(GaugeA) = P_Text
 
EndMacro

Macro SetGaugeSubText(GaugeA, P_SubText)
 
  GetGaugeSubText(GaugeA) = P_SubText
 
EndMacro

Macro SetGaugeGadgetID(GaugeA, P_GadgetID)
 
  GetGaugeGadgetID(GaugeA) = P_GadgetID
 
EndMacro

Macro SetGaugeGadgetHandle(GaugeA, P_GadgetHandle)
 
  GetGaugeGadgetHandle(GaugeA) = P_GadgetHandle
 
EndMacro

Macro SetGaugeBackGroundColor(GaugeA, P_BackGroundColor)
 
  GetGaugeBackGroundColor(GaugeA) = P_BackGroundColor
 
EndMacro

Macro SetGaugeScaleColor(GaugeA, P_ScaleColor)
 
  GetGaugeScaleColor(GaugeA) = P_ScaleColor
 
EndMacro

Macro SetGaugeScaleBackGroundColor(GaugeA, P_ScaleBackGroundColor)
 
  GetGaugeScaleBackGroundColor(GaugeA) = P_ScaleBackGroundColor
 
EndMacro

Macro SetGaugeTextColor(GaugeA, P_TextColor)
 
  GetGaugeTextColor(GaugeA) = P_TextColor
 
EndMacro

Macro SetGaugeSubTextColor(GaugeA, P_SubTextColor)
 
  GetGaugeSubTextColor(GaugeA) = P_SubTextColor
 
EndMacro

Macro SetGaugeNeedleColor(GaugeA, P_NeedleColor)
 
  GetGaugeNeedleColor(GaugeA) = P_NeedleColor
 
EndMacro

Macro SetGaugeScaleFontHandle(GaugeA, P_ScaleFontHandle)
 
  GetGaugeScaleFontHandle(GaugeA) = P_ScaleFontHandle
 
EndMacro

Macro SetGaugeTextFontHandle(GaugeA, P_TextFontHandle)
 
  GetGaugeTextFontHandle(GaugeA) = P_TextFontHandle
 
EndMacro

Macro SetGaugeSubTextFontHandle(GaugeA, P_SubTextFontHandle)
 
  GetGaugeSubTextFontHandle(GaugeA) = P_SubTextFontHandle
 
EndMacro

Macro SetGaugeLayerSize(GaugeA, P_LayerSize)
 
  GetGaugeLayerSize(GaugeA) = P_LayerSize
 
EndMacro

Macro SetGaugeNeedleLength(GaugeA, P_NeedleLength)
 
  GetGaugeNeedleLength(GaugeA) = P_NeedleLength
 
EndMacro

Macro SetGaugeNeedlePivotRadius(GaugeA, P_NeedlePivotRadius)
 
  GetGaugeNeedlePivotRadius(GaugeA) = P_NeedlePivotRadius
 
EndMacro

Macro SetGaugeNeedleTipWidth(GaugeA, P_NeedleTipWidth)
 
  GetGaugeNeedleTipWidth(GaugeA) = P_NeedleTipWidth
 
EndMacro

Macro SetGaugeNeedleCenWidth(GaugeA, P_NeedleCenWidth)
 
  GetGaugeNeedleCenWidth(GaugeA) = P_NeedleCenWidth
 
EndMacro

Macro SetGaugeScaleLayer(GaugeA, P_ScaleLayer)
 
  GetGaugeScaleLayer(GaugeA) = P_ScaleLayer
 
EndMacro

Macro SetGaugeNeedleLayer(GaugeA, P_NeedleLayer)
 
  GetGaugeNeedleLayer(GaugeA) = P_NeedleLayer
 
EndMacro

Macro SetGaugeComposedLayer(GaugeA, P_ComposedLayer)
 
  GetGaugeComposedLayer(GaugeA) = P_ComposedLayer
 
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Code généré en : 00.010 secondes (49500.00 lignes/seconde) <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Reset <<<<<

Macro ResetGauge(GaugeA)
 
  SetGaugePosX(GaugeA, 0)
  SetGaugePosY(GaugeA, 0)
  SetGaugeSize(GaugeA, 0)
  SetGaugeScaleRadius(GaugeA, 0)
  SetGaugeMin(GaugeA, 0)
  SetGaugeMax(GaugeA, 0)
  SetGaugeBigStep(GaugeA, 0)
  SetGaugeSmallStep(GaugeA, 0)
  SetGaugeValue(GaugeA, 0)
  SetGaugeText(GaugeA, "")
  SetGaugeSubText(GaugeA, "")
  SetGaugeGadgetID(GaugeA, 0)
  SetGaugeGadgetHandle(GaugeA, 0)
  SetGaugeBackGroundColor(GaugeA, 0)
  SetGaugeScaleColor(GaugeA, 0)
  SetGaugeScaleBackGroundColor(GaugeA, 0)
  SetGaugeTextColor(GaugeA, 0)
  SetGaugeSubTextColor(GaugeA, 0)
  SetGaugeNeedleColor(GaugeA, 0)
  SetGaugeLayerSize(GaugeA, 0)
  SetGaugeNeedleLength(GaugeA, 0)
  SetGaugeNeedlePivotRadius(GaugeA, 0)
  SetGaugeNeedleTipWidth(GaugeA, 0)
  SetGaugeNeedleCenWidth(GaugeA, 0)
 
  If GetGaugeScaleFontHandle(GaugeA)
    FreeFont(GetGaugeScaleFontHandle(GaugeA))
    SetGaugeScaleFontHandle(GaugeA, 0)
  EndIf
 
  If GetGaugeTextFontHandle(GaugeA)
    FreeFont(GetGaugeTextFontHandle(GaugeA))
    SetGaugeTextFontHandle(GaugeA, 0)
  EndIf
 
  If GetGaugeSubTextFontHandle(GaugeA)
    FreeFont(GetGaugeSubTextFontHandle(GaugeA))
    SetGaugeSubTextFontHandle(GaugeA, 0)
  EndIf
 
  If GetGaugeScaleLayer(GaugeA)
    FreeImage(GetGaugeScaleLayer(GaugeA))
    SetGaugeScaleLayer(GaugeA, 0)
  EndIf
 
  If GetGaugeNeedleLayer(GaugeA)
    FreeImage(GetGaugeNeedleLayer(GaugeA))
    SetGaugeNeedleLayer(GaugeA, 0)
  EndIf
 
  If GetGaugeComposedLayer(GaugeA)
    FreeImage(GetGaugeComposedLayer(GaugeA))
    SetGaugeComposedLayer(GaugeA, 0)
  EndIf
 
EndMacro

Macro ResizeGaugeGadget(GaugeA)
 
  If GetGaugeGadgetID(GaugeA) <> #PB_Any
    ResizeGadget(GetGaugeGadgetID(GaugeA), GetGaugePosX(GaugeA), GetGaugePosY(GaugeA), #PB_Ignore, #PB_Ignore)
  Else     
    ResizeGadget(GetGaugeGadgetHandle(GaugeA), GetGaugePosX(GaugeA), GetGaugePosY(GaugeA), #PB_Ignore, #PB_Ignore)
  EndIf
 
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Dessiner un texte centré en x, y <<<<<

Macro DrawTextCentered(x, y, Text, FrontColor, BackColor)
 
  DrawText(x - TextWidth(Text) >> 1, y - TextHeight("Wg") >> 1, Text, FrontColor, BackColor)
 
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Trouver la plus grande valeur de type double <<<<<

Procedure.d MaxDouble(P_Number01.d, P_Number02.d)
 
  Biggest_Double.d = P_Number01
 
  If P_Number02 > Biggest_Double
    Biggest_Double = P_Number02
  EndIf
 
  ProcedureReturn Biggest_Double
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Trouver la plus grande valeur de type long <<<<<

Procedure.l MaxLong(P_Number01.l, P_Number02.l)
 
  Biggest_Long.l = P_Number01
 
  If P_Number02 > Biggest_Long
    Biggest_Long = P_Number02
  EndIf
 
  ProcedureReturn Biggest_Long
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs spéciaux <<<<<

Macro SetGaugePositionSize(GaugeA, P_X, P_Y, P_Size)
 
  SetGaugePosX(GaugeA, P_X)
  SetGaugePosY(GaugeA, P_Y)
  SetGaugeSize(GaugeA, P_Size)
 
EndMacro

Macro SetGaugeTextEx(GaugeA, Text, Color_RGBA)
 
  SetGaugeText(GaugeA, Text)
  SetGaugeTextColor(GaugeA, Color_RGBA)
 
EndMacro

Macro SetGaugeSubTextEx(GaugeA, SubText, Color_RGBA)
 
  SetGaugeSubText(GaugeA, SubText)
  SetGaugeSubTextColor(GaugeA, Color_RGBA)
 
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur PaintGaugeBackground <<<<<

Macro PaintGaugeBackground(GaugeA)
 
  DrawingMode(#PB_2DDrawing_AllChannels)
  Box(0, 0, GetGaugeLayerSize(GaugeA), GetGaugeLayerSize(GaugeA), GetGaugeBackGroundColor(GaugeA))
 
  ; DrawingMode(#PB_2DDrawing_AllChannels | #PB_2DDrawing_Outlined)
  ; Box(0, 0, GetGaugeSize(GaugeA), GetGaugeSize(GaugeA), RGBA(0, 0, 0, 32))
 
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur PaintGaugeScale <<<<<

Macro PaintGaugeScale(GaugeA)
 
  StartDegree.i = ((360 - GetGaugeSectorDegrees(GaugeA)) >> 1)
 
  wpx = GetGaugeLayerSize(GaugeA) / 33
  wpx2 = wpx / 4.0 * 3 - 1
 
  SmallStepDegrees.d = GetGaugeSmallStep(GaugeA) / GetGaugeMax(GaugeA) * GetGaugeSectorDegrees(GaugeA)
  BigStepDegrees.d = GetGaugeBigStep(GaugeA) / GetGaugeMax(GaugeA) * GetGaugeSectorDegrees(GaugeA)
 
  DrawingMode(#PB_2DDrawing_AllChannels)
 
  For I = 0 To GetGaugeSectorDegrees(GaugeA)
    x = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + I)) * GetGaugeScaleRadius(GaugeA)
    y = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + I)) * GetGaugeScaleRadius(GaugeA)
    Circle(x, y, wpx, GetGaugeScaleColor(GaugeA))
  Next
 
  DrawingMode(#PB_2DDrawing_AllChannels)
 
  For I = 0 To GetGaugeSectorDegrees(GaugeA)
    x = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + I)) * GetGaugeScaleRadius(GaugeA)
    y = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + I)) * GetGaugeScaleRadius(GaugeA)
    Circle(x, y, wpx2, GetGaugeScaleBackGroundColor(GaugeA))
  Next
 
  dI.d = 0
 
  While dI <= GetGaugeSectorDegrees(GaugeA)
    x1 = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - wpx2)
    y1 = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - wpx2)
    x2 = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - (wpx2 / 2))
    y2 = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - (wpx2 / 2))
    LineXY(x1, y1, x2, y2, GetGaugeScaleColor(GaugeA))
    dI + SmallStepDegrees
  Wend
 
  dI = 0
 
  While dI <= GetGaugeSectorDegrees(GaugeA) + 1 ;?!
    x1 = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - wpx)
    y1 = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - wpx)
    x2 = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) + wpx)
    y2 = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) + wpx)
    LineXY(x1, y1, x2, y2, GetGaugeScaleColor(GaugeA))
    dI + BigStepDegrees
  Wend
 
  DrawingMode(#PB_2DDrawing_AlphaBlend | #PB_2DDrawing_Transparent)
  DrawingFont(FontID(GetGaugeScaleFontHandle(GaugeA)))
 
  dI = 0
  I = 0
 
  While dI <= GetGaugeSectorDegrees(GaugeA) + 1 ; not sure why that is needed
   
    Offset.w = MaxLong(3, Len(Str(GetGaugeMax(GaugeA) - I)))
   
    x = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) + wpx * Offset)
    y = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) + wpx * Offset)
    DrawTextCentered(x, y, Str(GetGaugeMax(GaugeA) - I), GetGaugeTextColor(GaugeA), RGBA(0, 0, 0, 0))
    dI + BigStepDegrees
    I + GetGaugeBigStep(GaugeA)
   
  Wend
 
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur PaintGaugeDescription <<<<<

Macro PaintGaugeDescription(GaugeA)
 
  DrawingMode(#PB_2DDrawing_AlphaBlend | #PB_2DDrawing_Transparent)
  DrawingFont(FontID(GetGaugeTextFontHandle(GaugeA)))
 
  x = GetGaugeCenter(GaugeA)
  y = 32 * GetGaugeSize(GaugeA) / 10
 
  DrawTextCentered(x, y, GetGaugeText(GaugeA), GetGaugeTextColor(GaugeA), RGBA(0, 0, 0, 0))
  y + TextHeight("Wg")
 
  DrawingFont(FontID(GetGaugeSubTextFontHandle(GaugeA)))
  DrawTextCentered(x, y, GetGaugeSubText(GaugeA), GetGaugeSubTextColor(GaugeA), RGBA(0, 0, 0, 0))
 
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur PaintGaugeHand <<<<<

Macro PaintGaugeNeedle(GaugeA)
 
  DrawingMode(#PB_2DDrawing_AllChannels)
 
  HalfSize = GetGaugeLayerSize(GaugeA) >> 1
 
  StartDegree.i = ((360 - GetGaugeSectorDegrees(GaugeA)) >> 1)
  DirDegrees.d = StartDegree + (GetGaugeMax(GaugeA) - GetGaugeValue(GaugeA)) / GetGaugeMax(GaugeA) * GetGaugeSectorDegrees(GaugeA)
 
  SinAngle.d = Sin(Radian(-DirDegrees))
  CosAngle.d = Cos(Radian(-DirDegrees))
 
  x1 = HalfSize + (GetGaugeNeedleCenWidth(GaugeA) * CosAngle); - 0 * SinAngle)
  y1 = HalfSize + (GetGaugeNeedleCenWidth(GaugeA) * SinAngle); + 0 * CosAngle)
 
  x2 = HalfSize + (-GetGaugeNeedleCenWidth(GaugeA) * CosAngle); - 0 * SinAngle)
  y2 = HalfSize + (-GetGaugeNeedleCenWidth(GaugeA) * SinAngle); + 0 * CosAngle)
 
  x3 = HalfSize + (-GetGaugeNeedleTipWidth(GaugeA) * CosAngle - GetGaugeNeedleLength(GaugeA) * SinAngle)
  y3 = HalfSize + (-GetGaugeNeedleTipWidth(GaugeA) * SinAngle + GetGaugeNeedleLength(GaugeA) * CosAngle)
 
  x4 = HalfSize + (GetGaugeNeedleTipWidth(GaugeA) * CosAngle - GetGaugeNeedleLength(GaugeA) * SinAngle)
  y4 = HalfSize + (GetGaugeNeedleTipWidth(GaugeA) * SinAngle + GetGaugeNeedleLength(GaugeA) * CosAngle)
 
  x5 = HalfSize + (-15 * SinAngle); + 0 * CosAngle)
  y5 = HalfSize + (15 * CosAngle); + 0 * SinAngle)
 
  LineXY(x1, y1, x2, y2, GetGaugeNeedleColor(GaugeA))
  LineXY(x2, y2, x3, y3, GetGaugeNeedleColor(GaugeA))
  LineXY(x3, y3, x4, y4, GetGaugeNeedleColor(GaugeA))
  LineXY(x4, y4, x1, y1, GetGaugeNeedleColor(GaugeA))
 
  FillArea(x5, y5, GetGaugeNeedleColor(GaugeA), GetGaugeNeedleColor(GaugeA))
 
  Circle(HalfSize, HalfSize, GetGaugeNeedlePivotRadius(GaugeA), GetGaugeNeedleColor(GaugeA))
 
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur LoadGaugeFont <<<<<

Procedure LoadGaugeFont(*GaugeA.Gauge, FontName.s)
 
  If GetGaugeScaleFontHandle(*GaugeA)
    FreeFont(GetGaugeScaleFontHandle(*GaugeA))
  EndIf
 
  If GetGaugeTextFontHandle(*GaugeA)
    FreeFont(GetGaugeTextFontHandle(*GaugeA))
  EndIf
 
  If GetGaugeSubTextFontHandle(*GaugeA)
    FreeFont(GetGaugeSubTextFontHandle(*GaugeA))
  EndIf
 
  SetGaugeScaleFontHandle(*GaugeA, LoadFont(#PB_Any, FontName, 4 * MaxDouble(8, 0.04 * GetGaugeSize(*GaugeA))))
  SetGaugeTextFontHandle(*GaugeA, LoadFont(#PB_Any, FontName, 4 * MaxDouble(9, 0.056 * GetGaugeSize(*GaugeA)), #PB_Font_Bold))
  SetGaugeSubTextFontHandle(*GaugeA, LoadFont(#PB_Any, FontName, 4 * MaxDouble(8, 0.04 * GetGaugeSize(*GaugeA))))
 
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur RepaintGaugeLayer <<<<<

Procedure RepaintGaugeLayer(*GaugeA.Gauge, Needle.b, Scale.b)
 
  If Needle = #True
   
    If GetGaugeNeedleLayer(*GaugeA)
      FreeImage(GetGaugeNeedleLayer(*GaugeA))
    EndIf
   
    SetGaugeNeedleLayer(*GaugeA, CreateImage(#PB_Any, GetGaugeLayerSize(*GaugeA), GetGaugeLayerSize(*GaugeA), 32 | #PB_Image_Transparent))
   
    If StartDrawing(ImageOutput(GetGaugeNeedleLayer(*GaugeA)))
      PaintGaugeNeedle(*GaugeA)
      StopDrawing()
    EndIf
   
    ResizeImage(GetGaugeNeedleLayer(*GaugeA), GetGaugeSize(*GaugeA), GetGaugeSize(*GaugeA))
   
  EndIf
 
  If Scale = #True
   
    If GetGaugeScaleLayer(*GaugeA)
      FreeImage(GetGaugeScaleLayer(*GaugeA))
    EndIf
   
    SetGaugeScaleLayer(*GaugeA, CreateImage(#PB_Any, GetGaugeLayerSize(*GaugeA), GetGaugeLayerSize(*GaugeA), 32 | #PB_Image_Transparent))
   
    If StartDrawing(ImageOutput(GetGaugeScaleLayer(*GaugeA)))
      PaintGaugeBackground(*GaugeA)
      PaintGaugeScale(*GaugeA)
      PaintGaugeDescription(*GaugeA)
      StopDrawing()
    EndIf
   
    ResizeImage(GetGaugeScaleLayer(*GaugeA), GetGaugeSize(*GaugeA), GetGaugeSize(*GaugeA))
   
  EndIf
 
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur RefreshGaugeGadget <<<<<

Procedure RefreshGaugeGadget(*GaugeA.Gauge)
 
  If GetGaugeComposedLayer(*GaugeA)
    FreeImage(GetGaugeComposedLayer(*GaugeA))
  EndIf
 
  SetGaugeComposedLayer(*GaugeA, CreateImage(#PB_Any, GetGaugeSize(*GaugeA), GetGaugeSize(*GaugeA), 32 | #PB_Image_Transparent))
 
  If StartDrawing(ImageOutput(GetGaugeComposedLayer(*GaugeA)))
   
    DrawingMode(#PB_2DDrawing_AlphaBlend)
    DrawImage(ImageID(GetGaugeScaleLayer(*GaugeA)), 0, 0)
    DrawImage(ImageID(GetGaugeNeedleLayer(*GaugeA)), 0, 0)
    StopDrawing()
   
  EndIf
 
  If GetGaugeGadgetID(*GaugeA) <> #PB_Any
    SetGadgetState(GetGaugeGadgetID(*GaugeA), ImageID(GetGaugeComposedLayer(*GaugeA)))
  Else     
    SetGadgetState(GetGaugeGadgetHandle(*GaugeA), ImageID(GetGaugeComposedLayer(*GaugeA)))
  EndIf
 
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur GaugeGadget <<<<<

Procedure GaugeGadget(*GaugeA.Gauge, GaugeID.l, x.w, y.w, Size.w, FontName.s = "", Options.l = 0)
 
  SetGaugeGadgetID(*GaugeA, GaugeID)
  SetGaugeGadgetHandle(*GaugeA, ImageGadget(GetGaugeGadgetID(*GaugeA), x, y, Size, Size, 0, Options))
 
  If GetGaugeGadgetID(*GaugeA) <> #PB_Any
    SetGadgetData(GetGaugeGadgetID(*GaugeA), *GaugeA)
  Else
   
  EndIf
 
  SetGaugePositionSize(*GaugeA, x, y, Size)
 
  SetGaugeCenter(*GaugeA, (4*Size) >> 1)
  SetGaugeScaleRadius(*GaugeA, 4 * Size * 3 / 10)
 
  SetGaugeLayerSize(*GaugeA, Size * 4)
 
  SetGaugeNeedleLength(*GaugeA, (1 + GetGaugeScaleRadius(*GaugeA)))
  SetGaugeNeedlePivotRadius(*GaugeA, GetGaugeNeedleLength(*GaugeA) / 10)
  SetGaugeNeedleTipWidth(*GaugeA, GetGaugeNeedlePivotRadius(*GaugeA) / 7)
  SetGaugeNeedleCenWidth(*GaugeA, GetGaugeNeedlePivotRadius(*GaugeA) / 2)
 
  If FontName <> ""
    LoadGaugeFont(*GaugeA, FontName)
  EndIf
 
  SetGaugeSectorDegrees(*GaugeA, 270)
 
  SetGaugeBackGroundColor(*GaugeA, RGBA(0, 0, 0, 0))
  SetGaugeScaleColor(*GaugeA, RGBA(62, 62, 128, 192))
  SetGaugeScaleBackGroundColor(*GaugeA, RGBA(64, 64, 64, 32))
  SetGaugeTextColor(*GaugeA, RGBA(0, 0, 0, 255))
  SetGaugeSubTextColor(*GaugeA, RGBA(92, 92, 92, 255))
  SetGaugeNeedleColor(*GaugeA, RGBA(255, 000, 000, 255))
  SetGaugeMin(*GaugeA, 0)
  SetGaugeMax(*GaugeA, 100)
  SetGaugeBigStep(*GaugeA, 10)
  SetGaugeSmallStep(*GaugeA, 5)
  SetGaugeValue(*GaugeA, 0)
  SetGaugeText(*GaugeA, "Value")
  SetGaugeSubText(*GaugeA, "in units")
 
  RepaintGaugeLayer(*GaugeA, #True, #True)
  RefreshGaugeGadget(*GaugeA)
 
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur ChangeGaugeGadgetValue <<<<<

Procedure ChangeGaugeGadgetValue(*GaugeA.Gauge, P_Value.l)
 
  SetGaugeValue(*GaugeA, P_Value)
  RepaintGaugeLayer(*GaugeA, #True, #False)
  RefreshGaugeGadget(*GaugeA)
 
EndProcedure

Procedure ChangeGaugeGadgetSectorDegrees(*GaugeA.Gauge, P_SectorDegrees.l)
 
  SetGaugeSectorDegrees(*GaugeA, P_SectorDegrees)
  RepaintGaugeLayer(*GaugeA, #True, #True)
  RefreshGaugeGadget(*GaugeA)
 
EndProcedure

Procedure ChangeGaugeGadgetMinMaxSteps(*GaugeA.Gauge, P_Min.l, P_Max.l, P_BigStep.l, P_SmallStep.l)
 
  SetGaugeMin(*GaugeA, P_Min)
  SetGaugeMax(*GaugeA, P_Max)
  SetGaugeBigStep(*GaugeA, P_BigStep)
  SetGaugeSmallStep(*GaugeA, P_SmallStep)
  RepaintGaugeLayer(*GaugeA, #False, #True)
  RefreshGaugeGadget(*GaugeA)
 
EndProcedure

Procedure ChangeGaugeGadgetDescription(*GaugeA.Gauge, P_Text.s, P_SubText.s)
 
  SetGaugeText(*GaugeA, P_Text)
  SetGaugeSubText(*GaugeA, P_SubText)
  RepaintGaugeLayer(*GaugeA, #False, #True)
  RefreshGaugeGadget(*GaugeA)
 
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< !!! WARNING - YOU ARE NOW IN A TESTING ZONE - WARNING !!! <<<<<
; <<<<< !!! WARNING - THIS CODE SHOULD BE COMMENTED - WARNING !!! <<<<<
; <<<<< !!! WARNING - BEFORE THE FINAL COMPILATION. - WARNING !!! <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
CompilerSelect #PB_Compiler_OS
   
  CompilerCase #PB_OS_Linux
    FontName.s = "Liberation Sans"
   
  CompilerCase #PB_OS_Windows
    FontName.s = "Tahoma"
   
CompilerEndSelect

Procedure.l Window_Form1()
  If OpenWindow(#Window_Form1,58,96,731,382,"Test gauge",#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_TitleBar|#PB_Window_ScreenCentered|#PB_Window_WindowCentered|#PB_Window_Invisible)
 
      StringGadget(#Gadget_Form1_StringGauge,0,100,85,20,"0")
      ButtonGadget(#Gadget_Form1_ButtonCalculer,250,300,90,22,"Modifier")
      ;Gauges
      GaugeGadget(Pressure.Gauge, 3, 380, 0, 150,  "Liberation Sans", 1)
        ChangeGaugeGadgetMinMaxSteps(Pressure, 0, 10, 1, 5)
        ChangeGaugeGadgetDescription(Pressure, "Risque", "Nulle")  

      CreateStatusBar(#StatusBar_Form1,WindowID(#Window_Form1))
         AddStatusBarField(100)
        AddStatusBarField(6000)
      HideWindow(#Window_Form1,0)
      ProcedureReturn WindowID(#Window_Form1)
  EndIf
EndProcedure

;- Main Loop
If Window_Form1()
  
  Define C.d
  
  quitForm1=0
  Repeat
    EventID  =WaitWindowEvent()
    MenuID   =EventMenu()
    GadgetID =EventGadget()
    WindowID =EventWindow()

    Select EventID
      Case #PB_Event_CloseWindow
        If WindowID=#Window_Form1
          quitForm1=1
        EndIf

      Case #PB_Event_Gadget
        Select GadgetID
          Case  #Gadget_Form1_ButtonCalculer
            resultat$ = GetGadgetText(#Gadget_Form1_StringGauge)
            Resultat = Val(resultat$)
            ChangeGaugeGadgetValue(Pressure, Resultat)
        EndSelect

    EndSelect
  Until quitForm1
  CloseWindow(#Window_Form1)
EndIf
End
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: GaugeGadget - Version 2.1.0

Message par Guimauve »

Voici la solution :
l'ajout de Global Pressure.Gauge juste devant la procédure Window_Form1() corrige le problème.

A+
Guimauve

Code : Tout sélectionner

;- Global Variables and Constants
Global BubbleTipStyle.l:BubbleTipStyle=0

;- Window Constants
Enumeration 1
	#Window_Form1
EndEnumeration
#WindowIndex=#PB_Compiler_EnumerationValue


;- Gadget Constants
Enumeration 1
	;Window_Form1

	#Gadget_Form1_StringGauge
	#Gadget_Form1_ButtonCalculer

EndEnumeration
#GadgetIndex=#PB_Compiler_EnumerationValue


;- MenuBar Constants
Enumeration 1
	#MenuBar_Form1
EndEnumeration
#MenuBarIndex=#PB_Compiler_EnumerationValue


;- StatusBar Constants
Enumeration 1
	#StatusBar_Form1
EndEnumeration
#StatusBarIndex=#PB_Compiler_EnumerationValue


; XIncludeFile "Module_Constants.pb"

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Déclaration de la Structure <<<<<

Structure Gauge

	PosX.w
	PosY.w
	Size.w
	Center.w
	ScaleRadius.w
	Min.l
	Max.l
	BigStep.l
	SmallStep.l
	SectorDegrees.w
	Value.l
	Text.s
	SubText.s
	GadgetID.l
	GadgetHandle.l
	BackGroundColor.l
	ScaleColor.l
	ScaleBackGroundColor.l
	TextColor.l
	SubTextColor.l
	NeedleColor.l
	ScaleFontHandle.i
	TextFontHandle.i
	SubTextFontHandle.i
	LayerSize.w
	NeedleLength.l
	NeedlePivotRadius.l
	NeedleTipWidth.l
	NeedleCenWidth.l
	ScaleLayer.l
	NeedleLayer.l
	ComposedLayer.l

EndStructure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les observateurs <<<<<

Macro GetGaugePosX(GaugeA)

	GaugeA\PosX

EndMacro

Macro GetGaugePosY(GaugeA)

	GaugeA\PosY

EndMacro

Macro GetGaugeSize(GaugeA)

	GaugeA\Size

EndMacro

Macro GetGaugeCenter(GaugeA)

	GaugeA\Center

EndMacro

Macro GetGaugeScaleRadius(GaugeA)

	GaugeA\ScaleRadius

EndMacro

Macro GetGaugeMin(GaugeA)

	GaugeA\Min

EndMacro

Macro GetGaugeMax(GaugeA)

	GaugeA\Max

EndMacro

Macro GetGaugeBigStep(GaugeA)

	GaugeA\BigStep

EndMacro

Macro GetGaugeSmallStep(GaugeA)

	GaugeA\SmallStep

EndMacro

Macro GetGaugeSectorDegrees(GaugeA)

	GaugeA\SectorDegrees

EndMacro

Macro GetGaugeValue(GaugeA)

	GaugeA\Value

EndMacro

Macro GetGaugeText(GaugeA)

	GaugeA\Text

EndMacro

Macro GetGaugeSubText(GaugeA)

	GaugeA\SubText

EndMacro

Macro GetGaugeGadgetID(GaugeA)

	GaugeA\GadgetID

EndMacro

Macro GetGaugeGadgetHandle(GaugeA)

	GaugeA\GadgetHandle

EndMacro

Macro GetGaugeBackGroundColor(GaugeA)

	GaugeA\BackGroundColor

EndMacro

Macro GetGaugeScaleColor(GaugeA)

	GaugeA\ScaleColor

EndMacro

Macro GetGaugeScaleBackGroundColor(GaugeA)

	GaugeA\ScaleBackGroundColor

EndMacro

Macro GetGaugeTextColor(GaugeA)

	GaugeA\TextColor

EndMacro

Macro GetGaugeSubTextColor(GaugeA)

	GaugeA\SubTextColor

EndMacro

Macro GetGaugeNeedleColor(GaugeA)

	GaugeA\NeedleColor

EndMacro

Macro GetGaugeScaleFontHandle(GaugeA)

	GaugeA\ScaleFontHandle

EndMacro

Macro GetGaugeTextFontHandle(GaugeA)

	GaugeA\TextFontHandle

EndMacro

Macro GetGaugeSubTextFontHandle(GaugeA)

	GaugeA\SubTextFontHandle

EndMacro

Macro GetGaugeLayerSize(GaugeA)

	GaugeA\LayerSize

EndMacro

Macro GetGaugeNeedleLength(GaugeA)

	GaugeA\NeedleLength

EndMacro

Macro GetGaugeNeedlePivotRadius(GaugeA)

	GaugeA\NeedlePivotRadius

EndMacro

Macro GetGaugeNeedleTipWidth(GaugeA)

	GaugeA\NeedleTipWidth

EndMacro

Macro GetGaugeNeedleCenWidth(GaugeA)

	GaugeA\NeedleCenWidth

EndMacro

Macro GetGaugeScaleLayer(GaugeA)

	GaugeA\ScaleLayer

EndMacro

Macro GetGaugeNeedleLayer(GaugeA)

	GaugeA\NeedleLayer

EndMacro

Macro GetGaugeComposedLayer(GaugeA)

	GaugeA\ComposedLayer

EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs <<<<<

Macro SetGaugePosX(GaugeA, P_PosX)

	GetGaugePosX(GaugeA) = P_PosX

EndMacro

Macro SetGaugePosY(GaugeA, P_PosY)

	GetGaugePosY(GaugeA) = P_PosY

EndMacro

Macro SetGaugeSize(GaugeA, P_Size)

	GetGaugeSize(GaugeA) = P_Size

EndMacro

Macro SetGaugeCenter(GaugeA, P_Center)

	GetGaugeCenter(GaugeA) = P_Center

EndMacro

Macro SetGaugeScaleRadius(GaugeA, P_ScaleRadius)

	GetGaugeScaleRadius(GaugeA) = P_ScaleRadius

EndMacro

Macro SetGaugeMin(GaugeA, P_Min)

	GetGaugeMin(GaugeA) = P_Min

EndMacro

Macro SetGaugeMax(GaugeA, P_Max)

	GetGaugeMax(GaugeA) = P_Max

EndMacro

Macro SetGaugeBigStep(GaugeA, P_BigStep)

	GetGaugeBigStep(GaugeA) = P_BigStep

EndMacro

Macro SetGaugeSmallStep(GaugeA, P_SmallStep)

	GetGaugeSmallStep(GaugeA) = P_SmallStep

EndMacro

Macro SetGaugeSectorDegrees(GaugeA, P_SectorDegrees)

	GetGaugeSectorDegrees(GaugeA) = P_SectorDegrees

EndMacro

Macro SetGaugeValue(GaugeA, P_Value)

	GetGaugeValue(GaugeA) = P_Value

EndMacro

Macro SetGaugeText(GaugeA, P_Text)

	GetGaugeText(GaugeA) = P_Text

EndMacro

Macro SetGaugeSubText(GaugeA, P_SubText)

	GetGaugeSubText(GaugeA) = P_SubText

EndMacro

Macro SetGaugeGadgetID(GaugeA, P_GadgetID)

	GetGaugeGadgetID(GaugeA) = P_GadgetID

EndMacro

Macro SetGaugeGadgetHandle(GaugeA, P_GadgetHandle)

	GetGaugeGadgetHandle(GaugeA) = P_GadgetHandle

EndMacro

Macro SetGaugeBackGroundColor(GaugeA, P_BackGroundColor)

	GetGaugeBackGroundColor(GaugeA) = P_BackGroundColor

EndMacro

Macro SetGaugeScaleColor(GaugeA, P_ScaleColor)

	GetGaugeScaleColor(GaugeA) = P_ScaleColor

EndMacro

Macro SetGaugeScaleBackGroundColor(GaugeA, P_ScaleBackGroundColor)

	GetGaugeScaleBackGroundColor(GaugeA) = P_ScaleBackGroundColor

EndMacro

Macro SetGaugeTextColor(GaugeA, P_TextColor)

	GetGaugeTextColor(GaugeA) = P_TextColor

EndMacro

Macro SetGaugeSubTextColor(GaugeA, P_SubTextColor)

	GetGaugeSubTextColor(GaugeA) = P_SubTextColor

EndMacro

Macro SetGaugeNeedleColor(GaugeA, P_NeedleColor)

	GetGaugeNeedleColor(GaugeA) = P_NeedleColor

EndMacro

Macro SetGaugeScaleFontHandle(GaugeA, P_ScaleFontHandle)

	GetGaugeScaleFontHandle(GaugeA) = P_ScaleFontHandle

EndMacro

Macro SetGaugeTextFontHandle(GaugeA, P_TextFontHandle)

	GetGaugeTextFontHandle(GaugeA) = P_TextFontHandle

EndMacro

Macro SetGaugeSubTextFontHandle(GaugeA, P_SubTextFontHandle)

	GetGaugeSubTextFontHandle(GaugeA) = P_SubTextFontHandle

EndMacro

Macro SetGaugeLayerSize(GaugeA, P_LayerSize)

	GetGaugeLayerSize(GaugeA) = P_LayerSize

EndMacro

Macro SetGaugeNeedleLength(GaugeA, P_NeedleLength)

	GetGaugeNeedleLength(GaugeA) = P_NeedleLength

EndMacro

Macro SetGaugeNeedlePivotRadius(GaugeA, P_NeedlePivotRadius)

	GetGaugeNeedlePivotRadius(GaugeA) = P_NeedlePivotRadius

EndMacro

Macro SetGaugeNeedleTipWidth(GaugeA, P_NeedleTipWidth)

	GetGaugeNeedleTipWidth(GaugeA) = P_NeedleTipWidth

EndMacro

Macro SetGaugeNeedleCenWidth(GaugeA, P_NeedleCenWidth)

	GetGaugeNeedleCenWidth(GaugeA) = P_NeedleCenWidth

EndMacro

Macro SetGaugeScaleLayer(GaugeA, P_ScaleLayer)

	GetGaugeScaleLayer(GaugeA) = P_ScaleLayer

EndMacro

Macro SetGaugeNeedleLayer(GaugeA, P_NeedleLayer)

	GetGaugeNeedleLayer(GaugeA) = P_NeedleLayer

EndMacro

Macro SetGaugeComposedLayer(GaugeA, P_ComposedLayer)

	GetGaugeComposedLayer(GaugeA) = P_ComposedLayer

EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Code généré en : 00.010 secondes (49500.00 lignes/seconde) <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Reset <<<<<

Macro ResetGauge(GaugeA)

	SetGaugePosX(GaugeA, 0)
	SetGaugePosY(GaugeA, 0)
	SetGaugeSize(GaugeA, 0)
	SetGaugeScaleRadius(GaugeA, 0)
	SetGaugeMin(GaugeA, 0)
	SetGaugeMax(GaugeA, 0)
	SetGaugeBigStep(GaugeA, 0)
	SetGaugeSmallStep(GaugeA, 0)
	SetGaugeValue(GaugeA, 0)
	SetGaugeText(GaugeA, "")
	SetGaugeSubText(GaugeA, "")
	SetGaugeGadgetID(GaugeA, 0)
	SetGaugeGadgetHandle(GaugeA, 0)
	SetGaugeBackGroundColor(GaugeA, 0)
	SetGaugeScaleColor(GaugeA, 0)
	SetGaugeScaleBackGroundColor(GaugeA, 0)
	SetGaugeTextColor(GaugeA, 0)
	SetGaugeSubTextColor(GaugeA, 0)
	SetGaugeNeedleColor(GaugeA, 0)
	SetGaugeLayerSize(GaugeA, 0)
	SetGaugeNeedleLength(GaugeA, 0)
	SetGaugeNeedlePivotRadius(GaugeA, 0)
	SetGaugeNeedleTipWidth(GaugeA, 0)
	SetGaugeNeedleCenWidth(GaugeA, 0)

	If GetGaugeScaleFontHandle(GaugeA)
		FreeFont(GetGaugeScaleFontHandle(GaugeA))
		SetGaugeScaleFontHandle(GaugeA, 0)
	EndIf

	If GetGaugeTextFontHandle(GaugeA)
		FreeFont(GetGaugeTextFontHandle(GaugeA))
		SetGaugeTextFontHandle(GaugeA, 0)
	EndIf

	If GetGaugeSubTextFontHandle(GaugeA)
		FreeFont(GetGaugeSubTextFontHandle(GaugeA))
		SetGaugeSubTextFontHandle(GaugeA, 0)
	EndIf

	If GetGaugeScaleLayer(GaugeA)
		FreeImage(GetGaugeScaleLayer(GaugeA))
		SetGaugeScaleLayer(GaugeA, 0)
	EndIf

	If GetGaugeNeedleLayer(GaugeA)
		FreeImage(GetGaugeNeedleLayer(GaugeA))
		SetGaugeNeedleLayer(GaugeA, 0)
	EndIf

	If GetGaugeComposedLayer(GaugeA)
		FreeImage(GetGaugeComposedLayer(GaugeA))
		SetGaugeComposedLayer(GaugeA, 0)
	EndIf

EndMacro

Macro ResizeGaugeGadget(GaugeA)

	If GetGaugeGadgetID(GaugeA) <> #PB_Any
		ResizeGadget(GetGaugeGadgetID(GaugeA), GetGaugePosX(GaugeA), GetGaugePosY(GaugeA), #PB_Ignore, #PB_Ignore)
	Else     
		ResizeGadget(GetGaugeGadgetHandle(GaugeA), GetGaugePosX(GaugeA), GetGaugePosY(GaugeA), #PB_Ignore, #PB_Ignore)
	EndIf

EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Dessiner un texte centré en x, y <<<<<

Macro DrawTextCentered(x, y, Text, FrontColor, BackColor)

	DrawText(x - TextWidth(Text) >> 1, y - TextHeight("Wg") >> 1, Text, FrontColor, BackColor)

EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Trouver la plus grande valeur de type double <<<<<

Procedure.d MaxDouble(P_Number01.d, P_Number02.d)

	Biggest_Double.d = P_Number01

	If P_Number02 > Biggest_Double
		Biggest_Double = P_Number02
	EndIf

	ProcedureReturn Biggest_Double
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Trouver la plus grande valeur de type long <<<<<

Procedure.l MaxLong(P_Number01.l, P_Number02.l)

	Biggest_Long.l = P_Number01

	If P_Number02 > Biggest_Long
		Biggest_Long = P_Number02
	EndIf

	ProcedureReturn Biggest_Long
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs spéciaux <<<<<

Macro SetGaugePositionSize(GaugeA, P_X, P_Y, P_Size)

	SetGaugePosX(GaugeA, P_X)
	SetGaugePosY(GaugeA, P_Y)
	SetGaugeSize(GaugeA, P_Size)

EndMacro

Macro SetGaugeTextEx(GaugeA, Text, Color_RGBA)

	SetGaugeText(GaugeA, Text)
	SetGaugeTextColor(GaugeA, Color_RGBA)

EndMacro

Macro SetGaugeSubTextEx(GaugeA, SubText, Color_RGBA)

	SetGaugeSubText(GaugeA, SubText)
	SetGaugeSubTextColor(GaugeA, Color_RGBA)

EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur PaintGaugeBackground <<<<<

Macro PaintGaugeBackground(GaugeA)

	DrawingMode(#PB_2DDrawing_AllChannels)
	Box(0, 0, GetGaugeLayerSize(GaugeA), GetGaugeLayerSize(GaugeA), GetGaugeBackGroundColor(GaugeA))

	; DrawingMode(#PB_2DDrawing_AllChannels | #PB_2DDrawing_Outlined)
	; Box(0, 0, GetGaugeSize(GaugeA), GetGaugeSize(GaugeA), RGBA(0, 0, 0, 32))

EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur PaintGaugeScale <<<<<

Macro PaintGaugeScale(GaugeA)

	StartDegree.i = ((360 - GetGaugeSectorDegrees(GaugeA)) >> 1)

	wpx = GetGaugeLayerSize(GaugeA) / 33
	wpx2 = wpx / 4.0 * 3 - 1

	SmallStepDegrees.d = GetGaugeSmallStep(GaugeA) / GetGaugeMax(GaugeA) * GetGaugeSectorDegrees(GaugeA)
	BigStepDegrees.d = GetGaugeBigStep(GaugeA) / GetGaugeMax(GaugeA) * GetGaugeSectorDegrees(GaugeA)

	DrawingMode(#PB_2DDrawing_AllChannels)

	For I = 0 To GetGaugeSectorDegrees(GaugeA)
		x = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + I)) * GetGaugeScaleRadius(GaugeA)
		y = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + I)) * GetGaugeScaleRadius(GaugeA)
		Circle(x, y, wpx, GetGaugeScaleColor(GaugeA))
	Next

	DrawingMode(#PB_2DDrawing_AllChannels)

	For I = 0 To GetGaugeSectorDegrees(GaugeA)
		x = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + I)) * GetGaugeScaleRadius(GaugeA)
		y = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + I)) * GetGaugeScaleRadius(GaugeA)
		Circle(x, y, wpx2, GetGaugeScaleBackGroundColor(GaugeA))
	Next

	dI.d = 0

	While dI <= GetGaugeSectorDegrees(GaugeA)
		x1 = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - wpx2)
		y1 = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - wpx2)
		x2 = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - (wpx2 / 2))
		y2 = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - (wpx2 / 2))
		LineXY(x1, y1, x2, y2, GetGaugeScaleColor(GaugeA))
		dI + SmallStepDegrees
	Wend

	dI = 0

	While dI <= GetGaugeSectorDegrees(GaugeA) + 1 ;?!
		x1 = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - wpx)
		y1 = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - wpx)
		x2 = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) + wpx)
		y2 = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) + wpx)
		LineXY(x1, y1, x2, y2, GetGaugeScaleColor(GaugeA))
		dI + BigStepDegrees
	Wend

	DrawingMode(#PB_2DDrawing_AlphaBlend | #PB_2DDrawing_Transparent)
	DrawingFont(FontID(GetGaugeScaleFontHandle(GaugeA)))

	dI = 0
	I = 0

	While dI <= GetGaugeSectorDegrees(GaugeA) + 1 ; not sure why that is needed
		
		Offset.w = MaxLong(3, Len(Str(GetGaugeMax(GaugeA) - I)))
		
		x = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) + wpx * Offset)
		y = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) + wpx * Offset)
		DrawTextCentered(x, y, Str(GetGaugeMax(GaugeA) - I), GetGaugeTextColor(GaugeA), RGBA(0, 0, 0, 0))
		dI + BigStepDegrees
		I + GetGaugeBigStep(GaugeA)
		
	Wend

EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur PaintGaugeDescription <<<<<

Macro PaintGaugeDescription(GaugeA)

	DrawingMode(#PB_2DDrawing_AlphaBlend | #PB_2DDrawing_Transparent)
	DrawingFont(FontID(GetGaugeTextFontHandle(GaugeA)))

	x = GetGaugeCenter(GaugeA)
	y = 32 * GetGaugeSize(GaugeA) / 10

	DrawTextCentered(x, y, GetGaugeText(GaugeA), GetGaugeTextColor(GaugeA), RGBA(0, 0, 0, 0))
	y + TextHeight("Wg")

	DrawingFont(FontID(GetGaugeSubTextFontHandle(GaugeA)))
	DrawTextCentered(x, y, GetGaugeSubText(GaugeA), GetGaugeSubTextColor(GaugeA), RGBA(0, 0, 0, 0))

EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur PaintGaugeHand <<<<<

Macro PaintGaugeNeedle(GaugeA)

	DrawingMode(#PB_2DDrawing_AllChannels)

	HalfSize = GetGaugeLayerSize(GaugeA) >> 1

	StartDegree.i = ((360 - GetGaugeSectorDegrees(GaugeA)) >> 1)
	DirDegrees.d = StartDegree + (GetGaugeMax(GaugeA) - GetGaugeValue(GaugeA)) / GetGaugeMax(GaugeA) * GetGaugeSectorDegrees(GaugeA)

	SinAngle.d = Sin(Radian(-DirDegrees))
	CosAngle.d = Cos(Radian(-DirDegrees))

	x1 = HalfSize + (GetGaugeNeedleCenWidth(GaugeA) * CosAngle); - 0 * SinAngle)
	y1 = HalfSize + (GetGaugeNeedleCenWidth(GaugeA) * SinAngle); + 0 * CosAngle)

	x2 = HalfSize + (-GetGaugeNeedleCenWidth(GaugeA) * CosAngle); - 0 * SinAngle)
	y2 = HalfSize + (-GetGaugeNeedleCenWidth(GaugeA) * SinAngle); + 0 * CosAngle)

	x3 = HalfSize + (-GetGaugeNeedleTipWidth(GaugeA) * CosAngle - GetGaugeNeedleLength(GaugeA) * SinAngle)
	y3 = HalfSize + (-GetGaugeNeedleTipWidth(GaugeA) * SinAngle + GetGaugeNeedleLength(GaugeA) * CosAngle)

	x4 = HalfSize + (GetGaugeNeedleTipWidth(GaugeA) * CosAngle - GetGaugeNeedleLength(GaugeA) * SinAngle)
	y4 = HalfSize + (GetGaugeNeedleTipWidth(GaugeA) * SinAngle + GetGaugeNeedleLength(GaugeA) * CosAngle)

	x5 = HalfSize + (-15 * SinAngle); + 0 * CosAngle)
	y5 = HalfSize + (15 * CosAngle); + 0 * SinAngle)

	LineXY(x1, y1, x2, y2, GetGaugeNeedleColor(GaugeA))
	LineXY(x2, y2, x3, y3, GetGaugeNeedleColor(GaugeA))
	LineXY(x3, y3, x4, y4, GetGaugeNeedleColor(GaugeA))
	LineXY(x4, y4, x1, y1, GetGaugeNeedleColor(GaugeA))

	FillArea(x5, y5, GetGaugeNeedleColor(GaugeA), GetGaugeNeedleColor(GaugeA))

	Circle(HalfSize, HalfSize, GetGaugeNeedlePivotRadius(GaugeA), GetGaugeNeedleColor(GaugeA))

EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur LoadGaugeFont <<<<<

Procedure LoadGaugeFont(*GaugeA.Gauge, FontName.s)

	If GetGaugeScaleFontHandle(*GaugeA)
		FreeFont(GetGaugeScaleFontHandle(*GaugeA))
	EndIf

	If GetGaugeTextFontHandle(*GaugeA)
		FreeFont(GetGaugeTextFontHandle(*GaugeA))
	EndIf

	If GetGaugeSubTextFontHandle(*GaugeA)
		FreeFont(GetGaugeSubTextFontHandle(*GaugeA))
	EndIf

	SetGaugeScaleFontHandle(*GaugeA, LoadFont(#PB_Any, FontName, 4 * MaxDouble(8, 0.04 * GetGaugeSize(*GaugeA))))
	SetGaugeTextFontHandle(*GaugeA, LoadFont(#PB_Any, FontName, 4 * MaxDouble(9, 0.056 * GetGaugeSize(*GaugeA)), #PB_Font_Bold))
	SetGaugeSubTextFontHandle(*GaugeA, LoadFont(#PB_Any, FontName, 4 * MaxDouble(8, 0.04 * GetGaugeSize(*GaugeA))))

EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur RepaintGaugeLayer <<<<<

Procedure RepaintGaugeLayer(*GaugeA.Gauge, Needle.b, Scale.b)

	If Needle = #True
		
		If GetGaugeNeedleLayer(*GaugeA)
			FreeImage(GetGaugeNeedleLayer(*GaugeA))
		EndIf
		
		SetGaugeNeedleLayer(*GaugeA, CreateImage(#PB_Any, GetGaugeLayerSize(*GaugeA), GetGaugeLayerSize(*GaugeA), 32 | #PB_Image_Transparent))
		
		If StartDrawing(ImageOutput(GetGaugeNeedleLayer(*GaugeA)))
			PaintGaugeNeedle(*GaugeA)
			StopDrawing()
		EndIf
		
		ResizeImage(GetGaugeNeedleLayer(*GaugeA), GetGaugeSize(*GaugeA), GetGaugeSize(*GaugeA))
		
	EndIf

	If Scale = #True
		
		If GetGaugeScaleLayer(*GaugeA)
			FreeImage(GetGaugeScaleLayer(*GaugeA))
		EndIf
		
		SetGaugeScaleLayer(*GaugeA, CreateImage(#PB_Any, GetGaugeLayerSize(*GaugeA), GetGaugeLayerSize(*GaugeA), 32 | #PB_Image_Transparent))
		
		If StartDrawing(ImageOutput(GetGaugeScaleLayer(*GaugeA)))
			PaintGaugeBackground(*GaugeA)
			PaintGaugeScale(*GaugeA)
			PaintGaugeDescription(*GaugeA)
			StopDrawing()
		EndIf
		
		ResizeImage(GetGaugeScaleLayer(*GaugeA), GetGaugeSize(*GaugeA), GetGaugeSize(*GaugeA))
		
	EndIf

EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur RefreshGaugeGadget <<<<<

Procedure RefreshGaugeGadget(*GaugeA.Gauge)

	If GetGaugeComposedLayer(*GaugeA)
		FreeImage(GetGaugeComposedLayer(*GaugeA))
	EndIf

	SetGaugeComposedLayer(*GaugeA, CreateImage(#PB_Any, GetGaugeSize(*GaugeA), GetGaugeSize(*GaugeA), 32 | #PB_Image_Transparent))

	If StartDrawing(ImageOutput(GetGaugeComposedLayer(*GaugeA)))
		
		DrawingMode(#PB_2DDrawing_AlphaBlend)
		DrawImage(ImageID(GetGaugeScaleLayer(*GaugeA)), 0, 0)
		DrawImage(ImageID(GetGaugeNeedleLayer(*GaugeA)), 0, 0)
		StopDrawing()
		
	EndIf

	If GetGaugeGadgetID(*GaugeA) <> #PB_Any
		SetGadgetState(GetGaugeGadgetID(*GaugeA), ImageID(GetGaugeComposedLayer(*GaugeA)))
	Else     
		SetGadgetState(GetGaugeGadgetHandle(*GaugeA), ImageID(GetGaugeComposedLayer(*GaugeA)))
	EndIf

EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur GaugeGadget <<<<<

Procedure GaugeGadget(*GaugeA.Gauge, GaugeID.l, x.w, y.w, Size.w, FontName.s = "", Options.l = 0)

	SetGaugeGadgetID(*GaugeA, GaugeID)
	SetGaugeGadgetHandle(*GaugeA, ImageGadget(GetGaugeGadgetID(*GaugeA), x, y, Size, Size, 0, Options))

	If GetGaugeGadgetID(*GaugeA) <> #PB_Any
		SetGadgetData(GetGaugeGadgetID(*GaugeA), *GaugeA)
	Else
		
	EndIf

	SetGaugePositionSize(*GaugeA, x, y, Size)

	SetGaugeCenter(*GaugeA, (4*Size) >> 1)
	SetGaugeScaleRadius(*GaugeA, 4 * Size * 3 / 10)

	SetGaugeLayerSize(*GaugeA, Size * 4)

	SetGaugeNeedleLength(*GaugeA, (1 + GetGaugeScaleRadius(*GaugeA)))
	SetGaugeNeedlePivotRadius(*GaugeA, GetGaugeNeedleLength(*GaugeA) / 10)
	SetGaugeNeedleTipWidth(*GaugeA, GetGaugeNeedlePivotRadius(*GaugeA) / 7)
	SetGaugeNeedleCenWidth(*GaugeA, GetGaugeNeedlePivotRadius(*GaugeA) / 2)

	If FontName <> ""
		LoadGaugeFont(*GaugeA, FontName)
	EndIf

	SetGaugeSectorDegrees(*GaugeA, 270)

	SetGaugeBackGroundColor(*GaugeA, RGBA(0, 0, 0, 0))
	SetGaugeScaleColor(*GaugeA, RGBA(62, 62, 128, 192))
	SetGaugeScaleBackGroundColor(*GaugeA, RGBA(64, 64, 64, 32))
	SetGaugeTextColor(*GaugeA, RGBA(0, 0, 0, 255))
	SetGaugeSubTextColor(*GaugeA, RGBA(92, 92, 92, 255))
	SetGaugeNeedleColor(*GaugeA, RGBA(255, 000, 000, 255))
	SetGaugeMin(*GaugeA, 0)
	SetGaugeMax(*GaugeA, 100)
	SetGaugeBigStep(*GaugeA, 10)
	SetGaugeSmallStep(*GaugeA, 5)
	SetGaugeValue(*GaugeA, 0)
	SetGaugeText(*GaugeA, "Value")
	SetGaugeSubText(*GaugeA, "in units")

	RepaintGaugeLayer(*GaugeA, #True, #True)
	RefreshGaugeGadget(*GaugeA)

EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur ChangeGaugeGadgetValue <<<<<

Procedure ChangeGaugeGadgetValue(*GaugeA.Gauge, P_Value.l)

	SetGaugeValue(*GaugeA, P_Value)
	RepaintGaugeLayer(*GaugeA, #True, #False)
	RefreshGaugeGadget(*GaugeA)

EndProcedure

Procedure ChangeGaugeGadgetSectorDegrees(*GaugeA.Gauge, P_SectorDegrees.l)

	SetGaugeSectorDegrees(*GaugeA, P_SectorDegrees)
	RepaintGaugeLayer(*GaugeA, #True, #True)
	RefreshGaugeGadget(*GaugeA)

EndProcedure

Procedure ChangeGaugeGadgetMinMaxSteps(*GaugeA.Gauge, P_Min.l, P_Max.l, P_BigStep.l, P_SmallStep.l)

	SetGaugeMin(*GaugeA, P_Min)
	SetGaugeMax(*GaugeA, P_Max)
	SetGaugeBigStep(*GaugeA, P_BigStep)
	SetGaugeSmallStep(*GaugeA, P_SmallStep)
	RepaintGaugeLayer(*GaugeA, #False, #True)
	RefreshGaugeGadget(*GaugeA)

EndProcedure

Procedure ChangeGaugeGadgetDescription(*GaugeA.Gauge, P_Text.s, P_SubText.s)

	SetGaugeText(*GaugeA, P_Text)
	SetGaugeSubText(*GaugeA, P_SubText)
	RepaintGaugeLayer(*GaugeA, #False, #True)
	RefreshGaugeGadget(*GaugeA)

EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< !!! WARNING - YOU ARE NOW IN A TESTING ZONE - WARNING !!! <<<<<
; <<<<< !!! WARNING - THIS CODE SHOULD BE COMMENTED - WARNING !!! <<<<<
; <<<<< !!! WARNING - BEFORE THE FINAL COMPILATION. - WARNING !!! <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

CompilerSelect #PB_Compiler_OS
		
	CompilerCase #PB_OS_Linux
		FontName.s = "Liberation Sans"
		
	CompilerCase #PB_OS_Windows
		FontName.s = "Tahoma"
		
CompilerEndSelect

Global Pressure.Gauge

Procedure.l Window_Form1()
	If OpenWindow(#Window_Form1,58,96,731,382,"Test gauge",#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_TitleBar|#PB_Window_ScreenCentered|#PB_Window_WindowCentered|#PB_Window_Invisible)

			StringGadget(#Gadget_Form1_StringGauge,0,100,85,20,"0")
			ButtonGadget(#Gadget_Form1_ButtonCalculer,250,300,90,22,"Modifier")
			;Gauges
			GaugeGadget(Pressure.Gauge, 3, 380, 0, 150,  "Liberation Sans", 1)
				ChangeGaugeGadgetMinMaxSteps(Pressure, 0, 10, 1, 5)
				ChangeGaugeGadgetDescription(Pressure, "Risque", "Nulle")  

			CreateStatusBar(#StatusBar_Form1,WindowID(#Window_Form1))
					AddStatusBarField(100)
				AddStatusBarField(6000)
			HideWindow(#Window_Form1,0)
			ProcedureReturn WindowID(#Window_Form1)
	EndIf
EndProcedure

;- Main Loop
If Window_Form1()
	
	Define C.d
	
	quitForm1=0
	Repeat
		EventID  =WaitWindowEvent()
		MenuID   =EventMenu()
		GadgetID =EventGadget()
		WindowID =EventWindow()

		Select EventID
			Case #PB_Event_CloseWindow
				If WindowID=#Window_Form1
					quitForm1=1
				EndIf

			Case #PB_Event_Gadget
				Select GadgetID
					Case  #Gadget_Form1_ButtonCalculer
						resultat$ = GetGadgetText(#Gadget_Form1_StringGauge)
						Resultat = Val(resultat$)
						ChangeGaugeGadgetValue(Pressure, Resultat)
				EndSelect

		EndSelect
	Until quitForm1
	CloseWindow(#Window_Form1)
EndIf
End
Avatar de l’utilisateur
MetalOS
Messages : 1492
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: GaugeGadget - Version 2.1.0

Message par MetalOS »

Cool, merci Guimauve :D
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: GaugeGadget - Version 2.1.0

Message par Guimauve »

C'est un peu le problème lorsque les informations de contrôle d'un gadget custom sont dans une variable externe structurée. Il faut s'arranger pour que cette ou ces dernière (s) suive (nt) partout dans le programme. C'est comment dire, un peu casse pied mais c'est la seule solution.

A+
Guimauve
Répondre