Basic Univers

; Autor : Dr. Dri
; La bordure de l'ImageGadget


Macro ImageGadgetBorderWidth()
  GetSystemMetrics_(#SM_CXEDGE)
EndMacro

Macro ImageGadgetBorderHeight()
  GetSystemMetrics_(#SM_CYEDGE)
EndMacro

Procedure.l SetImageGadgetBorder(Gadget.l, State.l)
  Protected Set.l = #False, GadgetID.l, Style.l
  Protected Width.l, Height.l, Change.l = #False
 
  GadgetID = GadgetID(Gadget)
 
  If GadgetID
    Style = GetWindowLong_(GadgetID, #GWL_EXSTYLE)
   
    Width  = GadgetWidth(Gadget)
    Height = GadgetHeight(Gadget)
   
    If State
      If Not Style & #PB_Image_Border
        Width  + ImageGadgetBorderWidth()  * 2
        Height + ImageGadgetBorderHeight() * 2
        Style |  #PB_Image_Border
        Change = #True
      EndIf
    Else
      If Style & #PB_Image_Border
        Width  - ImageGadgetBorderWidth()  * 2
        Height - ImageGadgetBorderHeight() * 2
        Style & ~#PB_Image_Border
        Change = #True
      EndIf
    EndIf
   
    If Change
      SetWindowLong_(GadgetID, #GWL_EXSTYLE, Style)
      SetWindowPos_(GadgetID, 0, 0, 0, Width, Height, #SWP_NOMOVE | #SWP_FRAMECHANGED)
    EndIf
   
    Set = #True
  EndIf
 
  ProcedureReturn Set
EndProcedure

CreateImage(0, 100, 80)

If StartDrawing( ImageOutput(0) )
  Box(0, 0, 100, 80, #Red)
  Circle(  0,  0, 5, #Blue)
  Circle(  0, 80, 5, #Blue)
  Circle(100,  0, 5, #Blue)
  Circle(100, 80, 5, #Blue)
 
  StopDrawing()
EndIf

If OpenWindow(0, 0, 0, 340, 100, "SetImageGadgetBorder", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
 
  ImageGadget(0,  10, 10, 100, 83, ImageID(0))
  ImageGadget(1, 120, 10, 100, 83, ImageID(0), #PB_Image_Border)
  ImageGadget(2, 230, 10, 100, 83, ImageID(0))
 
  Repeat
    Event = WaitWindowEvent()
   
    If Event = #PB_Event_Gadget
      SetImageGadgetBorder(0, #False)
      SetImageGadgetBorder(1, #False)
      SetImageGadgetBorder(2, #False)
     
      SetImageGadgetBorder(EventGadget(), #True)
    EndIf
   
  Until Event = #PB_Event_CloseWindow
EndIf