PureBasic

Forums PureBasic
Nous sommes le Ven 24/Mai/2013 0:32

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 5 messages ] 
Auteur Message
 Sujet du message: TEO (Tile Editor Organisation)
MessagePosté: Lun 04/Juin/2012 13:13 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 19/Fév/2011 12:46
Messages: 907
salut

J'ai commencé l'élaboration d'un petit tile/sprite editor car je n'ai pas trouvé l'outil que je cherchais.

Nom de code : TEO
pour Tile Editor Organisation ou Tile Editor Open(source)

FONCTIONS

Celui-ci devrait permettre notamment de concevoir :
1) des TileSet

2) des SpriteSheet ou des animations
- A partir d'une série d'image ou d'un sprite sheet existant.
- en créant les images nous-même ou en les important.

3) des images quelconques (painting)

- de créer des spritesheet : par exemple, la suite d'images d'animation de personnage
- de créer des tileset : depuis une image, on devrait pouvoir sortir un tileset et ajouter des tile dessus, mixer des tileset entre eux, etc..
- modifier le centre des images d'une animation (grâce au code de B.Vignoli (sprite offset) que je vais un peu modifié sans doute) et peut être pouvoir les retoucher
- accessoirement en bonus, on pourra retoucher et modifier un peu les images (dessin basique, gomme.. ), mais ce n'est pas tellement le but à la base.


Détails des fonctions

Fichier :
- ouverture, sauvegarde d'une image (calque, image complète, document complet avec tous les calques)
- import d'une image sur un document, sur un calque
- ctrl +V : coller une image depuis le presse-papier
- conversion d'une image en tileset, dont on définit la taille des "cases" (même non proportionnelles) et la largeur maximal (j'ajouterai peut être la hauteur). Merci à Case :D

Interface :
- zoom sur le canvas : ça bug pas mal, je dois revoir le système. Lorsque l'on dessine, pour le moment, il dessine sur l'image resizée et non sur l'originale. Donc si ensuite on zoome ou dé-zoome, ben, ça berdoule forcément.
- fichier de préférences : permet de sauvegarder quelques informations et les ouvrir lorsque l'on réouvre le soft.
- on peut bouger le canvas, comme avec photoshop (espace): par contre, ça flicke énormément ! quelqu'un pourrait me dire ce qu'il faut faire pour éviter ça ?

Edition d'image :
- redimensionner une image : ajout du choix du mode de redimensionnement (smooth ou hard)
- redimensionnement de la surface de travail (canvas)
- on peut changer le fond de l'image (ajouter un papier, par ex, ou un checker..)

Layer :
- ajout/suppression de calque
- modification de propriétés du calque : alpha, blendmode (très peu optimisé :(), visible ou non

Animation :
(non terminée)
- ajout de frame
- changement de la frame courrante

Painting & Brush :
- système de painting (ce n'est pas le but principal du programme) : on peut utiliser des brush personnalisés (voir le répertoire "brush\blendman). on peut changer de brush avec les touche X et C.
- on peut changer la couleur du brush, sa taille, sa transparence, ajouter une rotation aléatoire...
- plusieurs outils ou type d'outils sont disponibles (cercle, ligne, brush..)
- ajout d'un onglet "preset", qui permet de charger des preset de brush, depuis un dossier choisi.
- possibilité de sauvegarder un preset de brush


Screenshots
Version 0.2215 :
Image

Version 0.1670 :
Image

DOWNLOAD


Dernière version (0.2215) :
http://blendman.free.fr/dev/pb/teo/TEO.zip


Version 0.167 - 06/06/2012 :
http://www.host-a.net/u/blendman/TEO.zip


CODE

Le code de la version 0.11 (je le laisse au cas où).
Le code complet est contenu dans le Zip.

Code:
;{ infos
; basé sur un code de Fred/Fantaisie Software et de B.Vignoli
; Remerciements : Demivec
; icone by marco martin
; dev : blendman 04/06/2012/
; modif
; version pb : 4.61
;}

;{ enum

#statubar =0
#menu=1
#maximages=1000

Enumeration ; window
  #WinMain
  #WinPref
  #WinResize
  #winNewTileset
EndEnumeration

Enumeration; images
  #IMAGE_Content  ; stores the previous CanvasGadget content while the mouse is down
  #IMAGE_Color
  #IMAGE_LoadSave
  #IMAGE_Grid
  #IMAGE_LayerActif 
EndEnumeration

Enumeration ; gadgets
  ; window main
  #GADGET_ScrollCanvas
  #GADGET_Canvas
  #GADGET_Color
  #GADGET_Brush
  #GADGET_Line
  #GADGET_Box
  #GADGET_Circle
  #GADGET_Fill
  #GADGET_Clear
  #GADGET_BrushSize
  #GADGET_BrushType
  #GADGET_BrushTra
  #GADGET_BrushTool
  #GADGET_BrushKeepAlpha
  ; window preference
  #GADGET_PrefPanel
  #GADGET_GridW
  #GADGET_GridH
  #GADGET_GridColor
  ; window resize
  #GADGET_WResW
  #GADGET_WResH
  #GADGET_WResbtn
  #GADGET_WResbtn2
  #GADGET_WResSiz
  #GADGET_WResLink
  ; window newtileset
  #GADGET_WNewTile
  #GADGET_WNewBtnOk
  #GADGET_WNewW
  #GADGET_WNewH
EndEnumeration

;}

;{ declare
Declare updateScreen() : Declare DrawAction(x, y, EventType) : Declare CreateCheckker()
Declare AddCanvas() : Declare ClearCanvas()  : Declare ResizeCanvas(mode=0)
Declare AddImage() : Declare ClearLayer(img=#IMAGE_LayerActif)
Declare OpenImg() : Declare SaveImg() : Declare ConvertImg() : Declare NewTileSet() : Declare ImportImg()
Declare WindowPref() :
Declare SetBrush() :
Declare WindowDocResize() : Declare ResizeDoc()
;}

;{ structures
Structure option ; the option of the program, document..
  name$ : version$ : grid.a
  gridW.w : gridH.w : gridColor.l
EndStructure

Structure StDocument ; the document (size, depth..)
  w.w : h.w
  w_def.w : h_def.w
EndStructure

Structure StBrush ; for the brush tool (size, type, color..)
  size.w : type.a : alpha.a : tool.a
  keepAlpha.a
EndStructure
;}

;{ variables
Global Dim im(#maximages)
Global Dim imx(#maximages)
Global Dim imy(#maximages)
Dim img$(#maximages)

Global NbImgImport=0, sel=0
Global CurrentColor, CurrentMode, StartX, StartY
;}

;{ init
If UsePNGImageDecoder()=0 Or UsePNGImageEncoder()=0 Or UseJPEGImageDecoder()=0 Or UseTGAImageDecoder()=0 Or UseJPEGImageEncoder()=0
  MessageRequester("Erreur","Impossible d'initialiser un des formats image (jpg, png, tga)!")
  End 
EndIf

;{ initialisation
Global option.option
With option
  \name$ ="Tile Editor"
  \version$ ="0.11"
  \grid = 1
  \gridW = 32
  \gridH = 32
  \gridColor = 0
EndWith

Global Doc.StDocument
With doc
  \w = 800
  \h = 600
  \w_def = 800
  \h_def = 600
EndWith

Global brush.StBrush
With brush
  \size =5
  \alpha = 255
  \type =0
  \tool = 0
EndWith
;}

;}

;{ openwindow
flag = #PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_MaximizeGadget|#PB_Window_MinimizeGadget
If OpenWindow(#WinMain,0,0,1024,768,option\name$,flag)=0
  MessageRequester("Erreur","Impossible d'initialiser la fenêtre !")
  End
EndIf
;SmartWindowRefresh(#WinMain, #True)
;{ create menu
If CreateImageMenu(#menu,WindowID(#WinMain),#PB_Menu_ModernLook)
  MenuTitle("Fichier")
  MenuItem(9, "New Tileset") 
  MenuItem(0, "Open an Image (Tileset...)")
  MenuItem(8, "Ouvrir une image et la convertir en TileSet")
  MenuBar()
  MenuItem(10, "New Animation (sprite sheet)")
  MenuItem(1, "Importer des image(s) (animation)")
  MenuBar()
  ;MenuItem(11, "Open an image")
  MenuItem(6, "Importer une image sur le document")
  MenuBar()
  MenuItem(7, "Sauvegarder le document")
  MenuItem(5, "Exporter le tileSet")
  ;MenuItem(2, "Exporter sequence d'images")
  ;MenuItem(3, "Exporter animation en Animstrip")
 
  MenuBar()
  MenuItem(4, "Quitter")
 
  MenuTitle("Edition");21-40 
  MenuItem(32,"Redimensionner l'image")
  MenuBar()
  MenuItem(31, "Préférences")
 
  MenuTitle("View") ; 61 -90
  MenuItem(70, "Grille"+Chr(9)+"Ctrl+G")
  MenuBar()
  MenuItem(61, "Zoom +")
  MenuItem(62, "Zoom -")
  OpenSubMenu("Zoom") 
  MenuItem(63, "Zoom 500%")
  MenuItem(64, "Zoom 400%")
  MenuItem(65, "Zoom 300%")
  MenuItem(66, "Zoom 200%")
  MenuItem(67, "Zoom 100%")
  MenuItem(68, "Zoom 50%")
  MenuItem(69, "Zoom 25%")
  CloseSubMenu()
  MenuBar()
  ; MenuTitle("Tools");41-60
  ;   OpenSubMenu("Type d'outil")       
  ;   MenuItem(42, "Cercle")
  ;   MenuItem(43, "Carré")
  ;   MenuItem(44, "Custom")
  ;   CloseSubMenu()
  ;   MenuItem(41, "Taille Pinceau")
 
 
  MenuTitle("Aide");121-140
  MenuItem(121, "Infos")
  MenuItem(122, "A propos...")
EndIf
;}
;{ image
CurrentColor = RGBA(0, 0, 0, $FF) ;add alpha value
CurrentMode  = #GADGET_Brush
CreateImage(#IMAGE_Color, 25, 25, 24); pour la sélection de couleur
If  CreateImage(#IMAGE_Grid,doc\w,doc\h,32) ; le fond checker
  CreateCheckker()
EndIf
AddImage()
;}
;{ gadgets

;{ Tools bar top
ComboBoxGadget(#GADGET_BrushTool,5,5,40,20)
AddGadgetItem(#GADGET_BrushTool,0,"Brush")
AddGadgetItem(#GADGET_BrushTool,1,"Pencil")
AddGadgetItem(#GADGET_BrushTool,2,"Eraser")

ComboBoxGadget(#GADGET_BrushType,48,5,50,20)
AddGadgetItem(#GADGET_BrushType,0,"Circle")
AddGadgetItem(#GADGET_BrushType,1,"Box")
AddGadgetItem(#GADGET_BrushType,2,"Ellipse")
AddGadgetItem(#GADGET_BrushType,3,"Custom")
LoadFont(1,"Arial.ttf",7)
SetGadgetFont(#GADGET_BrushType,FontID(1))
SetGadgetFont(#GADGET_BrushTool,FontID(1))

SpinGadget(#GADGET_BrushSize,100 , 5, 50,20,1,100,#PB_Spin_Numeric)
GadgetToolTip(#GADGET_BrushSize,"Size of the brush")
TrackBarGadget(#GADGET_BrushTra,155 , 5, 100,20,0,255)
GadgetToolTip(#GADGET_BrushTra,"Transparence of the brush")
CheckBoxGadget(#GADGET_BrushKeepAlpha,260,5,75,20,"Keep Alpha")
;}
;{ canvas
AddCanvas()
;}
;{ tools (right)
ButtonGadget(#GADGET_Brush,  5, 110, 25, 25, "Brush",  #PB_Button_Toggle)
ButtonGadget(#GADGET_Line,   31, 110, 25, 25, "Line",   #PB_Button_Toggle)
ButtonGadget(#GADGET_Box,    5, 137, 25, 25, "Box",    #PB_Button_Toggle)
ButtonGadget(#GADGET_Circle, 31, 137, 25, 25, "Circle", #PB_Button_Toggle)
ButtonGadget(#GADGET_Fill,   5, 164, 25, 25, "Fill",   #PB_Button_Toggle)
ButtonGadget(#GADGET_Clear,  31, 164, 25, 25, "Clear")

ButtonImageGadget(#GADGET_Color, 5, 210, 30, 30, ImageID(#IMAGE_Color))
;}
;{ set gadget
SetGadgetState(#GADGET_Brush, 1)

SetGadgetState(#GADGET_BrushSize,brush\size)
SetGadgetState(#GADGET_BrushTra,brush\alpha)
SetGadgetState(#GADGET_BrushType,brush\type)
SetGadgetState(#GADGET_BrushTool,brush\tool)
SetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Cursor, #PB_Cursor_Cross)
;}
;}
;{ statusbar
If CreateStatusBar(#statubar,WindowID(#WinMain))
  AddStatusBarField(100)
  AddStatusBarField(200)
  AddStatusBarField(100)
EndIf
;}
;{ set gadget, menu..
SetMenuItemState(#menu,70,option\grid)
updateScreen()
SetActiveGadget(#GADGET_Canvas)
StatusBarText(#statubar,1,"Doc : "+Str(doc\w)+"/"+Str(doc\h))
;}
;}

;{ loop
Repeat 
  event=WaitWindowEvent(5)
  win = EventWindow()
 
  Select event
     
    Case #PB_Event_Menu
     
      Select EventMenu()
          ;{ files
          ;{ open an image/tileset/spritesheet
        Case 0
          OpenImg()
          ;}         
          ;{ importer une/des images
        Case 1
          If NbImgImport<#maximages           
            NomFichier$=OpenFileRequester("Importer image(s)","","",0,#PB_Requester_MultiSelection)
            If NomFichier$<>"" And (GetExtensionPart(NomFichier$)="png" Or GetExtensionPart(NomFichier$)="bmp" Or GetExtensionPart(NomFichier$)="jpg" Or GetExtensionPart(NomFichier$)="tga")
              NbImgImport+1
              While NomFichier$<>""
                im(NbImgImport)=LoadImage(#PB_Any,NomFichier$)
                imx(NbImgImport)=0
                imy(NbImgImport)=0
                img$(NbImgImport)=NomFichier$
                NomFichier$ = NextSelectedFileName()
                If NomFichier$<>""
                  NbImgImport+1
                EndIf
                If NbImgImport>#maximages
                  NbImgImport=#maximages
                  Break
                EndIf
              Wend
              sel=1
              UpdateScreen()
            Else             
              If NomFichier$<>""
                MessageRequester("Erreur","Seuls les fichiers 'png/jpg/bmp/tga' sont autorisés !")
              EndIf
            EndIf
          EndIf ;}
          ;{ exportation en série d'images
        Case 2         
          If NbImgImport>0
            p$=PathRequester("Choisissez le répertoire d'exportation des images","")
            If p$<>""
              xleft=imx(1)
              xright=imx(1)+ImageWidth(im(1))-1
              yup=imy(1)
              ydown=imy(1)+ImageHeight(im(1))-1
              If xleft<0
                xleft=0
              EndIf
              If yup<0
                yup=0
              EndIf
              If xright>1023
                xright=1023
              EndIf
              If ydown>767
                ydown=767
              EndIf
              For i=2 To NbImgImport
                If imx(i)<xleft
                  xleft=imx(i)
                EndIf
                If imx(i)+ImageWidth(im(i))-1>xright
                  xright=imx(i)+ImageWidth(im(i))-1
                EndIf
                If imy(i)<yup
                  yup=imy(i)
                EndIf
                If imy(i)+ImageHeight(im(i))-1>ydown
                  ydown=imy(i)+ImageHeight(im(i))-1
                EndIf
                If xleft<0
                  xleft=0
                EndIf
                If yup<0
                  yup=0
                EndIf
                If xright>1023
                  xright=1023
                EndIf
                If ydown>767
                  ydown=767
                EndIf
                tempimg=CreateImage(#PB_Any,1024,768,32 | #PB_Image_Transparent)
                StartDrawing(ImageOutput(tempimg))
                DrawingMode(#PB_2DDrawing_AllChannels)
                DrawAlphaImage(ImageID(im(i)),imx(i),imy(i))
                StopDrawing()
                StartDrawing(ImageOutput(tempimg))
                xl=xleft
                For y=0 To 767
                  For x=0 To xl
                    If Alpha(Point(x,y))>0
                      If x<xleft
                        xleft=x
                      EndIf
                    EndIf
                  Next
                Next
                xr=xright
                For y=0 To 767
                  For x=1023 To xr Step -1
                    If Alpha(Point(x,y))>0
                      If x>xright
                        xright=x
                      EndIf
                    EndIf
                  Next
                Next
                yu=yup
                For x=0 To 1023
                  For y=0 To yu
                    If Alpha(Point(x,y))>0
                      If y<yup
                        yup=y
                      EndIf
                    EndIf
                  Next
                Next
                yd=ydown
                For x=0 To 1023
                  For y=767 To yd Step -1
                    If Alpha(Point(x,y))>0
                      If y>ydown
                        ydown=y
                      EndIf
                    EndIf
                  Next
                Next
                StopDrawing()
              Next
              For i=1 To NbImgImport
                tempimg=CreateImage(#PB_Any,1024,768,32 | #PB_Image_Transparent)
                StartDrawing(ImageOutput(tempimg))
                DrawingMode(#PB_2DDrawing_AllChannels)
                DrawAlphaImage(ImageID(im(i)),imx(i),imy(i))
                StopDrawing()
                tempimg2=GrabImage(tempimg,#PB_Any,xleft,yup,xright-xleft+1,ydown-yup+1)
                SaveImage(tempimg2,p$+GetFilePart(img$(i)),#PB_ImagePlugin_PNG)
                FreeImage(tempimg2)
                FreeImage(tempimg)
              Next
            EndIf
          EndIf
          ;}
          ;{ exporter
        Case 3         
          If NbImgImport>1
            p$=SaveFileRequester("Choisissez le fichier animstrip à exporter","","",0)
            If GetExtensionPart(p$)=""
              p$=p$+".png"
            EndIf
            If p$<>"" And LCase(Right(p$,3))="png"
              xleft=imx(1)
              xright=imx(1)+ImageWidth(im(1))-1
              yup=imy(1)
              ydown=imy(1)+ImageHeight(im(1))-1
              If xleft<0
                xleft=0
              EndIf
              If yup<0
                yup=0
              EndIf
              If xright>1023
                xright=1023
              EndIf
              If ydown>767
                ydown=767
              EndIf
              For i=2 To NbImgImport
                If imx(i)<xleft
                  xleft=imx(i)
                EndIf
                If imx(i)+ImageWidth(im(i))-1>xright
                  xright=imx(i)+ImageWidth(im(i))-1
                EndIf
                If imy(i)<yup
                  yup=imy(i)
                EndIf
                If imy(i)+ImageHeight(im(i))-1>ydown
                  ydown=imy(i)+ImageHeight(im(i))-1
                EndIf
                If xleft<0
                  xleft=0
                EndIf
                If yup<0
                  yup=0
                EndIf
                If xright>1023
                  xright=1023
                EndIf
                If ydown>767
                  ydown=767
                EndIf
                tempimg=CreateImage(#PB_Any,1024,768,32 | #PB_Image_Transparent)
                StartDrawing(ImageOutput(tempimg))
                DrawingMode(#PB_2DDrawing_AllChannels)
                DrawAlphaImage(ImageID(im(i)),imx(i),imy(i))
                StopDrawing()
                StartDrawing(ImageOutput(tempimg))
                xl=xleft
                For y=0 To 767
                  For x=0 To xl
                    If Alpha(Point(x,y))>0
                      If x<xleft
                        xleft=x
                      EndIf
                    EndIf
                  Next
                Next
                xr=xright
                For y=0 To 767
                  For x=1023 To xr Step -1
                    If Alpha(Point(x,y))>0
                      If x>xright
                        xright=x
                      EndIf
                    EndIf
                  Next
                Next
                yu=yup
                For x=0 To 1023
                  For y=0 To yu
                    If Alpha(Point(x,y))>0
                      If y<yup
                        yup=y
                      EndIf
                    EndIf
                  Next
                Next
                yd=ydown
                For x=0 To 1023
                  For y=767 To yd Step -1
                    If Alpha(Point(x,y))>0
                      If y>ydown
                        ydown=y
                      EndIf
                    EndIf
                  Next
                Next
                StopDrawing()
              Next
              memi=1
              memj=NbImgImport
              iwidth=xright-xleft+1
              iheight=ydown-yup+1
              animstrip=CreateImage(#PB_Any,memi*iwidth,memj*iheight,32 | #PB_Image_Transparent)
              i=1
              For y=1 To memj
                For x=1 To memi
                  If i<=NbImgImport
                    tempimg=CreateImage(#PB_Any,1024,768,32 | #PB_Image_Transparent)
                    StartDrawing(ImageOutput(tempimg))
                    DrawingMode(#PB_2DDrawing_AllChannels)
                    DrawAlphaImage(ImageID(im(i)),imx(i),imy(i))
                    StopDrawing()
                    tempimg2=GrabImage(tempimg,#PB_Any,xleft,yup,iwidth,iheight)
                    StartDrawing(ImageOutput(animstrip))
                    DrawingMode(#PB_2DDrawing_AllChannels)
                    DrawAlphaImage(ImageID(tempimg2),(x-1)*iwidth,(y-1)*iheight)
                    StopDrawing()
                    FreeImage(tempimg2)
                    FreeImage(tempimg)
                  EndIf
                  i=i+1
                Next
              Next
              SaveImage(animstrip,p$,#PB_ImagePlugin_PNG)
              FreeImage(animstrip)
            Else
              If p$<>""
                MessageRequester("Erreur","Seuls les fichiers 'Png' sont autorisés !")
              EndIf
            EndIf
          EndIf;}
          ;{ import img on doc
        Case 6 ; open img
          ImportImg()
          ;}
          ;{ save the document as img (png, jpg..)
        Case 7 ; save img
          SaveImg()
          ;}
          ;{ convertion image tileset
        Case 8
          ConvertImg()
          ;}
          ;{ new tileset
        Case 9
          NewTileSet()
          ;}
          ;{ new AnimSprite
        Case 10
         
          ;}
          ;{ quitter
        Case 4
          Break
          ;}
          ;}
          ;{ Edition
        Case 32
          WindowDocResize()
         
        Case 31
          WindowPref()
          ;}         
          ;{ view
        Case 70
          option\grid = 1-option\grid
          SetMenuItemState(#menu,70,option\grid)
          UpdateScreen()
         
         
        Case 61 ; zoom +
         
        Case 62 ; zoom -
         
        Case 63 To 69
          MessageRequester("Info","Not Finished")
          ;}
          ;{ outils
        Case 41
          brush\Size=Val(InputRequester("Brush","Taille du Brush",Str(brush\Size)))
        Case 42
          brush\type =0
        Case 43
          brush\type =1
          ;}         
          ;{ menu Help
        Case 121
          txt$="Infos prochainement disponibles"
          MessageRequester("Infos",txt$)
        Case 122
          MessageRequester("A propos...","Tile Editor (version "+option\version$+")"+Chr(13)+"Développé par Blendman"+Chr(13)+Chr(13)+"Mai-2012"+Chr(13)+Chr(13)+"Merci à Fred & B.Vignoli pour la base"+Chr(13)+Chr(13)+"Icone by Marco Martin")
          ;}
      EndSelect
     
    Case #PB_Event_Gadget
     
      Select win
         
        Case #winNewTileset
         
          Select EventGadget()
             
            Case #GADGET_WNewW
              newW = Val(GetGadgetText(#GADGET_WNewW))
             
            Case #GADGET_WNewH             
              newH = Val(GetGadgetText(#GADGET_WNewH))
             
            Case #GADGET_WNewBtnOk
              newW = Val(GetGadgetText(#GADGET_WNewW))
              newH = Val(GetGadgetText(#GADGET_WNewH))
              If newW <>0 And newH <>0
                CloseWindow(#winNewTileset)
                SetActiveWindow(#WinMain)
                StatusBarText(#statubar,1,"Doc : "+Str(doc\w)+"/"+Str(doc\h))
                AddImage()
                ClearCanvas()
                doc\w = newW
                doc\h = newH
                ResizeDoc()
                ResizeCanvas(1)
                UpdateScreen()
              Else
                MessageRequester("Error", "The width and Height should be > 0")
              EndIf
             
          EndSelect
         
        Case #WinResize
         
          Select EventGadget()
             
            Case #GADGET_WResW
              temp_w = Val(GetGadgetText(#GADGET_WResW))
             
            Case #GADGET_WResH
              temp_h = Val(GetGadgetText(#GADGET_WResH))
             
            Case #GADGET_WResbtn ; ok
              CloseWindow(#WinResize)
              SetActiveGadget(#WinMain)
              If temp_h > 0
                doc\h = temp_h
              EndIf
              If temp_w > 0
                doc\w = temp_w 
              EndIf
              StatusBarText(#statubar,1,"Doc : "+Str(doc\w)+"/"+Str(doc\h))
              ResizeDoc()
              ResizeCanvas()
              UpdateScreen()
             
            Case #GADGET_WResbtn2 ; cancel
              CloseWindow(#WinResize)
             
          EndSelect
         
        Case #WinPref
         
          Select EventGadget()
             
            Case #GADGET_GridW             
              option\gridW = GetGadgetState(#GADGET_GridW)
              UpdateScreen()
             
            Case #GADGET_GridH
              option\gridH = GetGadgetState(#GADGET_GridH)
              UpdateScreen()
             
            Case #GADGET_GridColor
              option\gridColor = ColorRequester(option\gridColor)
              UpdateScreen()
             
          EndSelect         
         
        Case #WinMain
         
          Select EventGadget()
             
            Case #GADGET_BrushSize
              brush\Size = GetGadgetState(#GADGET_BrushSize)
             
            Case #GADGET_BrushType
              brush\type = GetGadgetState(#GADGET_BrushType)
             
            Case #GADGET_BrushTra
              brush\alpha = GetGadgetState(#GADGET_BrushTra)
              SetBrush()
             
            Case #GADGET_BrushTool
              brush\tool = GetGadgetState(#GADGET_BrushTool)
              SetBrush()
             
            Case #GADGET_BrushKeepAlpha
              brush\keepAlpha = GetGadgetState(#GADGET_BrushKeepAlpha)
             
            Case #GADGET_Canvas
              X = GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_MouseX)
              Y = GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_MouseY)
              Type = EventType()
             
              Select EventType()
                 
                Case #PB_EventType_LeftButtonDown              ;
                  ; This stores the current content of the CanvasGadget in #IMAGE_Content,
                  ; so it can be re-drawn while the mouse moves
                 
                  If StartDrawing(ImageOutput(#IMAGE_Content))               
                    ;DrawingMode(#PB_2DDrawing_AlphaBlend) ;canvas gadget doesn't have alpha               
                    ;DrawImage(GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Image), 0, 0)
                    DrawingMode(#PB_2DDrawing_AlphaBlend)
                    If sel>0
                      DrawAlphaImage(ImageID(im(sel)),imx(sel),imy(sel))
                    EndIf
                    DrawAlphaImage(ImageID(#IMAGE_LayerActif),0,0)
                    StopDrawing()               
                  EndIf
                 
                  StartX = X
                  StartY = Y
                  DrawAction(X, Y, EventType())             
                  mouseDown = #True  ;handles problems of mouse being used in OpenFileRequester
                 
                Case #PB_EventType_LeftButtonUp
                  If mouseDown
                    DrawAction(x, y, EventType())                       
                    mouseDown = #False
                  EndIf
                 
                 
                Case #PB_EventType_MouseMove
                  If GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton
                    DrawAction(X, Y, EventType())           
                  EndIf
                 
              EndSelect
             
            Case #GADGET_Color
              CurrentColor = ColorRequester(CurrentColor)
              SetBrush()
              If StartDrawing(ImageOutput(#IMAGE_Color))
                Box(0, 0, 30,30, CurrentColor)
                StopDrawing()
                SetGadgetAttribute(#GADGET_Color, #PB_Button_Image, ImageID(#IMAGE_Color))
              EndIf
             
             
            Case #GADGET_Brush, #GADGET_Line, #GADGET_Box, #GADGET_Circle, #GADGET_Fill
              EventGadget = EventGadget()
              For Gadget = #GADGET_Brush To #GADGET_Fill
                If Gadget = EventGadget
                  SetGadgetState(Gadget, 1)
                Else
                  SetGadgetState(Gadget, 0) ; unset the state of all other gadgets
                EndIf
              Next Gadget         
              CurrentMode = EventGadget             
             
            Case #GADGET_Clear
              AddImage()
              ClearCanvas()
              UpdateScreen()
             
          EndSelect
         
      EndSelect
     
    Case #PB_Event_SizeWindow,#PB_Event_MaximizeWindow
      ResizeCanvas()
    Case   #PB_Event_CloseWindow
      If GetActiveWindow() = #WinMain
        quit = 1
      Else
        CloseWindow(GetActiveWindow())
        SetActiveWindow(#WinMain)
        UpdateScreen()
      EndIf     
     
  EndSelect 
 
Until quit = 1
;}

;{ procedures

; canvas
Procedure AddCanvas()
  If EventWindow() = #WinMain
    If WindowWidth(#WinMain)/2-doc\w/2 > 60
      ww = WindowWidth(#WinMain)/2-doc\w/2
    Else
      ww = 60
    EndIf 
    If WindowHeight(#WinMain)/2-doc\h/2 > 50
      hh = WindowHeight(#WinMain)/2-doc\h/2
    Else
      hh = 50
    EndIf
    If ScrollAreaGadget(#GADGET_ScrollCanvas,60,50,WindowWidth(#WinMain)-120,WindowHeight(#WinMain)-100, doc\w*4,doc\h*4,#PB_ScrollArea_Center)
      areaw = GetGadgetAttribute(#GADGET_ScrollCanvas,#PB_ScrollArea_InnerWidth)
      areah = GetGadgetAttribute(#GADGET_ScrollCanvas,#PB_ScrollArea_InnerHeight)     
      CanvasGadget(#GADGET_Canvas,areaw/2-doc\w/2,areah/2-doc\h/2,doc\w,doc\h,#PB_Canvas_ClipMouse | #PB_Canvas_Keyboard)
      SetGadgetAttribute(#GADGET_ScrollCanvas,#PB_ScrollArea_X,areaw/2-doc\w/2-30)
      SetGadgetAttribute(#GADGET_ScrollCanvas,#PB_ScrollArea_Y,areah/2-doc\h/2-25)
      CloseGadgetList()
    EndIf
    UpdateScreen()
  EndIf
EndProcedure
Procedure ResizeCanvas(mode=0)
  If GetActiveGadget() = #WinMain Or mode= 1
    If WindowWidth(#WinMain)/2-doc\w/2 > 60
      ww = WindowWidth(#WinMain)/2-doc\w/2
    Else
      ww = 60
    EndIf 
    If WindowHeight(#WinMain)/2-doc\h/2 > 50
      hh = WindowHeight(#WinMain)/2-doc\h/2
    Else
      hh = 50
    EndIf
    ResizeGadget(#GADGET_ScrollCanvas,60,50,WindowWidth(#WinMain)-120,WindowHeight(#WinMain)-100)
    SetGadgetAttribute(#GADGET_ScrollCanvas,#PB_ScrollArea_InnerWidth,doc\w*4)
    SetGadgetAttribute(#GADGET_ScrollCanvas,#PB_ScrollArea_InnerHeight,doc\h*4)
    areaw = GetGadgetAttribute(#GADGET_ScrollCanvas,#PB_ScrollArea_InnerWidth)
    areah = GetGadgetAttribute(#GADGET_ScrollCanvas,#PB_ScrollArea_InnerHeight)   
   
    ResizeGadget(#GADGET_Canvas,areaw/2-doc\w/2,areah/2-doc\h/2,doc\w,doc\h)
    SetGadgetAttribute(#GADGET_ScrollCanvas,#PB_ScrollArea_X,areaw/2-doc\w/2-30)
    SetGadgetAttribute(#GADGET_ScrollCanvas,#PB_ScrollArea_Y,areah/2-doc\h/2-25)
  EndIf 
EndProcedure
Procedure UpdateScreen()
  ;   If NbImgImport>0 And sel>0
  ;     SetWindowTitle(#WinMain,option\name$+"   ... "+Str(sel))
  ;   Else
  ;     SetWindowTitle(#WinMain,option\name$)
  ;   EndIf
 
  tempimg=CreateImage(#PB_Any,doc\w,doc\h)
  StartDrawing(ImageOutput(tempimg))
  DrawingMode(#PB_2DDrawing_Default)
  DrawImage(ImageID(#IMAGE_Grid),0,0)
  DrawingMode(#PB_2DDrawing_AlphaBlend)
  If sel>0
    DrawAlphaImage(ImageID(im(sel)),imx(sel),imy(sel))
  EndIf
  DrawAlphaImage(ImageID(#IMAGE_LayerActif),0,0)
  StopDrawing()
 
  StartDrawing(CanvasOutput(#GADGET_Canvas))
  DrawingMode(#PB_2DDrawing_Default)
  DrawImage(ImageID(tempimg),0,0)
  ; grid
  DrawingMode(#PB_2DDrawing_AllChannels)
 
  If option\grid
    For i = 0 To Round(doc\w/option\gridW,1)+1
      For j = 0 To Round(doc\h/option\gridH,1)+1
        Line(i * option\gridW ,0,1,doc\h,option\gridColor)
        Line(0 ,j * option\gridH,doc\w,1,option\gridColor)
      Next j
    Next i 
  EndIf
 
  StopDrawing()
  FreeImage(tempimg) 
EndProcedure
Procedure ClearLayer(img=#IMAGE_LayerActif)
  If StartDrawing(ImageOutput(img))
    ;DrawingMode(#PB_2DDrawing_AlphaChannel)
    Box(0,0,doc\w,doc\h,RGBA(0,0,0,0))
    StopDrawing()
  EndIf
EndProcedure
Procedure ClearCanvas()
  If StartDrawing(CanvasOutput(#GADGET_Canvas))
    DrawingMode(#PB_2DDrawing_Default)
    DrawImage(ImageID(#IMAGE_Grid),0,0)
    StopDrawing()
  EndIf
EndProcedure

Procedure UpdateCanvas()
  If StartDrawing(CanvasOutput(#GADGET_Canvas))
    ;DrawingMode(#PB_2DDrawing_AlphaChannel)
    ;Box(0,0,doc\w,doc\h,RGBA(0,0,0,0))
    ;DrawingMode(#PB_2DDrawing_AlphaBlend)
    DrawAlphaImage(ImageID(#IMAGE_LayerActif),0,0)
    StopDrawing()
  EndIf
EndProcedure

; utils
Procedure CreateCheckker()
  If StartDrawing(ImageOutput(#IMAGE_Grid))   
    c=255
    For y=0 To 767 Step 16
      For x=0 To 1023 Step 16
        Box(x,y,16,16,RGBA(c,c,c,255))
        If c=255
          c=192
        Else
          c=255
        EndIf
      Next
      If c=255
        c=192
      Else
        c=255
      EndIf
    Next
    StopDrawing()
  EndIf
EndProcedure

; brush
Procedure SetBrush()
  Select brush\tool
    Case 0, 1
      ;CurrentColor = RGBA(Red(CurrentColor), Blue(CurrentColor),Green(CurrentColor), brush\alpha)               
      CurrentColor = RGBA(Red(CurrentColor), Green(CurrentColor),Blue(CurrentColor), brush\alpha)               
    Case 2
      ;CurrentColor = RGB(Red(CurrentColor), Blue(CurrentColor),Green(CurrentColor))
      CurrentColor = RGB(Red(CurrentColor), Green(CurrentColor),Blue(CurrentColor))
  EndSelect
EndProcedure

; image
Procedure ResizeDoc()
  ResizeImage(#IMAGE_Content,doc\w,doc\h,#PB_Image_Smooth)
  ResizeImage(#IMAGE_LayerActif,doc\w,doc\h,#PB_Image_Smooth)
EndProcedure
Procedure AddImage()
  If IsImage(#IMAGE_Content)
    FreeImage(#IMAGE_Content)
  EndIf
  If IsImage(#IMAGE_LayerActif)
    FreeImage(#IMAGE_LayerActif)
  EndIf 
  If CreateImage(#IMAGE_Content, doc\w,doc\h, 32|#PB_Image_Transparent)
  EndIf 
  If CreateImage(#IMAGE_LayerActif,doc\w,doc\h,32|#PB_Image_Transparent)
  EndIf
EndProcedure

; drawing & editing
Procedure DrawAction(x, y, EventType)
  If StartDrawing(ImageOutput(#IMAGE_LayerActif))
    If brush\tool = 2 ; eraser
      DrawingMode(#PB_2DDrawing_AllChannels)
    Else
      If brush\keepAlpha = 0
        DrawingMode(#PB_2DDrawing_AlphaBlend)
      EndIf     
    EndIf
   
    Select CurrentMode
       
      Case #GADGET_Brush       
        If EventType = #PB_EventType_LeftButtonDown Or EventType = #PB_EventType_MouseMove
          Select brush\type
             
            Case 0 ; cercle
              Circle(x, y, brush\Size, CurrentColor)
             
            Case 1 ; carré
              Box(x-brush\Size/2,y-brush\Size/2,brush\Size,brush\Size,CurrentColor)
             
            Case 2 ; ellipse
              Ellipse(X, Y, brush\Size, brush\Size/2, CurrentColor)
             
            Case 3 ; custom
             
          EndSelect           
        EndIf
       
      Case #GADGET_Line
        DrawImage(ImageID(#IMAGE_Content), 0, 0)
        LineXY(StartX, StartY, x, y, CurrentColor)
       
      Case #GADGET_Box
        DrawImage(ImageID(#IMAGE_Content), 0, 0)
        Box(StartX, StartY, x-StartX, y-StartY, CurrentColor)
       
      Case #GADGET_Circle
        DrawImage(ImageID(#IMAGE_Content), 0, 0)       
        If x > StartX
          rx = x - StartX
        Else
          rx = StartX - x
        EndIf
       
        If y > StartY
          ry = y - StartY
        Else
          ry = StartY - y
        EndIf
       
        If GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Modifiers) & #PB_Canvas_Control
          ry = rx
        EndIf
       
        Ellipse(StartX, StartY, rx, ry, CurrentColor)
       
      Case #GADGET_Fill
        If EventType = #PB_EventType_LeftButtonDown
          FillArea(x, y, -1, CurrentColor)
        EndIf
       
    EndSelect
    StopDrawing()
  EndIf
  UpdateScreen()
EndProcedure

; window
Procedure WindowPref()
  If OpenWindow(#WinPref,0,0,400,300,"Preferences",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
    If PanelGadget(#GADGET_PrefPanel,5,5,390,290)
      ;OpenGadgetList(#GADGET_PrefPanel)
      AddGadgetItem(#GADGET_PrefPanel,0,"General")
      AddGadgetItem(#GADGET_PrefPanel,1,"Grille")
      SpinGadget(#GADGET_GridW,5,10,50,20,1,500,#PB_Spin_Numeric)
      SpinGadget(#GADGET_GridH,60,10,50,20,1,500,#PB_Spin_Numeric)
      ButtonGadget(#GADGET_GridColor,120,10,60,20,"Grid Color")
      SetGadgetState(#GADGET_GridW,option\gridW)
      SetGadgetState(#GADGET_GridH,option\gridH)     
      ;CloseGadgetList()
      CloseGadgetList()     
    EndIf
  EndIf 
EndProcedure
Procedure WindowDocResize()
  If OpenWindow(#WinResize,0,0,400,300,"",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
    Frame3DGadget(#GADGET_WResSiz,10,10,250,150,"Pixel Dimension")
    StringGadget(#GADGET_WResW,80,50,50,20,"",#PB_String_Numeric)
    StringGadget(#GADGET_WResH,80,80,50,20,"",#PB_String_Numeric)
    SetGadgetText(#GADGET_WResW,Str(doc\w))
    SetGadgetText(#GADGET_WResH,Str(doc\h))
    CheckBoxGadget(#GADGET_WResLink,40,120,120,20,"Constraint proportion")
    ButtonGadget(#GADGET_WResbtn,330,20,60,20,"Ok")
    ButtonGadget(#GADGET_WResbtn2,330,45,60,20,"Cancel")
  EndIf 
EndProcedure
Procedure NewTileSet()
  If OpenWindow(#winNewTileset,0,0,400,300,"New Image",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
    Frame3DGadget(#GADGET_WNewTile,10,10,250,150,"Image Dimension")
    StringGadget(#GADGET_WNewW,80,50,50,20,"",#PB_String_Numeric)
    StringGadget(#GADGET_WNewH,80,80,50,20,"",#PB_String_Numeric)
    SetGadgetText(#GADGET_WNewW,Str(doc\w_def))
    SetGadgetText(#GADGET_WNewH,Str(doc\h_def))   
    ButtonGadget(#GADGET_WNewBtnOk,330,20,60,20,"Ok")
    ;ButtonGadget(#GADGET_WResbtn2,330,45,60,20,"Cancel")
  EndIf 
EndProcedure
; save, load
Procedure ConvertImg()
 
EndProcedure
Procedure OpenImg()
  File$ = OpenFileRequester("Load Image...", "", "PNG Images|*.png|JPEG Images|*.jpeg|All Files|*.*", 0)
  If File$
    If LoadImage(#IMAGE_LoadSave, File$)
      doc\w = ImageWidth(#IMAGE_LoadSave)
      doc\h = ImageHeight(#IMAGE_LoadSave)
      StatusBarText(#statubar,1,"Doc : "+Str(doc\w)+"/"+Str(doc\h))
      ClearLayer()
      AddImage()     
      ResizeCanvas(1)     
      If StartDrawing(ImageOutput(#IMAGE_LayerActif))
        DrawingMode(#PB_2DDrawing_AllChannels)
        DrawAlphaImage(ImageID(#IMAGE_LoadSave), 0, 0)
        StopDrawing()
      EndIf     
     
      UpdateScreen()
      FreeImage(#IMAGE_LoadSave)     
    Else
      MessageRequester("CanvasGadget", "Cannot load image: " + File$)
    EndIf
  EndIf
EndProcedure
Procedure ImportImg()
  File$ = OpenFileRequester("Import Image...", "", "PNG Images|*.png|JPEG Images|*.jpeg|All Files|*.*", 0)
  If File$
    If LoadImage(#IMAGE_LoadSave, File$)
      If StartDrawing(ImageOutput(#IMAGE_LayerActif))
        DrawingMode(#PB_2DDrawing_AllChannels)
        DrawAlphaImage(ImageID(#IMAGE_LoadSave), 0, 0)
        StopDrawing()
      EndIf
      doc\w = ImageWidth(#IMAGE_LoadSave)
      doc\h = ImageHeight(#IMAGE_LoadSave)
      ResizeCanvas()
      FreeImage(#IMAGE_LoadSave)     
    Else
      MessageRequester("CanvasGadget", "Cannot load image: " + File$)
    EndIf
  EndIf
EndProcedure
Procedure SaveImg()
  File$ = SaveFileRequester("Save Image...", File$, "PNG Images|*.png|JPEG Images|*.jpeg", 0)
  If File$ And (FileSize(File$) = -1 Or MessageRequester("CanvasGadget", "Overwrite this file? " + File$, #PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes)
    If CreateImage(#IMAGE_LoadSave,  doc\w, doc\h, 32|#PB_Image_Transparent) And StartDrawing(ImageOutput(#IMAGE_LoadSave))
      ;DrawImage(GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Image), 0, 0)
      DrawAlphaImage(ImageID(#IMAGE_LayerActif), 0, 0)
      StopDrawing()     
      If SelectedFilePattern() = 0 ; png
        If SaveImage(#IMAGE_LoadSave, RemoveString(File$,".png")+".png", #PB_ImagePlugin_PNG) = 0
          MessageRequester("CanvasGadget", "Cannot save image: " + File$)
        EndIf
      ElseIf SelectedFilePattern() = 1 ; jpg
        If SaveImage(#IMAGE_LoadSave, RemoveString(File$,".jpg")+".jpg", #PB_ImagePlugin_JPEG) = 0
          MessageRequester("CanvasGadget", "Cannot save image: " + File$)
        EndIf
      ElseIf SelectedFilePattern() = 2 ; bmp
        If SaveImage(#IMAGE_LoadSave, RemoveString(File$,".bmp")+".bmp", #PB_ImagePlugin_BMP) = 0
          MessageRequester("CanvasGadget", "Cannot save image: " + File$)
        EndIf
      EndIf
    EndIf   
    FreeImage(#IMAGE_LoadSave)
  EndIf       
EndProcedure
;}




REMERCIEMENT

- Demivec
- Marco MArtin pour l'icone : http://www.iconfinder.com/icondetails/7 ... write_icon

Ce code est fourni en GPL. Vous pouvez le modifier, le changer, l'utiliser, etc.. (en indiquant le nom des auteurs, etc ;)).

N'hésitez pas à l'améliorer si vous le souhaitez ;).

_________________
http://blendman.blogspot.com/


Dernière édition par blendman le Jeu 28/Juin/2012 7:14, édité 6 fois.

Haut
 Profil  
 
 Sujet du message: Re: TEO (Tile Editor Organisation)
MessagePosté: Lun 04/Juin/2012 17:00 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 22/Aoû/2010 15:24
Messages: 1493
Localisation: IDF (Yvelines)
J'ai toujours autant de plaisir à tester tes codes. Bravo pour celui-çi.

:arrow: Quand on sauvegarde une image au format PNG, on obtient aussi le JPG.

:arrow: Quand on clique sur le bouton Clear on a bien un reset de l'image mais ...... quand on dessine à nouveau, on récupérer le contenu de l'image précédente.

_________________
Noob Inside ■ (Windows 7 & 8 - PB 4.51 & 5.10 Full version) ■ Mode politiquement Correct
SQLite Vision : Éditeur de fichiers SQLite


Haut
 Profil  
 
 Sujet du message: Re: TEO (Tile Editor Organisation)
MessagePosté: Lun 04/Juin/2012 17:30 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 19/Fév/2011 12:46
Messages: 907
falsam a écrit:
J'ai toujours autant de plaisir à tester tes codes. Bravo pour celui-çi.
c'est gentil, mais je me suis basé sur le code de Fred (canvas gadget) et un peu de B Vignoli. Après, bien sûr, j'ai pas mal ajouté de chose.

Je me demande toujours si mes codes sont bien ou pas terribles.
J'essaie de faire des codes le plus simple possible, et surtout pour des applications avoir des interfaces intuitives et agréables :)
Bon, là, c'est loin d'être terminé, mais c'est déjà utilisable.

Citation:
:arrow: Quand on sauvegarde une image au format PNG, on obtient aussi le JPG.

:arrow: Quand on clique sur le bouton Clear on a bien un reset de l'image mais ...... quand on dessine à nouveau, on récupérer le contenu de l'image précédente.
Merci, c'est corrigé !

J'ai ajouté d'autres petites choses :
- ouverture d'image
- redimensionnement de l'image complète

Il reste encore un bug lorsqu'on ouvre une image et qu'on utilise certains outils (box, cercle..). Mais là, j'essaie d'ajouter le zoom (je pense utiliser l'exemple que j'avais trouvé sur le forum ^^)

_________________
http://blendman.blogspot.com/


Haut
 Profil  
 
 Sujet du message: Re: TEO (Tile Editor Organisation)
MessagePosté: Mer 06/Juin/2012 10:58 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 19/Fév/2011 12:46
Messages: 907
salut

Voici les quelques ajouts du TEO (Tile Editor Organisation (Opensource)) :

- conversion d'une image en tileset, dont on définit la taille des "cases" (même non proportionnelles) et la largeur maximal (j'ajouterai peut être la hauteur). Merci à Case :D
- ajout du zoom (zoom sur le canvas) : ça bug pas mal, je dois revoir le système. Lorsque l'on dessine, pour le moment, il dessine sur l'image resizée et non sur l'originale. Donc si ensuite on zoome ou dé-zoome, ben, ça berdoule forcément.
- redimensionner une image : ajout du choix du mode de redimensionnement (smooth ou hard)
- j'ai commencé à revoir le système de painting (bon, c'était pas trop le but principal du programme, mais j'en profite pour l'améliorer un peu) : on peut utiliser des brush personnalisés (voir le répertoire "brush\blendman). on peut changer de brush avec les touche X et C. pour le moment, je n'ai pas terminé le système pour que le brush prenne la couleur choisie.
- ajout d'un fichier de préférences : permet de sauvegarder quelques informations et les ouvrir lorsque l'on réouvre le soft.
- on peut bouger le canvas, comme avec photoshop (espace): par contre, ça flicke énormément ! quelqu'un pourrait me dire ce qu'il faut faire pour éviter ça ?

Pour le téléchargement, c'est toujours le même lien du 1er message.

je ne fais qu'updater le zip ;).

_________________
http://blendman.blogspot.com/


Haut
 Profil  
 
 Sujet du message: Re: TEO (Tile Editor Organisation)
MessagePosté: Ven 06/Juil/2012 13:44 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 08/Juil/2007 18:32
Messages: 1306
Localisation: Toulouse
Pas encore testé, mais je te félicite pour le partage et l'élaboration de cet outils, on voit qu'il est bien pensé. :)


Haut
 Profil  
 
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 5 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye