Implement new project creation

This commit is contained in:
mrkubax10 2024-03-03 20:17:42 +01:00
parent 2b9505b7b3
commit 7b07074989
3 changed files with 60 additions and 5 deletions

View File

@ -54,10 +54,11 @@ class EditorCanvas(tkinter.Canvas):
def handle_draw(self,event):
self.current_char_modified=True
pixel_pos=self.cursor_pos_to_pixel((event.x,event.y))
if not pixel_pos:
return
self.current_char_modified=True
self.project.modified=True
self.current_char_pixels[pixel_pos[0]*self.project.char_res[1]+pixel_pos[1]]=1
self.draw()

61
main.py
View File

@ -19,6 +19,49 @@ pixel_color = (255,) * 3
project=Project()
def button_create_project_click(subwindow,w,h):
try:
width=int(w)
except ValueError as e:
tkinter.messagebox.showerror("Creating new project", f"Invalid value {w}: {e}")
return
try:
height=int(h)
except ValueError as e:
tkinter.messagebox.showerror("Creating new project", f"Invalid value {h}: {e}")
return
project.chars={}
project.char_res=(width,height)
project.loaded=True
canvas_editor.after_project_load()
canvas_editor.draw()
update_glyph_preview()
subwindow.destroy()
def menu_file_new_project_click():
global window
if project.modified and not tkinter.messagebox.askyesno("Creating new project","You have unsaved changes, are you sure?"):
return
subwindow=tkinter.Toplevel(window)
subwindow.title("New project")
label_width=tkinter.Label(subwindow,text="Character width")
label_width.pack(side="top")
entry_width=tkinter.Entry(subwindow,validate="all",validatecommand=((subwindow.register(number_only_validate)),"%P"))
entry_width.pack(side="top",fill="x",padx=5)
label_height=tkinter.Label(subwindow,text="Character height")
label_height.pack(side="top")
entry_height=tkinter.Entry(subwindow,validate="all",validatecommand=((subwindow.register(number_only_validate)),"%P"))
entry_height.pack(side="top",fill="x",padx=5)
button_create=tkinter.Button(subwindow,text="Create",command=lambda: button_create_project_click(subwindow,entry_width.get(),entry_height.get()))
button_create.pack(side="bottom",fill="x",padx=5)
def menu_file_open_project_click():
global project
global canvas_editor
@ -47,21 +90,26 @@ def menu_file_open_project_click():
def menu_file_save_project_click():
global canvas_editor
global project
if not project.loaded:
return
path=None
if project.loaded:
if project.path:
path=project.path
else:
# show file save dialog
path=filedialog.asksaveasfilename(
path=tkinter.filedialog.asksaveasfilename(
title="Save font project",
filetypes=[("Font project (json)", "*.fontproj")],
defaultextension=".fontproj"
)
if path=="" or file_path==():
if path=="" or path==():
return
canvas_editor.save_char()
try:
project.save(path)
except IOError as e:
@ -107,6 +155,10 @@ def button_glyph_search_click():
def number_only_validate(val):
return val.isdigit()
def hex_only_validate(val):
for x in val:
if not x.isdigit() and (ord(x)<ord("a") or ord(x)>ord("f")) and (ord(x)<ord("A") or ord(x)>ord("F")):
return False
@ -129,6 +181,7 @@ window.geometry(f"{WINDOW_SIZE[0]}x{WINDOW_SIZE[1]}")
menubar=tkinter.Menu(window)
menu_file=tkinter.Menu(menubar,tearoff=False)
menu_file.add_command(label="New project",command=menu_file_new_project_click)
menu_file.add_command(label="Open project",command=menu_file_open_project_click)
menu_file.add_command(label="Save project",command=menu_file_save_project_click)
menu_file.add_command(label="Save project as",command=menu_file_save_project_as_click)
@ -158,7 +211,7 @@ button_next_glyph.pack(side="left")
frame_glyph_id=tkinter.Frame(frame_controls)
frame_glyph_id.pack(side="top",pady=10)
entry_glyph_id=tkinter.Entry(frame_glyph_id,validate="all",validatecommand=((window.register(number_only_validate)),"%P"))
entry_glyph_id=tkinter.Entry(frame_glyph_id,validate="all",validatecommand=((window.register(hex_only_validate)),"%P"))
entry_glyph_id.pack(side="left")
button_glyph_search=tkinter.Button(frame_glyph_id,width=10,text="Search",command=button_glyph_search_click)

View File

@ -6,6 +6,7 @@ class Project:
self.char_res=(0,0)
self.path=None
self.loaded=False
self.modified=False
def load(self,path):