From 1cac9ae4b749dab3c499b72086bf512a66f26a13 Mon Sep 17 00:00:00 2001 From: Zsolt Foldvari Date: Fri, 31 Aug 2007 22:08:39 +0000 Subject: [PATCH] 2007-09-01 Zsolt Foldvari * src/images/16x16/gramps-zoom-fit-width.png: * src/images/16x16/Makefile.am: * src/images/22x22/gramps-zoom-fit-width.png; * src/images/22x22/Makefile.am: * src/images/48x48/gramps-zoom-fit-width.png: * src/images/48x48/Makefile.am: * src/images/scalable/gramps-zoom-fit-width.svg: * src/images/scalable/Makefile.am: * src/gramps_main.py: 'Zoom to fit width' stock icon added. (Please draw a better one!!!) * src/docgen/gtkprintpreview.glade: * src/docgen/GtkPrint.py: Print preview is 99.999% complete. svn: r8909 --- ChangeLog | 15 ++ src/docgen/GtkPrint.py | 45 ++-- src/docgen/gtkprintpreview.glade | 132 ++++----- src/gramps_main.py | 1 + src/images/16x16/Makefile.am | 3 +- src/images/16x16/gramps-zoom-fit-width.png | Bin 0 -> 847 bytes src/images/22x22/Makefile.am | 3 +- src/images/22x22/gramps-zoom-fit-width.png | Bin 0 -> 3398 bytes src/images/48x48/Makefile.am | 3 +- src/images/48x48/gramps-zoom-fit-width.png | Bin 0 -> 12395 bytes src/images/scalable/Makefile.am | 3 +- src/images/scalable/gramps-zoom-fit-width.svg | 252 ++++++++++++++++++ 12 files changed, 360 insertions(+), 97 deletions(-) create mode 100644 src/images/16x16/gramps-zoom-fit-width.png create mode 100644 src/images/22x22/gramps-zoom-fit-width.png create mode 100644 src/images/48x48/gramps-zoom-fit-width.png create mode 100644 src/images/scalable/gramps-zoom-fit-width.svg diff --git a/ChangeLog b/ChangeLog index c4e29fa02..271a03ee1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,18 @@ +2007-09-01 Zsolt Foldvari + * src/images/16x16/gramps-zoom-fit-width.png: + * src/images/16x16/Makefile.am: + * src/images/22x22/gramps-zoom-fit-width.png; + * src/images/22x22/Makefile.am: + * src/images/48x48/gramps-zoom-fit-width.png: + * src/images/48x48/Makefile.am: + * src/images/scalable/gramps-zoom-fit-width.svg: + * src/images/scalable/Makefile.am: + * src/gramps_main.py: + 'Zoom to fit width' stock icon added. (Please draw a better one!!!) + * src/docgen/gtkprintpreview.glade: + * src/docgen/GtkPrint.py: + Print preview is 99.999% complete. + 2007-08-31 Benny Malengier * src/PlaceUtils.py: request #1199: replace unicode symbols with u codes diff --git a/src/docgen/GtkPrint.py b/src/docgen/GtkPrint.py index 09caeac60..1c90f1fa0 100644 --- a/src/docgen/GtkPrint.py +++ b/src/docgen/GtkPrint.py @@ -119,16 +119,10 @@ class PrintPreview: glade_file = os.path.join(os.path.dirname(__file__), 'gtkprintpreview.glade') - window_xml = gtk.glade.XML(glade_file, 'window2', 'gramps') - self._window = window_xml.get_widget('window2') + window_xml = gtk.glade.XML(glade_file, 'window', 'gramps') + self._window = window_xml.get_widget('window') #self._window.set_transient_for(parent) - # add the page number entry box into the toolbar - entry_xml = gtk.glade.XML(glade_file, 'entry_hbox', 'gramps') - entry_box = entry_xml.get_widget('entry_hbox') - entry_item = window_xml.get_widget('entry_item') - entry_item.add(entry_box) - # remember active widgets for future use self._swin = window_xml.get_widget('swin') self._drawing_area = window_xml.get_widget('drawingarea') @@ -136,13 +130,13 @@ class PrintPreview: self._prev_button = window_xml.get_widget('prev') self._next_button = window_xml.get_widget('next') self._last_button = window_xml.get_widget('last') + self._pages_entry = window_xml.get_widget('entry') + self._pages_label = window_xml.get_widget('label') self._zoom_fit_width_button = window_xml.get_widget('zoom_fit_width') + self._zoom_fit_width_button.set_stock_id('gramps-zoom-fit-width') self._zoom_best_fit_button = window_xml.get_widget('zoom_best_fit') self._zoom_in_button = window_xml.get_widget('zoom_in') self._zoom_out_button = window_xml.get_widget('zoom_out') - - self._pages_entry = entry_xml.get_widget('entry') - self._pages_label = entry_xml.get_widget('label') # connect the signals window_xml.signal_autoconnect({ @@ -159,9 +153,6 @@ class PrintPreview: 'on_zoom_in_clicked': self.on_zoom_in_clicked, 'on_zoom_out_clicked': self.on_zoom_out_clicked, 'on_window_delete_event': self.on_window_delete_event, - }) - - entry_xml.signal_autoconnect({ 'on_entry_activate': self.on_entry_activate, }) @@ -285,14 +276,30 @@ class PrintPreview: cr.rectangle(event.area) cr.clip() - # TODO put the paper on the middle of the window - cr.translate(MARGIN, MARGIN) + # get the extents of the page and the screen + paper_w = self._paper_width * self._zoom + paper_h = self._paper_height * self._zoom + + width, height, vsb_w, hsb_h = self.__get_view_size() + if paper_h > height: + width -= vsb_w + if paper_w > width: + height -= hsb_h + + # put the paper on the middle of the window + xtranslate = MARGIN + if paper_w < width: + xtranslate += (width - paper_w) / 2 + + ytranslate = MARGIN + if paper_h < height: + ytranslate += (height - paper_h) / 2 + + cr.translate(xtranslate, ytranslate) # draw an empty white page cr.set_source_rgb(1.0, 1.0, 1.0) - cr.rectangle(0, 0, - self._paper_width * self._zoom, - self._paper_height * self._zoom) + cr.rectangle(0, 0, paper_w, paper_h) cr.fill_preserve() cr.set_source_rgb(0, 0, 0) cr.set_line_width(1) diff --git a/src/docgen/gtkprintpreview.glade b/src/docgen/gtkprintpreview.glade index d6c6513c0..9ec0325af 100644 --- a/src/docgen/gtkprintpreview.glade +++ b/src/docgen/gtkprintpreview.glade @@ -3,77 +3,7 @@ - - True - window1 - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_NONE - False - True - False - True - False - False - GDK_WINDOW_TYPE_HINT_NORMAL - GDK_GRAVITY_NORTH_WEST - True - False - - - - True - False - 6 - - - - True - True - True - 0 - - True - - False - 6 - - - - 0 - False - True - - - - - - True - of 8 - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - True - - - - - - - + Print Preview GTK_WINDOW_TOPLEVEL GTK_WIN_POS_CENTER @@ -232,11 +162,64 @@ - + True True True - True + False + + + + True + False + 6 + + + + True + True + True + 0 + + True + + False + 6 + + + + 0 + False + True + + + + + + True + of 8 + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + True + + + + False @@ -260,9 +243,9 @@ True + Zooms to fit the page width True - gtk-missing-image True True False @@ -278,6 +261,7 @@ True + Zooms to fit the whole page gtk-zoom-fit True True diff --git a/src/gramps_main.py b/src/gramps_main.py index 5528fab42..a4589feee 100644 --- a/src/gramps_main.py +++ b/src/gramps_main.py @@ -124,6 +124,7 @@ def register_stock_icons (): ('gramps-tools',_('Tools'),gtk.gdk.CONTROL_MASK,0,''), ('gramps-unlock',_('Private'),gtk.gdk.CONTROL_MASK,0,''), ('gramps-viewmedia',_('View'),gtk.gdk.CONTROL_MASK,0,''), + ('gramps-zoom-fit-width',_('Fit Width'),gtk.gdk.CONTROL_MASK,0,''), ] # the following icons are not yet in new directory structure # they should be ported in the near future diff --git a/src/images/16x16/Makefile.am b/src/images/16x16/Makefile.am index 308fdb36a..18ddd1cc8 100644 --- a/src/images/16x16/Makefile.am +++ b/src/images/16x16/Makefile.am @@ -26,4 +26,5 @@ dist_pkgdata_DATA = \ gramps-repository.png \ gramps-source.png \ gramps-spouse.png \ - gramps-unlock.png + gramps-unlock.png \ + gramps-zoom-fit-width.png diff --git a/src/images/16x16/gramps-zoom-fit-width.png b/src/images/16x16/gramps-zoom-fit-width.png new file mode 100644 index 0000000000000000000000000000000000000000..1c495cab63704a8e9023bad042c01d53d2557d42 GIT binary patch literal 847 zcmV-V1F-ywP){ID#`_-@87y@5$50`IN>Q4jnvlewM&?@_6;!IeL3-tu-?KgQfO*CzFC<3R&jR zs6?0+YeT8YqW@y+S=H3!R6|qK(d!9;&1Or1AouRuw?FiDB$V~q6A(l}K#EoY$~eZS zqKHt2;w(KYNLPAV?5C5WVOr4K+&lpQf{bXx%F=T8XfS4Y^*JEqE!1IXd6XNg$HI$c?yCKL8@d*S<*;aFrCEL;SU7Np1hqVQ15D0!PcJpP|v$D#4+qiSGltIoaa5Z1Ke{?QKG7I` zo>)N=LUzZacC$f8#wzksn9CDDda4E*l?07SLVBtOE>8ffa57pamupMqx>b|eX&OlsMTJrlp;8D~pp#IVsSYJ$np|i-rx^J1HEF>6wR+xs zgL`yj$dh>Gy1KnqK~mT^ZrIpYR9tFIQY(!BFcXUSx}9CV2M_Kq_YRLLswy{$Q8|js zS8q&*XTntp0RUL7)+{2hMh>!>bDqID2j}vjEaR>$@-rVlcpW>dw`IO~;lzrPLbSEr z_WmXKlluC46#%rfv_#@Plf|+|tybULU9%%O5{cki+pXY#1^>fjv8>i=k}t(#G$qE_ Zo}bAxP};H3E++s0002ovPDHLkV1gGrfW!a* literal 0 HcmV?d00001 diff --git a/src/images/22x22/Makefile.am b/src/images/22x22/Makefile.am index 9de7de0ac..37a2d5128 100644 --- a/src/images/22x22/Makefile.am +++ b/src/images/22x22/Makefile.am @@ -26,4 +26,5 @@ dist_pkgdata_DATA = \ gramps-repository.png \ gramps-source.png \ gramps-spouse.png \ - gramps-unlock.png \ No newline at end of file + gramps-unlock.png \ + gramps-zoom-fit-width.png diff --git a/src/images/22x22/gramps-zoom-fit-width.png b/src/images/22x22/gramps-zoom-fit-width.png new file mode 100644 index 0000000000000000000000000000000000000000..4bed0553b3eca84ab3dcefefca306555d1a69ae3 GIT binary patch literal 3398 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 literal 0 HcmV?d00001 diff --git a/src/images/48x48/Makefile.am b/src/images/48x48/Makefile.am index a2eddc0ef..ec619c419 100644 --- a/src/images/48x48/Makefile.am +++ b/src/images/48x48/Makefile.am @@ -34,4 +34,5 @@ dist_pkgdata_DATA = \ gramps-spouse.png \ gramps-tools.png \ gramps-unlock.png \ - gramps-viewmedia.png \ No newline at end of file + gramps-viewmedia.png \ + gramps-zoom-fit-width.png diff --git a/src/images/48x48/gramps-zoom-fit-width.png b/src/images/48x48/gramps-zoom-fit-width.png new file mode 100644 index 0000000000000000000000000000000000000000..395162ebb1563df9802a41fa9cbc180476c24b2c GIT binary patch literal 12395 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + +