FYI, cross posted from desktop-discuss  ....

Glynn Foster wrote:

> An interesting thread starting on the GTK+ devel list...
> 
> 
> ------------------------------------------------------------------------
> 
> Subject: Gtk+ print support - request for feedback
> From: Alexander Larsson <alexl at redhat.com>
> Date: Fri, 03 Mar 2006 16:58:39 +0100
> To: "gtk-devel-list at gnome.org" <gtk-devel-list at gnome.org>
> 
> 
> Its no secret that John Palmieri and I have been working on print
> support for Gtk+ a while now. We're moving forward, and while its not
> yet finished we now at least have something that is mostly
> working. So, we think the time has now come to get some feedback from
> the community.
> 
> The code is availible in libegg/libegg/print-operation. You need to
> use the autogen.sh inside that directory, because the toplevel libegg
> configure doesn't work on win32.
> 
> The code consists of several parts. First we have the highlevel
> portable print API that most apps are supposed to use, plus
> implementations for win32 and unix. Then we have the code for the Unix
> print dialog which is used for the unix implementation of the
> highlevel code, but is also availible on unix only for apps like OOo
> and Firefox to use as a "native" print dialog. The dialog is split
> into common code and code implementing cups support. The cups support
> is hidden behind a backend interface, and the long term plan is to
> make it a module (like immodules or pixbuf loaders). However at the
> moment its just linked in.
> 
> Here is a highlevel walktrough of the sources:
> 
> Highlevel API
> =============
> * eggprint.h
> 
> General include file which is meant to pull in all interesting headers
> for printing.
> 
> * eggprintoperation.[ch]
> * eggprintoperation-private.h
> 
> This defines the main object you interact with when printing. When the
> user selects print you allocate an EggPrintOperation, set some data
> like page size, old print settings, nr of pages, current page, etc and
> kick it off. It will then show a dialog, let the user select a printer
> and options. When the user finished the dialog various signals will be
> emited on the EggPrintOperation, the main one being draw_page() which
> you are supposed to catch and render the page using cairo.
> 
> * eggprintcontext.[ch]
> * eggprintcontext-private.h
> 
> This is an object that gets passed to the begin_print,
> request_page_setup, draw_page and end_print signals on the print
> operation. It lets you get the cairo context and important rendering
> information like page size and resolution. It also lets you easily
> create pango layoungs/contexts that match the font metrics of the
> cairo surface.
> 
> * eggprintersettings.[ch]
> 
> This object represents the settings of a print dialog in a
> system-independent way. Its basically a key-string = value-string
> hashtable with some predefined keys that you can use for conveniency
> (although an implementation can use more keys than the predefined
> ones). The main use for this object is that once you've printed you
> can get a settings object that represents the settings the user chose,
> and the next time you print you can pass that in so that the user
> doesn't have to re-set all his settings. Its also possible to
> enumerate the settings so that you can easily save the settings for
> the next time your app runs, or even in a document. The predefined
> keys try to use shared values as much as possible so that moving such
> a document between systems still works.
> 
> * eggpapersize.[ch]
> * paper_names.c
> 
> Object that handles paper sizes. We use a standard called "PWG
> 5101.1-2002 PWG: Standard for Media Standardized Names" to name the
> page sizes (and to get the data for the page sizes).
> 
> * eggpagesetup.[ch]
> This object stored the page size, orientation and margins. The idea is
> that you can pass/get one of these from the page setup dialog and then
> send it to the print object when printing.
> 
> * eggprintenums.h
> Various enums needed for printing
> 
> * eggprintoperation-win32.c
> * eggprint-win32.[ch]
> Win32 implementation of the highlevel API
> 
> * eggprintoperation-unix.c
> Unix implementation of the highlevel API
> 
> Unix Print Dialog
> =================
> * eggprintunixdialog.[ch]
> The print dialog code. The header is availible only on unix systems. I
> think it will be put in a separate include directory and have its own
> pkg-config module that you can use to get the headers.
> 
> * eggprintbackend.[ch]
> * eggprinter.[ch]
> * eggprinter-private.h
> A printer backend implements the EggPrintBackend interface, which
> hands out EggPrinter objects to the dialog.
> 
> * eggprintbackendsetting.[ch]
> * eggprintbackendsettingset.[ch]
> The backend hands the dialog code a set of EggPrintBackendSettings
> that describe the possible settings that a printer has. For instance,
> the cups implementation generates these from the ppd file for the
> printer. 
> 
> * eggprintsettingwidget.[ch]
> Widget that can display an EggPrintBackendSetting
> 
> *eggprintjob.[ch]
> *eggprintjob-private.h
> Code to handle sending a print job to the printer
> 
> * eggcupsutils.[ch]
> * eggprintbackendcups.[ch]
> * eggprintercups.[ch]
> * eggprintercups-private.h
> Cups backend.
> 
> Test Code
> =========
> 
> * printedit.c
> A simple editor that lets you print
> 
> * testprintfileoperation.[ch]
> And example of how you can derive from EggPrintOperation to implement
> printing.
> 
> * testprint.c
> A small test app that shows how you print using the high level api,
> using both g_signal_connect and using TestPrintFileOperation.
> 
> * testshowdialog.c
> Just shows a print dialog
> 
> 
> The current status of the code is that on both win32 and unix (using
> cups) you can select a printer and print to it, and most options in
> the dialog work. However there is still lots of work to do. Here are
> some of the things we're planning:
> 
> Highlevel API:
> ==============
> 
> We want to add an API for showing a page setup dialog. This is
> something that most other platforms has, and makes sense for
> page-oriented applications. It's used to allow the user to set the page
> size and orientation before the print dialog, which is important in
> e.g. a DTP application.
> 
> Add some form of simple feedback of the job progress after
> printing. This would be in the form of some sort of callbacks on the
> print operation object so that you can know when the print job
> finished so you can display some form of progress icon/bar/whatever.
> 
> Add API that allows you to add per-application specific settings to
> the print dialog. Given the support in the various platforms this is
> best done by allowing you to add a custom tab to the dialog. 
> 
> Unix/Cups implementation:
> =========================
> 
> Need to figure out the details of exactly how to handle page sizes,
> page orientation and margins. We're currently mostly ignoring this
> because I'm not yet sure what the best way to handle it is.
> 
> The settings in the "Job" tab aren't sent to the printer.
> 
> We need to add more custom translations for wellknown PPD options so
> that we can get known good and sane texts in the UI.
> 
> The dialog needs some general UI review and polish, including HIGified
> padding.
> 
> Win32:
> ======
> 
> The dialogs currently block the mainloop. We need to use threads or
> something like that, so that the other windows in the app repaint
> while the print dialog is up.
> 
> 
> It would be nice if some people could take a look at this and give us
> feedback on it. The earlier we get feedback, the easier it is to
> incorporate it.
> 
> =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
>  Alexander Larsson                                            Red Hat, Inc 
>                    alexl at redhat.com    alla at lysator.liu.se 
> He's a gun-slinging hunchbacked cat burglar on his last day in the job. She's 
> a cynical Buddhist vampire in the wrong place at the wrong time. They fight 
> crime! 
> 
> _______________________________________________
> gtk-devel-list mailing list
> gtk-devel-list at gnome.org
> http://mail.gnome.org/mailman/listinfo/gtk-devel-list
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> desktop-discuss mailing list
> desktop-discuss at opensolaris.org


Reply via email to