[open-beos-printing] Re: Print Kit Progress Report

  • From: Philippe Houdoin <philippe.houdoin@xxxxxxx>
  • To: open-beos-printing@xxxxxxxxxxxxx
  • Date: Tue, 22 Oct 2002 19:38:45 +0200 (CEST)

> print_server beta 3 is around the corner. The cvs repository contains
> the latest version. This allows to select a printer from within an 
> application. The settings which printer an application
> uses are persistent, also the page setup and job setup
> settings are persistent for each printer.

Woa!
I should look at these great new features, that are way belong R1 
requirements BTW. You've made a great job here.
Again!

> BPrintJob progresses slowly (not in cvs). Most of its methods are
> implemented.
> The print job is created, but not in the printer spooler directory and
> child views of a view are not added to the job file. I don't fully
> understand the semantic of BPrintJob::DrawView(view, rect, point)
> with regard to child views.
> I can find it out, but it would help if someone could explain how 
> point and rect influences the rectangle that is passed to child views 
> via call to BView::Draw(rect).

I'm not sure myself, but here a pseudo-code of my understood 
off DrawView() behavior:

draw_view_hierarchy(BView * view, BRect rect) {
  BView * child;

  if (!view)
    return;

  if (!view->IsVisible())
    return;

  if ((view->Flags() & B_WILL_DRAW) == 0)
    return;

  view->SetPrintingMode(true); // Well, should be some protected BView method
  view->Draw(rect);
  view->SetPrintingMode(false);

  if (child = view->ChildAt(0)) {
    while(child) {
      draw_one_view(child, rect);
      child = child->NextSibling();
    };
  };
}

BPrintJob::DrawView(BView * view, BRect rect, BPoint point)
{
  BPicture * picture;

  view->BeginPicture(new BPicture());
  draw_view_hierarchy(view, rect);
  picture = view->EndPicture();

  write_picture_to_spool(picture, point);
}

In spool job page structure, each flatten bpicture come from one 
DrawView, I bet. When SpoolPage() comes, it *close* the current page block  in 
the spool job.

BTW, give a look at some R5 limitations of DrawView:
http://bang.dhs.org/be/bebook/The%20Interface%20Kit/PrintJob.html#DrawView

> PrintJobReader for reading data from a print job. It allows to
> directly
> access the pages of a print job and allows to iterate through the
> BPictures of a page.
> 
> The test application DumpPrintJob prints the contents of a print job
> using both classes from above.
> 
> The test application Preview that shows the contents of a print job
> similarly to the Preview printer. It uses the class PrintJobReader.
> 
> Anyone want to extend it to a preview printer add-on?

I'll give a look at this Preview test application to see how much work 
is needed to mute it to a Preview print driver.

BTW, for Preview at least, we should add some support to let know 
that a specific printer driver addon don't require a transport. 
Hardcoding this kind of specific right in the Add Printer dialog sounds 
ugly to me. Some special boolean attribut "transport_aware" in the binary addon 
file?
Not that's that much urgent...
 
-Philippe

Other related posts: