
J'ai testé le zoom fonctionne pas mal, mais effectivement ce serait mieux en gardant le "focus" sur la souris.
Par contre, j'ai testé et la rotation d'image ne marche pas chez moi

Mais en tout cas, c'est pas mal du tout, merci

Code : Tout sélectionner
Depth.l=ImageDepth(image,#PB_Image_InternalDepth)
If Height>Width
temp=CreateImage(#PB_Any,Height,Height,Depth)
Else
temp=CreateImage(#PB_Any,Width,Width,Depth)
EndIf
Code : Tout sélectionner
If Height>Width
temp=CreateImage(#PB_Any,Height,Height)
Else
temp=CreateImage(#PB_Any,Width,Width)
EndIf
alors, ça marche avec un jpg, ou avec un png (sans canal alpha) mais pas avec un png avec canal alpha chez moi.kernadec a écrit :regarde les options de ton compilateur
je n'ai que les themes xp et thread
Code : Tout sélectionner
DC=StartDrawing(ImageOutput(temp))
DrawingMode(#PB_2DDrawing_AllChannels)
DrawImage(ImageID(image),0,0)
PlgBlt_(DC,@rect(),DC,0,0,Width,Height,0,0,0)
StopDrawing()
il y a une erreur sur ton lienkernadec a écrit :sinon pour une rotation en degrés je te conseil le code du "Soldat Inconnu - Djes - psychopanta"
ici: http://www.purebasic.fr/english/viewtop ... t=rotation
ca va être difficile de trouver mieux..![]()
Code : Tout sélectionner
Circle(X1+DeltaX, Y1+DeltaY, Random(Thickness/2), Color)
oki, ça marche pas mal, c'est vrai, je l'ai ajouté mettre sur les lignes.kernadec a écrit :bonjour blendman
j'ai une astuce pour les lignes dont tu recherche un effect comme sur l'image,
alors il faut diviser la valeur alpha par 5 pour les lignes
avec épaisseur par rapport à l' alpha d'une figure pleine
car c'est une succession de cercles, Et ensuite ajouter cette option au dessin.même chose pour tes brush tu modifie la taille en mode aléatoire ça devrait être top aussiCode : Tout sélectionner
Circle(X1+DeltaX, Y1+DeltaY, Random(Thickness/2), Color)
![]()
Code : Tout sélectionner
;{ Infos
; Dev initial : kernadec
; date : juin 2011
; divers : Forum français ver 4.60 b3
; Ajout : pinceau : blendman
; Aide : le soldat inconnu : fatroundbox() et fat box()
; Aide : merci à Kwanjeen pour son aide très précieuse pour l'utilisation des brushes !
;}
;{ structures
Structure MDIWindow
; info about the loaded image
Image.i
ImageWidth.l
ImageHeight.l
; Our MDI Window
Window.i
; gadget numbers
ScrollAreaGadget.i
ImageGadget.i
EndStructure
Global NewList MDIWindow.MDIWindow()
;}
;{ Enumeration
Enumeration
#Window
#Image0
#Image1
#IMAGE_LoadSave
#Scroll
#canvas
#brush
#pbrush
EndEnumeration
Enumeration
#menu0
#menu1
#menu2
#menu3
#menu4
#menu5
#menu6
#menu7
#menu8
#menu9
#menu10
EndEnumeration
#TOOLBAR = 0
#MENU = 0
#MDI_Base = 1
Enumeration
#MENU_Open
#MENU_Close
#MENU_CloseAll
#MENU_Quit
#MENU_TileV
#MENU_TileH
#MENU_Cascade
#MENU_Arrange
#MENU_Previous
#MENU_Next
#MENU_FirstMDI
EndEnumeration
#GADGET_MDI = 0
#WindowFlags = #PB_Window_ScreenCentered|#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_SizeGadget
;}
;{ init et loadImage
If UseJPEGImageDecoder() = 0 Or UsePNGImageDecoder() = 0 Or UseJPEGImageEncoder() = 0 Or UsePNGImageEncoder()=0 Or UseTGAImageDecoder()=0 Or UseTIFFImageDecoder() =0
MessageRequester("Erreur", "Erreur de chargement des decoder images")
End
EndIf
; If InitKeyboard() = 0
; MessageRequester("Erreur", "Erreur de chargement des sprites")
; End
; EndIf
;}
;{ declare
Declare openAppli()
Declare CloseAppli()
;}
;{ variables
; general
Global lang$, version${5}, event.i, quit.b,clic_gauche.b, menu.a = 9,key.u, resize.b=1, tool.a
; brush, defaut
Global brush_w, brush_h, brush_nb.w,brush_dir$
; document
Global size_imgX.u=3000, Size_imgY.u=3000
; position souris, donc pinceau, etc..
Global x, y, DepartX, DepartY, rx, ry, finX, finY
; paramètres brush
Global brushId.u=1, transparence.a = 255, color.i, linesize.u=100, color_R.a, color_G.a, color_B.a, space.i = 10
; aléatoire du brush
Global random_size.b, random_rotation.b, random_scatter.b, radiusX.u=5,radiusY.u=5, size.u=100, scatter.u=20
openAppli()
CloseAppli()
; langage
;}
;{ procedures
; procedure transformations d'image
ProcedureDLL.l RotateImageEx2(ImageID, Angle.f) ; Rotation d'une image d'un angle en °
Protected bmi.BITMAPINFO, bmi2.BITMAPINFO, Hdc.l, NewImageID, Mem, n, nn, bm.BITMAP
Angle*#PI/180 ; On convertit en radian
Protected Cos.f = Cos(Angle)
Protected Sin.f = Sin(Angle)
Protected CouleurFond = 0
GetObject_(ImageID, SizeOf(BITMAP), @bm.BITMAP)
bmi\bmiHeader\biSize = SizeOf(BITMAPINFOHEADER)
bmi\bmiHeader\biWidth = bm\bmWidth
bmi\bmiHeader\biHeight = bm\bmHeight
bmi\bmiHeader\biPlanes = 1
bmi\bmiHeader\biBitCount = 32
bmi\bmiHeader\biCompression = #BI_RGB
bmi2\bmiHeader\biSize = SizeOf(BITMAPINFOHEADER)
bmi2\bmiHeader\biWidth = bm\bmWidth * Abs(Cos) + bm\bmHeight * Abs(Sin)
bmi2\bmiHeader\biHeight = bm\bmHeight * Abs(Cos) + bm\bmWidth * Abs(Sin)
bmi2\bmiHeader\biPlanes = 1
bmi2\bmiHeader\biBitCount = 32
bmi2\bmiHeader\biCompression = #BI_RGB
Mem = AllocateMemory(bm\bmWidth * bm\bmHeight * 4)
If Mem
Protected Mem2 = AllocateMemory(bmi2\bmiHeader\biWidth * bmi2\bmiHeader\biHeight * 4)
If Mem2
Hdc = CreateCompatibleDC_(GetDC_(ImageID))
If Hdc
GetDIBits_(Hdc, ImageID, 0, bm\bmHeight, Mem, @bmi, #DIB_RGB_COLORS) ; on envoie la liste dans l'image
ReleaseDC_(0, Hdc)
EndIf
Protected CX1 = bm\bmWidth - 1
Protected CY1 = bm\bmHeight - 1
Protected CX2 = bmi2\bmiHeader\biWidth - 1
Protected CY2 = bmi2\bmiHeader\biHeight - 1
Protected Mem01 = Mem + bm\bmWidth * 4
Protected Mem10 = Mem + 4
Protected Mem11 = Mem01 + 4
Protected Mem2Temp = Mem2
Protected deb=-CX2/2 : Protected fin=(CX2*2-CX2)/2
For nn = 0 To CY2
Protected y1b.l = nn * 2 - CY2
Protected Temp1.f = (CX1 - y1b * Sin)/2
Protected Temp2.f = (CY1 + y1b * Cos)/2
Protected x1b.l
For x1b = deb To fin
Protected x1.f = Temp1 + x1b * Cos ;on pourrait virer ces mult avec des tables mais le gain n'est pas évident
Protected y1.f = Temp2 + x1b * Sin
Protected x2.l = x1
Protected y2.l = y1
If x1 < x2
!dec dword[p.v_x2]
EndIf
If y1 < y2
!dec dword[p.v_y2]
EndIf
Protected x2b = x2 + 1
Protected y2b = y2 + 1
If x2b >= 0 And x2 <= CX1 And y2b >= 0 And y2 <= CY1 ; On filtre si on est completement en dehors de l'image
Protected fx.f = x1 - x2
Protected fy.f = y1 - y2
Protected f00.f = 1 - fx
Protected f10.f = 1 - fy
Protected f01.f = f00 * fy
f00 * f10
f10 * fx
Protected f11.f = fx * fy
Protected MemTemp = (x2 + y2 * bm\bmWidth) * 4
Protected c00.l, c01.l, c11.l, c10.l
If x2 >= 0 And x2 <= CX1
If y2 >= 0 And y2 <= CY1
!mov eax,dword[p.v_Mem]
!add eax,dword[p.v_MemTemp]
!mov eax,dword[eax]
!mov dword[p.v_c00],eax
;c00 = PeekL(Mem + MemTemp)
Else
c00 = 0
EndIf
If y2b >= 0 And y2b <= CY1
!mov eax,dword[p.v_Mem01]
!add eax,dword[p.v_MemTemp]
!mov eax,dword[eax]
!mov dword[p.v_c01],eax
;c01 = PeekL(Mem01 + MemTemp)
Else
c01 = 0
EndIf
Else
c00 = 0
c01 = 0
EndIf
If x2b >= 0 And x2b <= CX1
If y2 >= 0 And y2 <= CY1
!mov eax,dword[p.v_Mem10]
!add eax,dword[p.v_MemTemp]
!mov eax,dword[eax]
!mov dword[p.v_c10],eax
;c10 = PeekL(Mem10 + MemTemp)
Else
c10 = 0
EndIf
If y2b >= 0 And y2b <= CY1
!mov eax,dword[p.v_Mem11]
!add eax,dword[p.v_MemTemp]
!mov eax,dword[eax]
!mov dword[p.v_c11],eax
;c11 = PeekL(Mem11 + MemTemp)
Else
c11 = 0
EndIf
Else
c10 = 0
c11 = 0
EndIf
Protected r1.l,r2.l,r3.l,r4.l,g1.l,g2.l,g3.l,g4.l,b1.l,b2.l,b3.l,b4.l
!mov eax,dword[p.v_c00]
!mov ebx,eax
!mov ecx,eax
!and eax,$FF
!mov dword[p.v_r1],eax
!and ebx,$FF00
!mov dword[p.v_g1],ebx
!and ecx,$FF0000
!mov dword[p.v_b1],ecx
!mov eax,dword[p.v_c10]
!mov ebx,eax
!mov ecx,eax
!and eax,$FF
!mov dword[p.v_r2],eax
!and ebx,$FF00
!mov dword[p.v_g2],ebx
!and ecx,$FF0000
!mov dword[p.v_b2],ecx
!mov eax,dword[p.v_c01]
!mov ebx,eax
!mov ecx,eax
!and eax,$FF
!mov dword[p.v_r3],eax
!and ebx,$FF00
!mov dword[p.v_g3],ebx
!and ecx,$FF0000
!mov dword[p.v_b3],ecx
!mov eax,dword[p.v_c11]
!mov ebx,eax
!mov ecx,eax
!and eax,$FF
!mov dword[p.v_r4],eax
!and ebx,$FF00
!mov dword[p.v_g4],ebx
!and ecx,$FF0000
!mov dword[p.v_b4],ecx
Protected r.l = r1 * f00 + r2 * f10 + r3 * f01 + r4 * f11 ;pure fait très bien tout ça
Protected g.l = g1 * f00 + g2 * f10 + g3 * f01 + g4 * f11
Protected b.l = b1 * f00 + b2 * f10 + b3 * f01 + b4 * f11
!mov eax,dword[p.v_r]
!mov ebx,dword[p.v_g]
!mov ecx,dword[p.v_b]
!and eax,$FF ;toute l'astuce consiste à laisser les triplets à leur place et à les multiplier là. On évite ainsi les décalages
!and ebx,$FF00
!and ecx,$FF0000
!or eax,ebx
!or eax,ecx
!mov ebx,dword[p.v_Mem2Temp]
!mov dword[ebx],eax
Else
!mov ebx,dword[p.v_Mem2Temp]
!xor eax,eax
!mov dword[ebx],eax
EndIf
Mem2Temp + 4
Next
Next
; On crée la nouvelle image
NewImageID = CreateImage(#PB_Any, bmi2\bmiHeader\biWidth, bmi2\bmiHeader\biHeight,32)
Hdc = CreateCompatibleDC_(GetDC_(ImageID(NewImageID)))
If Hdc
SetDIBits_(Hdc, ImageID(NewImageID), 0, bmi2\bmiHeader\biHeight, Mem2, @bmi2, #DIB_RGB_COLORS) ; on envoie la liste dans l'image
ReleaseDC_(0, Hdc)
EndIf
FreeMemory(Mem2)
EndIf
FreeMemory(Mem)
EndIf
ProcedureReturn NewImageID
EndProcedure
; save et load preferences
Procedure openAppli()
OpenPreferences("options.ini")
PreferenceGroup("general")
version$ = ReadPreferenceString("version","0.1")
Debug "Version : "+version$
lang$ = ReadPreferenceString("lang","fr")
PreferenceGroup("brush")
; read the preferences
brush_nb = ReadPreferenceInteger("brush_nb",59)
brush_dir$ = ReadPreferenceString("brush_directory","blendman")
brushId = ReadPreferenceInteger("brush",1)
space = ReadPreferenceInteger("space",1)
linesize = ReadPreferenceInteger("size",1)
tool = ReadPreferenceInteger("Tool",1)
Debug tool
ClosePreferences()
menu = tool
LoadImage(#brush,"data\"+brush_dir$+"\brush"+Str(brushId)+".png")
EndProcedure
Procedure closeAppli()
CreatePreferences("options.ini")
PreferenceGroup("general")
WritePreferenceString("lang",lang$)
WritePreferenceString("version",version$)
PreferenceGroup("brush")
WritePreferenceInteger("brush_nb",brush_nb)
WritePreferenceString("brush_directory",brush_dir$)
WritePreferenceInteger("brush",brushId)
WritePreferenceInteger("space",space)
WritePreferenceInteger("size",linesize)
WritePreferenceInteger("Tool",tool)
Debug tool
ClosePreferences()
EndProcedure
; mdi (pas actif)
Procedure SelectMDIWindow(Window)
ForEach MDIWindow()
If MDIWindow()\Window = Window
ProcedureReturn 1
EndIf
Next
EndProcedure
;{ procedure tools
Procedure FatBox(x, y, Width, Height, Fat, Color)
;le soldat inconu
For i = 1 To Fat
Box(x + i, y + i, Width - 2 * i, Height - 2 * i, Color)
Next
EndProcedure
Procedure FatRoundBox(x, y, Width, Height, RoundX, RoundY, Fat, Color)
For i = 1 To Fat
RoundBox(x + i, y + i, Width - 2 * i, Height - 2 * i, RoundX, RoundY, Color)
RoundBox(x, y + i, Width, Height - 2 * i, RoundX, RoundY, Color)
RoundBox(x + i, y, Width - 2 * i, Height, RoundX, RoundY, Color)
If i > 1
RoundBox(x + i - 1, y + i, Width - 2 * i + 2, Height - 2 * i, RoundX, RoundY, Color)
RoundBox(x + i, y + i - 1, Width - 2 * i, Height - 2 * i + 2, RoundX, RoundY, Color)
EndIf
Next
EndProcedure
Procedure ThickLineXY(X1.i, Y1.i, X2.i, Y2.i, Thickness.i, Color.i)
; Procedure épaisseur de : STARGATE forum Purebasic Allemand
Protected Length.i = Sqr((X2-X1)*(X2-X1)+(Y2-Y1)*(Y2-Y1))
Protected I, DeltaX.i, DeltaY.i
If Length = 0
If random_size = 1
Circle(X1, Y1, Random(Thickness/2), Color)
Else
Circle(X1, Y1, Thickness/2, Color)
EndIf
Else
For I = 0 To Length
DeltaX = (X2-X1)*I/Length
DeltaY = (Y2-Y1)*I/Length
If random_size =1
Circle(X1+DeltaX, Y1+DeltaY, Random(Thickness/2), Color)
Else
Circle(X1+DeltaX, Y1+DeltaY, Thickness/2, Color)
EndIf
Next
EndIf
EndProcedure
Procedure elipse(x0,y0,x1,y1,r1,r2,a1,a2,Thickness,color)
For i=0 To 359
r3=(Sqr(Pow(x1,2)+Pow(y1,2)))
x2.i=x0+r3*Cos(Radian(i))
y2.i=y0+r3*Sin(Radian(i))
Circle(X2,Y2,Thickness/2,Color)
Next i
EndProcedure
Procedure paint_brush()
CopyImage(#brush,#pbrush) ; on copie le brush pour travailler sans modifier l'origine
If resize = 1
ResizeImage(#pbrush,linesize,linesize,1) ;on modifie la taille du brush
EndIf
brush_w = ImageWidth(#pbrush)
brush_h = ImageHeight(#pbrush)
StartDrawing(ImageOutput(#pbrush))
For y=0 To ImageHeight(#pbrush)-1
For x=0 To ImageWidth(#pbrush)-1
DrawingMode(#PB_2DDrawing_AlphaChannel)
alpha_point = Alpha(Point(x,y))-(255-transparence) ;on récupère l'alpha du brush (pixel par pixel) qu'on modifie par la valeur transparence
If alpha_point<0
alpha_point = 0
EndIf
DrawingMode(#PB_2DDrawing_AllChannels)
Plot(x,y,RGBA(color_R, color_G,color_B,alpha_point)) ;on redessine chaque point par la nouvelle couleur et l'alpha modifiée
Next x
Next y
StopDrawing()
EndProcedure
Procedure paint_brush_line(X1.i, Y1.i, X2.i, Y2.i, Thickness.i, Color.i)
; Procedure épaisseur de : STARGATE forum Purebasic Allemand
Protected Length.i = Sqr((X2-X1)*(X2-X1)+(Y2-Y1)*(Y2-Y1))
Protected I, DeltaX.i, DeltaY.i
If Length = 0
;DrawImage(ImageID(#pbrush),X1, Y1,random_size*Random(Thickness/2)+((1-random_size)*Thickness/2),random_size*Random(Thickness/2)+((1-random_size)*Thickness/2))
Circle(X1, Y1, random_size*Random(Thickness/2)+((1-random_size)*Thickness/2), Color)
Else
For I = 0 To Round(Length/space,0)
DeltaX = (X2-X1)*I/(Length)
DeltaY = (Y2-Y1)*I/(Length)
;DrawImage(ImageID(#pbrush),X1+DeltaX, Y1+DeltaY,random_size*Random(Thickness/2)+((1-random_size)*Thickness/2),random_size*Random(Thickness/2)+((1-random_size)*Thickness/2))
Circle(X1+DeltaX, Y1+DeltaY,random_size*Random(Thickness/2)+((1-random_size)*Thickness/2), Color)
Next
EndIf
EndProcedure
;}
; event
Procedure Event_painting()
key = GetGadgetAttribute(#canvas,#PB_Canvas_Keyboard)
X = GetGadgetAttribute(#canvas, #PB_Canvas_MouseX)
Y = GetGadgetAttribute(#canvas, #PB_Canvas_MouseY)
StartDrawing(CanvasOutput(#canvas))
;{ dessin (outils & pinceau)
If Clic_Gauche=#True And menu <>9 And menu <12
;{ EventType() = #PB_EventType_MouseMove
If EventType() = #PB_EventType_MouseMove
DrawImage(ImageID(#Image0), 0, 0) ; transparence avec couleur RGBA
DrawingMode(#PB_2DDrawing_AlphaBlend| #PB_2DDrawing_Transparent)
Select menu
Case 1
LineXY(DepartX, DepartY, x, y, color)
FinX=x:FinY=y
Case 2
ThickLineXY(DepartX, DepartY, x, y, linesize, Color)
FinX=x:FinY=y
Case 3
; calcul des distances pixels entre DepartX,DepartY du debut et X,Y actuel = taille de l'élipse
If x > DepartX:rx = x - DepartX:Else:rx = DepartX - x:EndIf
If y > DepartY:ry = y - DepartY:Else:ry = DepartY - y:EndIf
Ellipse(DepartX, DepartY, rx, ry, color)
Case 4
elipse(DepartX,DepartY,x-DepartX,y-DepartY,r1,r2,a1,a2,linesize,color)
Case 5
Box(DepartX, DepartY,x-DepartX,y-DepartY,color)
Case 10
DrawingMode(#PB_2DDrawing_AlphaBlend| #PB_2DDrawing_Transparent|#PB_2DDrawing_Outlined)
FatBox(DepartX, DepartY,x-DepartX,y-DepartY,linesize,color)
Case 11
FatRoundBox(DepartX, DepartY,x-DepartX,y-DepartY,10,10,linesize,color)
; Case 14
; departx = x
; departy = y
; FinX=x:FinY=y
; ;ThickLineXY(DepartX, DepartY, x, y, linesize, Color)
; LineXY(DepartX, DepartY, x, y, color)
; ; DrawImage(ImageID(#Image1),0,0)
; ; StopDrawing()
; ; If StartDrawing(ImageOutput(#Image0))
; ; DrawImage(GetGadgetAttribute(#canvas,#PB_Canvas_Image),0,0) ;fixe le dessin
; ; StopDrawing()
; ; EndIf
EndSelect
EndIf
;}
ElseIf menu =9 Or menu >= 12
If clic_gauche = #True
DrawingMode(#PB_2DDrawing_AlphaBlend)
size =(1-random_size)*linesize +Random(linesize-1)*random_size
If random_rotation = 1
rot.w = Round(Random(360),0)
img_rotation = RotateImageEx2(ImageID(#pbrush), rot)
Debug rot
Else
img_rotation = #pbrush
EndIf
If menu = 9
If random_scatter =1
DrawImage(ImageID(img_rotation),x-(ImageWidth(#pbrush)/2)+Random(scatter)-Random(scatter),y-(ImageHeight(#pbrush)/2)+Random(scatter)-Random(scatter),size,size)
;drawAlphaImage(ImageID(#pbrush),x-(ImageWidth(#pbrush)/2)+Random(scatter)-Random(scatter),y-(ImageHeight(#pbrush)/2)+Random(scatter)-Random(scatter))
ElseIf random_scatter=0
DrawImage(ImageID(img_rotation),x-(ImageWidth(#pbrush)/2),y-(ImageHeight(#pbrush)/2),size,size)
;DrawAlphaImage(ImageID(#pbrush),x-(ImageWidth(#pbrush)/2),y-(ImageHeight(#pbrush)/2))
EndIf
ElseIf menu= 12 ; brush circle
Circle(X, Y, linesize, Color)
ElseIf menu = 13 ; pinceau lié
paint_brush_line(DepartX, DepartY, x, y, linesize, Color)
DepartX = x
DepartY = y
FinX=x
FinY=y
ElseIf menu = 14 ; speedline
LineXY(DepartX, DepartY, x, y, color)
;paint_brush_line(DepartX, DepartY, x, y, linesize, Color)
FinX=x:FinY=y
EndIf
EndIf
EndIf
;}
;{ mouse
If menu = 9 Or menu >=12
If EventType() = #PB_EventType_LeftButtonDown
departX = X
departY = Y
If Clic_Gauche=#True
Clic_Gauche=#False
color= RGBA(color_R, color_G,color_B,transparence) ; couleur aléatoire
Else
Clic_Gauche=#True
EndIf
ElseIf EventType() = #PB_EventType_LeftButtonUp
If Clic_Gauche=#True
Clic_Gauche=#False
color= RGBA(color_R, color_G,color_B,transparence) ; couleur aléatoire
CopyImage(#Image0,#Image1)
Else
Clic_Gauche=#True
EndIf
EndIf
EndIf
If EventType() = #PB_EventType_RightButtonDown And Clic_Gauche=#True And menu <>9
Clic_Gauche=#False ; annule fin du dessin en cours
DrawImage(ImageID(#Image1),0,0) ; restore le dessin precedent
FinX=-500:FinY=-500 ; remise à zero pour test fin ligne
EndIf
StopDrawing()
; capture de la couleur, pour mode aquarelle
If mouse_ok = 1
StartDrawing(CanvasOutput(#canvas))
color1 = AlphaBlend(color,Point(x,y))
color=color1
StopDrawing()
EndIf
;}
;{ eventType()
Select EventType()
Case #PB_EventType_LeftButtonDown
If menu <>9 And menu<12
If StartDrawing(ImageOutput(#Image0))
DrawImage(GetGadgetAttribute(#canvas,#PB_Canvas_Image),0,0) ;fixe le dessin
StopDrawing()
EndIf
If Clic_Gauche=#False ; valide la fin du dessin avec le click gauche = 0
Clic_Gauche=#True ; debut du dessin avec le click gauche = 1
color= RGBA(color_R, color_G,color_B,transparence) ; couleur aléatoire
CopyImage(#Image0,#Image1) ; copie Image pour eventuelle annulation
Else
Clic_Gauche=#False ; valide la fin du dessin avec le click gauche = 0
EndIf
DepartX = X ; coordonnée DepartX Clic_Gauche
DepartY = Y ; coordonnée DepartY Clic_Gauche
If menu=1 Or menu=2
If (FinX<>0 And FinY<>0)
Clic_Gauche=#True ; reactive le clic_Gauche pour ligne suivante
CopyImage(#Image0,#Image1) ; copie Image pour eventuelle annulation
DepartX = FinX ; transfert dernier clic_Gauche FinX vers DepartX suivant mode line chainée
DepartY = FinY ; transfert dernier clic_Gauche FinY vers DepartY suivant
EndIf
EndIf
ElseIf menu =9 Or menu <= 12
If StartDrawing(ImageOutput(#Image0))
DrawImage(GetGadgetAttribute(#canvas,#PB_Canvas_Image),0,0) ;fixe le dessin
StopDrawing()
EndIf
EndIf
EndSelect
;}
Select event
;{ #PB_Event_Menu
Case #PB_Event_Menu
Select EventMenu()
Case #menu1: menu=1 : tool = 1
Debug tool
Case #menu2: menu=2 : tool = 2
Debug tool
Case #menu3: menu=3 : tool = 3
Debug tool
Case #menu4: menu=4 : tool = 4
Debug tool
Case #menu5: menu=5 : tool = 5
Debug tool
Case #menu6 ; transparence
transparence = Val(InputRequester("Transparence","transparence du pinceau", Str(transparence)))
If transparence <0
transparence = 0
color= RGBA(color_R, color_G,color_B,transparence)
ElseIf transparence>255
transparence = 255
color= RGBA(color_R, color_G,color_B,transparence)
EndIf
resize = 0
paint_brush()
Case #menu7 ; on choisit couleur (to choose the color)
couleur = ColorRequester(couleur)
color_R=Red(couleur)
color_G=Green(couleur)
color_B=Blue(couleur)
color= RGBA(color_R, color_G,color_B,transparence)
resize = 1
paint_brush()
Case #menu8 ; random size
linesize = Val(InputRequester("Taille","Epaisseur de la ligne", Str(linesize)))
color= RGBA(color_R, color_G,color_B,transparence)
resize = 1
paint_brush()
resize = 0
Case #menu9 ; outil = pinceau (tool = brush)
menu = 9
color= RGBA(color_R, color_G,color_B,transparence)
resize = 0
Case 10 : menu = 10 : tool = 10 ; box empty
Debug tool
Case 11 : menu = 11 : tool = 11 ; round box
Debug tool
Case 12 : menu = 12 : tool = 12 ; circle brush
Debug tool
Case 13 : menu = 13 : tool = 13 ; paint brush line
Debug tool
Case 14 : menu = 14 : tool = 14 ; speed line radial
Debug tool
Case 15 : menu = 15 ; speed line verticale
Case 20 ; nouveau (new)
Case 21 ; Ouvrir (open)
Case 22 ; enregistrer (save)
Case 23 ; quitter (quit)
quit = 1
Case 24 ; importer une image - import an image
File$ = OpenFileRequester("Load Image...", "", "JPEG Images|*.jpg|PNG IMages|*.png|All Files|*.*", 0)
If File$
If LoadImage(#IMAGE_LoadSave, File$)
If StartDrawing(CanvasOutput(#Canvas))
Box(0, 0, 380, 380, $FFFFFF)
DrawImage(ImageID(#IMAGE_LoadSave), 0, 0)
StopDrawing()
EndIf
FreeImage(#IMAGE_LoadSave)
Else
MessageRequester("CanvasGadget", "Impossible de charger une image: " + File$)
EndIf
EndIf
Case 25 ; exporter l'image - export image in jpg
File$ = SaveFileRequester("Save Image...", File$, "JPEG Images|*.jpg", 0)
If File$ And (FileSize(File$) = -1 Or MessageRequester("CanvasGadget", "Ecraser le fichier? " + File$, #PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes)
If CreateImage(#IMAGE_LoadSave, size_imgX,size_imgX, 24) And StartDrawing(ImageOutput(#IMAGE_LoadSave))
DrawImage(GetGadgetAttribute(#Canvas, #PB_Canvas_Image), 0, 0)
StopDrawing()
If SaveImage(#IMAGE_LoadSave, File$, #PB_ImagePlugin_JPEG,9,24) = 0
MessageRequester("CanvasGadget", "Sauvegarde impossible: " + File$)
EndIf
FreeImage(#IMAGE_LoadSave)
EndIf
EndIf
Case 26 ; save As png
File$ = SaveFileRequester("Save Image...", File$, "PNG Images|*.png", 0)
If File$ And (FileSize(File$) = -1 Or MessageRequester("CanvasGadget", "Ecraser le fichier? " + File$, #PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes)
If CreateImage(#IMAGE_LoadSave, size_imgX,size_imgX, 32) And StartDrawing(ImageOutput(#IMAGE_LoadSave))
DrawImage(GetGadgetAttribute(#Canvas, #PB_Canvas_Image), 0, 0)
StopDrawing()
If SaveImage(#IMAGE_LoadSave, File$, #PB_ImagePlugin_PNG,32) = 0
MessageRequester("CanvasGadget", "Sauvegarde impossible: " + File$)
EndIf
FreeImage(#IMAGE_LoadSave)
EndIf
EndIf
Case 30 ; effacer le canvas - erase the canvas
If StartDrawing(CanvasOutput(#Canvas))
Box(0, 0, size_imgX,size_imgy, $FFFFFF)
StopDrawing()
EndIf
Case 40
MessageRequester("A propos", "Canvas gadget est un logiciel créé par Kernadec et Blendman."+Chr(10)+"Ce logiciel est développé en purebasic"+Chr(10)+Chr(10)+"Canvas Gadget est libre et gratuit."+Chr(10)+Chr(10)+"Créé en Juillet 2011"+Chr(10)+"Version : "+version$)
Case 50 ; afficher les calques
Case 65 ; taille de l'image
MessageRequester("Taille", "Taille de l'image : "+Str(size_imgX)+" / "+Str(size_imgy))
Case 100 ; taille aléatoire
random_size = 1-random_size
SetMenuItemState(0,100,random_size)
Case 101 ; random_rotation
random_rotation =1-random_rotation
Debug random_rotation
SetMenuItemState(0,101,random_rotation)
Case 102 ; random scatter (diffusion aléatoire
random_scatter =1-random_scatter
SetMenuItemState(0,102,random_scatter)
Case 103 ; scatter (diffusion)
scatter = Val(InputRequester("Diffusion","Valeur de transparence du pinceau", Str(scatter)))
If scatter <0 : scatter = 0
ElseIf scatter>500 : scatter = 500
EndIf
Case 104 ; sapce brush
space = Val(InputRequester("Space Brush","Valeur d'espace des points", Str(space)))
If space <0 : space = 1
ElseIf space>500 : space = 500
EndIf
;{ keyboard - brush shortcut
Case 201 ; touche C
If brushid >1
brushId - 1
Else
brushId = brush_nb
EndIf
Debug brushId
LoadImage(#brush,"data\"+brush_dir$+"\brush"+Str(brushId)+".png")
resize = 1
paint_brush()
Case 202 ; touche X -> changer le brush
If brushid < brush_nb
brushId + 1
Else
brushId = 1
EndIf
Debug brushId
LoadImage(#brush,"data\"+brush_dir$+"\brush"+Str(brushId)+".png")
resize = 1
paint_brush()
;}
EndSelect
;}
;{ #PB_Event_SizeWindow
Case #PB_Event_SizeWindow ; redimensione le scroll avec la fenetre
ResizeGadget(#Scroll,#PB_Ignore,#PB_Ignore,WindowWidth(#Window),WindowHeight(#Window)-20) ; -20 = scroll horizontal et menu
SetGadgetColor(#Scroll,#PB_Gadget_BackColor,#White)
;}
;{ #PB_Event_CloseWindow
Case #PB_Event_CloseWindow
quit=1
;}
EndSelect
EndProcedure
; openwidnow et creation de menu, etc...
Procedure OpenWin()
CreateImage(#Image0, size_imgX, size_imgY, 32|#PB_Image_Transparent)
CreateImage(#Image1, size_imgX, size_imgY, 32|#PB_Image_Transparent)
size = linesize
If OpenWindow(#Window, 0, 0,600,600, "CanvasGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered| #PB_Window_MinimizeGadget | #PB_Window_SizeGadget|#PB_Window_MaximizeGadget|#PB_Window_Maximize)
;{ canvas et set attribute
ScrollAreaGadget(#Scroll, 0, 0, 550,600, size_imgX, size_imgY, 30)
CanvasGadget(#canvas,0,0,size_imgX, size_imgY, #PB_Canvas_ClipMouse| #PB_Canvas_Keyboard)
; SetWindowColor(#Window,RGB(125,125,125))
; SetGadgetColor(#Scroll,#PB_Gadget_BackColor,#Gray)
SetGadgetAttribute(#Scroll,#PB_ScrollArea_X,200)
SetGadgetAttribute(#Scroll,#PB_ScrollArea_Y,200)
;}
;{ menu
If CreateMenu(#menu0, WindowID(0))
; menu Fichier
MenuTitle("Fichier")
MenuItem(20,"Nouveau"+Chr(9)+"Ctrl+N")
MenuItem(21,"Ouvrir"+Chr(9)+"Ctrl+O")
MenuItem(24,"Importer une image sur le calque"+Chr(9)+"Ctrl+Shift+I")
MenuBar()
MenuItem(25,"Exporter L'image en jpg"+Chr(9)+"Ctrl+Shift+s")
MenuItem(26,"Exporter L'image en png"+Chr(9)+"Ctrl+Alt+S")
MenuItem(22,"Enregistrer"+Chr(9)+"Ctrl+S")
MenuBar()
MenuItem(23,"Quitter"+Chr(9)+"Esc")
; menu Edition
MenuTitle("Edition")
MenuItem(30,"Effacer"+Chr(9)+"Ctrl+X")
; menu image
MenuTitle("Images")
MenuItem(65,"Taille de l'image")
; Menu outils
MenuTitle("Outils")
MenuItem(#menu1, "Ligne")
MenuItem(#menu2, "Ligne Epaisse")
MenuBar()
MenuItem(#menu3, "Cercle")
MenuItem(#menu4, "Cercle vide")
MenuItem(#menu5, "Box")
MenuItem(10,"Box vide")
MenuItem(11,"Roundbox")
MenuBar()
MenuItem(12, "Brosse Ronde")
MenuItem(#menu9, "Pinceau")
MenuItem(13, "Pinceau lié")
MenuBar()
MenuItem(14, "SpeedLine (radial)")
; Menu paramètres
MenuTitle("Paramètres")
MenuItem(100,"Taille Aléatoire")
SetMenuItemState(0,100,random_size)
MenuItem(101,"Rotation Aléatoire")
SetMenuItemState(0,101,random_rotation)
MenuItem(102,"Diffusion Aléatoire")
SetMenuItemState(0,101,random_scatter)
MenuBar()
MenuItem(103,"Diffusion")
MenuItem(#menu6, "Transparence")
MenuItem(#menu7, "Couleur")
MenuItem(#menu8, "Taille")
MenuItem(104,"Brush Space")
; menu fenêtre
MenuTitle("Affichage")
MenuItem(50,"Calques")
; Menu Aides
MenuTitle("Aides")
MenuItem(40,"A propos")
MenuItem(41,"Aide")
EndIf
;}
;{ toolbar
; If CreateToolBar(#TOOLBAR, WindowID(#WINDOW))
; ToolBarStandardButton(#MENU_Open, #PB_ToolBarIcon_Open)
; ToolBarStandardButton(#MENU_Close, #PB_ToolBarIcon_Delete)
; ToolBarSeparator()
; ToolBarStandardButton(#MENU_Previous, #PB_ToolBarIcon_Undo)
; ToolBarStandardButton(#MENU_Next, #PB_ToolBarIcon_Redo)
; EndIf
;}
;MDIGadget(#GADGET_MDI, 0, 0, 0, 0, 1, #MENU_FirstMDI, #PB_MDI_AutoSize)
color= RGBA(color_R, color_G,color_B,transparence)
Else
MessageRequester("Erreur", "impossible d'ouvrir une fenêtre")
End
EndIf
;{ les raccourcis claviers
AddKeyboardShortcut(0, #PB_Shortcut_X, 201) ; the previous brush
AddKeyboardShortcut(0, #PB_Shortcut_C, 202) ; the next brush
AddKeyboardShortcut(0, #PB_Shortcut_Escape, 23)
AddKeyboardShortcut(0, #PB_Shortcut_X|#PB_Shortcut_Control, 30) ; erase the surface
AddKeyboardShortcut(0, #PB_Shortcut_N|#PB_Shortcut_Control, 20) ; new
AddKeyboardShortcut(0, #PB_Shortcut_O|#PB_Shortcut_Control, 21) ; open
AddKeyboardShortcut(0, #PB_Shortcut_S|#PB_Shortcut_Control, 22) ; save
AddKeyboardShortcut(0, #PB_Shortcut_S|#PB_Shortcut_Control|#PB_Shortcut_Shift, 25) ; export jpg
AddKeyboardShortcut(0, #PB_Shortcut_S|#PB_Shortcut_Control|#PB_Shortcut_Alt, 26) ; export png
AddKeyboardShortcut(0, #PB_Shortcut_I|#PB_Shortcut_Control|#PB_Shortcut_Shift, 24) ; import
;}
EndProcedure
;}
;{ boucle principale
OpenWin()
paint_brush()
Repeat
event=WaitWindowEvent()
Event_painting()
Until quit
;}
closeAppli()
End
Code : Tout sélectionner
If (FinX=0 And FinY=0) ; mode clic gauche appuyé
If EventType() = #PB_EventType_MouseMove
DrawingMode(#PB_2DDrawing_AlphaBlend)
Clic_Gauche=#False
If GetGadgetAttribute(#Canvas, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton
If menu=7
Circle(X,Y, 5, lcolor)
EndIf
If menu=8
Circle(X,Y,Random(20), lcolor)
EndIf
EndIf
EndIf
FinX=0:FinY=0 ;ajout
EndIf
Code : Tout sélectionner
;{ infos
; PureBasic Visual Designer v3.95 build 1485 (PB4Code)
; et pureform aussi, hein
; blendman juin 2011
; animatoon version 0.1
; ce code est libre, vous pouvez l'utiliser, le changer, l'améliorer, etc..
; si vous le modifiez, dites-le moi histoire que j'ajoute ces choses dans animatoon ;)
; un très grand merci à Kernadec et kwandjeen, ainsi que le soldat inconnu, Djes, G-rom...
;}
;{ include
IncludeFile "Include.pb"
;}
Open_Window_0()
Repeat ; Start of the event loop
event_()
gadget_event()
Until Event = #PB_Event_CloseWindow Or quit = 1; End of the event loop
closeAppli()
End
Code : Tout sélectionner
; PureBasic Visual Designer v3.95 build 1485 (PB4Code)
;{ Window Constants
;
Enumeration
#Window_0
EndEnumeration
;- MenuBar Constants
;
Enumeration
#MenuBar_0
EndEnumeration
Enumeration
#menu1
#menu2
#menu3
#menu4
#menu5
#menu6
#menu7
#menu8
#menu9
#MENU_3
#MENU_4
#MENU_5
EndEnumeration
;- Gadget Constants
;
Enumeration
#container0
#cont_layer
#cont_swatch
#Panel_0
#Panel_r
#panel_r2
#panel_r3
#panel_r4
#Combo_0
#Combo_1
#canvas
#scroll
#imagegadget
#imagegadget2
#imagegadget3
#imagegadget4
#ScrollBar_0
#ScrollBar_1
#TrackBar_0
#TrackBar_1
#TrackBar_2
#TrackBar_3
#TrackBar_4
#TrackBar_5
#TrackBar_6
#TrackBar_7
#tb_layer_op
#Radio_0
#CheckBox_0
#CheckBox_1
#CheckBox_2
#CheckBox_3
#Cb_layer_op
#textgadget_0
#textgadget_1
#textgadget_2
#textgadget_3
#splitter_0
#splitter_1
#splitter_2
#splitter_3
EndEnumeration
;- StatusBar Constants
;
Enumeration
#StatusBar_0
EndEnumeration
;- Brush
Enumeration
#Image0
#Image1
#IMAGE_LoadSave
#brush
#pbrush
EndEnumeration
;}
;{ variables
Global quit.b, event, info$,WindowID,GadgetID,EventType,doc_w.w=2000,doc_h.w=2000
Global win_w, win_h
ExamineDesktops()
win_w = DesktopWidth(0)
win_h = DesktopHeight(0)
;}
;{ init
If UseJPEGImageDecoder() = 0 Or UsePNGImageDecoder() = 0 Or UseJPEGImageEncoder() = 0 Or UsePNGImageEncoder()=0 Or UseTGAImageDecoder()=0 Or UseTIFFImageDecoder() =0
MessageRequester("Erreur", "Erreur de chargement des decoder images")
End
EndIf
;}
;{ declare
Declare openAppli()
Declare CloseAppli()
;}
;{ variables
; general
Global lang$, version${5}, event.i, quit.b,clic_gauche.b, menu.a = 9,key.u, resize.b=1, tool.a
; brush, defaut
Global brush_w, brush_h, brush_nb.w,brush_dir$
; document
Global size_imgX.u=3000, Size_imgY.u=3000
; position souris, donc pinceau, etc..
Global x=-50, y=-50, DepartX=-50, DepartY=-50, rx, ry, finX, finY
; paramètres brush
Global brushId.u=1, transparence.a = 255, color.i, linesize.u=100, color_R.a, color_G.a, color_B.a, space.i = 10
; aléatoire du brush
Global random_size.b, random_rotation.b, random_scatter.b, radiusX.u=5,radiusY.u=5, size.u=100, scatter.u=20
openAppli()
CloseAppli()
; langage
;}
Procedure BalloonTip(WindowID, Gadget, Text$ , Title$, Icon)
ToolTip=CreateWindowEx_(0,"ToolTips_Class32","",#WS_POPUP | #TTS_NOPREFIX | #TTS_BALLOON,0,0,0,0,WindowID,0,GetModuleHandle_(0),0)
SendMessage_(ToolTip,#TTM_SETTIPTEXTCOLOR,GetSysColor_(#COLOR_INFOTEXT),0)
SendMessage_(ToolTip,#TTM_SETTIPBKCOLOR,GetSysColor_(#COLOR_INFOBK),0)
SendMessage_(ToolTip,#TTM_SETMAXTIPWIDTH,0,180)
Balloon.TOOLINFO\cbSize=SizeOf(TOOLINFO)
Balloon\uFlags=#TTF_IDISHWND | #TTF_SUBCLASS
Balloon\hWnd=GadgetID(Gadget)
Balloon\uId=GadgetID(Gadget)
Balloon\lpszText=@Text$
SendMessage_(ToolTip, #TTM_ADDTOOL, 0, Balloon)
If Title$ > ""
SendMessage_(ToolTip, #TTM_SETTITLE, Icon, @Title$)
EndIf
EndProcedure
Procedure Open_Window_0()
If OpenWindow(#Window_0, 0,0, 1024,768, "Animatoon", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered | #PB_Window_WindowCentered |#PB_Window_Maximize)
SmartWindowRefresh(#Window_0,1)
;SetWindowColor(#Window_0,#gray)
;{ images
; on load les images
LoadImage(0,"brush9.png")
ResizeImage(0,50,50)
LoadImage(2,"brush11.png")
ResizeImage(2,50,50)
; on crée le fond pour le preview du brush
CreateImage(1,50,50,32)
CreateImage(3,30,30) ; color fg
CreateImage(4,30,30); color bg
StartDrawing(ImageOutput(1))
DrawingMode(#PB_2DDrawing_AlphaChannel)
Box(0,0,50,50,RGBA(15,15,15,255))
DrawingMode(#PB_2DDrawing_Default)
Box(0,0,50,50,RGBA(125,125,125,0))
DrawingMode(#PB_2DDrawing_AlphaBlend)
DrawImage(ImageID(0),0,0)
DrawImage(ImageID(2),0,0)
StopDrawing()
StartDrawing(ImageOutput(3))
Box(0,0,30,30,RGB(198,157,125))
StopDrawing()
StartDrawing(ImageOutput(4))
Box(0,0,30,30,RGB(169,125,198))
StopDrawing()
;}
;{ menu
If CreateMenu(#MenuBar_0, WindowID(#Window_0))
MenuTitle("Fichier")
MenuItem(20,"Nouveau"+Chr(9)+"Ctrl+N")
MenuItem(21,"Ouvrir"+Chr(9)+"Ctrl+O")
MenuItem(24,"Importer une image sur le calque"+Chr(9)+"Ctrl+Shift+I")
MenuBar()
MenuItem(25,"Exporter L'image en jpg"+Chr(9)+"Ctrl+Shift+s")
MenuItem(26,"Exporter L'image en png"+Chr(9)+"Ctrl+Alt+S")
MenuItem(22,"Enregistrer"+Chr(9)+"Ctrl+S")
MenuBar()
MenuItem(23,"Quitter"+Chr(9)+"Esc")
; menu Edition
MenuTitle("Edition")
MenuItem(30,"Effacer"+Chr(9)+"Ctrl+X")
; menu image
MenuTitle("Images")
MenuItem(65,"Taille de l'image")
; Menu outils
MenuTitle("Outils")
MenuItem(#menu1, "Ligne")
MenuItem(#menu2, "Ligne Epaisse")
MenuBar()
MenuItem(#menu3, "Cercle")
MenuItem(#menu4, "Cercle vide")
MenuItem(#menu5, "Box")
MenuItem(10,"Box vide")
MenuItem(11,"Roundbox")
MenuBar()
MenuItem(12, "Brosse Ronde")
MenuItem(#menu9, "Pinceau")
MenuItem(13, "Pinceau lié")
MenuBar()
MenuItem(14, "SpeedLine (radial)")
; Menu paramètres
MenuTitle("Paramètres")
MenuItem(100,"Taille Aléatoire")
SetMenuItemState(0,100,random_size)
MenuItem(101,"Rotation Aléatoire")
SetMenuItemState(0,101,random_rotation)
MenuItem(102,"Diffusion Aléatoire")
SetMenuItemState(0,101,random_scatter)
MenuBar()
MenuItem(103,"Diffusion")
MenuItem(#menu6, "Transparence")
MenuItem(#menu7, "Couleur")
MenuItem(#menu8, "Taille")
MenuItem(104,"Brush Space")
; menu fenêtre
MenuTitle("Affichage")
MenuItem(50,"Calques")
; Menu Aides
MenuTitle("Aides")
MenuItem(40,"A propos")
MenuItem(41,"Aide")
; MenuTitle("Fichier")
; MenuItem(0, "Nouveau"+Chr(9)+"Ctr+N")
; MenuItem(1, "Ouvrir")
; MenuItem(2, "Enregistrer")
; MenuBar()
; MenuItem(10,"Quitter")
;
; MenuTitle("Edition")
; MenuItem(20, "Effacer ")
EndIf
;}
;{ status bar
If CreateStatusBar(#StatusBar_0, WindowID(#Window_0))
AddStatusBarField(300)
AddStatusBarField(#PB_Ignore )
StatusBarText(0, 0, "")
StatusBarText(0, 1, info$, #PB_StatusBar_Center)
EndIf
;}
;{ toolbar
If CreateToolBar(0, WindowID(0))
ToolBarStandardButton(0, #PB_ToolBarIcon_New)
ToolBarToolTip(0, 0, "Nouveau")
ToolBarStandardButton(1, #PB_ToolBarIcon_Open)
ToolBarToolTip(0, 1, "Ouvrir")
ToolBarStandardButton(2, #PB_ToolBarIcon_Save)
ToolBarToolTip(0, 2, "Enregistrer")
ToolBarSeparator()
ToolBarStandardButton(10, #PB_ToolBarIcon_Delete)
ToolBarSeparator()
ToolBarStandardButton(11, #PB_ToolBarIcon_Undo)
ToolBarStandardButton(12, #PB_ToolBarIcon_Redo)
ToolBarSeparator()
EndIf
;}
;{ Panel tool
ContainerGadget(#container0,0,30,130,WindowHeight(0)-72-60)
PanelGadget(#Panel_0, 0, 0, WindowWidth(0)-600, WindowHeight(0)-72-30-60)
SetGadgetColor(#panel_0,#PB_Gadget_BackColor,#Gray)
AddGadgetItem(#Panel_0, 0, "Gen")
ImageGadget(#imagegadget, 10, 10, 50, 50, ImageID(1),#PB_Image_Border|#PB_Image_Smooth)
TextGadget (#textgadget_0, 10, 88, 120, 20,"Taille", #PB_Text_Center)
TrackBarGadget(#TrackBar_0, 8, 108, 110, 20, 0, 500)
TextGadget (#textgadget_1, 10, 128, 120, 20,"Opacité", #PB_Text_Center)
TrackBarGadget(#TrackBar_1, 8, 148, 110, 20, 0, 255)
TextGadget (#textgadget_2, 10, 168, 120, 20,"Diffusion", #PB_Text_Center)
TrackBarGadget(#TrackBar_2, 8, 188, 110, 20, 0, 100)
;OptionGadget(#Radio_0, 8, 198, 20, 30, "")
CheckBoxGadget(#CheckBox_0, 8, 258, 200, 20, "Taille")
CheckBoxGadget(#CheckBox_1, 8, 278, 200, 20, "Rotation")
CheckBoxGadget(#CheckBox_2, 8, 298, 200, 20, "Diffusion")
CheckBoxGadget(#CheckBox_3, 8, 318, 200, 20, "Couleur")
AddGadgetItem(#Panel_0, 1, "Dyn")
ComboBoxGadget(#Combo_0, 10, 30, 90, 20)
For a = 1 To 5
AddGadgetItem(#Combo_0, -1,"Elément de liste déroulante " + Str(a))
Next
AddGadgetItem(#Panel_0, 2, "Coul")
TrackBarGadget(#TrackBar_5, 8, 68, 110, 20, 0, 10)
TrackBarGadget(#TrackBar_6, 8, 88, 110, 20, 0, 10)
TrackBarGadget(#TrackBar_7, 8, 108, 110, 20, 0, 10)
CloseGadgetList()
ImageGadget(#imagegadget2, 10, WindowHeight(0)-150, 50, 50, ImageID(1),#PB_Image_Border|#PB_Image_Smooth)
; couleurs
ImageGadget(#imagegadget3, 80, WindowHeight(0)-140, 30, 30, ImageID(3),#PB_Image_Border)
ImageGadget(#imagegadget4, 100, WindowHeight(0)-120, 30, 30, ImageID(4),#PB_Image_Border)
CloseGadgetList()
;}
;{ canvas
ScrollAreaGadget(#Scroll, 0,0,WindowWidth(0)-140-150 ,WindowHeight(0)-70, doc_w-150, doc_h, 30)
SetGadgetColor(#Scroll,#PB_Gadget_BackColor,#White)
CanvasGadget(#canvas,0,0,doc_w,doc_h,#PB_Canvas_ClipMouse)
CloseGadgetList()
SplitterGadget(#splitter_0,0,30,WindowWidth(0)-150,WindowHeight(0)-72,#container0,#scroll,#PB_Splitter_Vertical|#PB_Splitter_FirstFixed)
SetGadgetState(#Splitter_0, 150)
SetGadgetAttribute(#splitter_0,#PB_Splitter_FirstMinimumSize ,80)
SetGadgetAttribute(#splitter_0,#PB_Splitter_SecondMinimumSize ,300)
;}
;{ panel layer, etc.
; Nuanciers
ContainerGadget(#cont_layer, 0,0,0,0,#PB_Container_Single)
; nuanciers
PanelGadget(#Panel_r2, 0,30, WindowWidth(0)-156,120) ;
AddGadgetItem(#Panel_r2, 0, "Nuanciers")
AddGadgetItem(#Panel_r2, 1, "Options")
CloseGadgetList()
; brush
PanelGadget(#panel_r3, 0,150, WindowWidth(0)-156, 200)
AddGadgetItem(#Panel_r3, 0, "Brush")
AddGadgetItem(#Panel_r3, 1, "Presets")
CloseGadgetList()
; layers
PanelGadget(#Panel_r, 0,350, WindowWidth(0)-156, 600)
AddGadgetItem(#Panel_r, 0, "Layers")
; opacité calque (opacity layer)
TrackBarGadget(#tb_layer_op, 0, 10, 110, 20, 0, 100)
;calque mode de fusion (blendmode layers)
ComboBoxGadget(#Combo_1, 0, 30, 90, 20,#PB_ComboBox_UpperCase)
AddGadgetItem(#Combo_1, -1,"Normal")
AddGadgetItem(#Combo_1, 1,"Multiply")
AddGadgetItem(#Combo_1, 2,"Color Burn")
AddGadgetItem(#Combo_1, 3,"Color Add")
AddGadgetItem(#Panel_r, 1, "Channels")
CloseGadgetList()
CloseGadgetList()
SplitterGadget(#splitter_1,0,30,WindowWidth(0),WindowHeight(0)-72,#splitter_0,#cont_layer,#PB_Splitter_Vertical|#PB_Splitter_FirstFixed)
SetGadgetState(#Splitter_1, WindowWidth(0)-150)
SetGadgetAttribute(#splitter_1,#PB_Splitter_FirstMinimumSize ,600)
SetGadgetAttribute(#splitter_1,#PB_Splitter_SecondMinimumSize ,50)
;}
;{ les raccourcis claviers
AddKeyboardShortcut(0, #PB_Shortcut_X, 201) ; the previous brush
AddKeyboardShortcut(0, #PB_Shortcut_C, 202) ; the next brush
AddKeyboardShortcut(0, #PB_Shortcut_Escape, 23) ; escape - quit the programm
AddKeyboardShortcut(0, #PB_Shortcut_X|#PB_Shortcut_Control, 30) ; erase the surface
AddKeyboardShortcut(0, #PB_Shortcut_N|#PB_Shortcut_Control, 20) ; new
AddKeyboardShortcut(0, #PB_Shortcut_O|#PB_Shortcut_Control, 21) ; open
AddKeyboardShortcut(0, #PB_Shortcut_S|#PB_Shortcut_Control, 22) ; save
AddKeyboardShortcut(0, #PB_Shortcut_S|#PB_Shortcut_Control|#PB_Shortcut_Shift, 25) ; export jpg
AddKeyboardShortcut(0, #PB_Shortcut_S|#PB_Shortcut_Control|#PB_Shortcut_Alt, 26) ; export png
AddKeyboardShortcut(0, #PB_Shortcut_I|#PB_Shortcut_Control|#PB_Shortcut_Shift, 24) ; import
;}
EndIf
EndProcedure
Procedure event_()
Event = WaitWindowEvent() ; This line waits until an event is received from Windows
WindowID = EventWindow() ; The Window where the event is generated, can be used in the gadget procedures
GadgetID = EventGadget() ; Is it a gadget event?
EventType = EventType() ; The event type
Select event
Case #PB_Event_CloseWindow
quit=1
EndSelect
EndProcedure
Procedure gadget_event()
If Event = #PB_Event_Menu
MenuID = EventMenu()
Select MenuID
Case 0 ;
Case 1
Case 2
Case 20
Case 23 ; escape
quit = 1
Case 30
EndSelect
EndIf
If Event = #PB_Event_Gadget
If GadgetID = #Panel_0
ElseIf GadgetID = #ScrollBar_0
ElseIf GadgetID = #ScrollBar_1
ElseIf GadgetID = #TrackBar_0
ElseIf GadgetID = #TrackBar_1
ElseIf GadgetID = #Radio_0
ElseIf GadgetID = #CheckBox_0
ElseIf GadgetID = #CheckBox_1
ElseIf GadgetID = #CheckBox_2
EndIf
EndIf
EndProcedure
; save et load preferences
Procedure openAppli()
OpenPreferences("options.ini")
PreferenceGroup("general")
version$ = ReadPreferenceString("version","0.1")
Debug "Version : "+version$
lang$ = ReadPreferenceString("lang","fr")
PreferenceGroup("brush")
; read the preferences
brush_nb = ReadPreferenceInteger("brush_nb",59)
brush_dir$ = ReadPreferenceString("brush_directory","blendman")
brushId = ReadPreferenceInteger("brush",1)
space = ReadPreferenceInteger("space",1)
linesize = ReadPreferenceInteger("size",1)
tool = ReadPreferenceInteger("Tool",1)
Debug tool
ClosePreferences()
menu = tool
LoadImage(#brush,"data\"+brush_dir$+"\brush"+Str(brushId)+".png")
EndProcedure
Procedure closeAppli()
CreatePreferences("options.ini")
PreferenceGroup("general")
WritePreferenceString("lang",lang$)
WritePreferenceString("version",version$)
PreferenceGroup("brush")
WritePreferenceInteger("brush_nb",brush_nb)
WritePreferenceString("brush_directory",brush_dir$)
WritePreferenceInteger("brush",brushId)
WritePreferenceInteger("space",space)
WritePreferenceInteger("size",linesize)
WritePreferenceInteger("Tool",tool)
Debug tool
ClosePreferences()
EndProcedure