From f68e16b6686b20b32b97c612739631fa7cdcf5a2 Mon Sep 17 00:00:00 2001 From: Chris Jones Date: Sat, 14 Jun 2008 02:27:50 +0100 Subject: [PATCH] make terminal zooming actually zoom actually do as advertised and scale the font. added maximisation of terminals (ie the previous behaviour of zooming) --- ChangeLog | 2 +- terminator | 71 ++++++++++++++++++++++++++++++++++++++++++------------ 2 files changed, 57 insertions(+), 16 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2ebacbe4..4d1537c8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -12,7 +12,7 @@ terminator 0.9: of gconf settings if they are available, falls back to sensible defaults if not, and can be overridden entirely by ~/.terminatorrc * Support terminal zooming - now you can quickly hide all terminals apart - from one + from one and either scale the fontsize or not. * New application icon from Cory Kontros * FreeBSD support (thanks to Thomas Hurst) * Watch the system monospace font setting. Closes LP #197960 diff --git a/terminator b/terminator index 9fd210d4..d9fb6205 100755 --- a/terminator +++ b/terminator @@ -641,6 +641,9 @@ text/plain self.terminator.move_tab(self, 'left') return (True) elif keyname == 'Z': + self.terminator.toggle_zoom (self, True) + return (True) + elif keyname == 'X': self.terminator.toggle_zoom (self) return (True) @@ -783,11 +786,22 @@ text/plain if len (self.terminator.term_list) > 1: if not self.terminator._zoomed: item = gtk.MenuItem (_("_Zoom terminal")) + item.connect ("activate", lambda menu_item: self.terminator.toggle_zoom (self, True)) + menu.append (item) + + item = gtk.MenuItem (_("_Maximise terminal")) item.connect ("activate", lambda menu_item: self.terminator.toggle_zoom (self)) + menu.append (item) else: - item = gtk.MenuItem (_("_Unzoom terminal")) - item.connect ("activate", lambda menu_item: self.terminator.toggle_zoom (self)) - menu.append (item) + if self.terminator._zoomed and not self.terminator._maximised: + item = gtk.MenuItem (_("_Unzoom terminal")) + item.connect ("activate", lambda menu_item: self.terminator.toggle_zoom (self, True)) + menu.append (item) + + if self.terminator._zoomed and self.terminator._maximised: + item = gtk.MenuItem (_("U_naximise terminal")) + item.connect ("activate", lambda menu_item: self.terminator.toggle_zoom (self)) + menu.append (item) item = gtk.MenuItem () menu.append (item) @@ -893,6 +907,7 @@ class Terminator: self.command = command self._zoomed = False + self._maximised = False self._fullscreen = False self._f11_modifier = False self.term_list = [] @@ -1576,13 +1591,13 @@ class Terminator: for term in self.term_list: term.reconfigure_vte () - def toggle_zoom(self, widget): + def toggle_zoom(self, widget, fontscale = False): if not self._zoomed: - self.zoom_term (widget) + self.zoom_term (widget, fontscale) if self.conf.titlebars: widget._titlebox.hide() else: - self.unzoom_term (widget) + self.unzoom_term (widget, fontscale) if self.conf.titlebars and \ len(self.term_list) > 1 \ and \ @@ -1591,38 +1606,64 @@ class Terminator: widget._titlebox.show() widget._vte.grab_focus() - def zoom_term (self, widget): + def zoom_term (self, widget, fontscale = False): """Proof of concept: Maximize to full window an instance of TerminatorTerm. """ + self.old_font = widget._vte.get_font () + self.old_columns = widget._vte.get_column_count () + self.old_rows = widget._vte.get_row_count () self.old_parent = widget.get_parent() + if isinstance(self.old_parent, gtk.Window): return if isinstance(self.old_parent, gtk.Notebook): self.old_page = self.old_parent.get_current_page() + self.window_child = self.window.get_children()[0] self.window.remove(self.window_child) self.old_parent.remove(widget) self.window.add(widget) self._zoomed = True - def unzoom_term (self, widget): + if fontscale: + self.cnid = widget.connect ("size-allocate", self.zoom_scale_font) + else: + self._maximised = True + + def zoom_scale_font (self, widget, allocation): + new_columns = widget._vte.get_column_count () + new_rows = widget._vte.get_row_count () + new_font = widget._vte.get_font () + + dbg ('zoom_term: I just went from %dx%d to %dx%d. Raa!'%(self.old_columns, self.old_rows, new_columns, new_rows)) + + old_area = self.old_columns * self.old_rows + new_area = new_columns * new_rows + area_factor = new_area / old_area + + dbg ('zoom_term: My area changed from %d characters to %d characters, a factor of %f.'%(old_area, new_area, area_factor)) + + new_font.set_size (self.old_font.get_size() * (area_factor / 2)) + dbg ('zoom_term: Scaled font from %f to %f'%(self.old_font.get_size () / pango.SCALE, new_font.get_size () / pango.SCALE)) + widget._vte.set_font (new_font) + widget.disconnect (self.cnid) + + def unzoom_term (self, widget, fontscale = False): """Proof of concept: Go back to previous application widget structure. """ if self._zoomed: + if fontscale: + widget._vte.set_font (self.old_font) + self._zoomed = False + self._maximised = False + self.window.remove(widget) self.window.add(self.window_child) self.old_parent.add(widget) if isinstance(self.old_parent, gtk.Notebook): self.old_parent.set_current_page(self.old_page) - print "\nPARENT IS A NOTEBOOK\n" - self._zoomed = False - - return - else: - return - if __name__ == '__main__': def execute_cb (option, opt, value, parser):