[prev in list] [next in list] [prev in thread] [next in thread]
List: opensolaris-printing-discuss
Subject: [printing-discuss] Re:Gtk+ printing dialog highlevel thoughts
From: paulcun () talk21 ! com (Paul Cunningham)
Date: 2006-01-20 12:09:17
Message-ID: 43D141EB.2040908 () talk21 ! com
[Download RAW message or body]
FYI, cross posted from desktop-discuss .......
Glynn Foster wrote:
> Interesting thread from gtk-devel-list@gnome.org...
>
>
> ------------------------------------------------------------------------
>
> Subject:
> Gtk+ printing dialog highlevel thoughts
> From:
> Alexander Larsson <alexl@redhat.com>
> Date:
> Wed, 18 Jan 2006 20:07:31 +0100
> To:
> "gtk-devel-list@gnome.org" <gtk-devel-list@gnome.org>
>
> To:
> "gtk-devel-list@gnome.org" <gtk-devel-list@gnome.org>
> CC:
> johnp@redhat.com, Michael Sweet <mike@easysw.com>, Carl Worth
> <cworth@redhat.com>
>
>
> (cc:ing some people who I think might be interested in this)
>
> I've just started looking at doing a printing dialog for Gtk+
> 2.10. For some background thoughts from owen, see:
> http://mail.gnome.org/archives/gtk-devel-list/2005-October/msg00024.html
>
> I've started studying various platform APIs and UIs, cups, PPDs, etc,
> preparing for this. To compare various platform and application
> printing dialogs I have put together a set of screenshots from
> Linux/OSX/Windows at:
> http://people.redhat.com/alexl/print_dialogs/
>
> I'm going to start on a very high level, discussing the general API
> and implementation. The dialog contents and layout details can be
> discussed later.
>
> There are various use cases for a printing dialog. Here is a shot at
> listing the important ones:
>
> * Simple incremental print
> For example a raw text editor. The document isn't affected by the
> printer/page details, and we don't do e.g. pagination until print
> time. No customization of print dialogs needed.
>
> * Simple page-oriented document print
> WYSIWYG page editing where pagination and other things are affected
> by printer settings (such as page size) and are done before actual
> printing. No customization of print dialogs needed.
>
> * standard printing with customization
> The app uses the standard way to print, but needs some custom
> widgetry in the printing dialog(s). (for instance: scaling,
> positioning, headers/footers, HTML frame handling, etc)
>
> * Printing photos
> This is (these days) a pretty common task, but substantially
> different from what the traditional print dialogs are made to
> support. We could make this a standard type of dialog simplifying
> such printing. See the e.g. the "easy" print dialog in OSX in
> the screenshots above.
>
> * Using the Gtk+ dialog as a native print dialog
> For instance, OOo could use the Gtk+ print dialog for its printing
> UI on Linux/Unix, but then not use the Gtk+ print system (cairo) to
> print, instead going directly to the lowlevel printing system and
> use its own postscript generation.
>
> * Printing without a UI
> Its very useful for applications to be able to print without opening
> a dialog. For instance by passing "--print <file>" on the command
> line. In this case it would be nice if the Gtk+ printing system
> supported a headless mode that didn't need a connection to the
> Display, but still allowed one to use the same printing code.
>
>
> One important question that owen brough up is the "Can we/can we not
> use the native UI?". If we go with native dialogs we loose a certain
> amount of customizability, we get a bit more non-standard APIs
> (i.e. we're unable to use GtkDialog derived objects), and we're a bit
> limited in what the dialogs can do (least-common denominator of
> features, although we might be able to do better with some work).
>
> My opinion is that we should go with native dialogs. Printing dialogs
> are already confusing enough that having to learn a totally new one is
> a pain, and its probably gonna be very hard to make a print dialog
> that works right on Windows, because I don't think all the required
> APIs are availible. Furthermore, you'd loose driver-specific additions
> to the printer dialogs that are availible in Windows/OSX.
>
> I've been talking to the Tor on Win32 and Andersca on OSX, and both
> think it should be possible (but not tested yet) to embedd gtk+
> widgets into a native dialog, so if we're lucky we can allow some
> generic way of adding custom widgets to the dialog. (Given the APIs on
> OSX and Win32 this will likely be in the form of an extra tab page.)
> If there is some simple common feature we want to support that is
> missing on a particular platform we could customize the native dialog
> from gtk itself so that all gtk apps would use the same ui for it, and
> its availible on all platforms.
>
> It might be wise to allow some amount of access to the
> platform-specific objects so that advanced applications can do more
> advanced customization using #ifdef.
>
> The print dialog implementation has two parts. First the generic
> portable API with implementations for the platform native dialogs,
> then the "native" dialog for Unix. In order to support the "Using the
> Gtk+ dialog as a native print dialog" use-case we probably need to
> expose this as a platform-specific api, with accessors similar to the
> ones we have for accessing e.g. the win32 print dialog object.
>
> Both Windows and OSX have a standard "Page Setup" dialog. This is
> typically used in the page-oriented document use-case where you need
> some page/printer information before working on the
> document. libgnomeui doesn't currently have anything like this, and
> neither does KDE (although Qt4 has one).
>
> I think we should have a Page Setup dialog, supporting the native
> dialogs of the platforms. While using the native dialog here is less
> important, since it does less "magic" than the print dialog, and there
> is already a considerable amount of variation in this dialog I think
> its important that at least simple print applications look "normal" on
> the platform.
>
> I think that we should set up the print dialogs such that you are
> not required to use this page setup dialog, since many apps are gonna
> want a totally custom page setup dialog. For instance, if a
> work-processor supports per-page orientation and page size the default
> dialog just won't work. One possibility here is to expose both a
> native dialog and a Gtk+ one. Then we can allow the gtk+ one to be
> more customizable.
>
> Another important feature that the generic API has to support is
> some form of printing feedback (spinning icon while printing) and job
> cancellation support.
>
> I think the general print model should go something like:
> * create a print job
> * set settings on it (page settings etc)
> * call the print method, bringing up the print dialog
> * user sets options in dialog, presses print
> * internally we get the underlying native object to print to (hDC,
> NSView, cups printer + PPD)
> * internally we create a cairo context for the native object and
> pass it to the app
> * the app draws stuff to the cairo context, possibly using some
> furter information from the print dialog result
>
> The last drawing part can be done in several ways. Either procedurally
> (just draw all the pages in order), or with some form of callback
> driven system. The callbacks could either always be called in page
> incremental order, or it could be random access given a page number as
> argument. I think the callback driven, random access model is the
> best. It allows us to handle things like "nr of copies" and collation
> perfectly invisible from the app. It does put some higher demands on
> simpler applications, i.e. you have to do pagination fully up-front,
> but in almost all cases you want to do that anyway (e.g. to have "page
> nr x of X" headers) so I don't think that is a problem.
>
> Having a random access model allows us to easily do inline
> mini-previews if we want to, which is nice. We probably should also
> have a well defined API for "full size" print preview. This could
> launch a document viewer (evince?) like OSX does, or use a normal
> in-app dialog, in fact it could do different things on different
> platforms.
>
> While this callback based, draw via cairo model is very nice for most
> apps we still have to support some way to pass raw data to the
> printer, in order to support the "Using the Gtk+ dialog as a native
> print dialog" use-case. I think the best way to do this is to make
> apps like this use the platform-specific (i.e. linux/cups only) dialog
> API to show the dialog, and then just have it read the cups data from
> the dialog and send data to cups manually.
>
> We're gonna need various objects and interfaces in the API. I think we
> need at least these public ones:
> * a print job object, encapsulating the whole print process
> * data information objects, storing information about the paper setup
> and printer details. I think its might be a good idea to split this
> up into two objects, one for page setup and one for print
> settings. Some APIs do this, some don't. I'm not sure of the
> pros/cons yet.
> * printing callback object (or interface)
> * objects for the non-native dialogs
> * printer object, and a way to enumerate these
> (I'm not acutally sure a printer object is needed in the portable
> API. Maybe we can get away with hiding the actual printer selection
> in the printer dialog. This needs thinking.)
>
> One interesting question about the data information objects is how much
> we expose of them, and how. In many cases you don't actually need to
> read that data to know how to print the document. For instance, if you
> selected "staple" or "glossy finish" in the print dialog that just
> gets passed to the printer, and doesn't affect the app. Even things
> like "nr of pages" or collation doesn't affect things in a callback
> driven model. However, apps still want to do things like save the last
> used printer info, and save printer/page information in the
> document. The information you get from the page setup dialog clearly
> has to be standard and easily accessible to apps as it affects the
> page layout, but some of the stuff that the print dialog sets up are
> very esoteric. We should probably have ways to serialize these things
> (in an as cross-platform way as possible so you can move documents
> between platforms) without having to know what every setting means.
>
> I'll continue to look into this, fleshing out my ideas even more. Any
> feedback would be appreciated.
>
> =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
> Alexander Larsson Red Hat, Inc
> alexl@redhat.com alla@lysator.liu.se
> He's a jaded guitar-strumming barbarian moving from town to town, helping folk
> in trouble. She's a warm-hearted cat-loving magician's assistant with someone
> else's memories. They fight crime!
>
> _______________________________________________
> gtk-devel-list mailing list
> gtk-devel-list@gnome.org
> http://mail.gnome.org/mailman/listinfo/gtk-devel-list
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Desktop-discuss mailing list
> Desktop-discuss@opensolaris.org
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic