gtk: change scaling of images
This reduces the amount of magic numbers used, some images will scale to bigger sizes, most of the icons and images in vertical mode will be bigger, thumbnails should be bigger in both modes.
This commit is contained in:
parent
62fd6b96f8
commit
d3281379ee
@ -10,8 +10,6 @@ from gi.repository import Gdk, GdkPixbuf, Gio, Gtk, Pango
|
||||
|
||||
class KlippyGtk:
|
||||
labels = {}
|
||||
width_ratio = 16
|
||||
height_ratio = 9.375
|
||||
|
||||
def __init__(self, screen, width, height, theme, cursor, fontsize_type):
|
||||
self.screen = screen
|
||||
@ -28,10 +26,10 @@ class KlippyGtk:
|
||||
self.font_size = round(self.font_size * 0.91)
|
||||
elif fontsize_type == "large":
|
||||
self.font_size = round(self.font_size * 1.09)
|
||||
self.header_size = int(round((self.width / self.width_ratio) / 1.33))
|
||||
self.titlebar_height = self.font_size * 2
|
||||
self.img_width = int(round(self.width / self.width_ratio))
|
||||
self.img_height = int(round(self.height / self.height_ratio))
|
||||
self.img_scale = self.font_size * 2.5
|
||||
self.img_width = self.font_size * 3
|
||||
self.img_height = self.font_size * 3
|
||||
if self.screen.vertical_mode:
|
||||
self.action_bar_width = int(self.width)
|
||||
self.action_bar_height = int(self.height * .1)
|
||||
@ -70,15 +68,6 @@ class KlippyGtk:
|
||||
def get_titlebar_height(self):
|
||||
return self.titlebar_height
|
||||
|
||||
def get_header_size(self):
|
||||
return self.header_size
|
||||
|
||||
def get_image_width(self):
|
||||
return self.img_width
|
||||
|
||||
def get_image_height(self):
|
||||
return self.img_height
|
||||
|
||||
def get_keyboard_height(self):
|
||||
if (self.height / self.width) >= 3:
|
||||
# Ultra-tall
|
||||
@ -119,37 +108,29 @@ class KlippyGtk:
|
||||
la.get_style_context().add_class(style)
|
||||
return la
|
||||
|
||||
def Image(self, image_name, scale=1.0):
|
||||
def Image(self, image_name, width=None, height=None):
|
||||
width = width if width is not None else self.img_width
|
||||
height = height if height is not None else self.img_height
|
||||
filename = os.path.join(self.themedir, f"{image_name}.svg")
|
||||
if os.path.exists(filename):
|
||||
pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_scale(filename,
|
||||
int(round(self.img_width * scale)),
|
||||
int(round(self.img_height * scale)),
|
||||
True)
|
||||
pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size(filename, int(width), int(height))
|
||||
return Gtk.Image.new_from_pixbuf(pixbuf)
|
||||
else:
|
||||
logging.error(f"Unable to find image {filename}")
|
||||
return Gtk.Image()
|
||||
|
||||
def PixbufFromFile(self, filename, width_scale=1, height_scale=1):
|
||||
return GdkPixbuf.Pixbuf.new_from_file_at_scale(
|
||||
filename,
|
||||
int(round(self.img_width * width_scale)),
|
||||
int(round(self.img_height * height_scale)),
|
||||
True
|
||||
)
|
||||
@staticmethod
|
||||
def PixbufFromFile(filename, width=-1, height=-1):
|
||||
return GdkPixbuf.Pixbuf.new_from_file_at_size(filename, int(width), int(height))
|
||||
|
||||
def PixbufFromHttp(self, resource, width_scale=1, height_scale=1):
|
||||
def PixbufFromHttp(self, resource, width=-1, height=-1):
|
||||
response = self.screen.apiclient.get_thumbnail_stream(resource)
|
||||
if response is False:
|
||||
return None
|
||||
stream = Gio.MemoryInputStream.new_from_data(response, None)
|
||||
return GdkPixbuf.Pixbuf.new_from_stream_at_scale(
|
||||
stream,
|
||||
int(round(self.img_width * width_scale)),
|
||||
int(round(self.img_height * height_scale)),
|
||||
True
|
||||
)
|
||||
pixbuf = GdkPixbuf.Pixbuf.new_from_stream_at_scale(stream, int(width), int(height), True)
|
||||
stream.close_async(2)
|
||||
return pixbuf
|
||||
|
||||
def Button(self, label=None, style=None):
|
||||
b = Gtk.Button(label=label)
|
||||
@ -171,7 +152,8 @@ class KlippyGtk:
|
||||
b.set_vexpand(True)
|
||||
b.set_can_focus(False)
|
||||
if image_name is not None:
|
||||
b.set_image(self.Image(image_name, scale))
|
||||
width = height = self.img_scale * scale
|
||||
b.set_image(self.Image(image_name, width, height))
|
||||
b.set_image_position(position)
|
||||
b.set_always_show_image(True)
|
||||
|
||||
@ -238,13 +220,13 @@ class KlippyGtk:
|
||||
logging.info("Removing Dialog")
|
||||
self.screen.dialogs.remove(dialog)
|
||||
|
||||
def ToggleButtonImage(self, image_name, label, style=None, scale=1.38):
|
||||
def ToggleButtonImage(self, image_name, label, style=None, width=None, height=None):
|
||||
|
||||
b = Gtk.ToggleButton(label=label)
|
||||
b.set_hexpand(True)
|
||||
b.set_vexpand(True)
|
||||
b.set_can_focus(False)
|
||||
b.set_image(self.Image(image_name, scale))
|
||||
b.set_image(self.Image(image_name, width, height))
|
||||
b.set_image_position(Gtk.PositionType.TOP)
|
||||
b.set_always_show_image(True)
|
||||
|
||||
|
@ -51,10 +51,11 @@ class ScreenPanel:
|
||||
def get_content(self):
|
||||
return self.content
|
||||
|
||||
def get_file_image(self, filename, width=1, height=1, small=False):
|
||||
def get_file_image(self, filename, width=None, height=None, small=False):
|
||||
if not self._files.has_thumbnail(filename):
|
||||
return None
|
||||
|
||||
width = width if width is not None else self._gtk.img_width
|
||||
height = height if height is not None else self._gtk.img_height
|
||||
loc = self._files.get_thumbnail_location(filename, small)
|
||||
if loc is None:
|
||||
return None
|
||||
|
@ -128,27 +128,28 @@ class BasePanel(ScreenPanel):
|
||||
if not show or self._screen.printer.get_temp_store_devices() is None:
|
||||
return
|
||||
|
||||
img_size = self._gtk.img_scale * .5
|
||||
for device in self._screen.printer.get_temp_store_devices():
|
||||
if device.startswith("extruder"):
|
||||
if self._screen.printer.extrudercount > 1:
|
||||
if device == "extruder":
|
||||
icon = self._gtk.Image("extruder-0", .5)
|
||||
icon = self._gtk.Image("extruder-0", img_size, img_size)
|
||||
else:
|
||||
icon = self._gtk.Image(f"extruder-{device[8:]}", .5)
|
||||
icon = self._gtk.Image(f"extruder-{device[8:]}", img_size, img_size)
|
||||
else:
|
||||
icon = self._gtk.Image("extruder", .5)
|
||||
icon = self._gtk.Image("extruder", img_size, img_size)
|
||||
elif device.startswith("heater_bed"):
|
||||
icon = self._gtk.Image("bed", .5)
|
||||
icon = self._gtk.Image("bed", img_size, img_size)
|
||||
# Extra items
|
||||
elif self.titlebar_name_type is not None:
|
||||
# The item has a name, do not use an icon
|
||||
icon = None
|
||||
elif device.startswith("temperature_fan"):
|
||||
icon = self._gtk.Image("fan", .5)
|
||||
icon = self._gtk.Image("fan", img_size, img_size)
|
||||
elif device.startswith("heater_generic"):
|
||||
icon = self._gtk.Image("heater", .5)
|
||||
icon = self._gtk.Image("heater", img_size, img_size)
|
||||
else:
|
||||
icon = self._gtk.Image("heat-up", .5)
|
||||
icon = self._gtk.Image("heat-up", img_size, img_size)
|
||||
|
||||
self.labels[device] = Gtk.Label(label="100º")
|
||||
self.labels[device].set_ellipsize(Pango.EllipsizeMode.START)
|
||||
|
@ -104,9 +104,9 @@ class MacroPanel(ScreenPanel):
|
||||
def change_sort(self, widget):
|
||||
self.sort_reverse ^= True
|
||||
if self.sort_reverse:
|
||||
self.sort_btn.set_image(self._gtk.Image("arrow-down", .5))
|
||||
self.sort_btn.set_image(self._gtk.Image("arrow-down", self._gtk.img_scale * .5))
|
||||
else:
|
||||
self.sort_btn.set_image(self._gtk.Image("arrow-up", .5))
|
||||
self.sort_btn.set_image(self._gtk.Image("arrow-up", self._gtk.img_scale * .5))
|
||||
self.sort_btn.show()
|
||||
|
||||
GLib.idle_add(self.reload_macros)
|
||||
|
@ -119,12 +119,7 @@ class JobStatusPanel(ScreenPanel):
|
||||
overlay.add(self.labels['darea'])
|
||||
overlay.add_overlay(box)
|
||||
|
||||
self.labels['thumbnail'] = self._gtk.Image("file", 2)
|
||||
if self._screen.vertical_mode:
|
||||
self.labels['thumbnail'].set_size_request(0, self._screen.height / 4)
|
||||
else:
|
||||
self.labels['thumbnail'].set_size_request(self._screen.width / 3, 0)
|
||||
|
||||
self.labels['thumbnail'] = self._gtk.Image("file", self._screen.width / 4, self._screen.height / 4)
|
||||
self.labels['info_grid'] = Gtk.Grid()
|
||||
self.labels['info_grid'].attach(self.labels['thumbnail'], 0, 0, 1, 1)
|
||||
if self._screen.printer.get_tools():
|
||||
@ -826,7 +821,13 @@ class JobStatusPanel(ScreenPanel):
|
||||
|
||||
def show_file_thumbnail(self):
|
||||
if self._files.has_thumbnail(self.filename):
|
||||
pixbuf = self.get_file_image(self.filename, 5, 4)
|
||||
if self._screen.vertical_mode:
|
||||
width = -1
|
||||
height = self._screen.height / 4
|
||||
else:
|
||||
width = self._screen.width / 3
|
||||
height = -1
|
||||
pixbuf = self.get_file_image(self.filename, width, height)
|
||||
if pixbuf is not None:
|
||||
self.labels['thumbnail'].set_from_pixbuf(pixbuf)
|
||||
|
||||
@ -840,7 +841,6 @@ class JobStatusPanel(ScreenPanel):
|
||||
"limit": (self._screen.width * 24 / 480) // (self._gtk.get_font_size() / 11),
|
||||
"length": len(self.labels['file'].get_label())
|
||||
}
|
||||
|
||||
if self.animation_timeout is None and (self.filename_label['length'] - self.filename_label['limit']) > 0:
|
||||
self.animation_timeout = GLib.timeout_add_seconds(1, self.animate_label)
|
||||
self.update_percent_complete()
|
||||
|
@ -45,7 +45,7 @@ class PrintPanel(ScreenPanel):
|
||||
for i, (name, val) in enumerate(self.sort_items.items(), start=1):
|
||||
s = self._gtk.ButtonImage(None, val, f"color{i % 4}", .5, Gtk.PositionType.RIGHT, 1)
|
||||
if name == self.sort_current[0]:
|
||||
s.set_image(self._gtk.Image(self.sort_icon[self.sort_current[1]], .5))
|
||||
s.set_image(self._gtk.Image(self.sort_icon[self.sort_current[1]], self._gtk.img_scale * .5))
|
||||
s.connect("clicked", self.change_sort, name)
|
||||
self.labels[f'sort_{name}'] = s
|
||||
sbox.add(s)
|
||||
@ -179,7 +179,7 @@ class PrintPanel(ScreenPanel):
|
||||
file.set_hexpand(True)
|
||||
file.set_vexpand(False)
|
||||
|
||||
icon = self._gtk.Image("folder", 1)
|
||||
icon = self._gtk.Image("folder")
|
||||
|
||||
file.add(icon)
|
||||
file.add(labels)
|
||||
@ -226,12 +226,11 @@ class PrintPanel(ScreenPanel):
|
||||
file.set_hexpand(True)
|
||||
file.set_vexpand(False)
|
||||
|
||||
icon = Gtk.Image()
|
||||
pixbuf = self.get_file_image(filepath, small=True)
|
||||
if pixbuf is not None:
|
||||
icon.set_from_pixbuf(pixbuf)
|
||||
icon = Gtk.Image.new_from_pixbuf(pixbuf)
|
||||
else:
|
||||
icon = self._gtk.Image("file", 1.6)
|
||||
icon = self._gtk.Image("file")
|
||||
|
||||
img = Gtk.Button()
|
||||
img.set_image(icon)
|
||||
@ -288,7 +287,8 @@ class PrintPanel(ScreenPanel):
|
||||
self.labels[f'sort_{oldkey}'].set_image(None)
|
||||
self.labels[f'sort_{oldkey}'].show_all()
|
||||
self.sort_current = [key, 0]
|
||||
self.labels[f'sort_{key}'].set_image(self._gtk.Image(self.sort_icon[self.sort_current[1]], .5))
|
||||
self.labels[f'sort_{key}'].set_image(self._gtk.Image(self.sort_icon[self.sort_current[1]],
|
||||
self._gtk.img_scale * .5))
|
||||
self.labels[f'sort_{key}'].show()
|
||||
GLib.idle_add(self.reload_files)
|
||||
|
||||
@ -312,16 +312,16 @@ class PrintPanel(ScreenPanel):
|
||||
label.set_line_wrap_mode(Pango.WrapMode.WORD_CHAR)
|
||||
|
||||
grid = Gtk.Grid()
|
||||
grid.add(label)
|
||||
|
||||
pixbuf = self.get_file_image(filename, 8, 3.2)
|
||||
if pixbuf is not None:
|
||||
image = Gtk.Image.new_from_pixbuf(pixbuf)
|
||||
grid.attach_next_to(image, label, Gtk.PositionType.BOTTOM, 1, 3)
|
||||
|
||||
grid.set_vexpand(True)
|
||||
grid.set_halign(Gtk.Align.CENTER)
|
||||
grid.set_valign(Gtk.Align.CENTER)
|
||||
grid.add(label)
|
||||
|
||||
pixbuf = self.get_file_image(filename, self._screen.width * .9, self._screen.height * .6)
|
||||
if pixbuf is not None:
|
||||
image = Gtk.Image.new_from_pixbuf(pixbuf)
|
||||
image.set_vexpand(False)
|
||||
grid.attach_next_to(image, label, Gtk.PositionType.BOTTOM, 1, 1)
|
||||
|
||||
self._gtk.Dialog(self._screen, buttons, grid, self.confirm_print_response, filename)
|
||||
|
||||
|
@ -20,7 +20,7 @@ class SplashScreenPanel(ScreenPanel):
|
||||
|
||||
def initialize(self, panel_name):
|
||||
|
||||
image = self._gtk.Image("klipper", 3.2)
|
||||
image = self._gtk.Image("klipper", self._screen.width / 5, -1)
|
||||
|
||||
self.labels['text'] = Gtk.Label(_("Initializing printer..."))
|
||||
self.labels['text'].set_line_wrap(True)
|
||||
|
Loading…
x
Reference in New Issue
Block a user