
Donc, je me demandais s'il n'existait pas une technique permettant d'avoir la même chose mais en commençant à cliquer à l'extérieur du canvas.
Code : Tout sélectionner
Enumeration
#Mainform
#Clear
#Color
#Alpha
#ScrollArea
#ScrollArea_Canvas
#Canvas
#Image
#ImageCanvasSave
#ImageCanvasCurrent
EndEnumeration
Define.l Event, GEvent, TEvent
Global WindowStyle.i=#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered
Global Paint.b, Color.i, Alpha.i
Procedure Clear()
CreateImage(#ImageCanvasSave, 500, 300, 32, #PB_Image_Transparent)
If StartDrawing(CanvasOutput(#Canvas))
Box(0, 0, 500, 300, RGBA(255, 255, 255,255))
StopDrawing()
EndIf
EndProcedure
Procedure SelectColor()
Protected Value.i
Value = ColorRequester(Color)
If Value > -1
Color = RGBA(Red(Value), Green(Value), Blue(Value), Alpha)
EndIf
EndProcedure
Procedure DrawBox(X1.i, Y1.i)
If Paint = #True
X2 = GetGadgetAttribute(#ScrollArea_Canvas, #PB_Canvas_MouseX) - GadgetX(#Canvas)
Y2 = GetGadgetAttribute(#ScrollArea_Canvas, #PB_Canvas_MouseY) - GadgetY(#Canvas)
CreateImage(#Image, 500, 300, 32, #PB_Image_Transparent)
CreateImage(#ImageCanvasCurrent, 500, 300, 32, #PB_Image_Transparent)
If StartDrawing(ImageOutput(#Image))
DrawingMode(#PB_2DDrawing_AllChannels)
Box(X1, Y1, X2-X1, Y2-Y1, Color)
StopDrawing()
EndIf
If StartDrawing(ImageOutput(#ImageCanvasCurrent))
DrawAlphaImage(ImageID(#ImageCanvasSave), 0, 0)
DrawAlphaImage(ImageID(#Image), 0, 0)
StopDrawing()
EndIf
If StartDrawing(CanvasOutput(#Canvas))
Box(0, 0, 500, 300, RGBA(255, 255, 255,255))
DrawAlphaImage(ImageID(#ImageCanvasSave), 0, 0)
DrawAlphaImage(ImageID(#Image), 0, 0)
StopDrawing()
EndIf
EndIf
EndProcedure
Procedure Open_MainForm()
OpenWindow(#Mainform, 0, 0, 800, 600, "New Form", WindowStyle)
ButtonGadget(#Clear, 5, 10, 40, 24, "Clear")
ButtonGadget(#Color, 50, 10, 40, 24, "Color")
TextGadget(#PB_Any, 100, 12, 40, 20, "Alpha")
SpinGadget(#Alpha, 130, 10, 50, 22, 0, 255, #PB_Spin_Numeric)
ScrollAreaGadget(#ScrollArea, 50, 50, 700, 500, 1600, 1200)
CanvasGadget(#ScrollArea_Canvas, 0, 0, 1600, 1200)
StartDrawing(CanvasOutput(#ScrollArea_Canvas))
Box(0, 0, 1600, 1200, RGB(210, 180, 140))
StopDrawing()
CanvasGadget(#Canvas, 100, 100, 500, 300)
StartDrawing(CanvasOutput(#Canvas))
Box(0, 0, 500, 300, RGBA(255, 255, 255,255))
StopDrawing()
CloseGadgetList()
EndProcedure
Procedure Start()
UsePNGImageEncoder()
CreateImage(#Image, 500, 300, 32, #PB_Image_Transparent)
CreateImage(#ImageCanvasSave, 500, 300, 32, #PB_Image_Transparent)
CreateImage(#ImageCanvasCurrent, 500, 300, 32, #PB_Image_Transparent)
Open_MainForm()
Color = RGBA(128, 128, 128, 180)
Alpha = 180
SetGadgetState (#Alpha, 180)
EndProcedure
start()
Repeat
Event = WaitWindowEvent(10)
GEvent = EventGadget()
TEvent = EventType()
Select Event
Case #PB_Event_Gadget
Select GEvent
Case #Clear
Clear()
Case #Color
SelectColor()
Case #Alpha
Alpha = GetGadgetState(#Alpha)
Color = RGBA(Red(Color), Green(Color), Blue(Color), Alpha)
Case #ScrollArea_Canvas
Select TEvent
Case #PB_EventType_LeftButtonDown
If Paint = #False
X1 = GetGadgetAttribute(#ScrollArea_Canvas, #PB_Canvas_MouseX) - GadgetX(#Canvas)
Y1 = GetGadgetAttribute(#ScrollArea_Canvas, #PB_Canvas_MouseY) - GadgetY(#Canvas)
Paint = #True
EndIf
Case #PB_EventType_LeftButtonUp
Paint = #False
CopyImage(#ImageCanvasCurrent, #ImageCanvasSave)
;Sauvegarde de l'image sur le bureau
SaveImage(#ImageCanvasSave, GetHomeDirectory()+"desktop\dummysave.png", #PB_ImagePlugin_PNG)
Case #PB_EventType_MouseMove
DrawBox(X1, Y1)
EndSelect
EndSelect
Case #PB_Event_CloseWindow
End
EndSelect
ForEver