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 :
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 <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<