Alors je suis un pauvre avec un écran 4k ^^ j'ai eu l'écran au rabais, mais c'est une connerie , malgrès une rtx, peu de jeux tourne en 4k 60fps.Ah oui, mais c'est un logiciel free et open-source, donc , c'est pour les pauvres comme moi .
Et nous, les pâuvres, on n'a pas d'écran 4k, mais un petit PC portable 14pouces à moins de 300e, et là, c'est nickel en 1360*768
Sinon, tu devrais tester gimp ou open-office en 4K, tu vas bien t'amuser aussi ^^.
je connais gimp , mais j'utilise surtout pyxeledit ou asesprite pour mes besoins perso, j'adore le pixel art ^^
Ca me rapelle que je n'avait pas coché l'option de compilation adéquat , et là, ca marche...Windows 10 permet de changer le pourcentage d'agrandissement (en 1920*1080, je choisis 150% par exemple), et hop ça passe nickel du coup.
donc , fait comme ci je ne t'avais rien dit ^^ l'interface est nickel.
C'est sur, c'est quelque chose qu'il faut intégrer dès le départ. après si tu veut un coup de main à comprendre , n'hésite pas à me demander quoi que ce soit. il n'y a rien de vraiment compliqué.J'ai regardé ton exemple de undo/redo, le problème c'est que ce n'est pas du tout comme ça que j'ai codé mon logiciel, et je ne vois pas du tout comment l'intégrer ^^.
En plus, c'est quand même très compliqué pour moi.
Oui, je suis pas très balèze en code, oui. Mais je fais des choses pas trop pourries avec mes limites ^^.
Voici un exemple concret le plus simple possible avec du texte (pb mache beaucoup le travail) :
Code : Tout sélectionner
Prototype virtual_execute(*data)
Prototype virtual_undo(*data)
Prototype virtual_redo(*data)
Structure Command
execute.virtual_execute
undo.virtual_undo
redo.virtual_redo
EndStructure
Structure CommandManager
List *undo.Command()
List *redo.Command()
List *command_instance() ; servira à supprimer de la mémoire les commandes orpheline ( undo - undo - redo - next)
; à "next" une commande sera orpheline il faudra la supprimer de la mémoire
EndStructure
Procedure ExecuteCommand(*cm.CommandManager, *cmd.Command)
AddElement(*cm\command_instance())
*cm\command_instance() = *cmd
ClearList(*cm\redo())
*cmd\execute(*cmd) ; on execute la commande
AddElement(*cm\undo()) ; on l'ajoute a undo
*cm\undo() = *cmd
EndProcedure
Procedure Undo(*cm.CommandManager)
If ListSize(*cm\undo())
LastElement(*cm\undo()) ; on execute undo
*cm\undo()\undo(*cm\undo())
AddElement(*cm\redo()) ; on l'ajoute a redo
*cm\redo() = *cm\undo()
DeleteElement(*cm\undo()) ; on efface undo
EndIf
EndProcedure
Procedure Redo(*cm.CommandManager)
If ListSize(*cm\redo())
LastElement(*cm\redo()) ; on execute redo
*cm\redo()\redo(*cm\redo())
AddElement(*cm\undo()) ; on l'ajoute a undo
*cm\undo() = *cm\redo()
DeleteElement(*cm\redo()) ; on efface redo
EndIf
EndProcedure
Procedure check(*cm.CommandManager)
ForEach *cm\command_instance()
*A = *cm\command_instance()
delete_it = #True
ForEach *cm\undo()
*B = *cm\undo()
If *A = *B
delete_it = #False
EndIf
Next
ForEach *cm\redo()
*B = *cm\redo()
If *A = *B
delete_it = #False
EndIf
Next
If delete_it = #True
FreeStructure(*A)
DeleteElement(*cm\command_instance(),1)
EndIf
Next
EndProcedure
Structure TextCommand Extends Command
value.s
EndStructure
Procedure TextCommand_Execute(*cmd.TextCommand)
EndProcedure
Procedure TextCommand_Undo(*cmd.TextCommand)
SetGadgetText(0,*cmd\value)
EndProcedure
Procedure TextCommand_Redo(*cmd.TextCommand)
SetGadgetText(0,*cmd\value)
EndProcedure
OpenWindow(0,0,0,1024,768,"Undo/Redo Example")
EditorGadget(0,10,10,1004,748 - MenuHeight())
CreateMenu(0,WindowID(0))
MenuTitle("&Edition")
MenuItem(0, "&Undo" + Chr(9) + "Ctrl+Z")
MenuItem(1, "&Redo" + Chr(9) + "Ctrl+Y")
AddKeyboardShortcut(0,#PB_Shortcut_Control | #PB_Shortcut_Z, 0)
AddKeyboardShortcut(0,#PB_Shortcut_Control | #PB_Shortcut_Y, 1)
Manager.CommandManager : InitializeStructure(@Manager,CommandManager)
; commande vide , sinon on ne pourra pas annulé jusqu'au début ( texte vide )
; l'idéal serait d'intercepter le texte saisi dans execute() , de sauvegardé
; la position du caret , et d'injecter le texte dans le gadget. cela permettrais de connaitre
; le changement qu'il y a eu et d'évité d'inserer une commande vide au départ.
; surement jouable avec les apis, mais la flemme...
*cmd.TextCommand = AllocateStructure(TextCommand)
*cmd\execute = @TextCommand_Execute()
*cmd\undo = @TextCommand_Undo()
*cmd\redo = @TextCommand_Redo()
*cmd\value = ""
ExecuteCommand(@Manager,*cmd)
While #True
Repeat
event = WindowEvent()
If event = #PB_Event_CloseWindow
End
EndIf
If event = #PB_Event_Gadget
event_gadget = EventGadget()
If event_gadget = 0 ; editor
event_type = EventType()
If event_type = #PB_EventType_Change
*cmd.TextCommand = AllocateStructure(TextCommand)
*cmd\execute = @TextCommand_Execute()
*cmd\undo = @TextCommand_Undo()
*cmd\redo = @TextCommand_Redo()
*cmd\value = GetGadgetText(0)
ExecuteCommand(@Manager,*cmd)
EndIf
EndIf
EndIf
If event = #PB_Event_Menu
event_menu = EventMenu()
If event_menu = 0 ; undo
Undo(@Manager)
EndIf
If event_menu = 1 ; redo
Redo(@Manager)
EndIf
EndIf
check(@Manager)
Until event = #PB_Event_None
If ListSize(Manager\redo()) = 0
DisableMenuItem(0,1, #True)
Else
DisableMenuItem(0,1, #False)
EndIf
If ListSize(Manager\undo()) = 0
DisableMenuItem(0,0, #True)
Else
DisableMenuItem(0,0, #False)
EndIf
Wend