updates to wallpaper drawing and redrawing on zoom
This commit is contained in:
parent
5dda7396ef
commit
0c61c6bffe
2 changed files with 52 additions and 50 deletions
|
@ -231,7 +231,7 @@ class SizeAndScaleDialog(Dialog):
|
||||||
width, height = self.pixel_width.get(), self.pixel_height.get()
|
width, height = self.pixel_width.get(), self.pixel_height.get()
|
||||||
self.canvas.redraw_canvas(width, height)
|
self.canvas.redraw_canvas(width, height)
|
||||||
if self.canvas.wallpaper:
|
if self.canvas.wallpaper:
|
||||||
self.canvas.redraw()
|
self.canvas.redraw_wallpaper()
|
||||||
location = self.app.core.location
|
location = self.app.core.location
|
||||||
location.x = self.x.get()
|
location.x = self.x.get()
|
||||||
location.y = self.y.get()
|
location.y = self.y.get()
|
||||||
|
|
|
@ -410,6 +410,7 @@ class CanvasGraph(tk.Canvas):
|
||||||
)
|
)
|
||||||
logging.info("ratio: %s", self.ratio)
|
logging.info("ratio: %s", self.ratio)
|
||||||
logging.info("offset: %s", self.offset)
|
logging.info("offset: %s", self.offset)
|
||||||
|
self.redraw_wallpaper()
|
||||||
|
|
||||||
def click_press(self, event):
|
def click_press(self, event):
|
||||||
"""
|
"""
|
||||||
|
@ -545,24 +546,30 @@ class CanvasGraph(tk.Canvas):
|
||||||
canvas_h = abs(y0 - y1)
|
canvas_h = abs(y0 - y1)
|
||||||
return canvas_w, canvas_h
|
return canvas_w, canvas_h
|
||||||
|
|
||||||
def wallpaper_upper_left(self):
|
def draw_wallpaper(self, image):
|
||||||
tk_img = ImageTk.PhotoImage(self.wallpaper)
|
x1, y1, x2, y2 = self.bbox(self.grid)
|
||||||
# crop image if it is bigger than canvas
|
x = (x1 + x2) / 2
|
||||||
canvas_w, canvas_h = self.width_and_height()
|
y = (y1 + y2) / 2
|
||||||
cropx = img_w = tk_img.width()
|
|
||||||
cropy = img_h = tk_img.height()
|
|
||||||
if img_w > canvas_w:
|
|
||||||
cropx -= img_w - canvas_w
|
|
||||||
if img_h > canvas_h:
|
|
||||||
cropy -= img_h - canvas_h
|
|
||||||
cropped = self.wallpaper.crop((0, 0, cropx, cropy))
|
|
||||||
cropped_tk = ImageTk.PhotoImage(cropped)
|
|
||||||
self.delete(self.wallpaper_id)
|
|
||||||
# place left corner of image to the left corner of the canvas
|
|
||||||
self.wallpaper_id = self.create_image(
|
self.wallpaper_id = self.create_image(
|
||||||
(cropx / 2, cropy / 2), image=cropped_tk, tags=tags.WALLPAPER
|
(x + 1, y + 1), image=image, tags=tags.WALLPAPER
|
||||||
)
|
)
|
||||||
self.wallpaper_drawn = cropped_tk
|
self.wallpaper_drawn = image
|
||||||
|
|
||||||
|
def wallpaper_upper_left(self):
|
||||||
|
self.delete(self.wallpaper_id)
|
||||||
|
|
||||||
|
# place left corner of image to the left corner of the canvas
|
||||||
|
tk_img = ImageTk.PhotoImage(self.wallpaper)
|
||||||
|
width, height = self.width_and_height()
|
||||||
|
cropx = image_width = tk_img.width()
|
||||||
|
cropy = image_height = tk_img.height()
|
||||||
|
if image_width > width:
|
||||||
|
cropx = width
|
||||||
|
if image_height > height:
|
||||||
|
cropy = height
|
||||||
|
cropped = self.wallpaper.crop((0, 0, cropx, cropy))
|
||||||
|
image = ImageTk.PhotoImage(cropped)
|
||||||
|
self.draw_wallpaper(image)
|
||||||
|
|
||||||
def wallpaper_center(self):
|
def wallpaper_center(self):
|
||||||
"""
|
"""
|
||||||
|
@ -570,27 +577,26 @@ class CanvasGraph(tk.Canvas):
|
||||||
|
|
||||||
:return: nothing
|
:return: nothing
|
||||||
"""
|
"""
|
||||||
tk_img = ImageTk.PhotoImage(self.wallpaper)
|
|
||||||
canvas_w, canvas_h = self.width_and_height()
|
|
||||||
cropx = img_w = tk_img.width()
|
|
||||||
cropy = img_h = tk_img.height()
|
|
||||||
# dimension of the cropped image
|
|
||||||
if img_w > canvas_w:
|
|
||||||
cropx -= img_w - canvas_w
|
|
||||||
if img_h > canvas_h:
|
|
||||||
cropy -= img_h - canvas_h
|
|
||||||
x0 = (img_w - cropx) / 2
|
|
||||||
y0 = (img_h - cropy) / 2
|
|
||||||
x1 = x0 + cropx
|
|
||||||
y1 = y0 + cropy
|
|
||||||
cropped = self.wallpaper.crop((x0, y0, x1, y1))
|
|
||||||
cropped_tk = ImageTk.PhotoImage(cropped)
|
|
||||||
# place the center of the image at the center of the canvas
|
|
||||||
self.delete(self.wallpaper_id)
|
self.delete(self.wallpaper_id)
|
||||||
self.wallpaper_id = self.create_image(
|
|
||||||
(canvas_w / 2, canvas_h / 2), image=cropped_tk, tags=tags.WALLPAPER
|
# dimension of the cropped image
|
||||||
)
|
tk_img = ImageTk.PhotoImage(self.wallpaper)
|
||||||
self.wallpaper_drawn = cropped_tk
|
width, height = self.width_and_height()
|
||||||
|
image_width = tk_img.width()
|
||||||
|
image_height = tk_img.height()
|
||||||
|
cropx = 0
|
||||||
|
if image_width > width:
|
||||||
|
cropx = (image_width - width) / 2
|
||||||
|
cropy = 0
|
||||||
|
if image_height > height:
|
||||||
|
cropy = (image_height - height) / 2
|
||||||
|
x1 = 0 + cropx
|
||||||
|
y1 = 0 + cropy
|
||||||
|
x2 = image_width - cropx
|
||||||
|
y2 = image_height - cropy
|
||||||
|
cropped = self.wallpaper.crop((x1, y1, x2, y2))
|
||||||
|
image = ImageTk.PhotoImage(cropped)
|
||||||
|
self.draw_wallpaper(image)
|
||||||
|
|
||||||
def wallpaper_scaled(self):
|
def wallpaper_scaled(self):
|
||||||
"""
|
"""
|
||||||
|
@ -598,22 +604,18 @@ class CanvasGraph(tk.Canvas):
|
||||||
|
|
||||||
:return: nothing
|
:return: nothing
|
||||||
"""
|
"""
|
||||||
|
self.delete(self.wallpaper_id)
|
||||||
canvas_w, canvas_h = self.width_and_height()
|
canvas_w, canvas_h = self.width_and_height()
|
||||||
image = Images.create(self.wallpaper_file, int(canvas_w), int(canvas_h))
|
image = Images.create(self.wallpaper_file, int(canvas_w), int(canvas_h))
|
||||||
self.delete(self.wallpaper_id)
|
self.draw_wallpaper(image)
|
||||||
self.wallpaper_id = self.create_image(
|
|
||||||
(canvas_w / 2, canvas_h / 2), image=image, tags=tags.WALLPAPER
|
|
||||||
)
|
|
||||||
self.wallpaper_drawn = image
|
|
||||||
|
|
||||||
def resize_to_wallpaper(self):
|
def resize_to_wallpaper(self):
|
||||||
image_tk = ImageTk.PhotoImage(self.wallpaper)
|
|
||||||
img_w = image_tk.width()
|
|
||||||
img_h = image_tk.height()
|
|
||||||
self.delete(self.wallpaper_id)
|
self.delete(self.wallpaper_id)
|
||||||
self.redraw_canvas(img_w, img_h)
|
image = ImageTk.PhotoImage(self.wallpaper)
|
||||||
self.wallpaper_id = self.create_image((img_w / 2, img_h / 2), image=image_tk)
|
image_width = image.width()
|
||||||
self.wallpaper_drawn = image_tk
|
image_height = image.height()
|
||||||
|
self.redraw_canvas(image_width, image_height)
|
||||||
|
self.draw_wallpaper(image)
|
||||||
|
|
||||||
def redraw_canvas(self, width, height):
|
def redraw_canvas(self, width, height):
|
||||||
"""
|
"""
|
||||||
|
@ -630,7 +632,7 @@ class CanvasGraph(tk.Canvas):
|
||||||
self.draw_grid()
|
self.draw_grid()
|
||||||
self.update_grid()
|
self.update_grid()
|
||||||
|
|
||||||
def redraw(self):
|
def redraw_wallpaper(self):
|
||||||
if self.adjust_to_dim.get():
|
if self.adjust_to_dim.get():
|
||||||
self.resize_to_wallpaper()
|
self.resize_to_wallpaper()
|
||||||
else:
|
else:
|
||||||
|
@ -662,7 +664,7 @@ class CanvasGraph(tk.Canvas):
|
||||||
img = Image.open(filename)
|
img = Image.open(filename)
|
||||||
self.wallpaper = img
|
self.wallpaper = img
|
||||||
self.wallpaper_file = filename
|
self.wallpaper_file = filename
|
||||||
self.redraw()
|
self.redraw_wallpaper()
|
||||||
else:
|
else:
|
||||||
if self.wallpaper_id is not None:
|
if self.wallpaper_id is not None:
|
||||||
self.delete(self.wallpaper_id)
|
self.delete(self.wallpaper_id)
|
||||||
|
|
Loading…
Add table
Reference in a new issue