Re: [patch] "normal" layout

Paul Rohr (paul@abisource.com)
Fri, 11 Jun 1999 11:47:48 -0700


Aaron,

Thanks for diving in and starting this project. I expected from my intro
that you'd go for the less ambitious dialog work, so I'm impressed with your
rapid start on this.

At 07:38 AM 6/11/99 +0000, Aaron Lehmann wrote:
>I went ahead and played arround in src/text/fmt/xp and came up with a
>partially-complete patch for a "normal" layout mode. Note that this patch
>forces abiword to use normal mode, since I haven't even tried playing with
>menu items and etc. yet.

I haven't applied the current patch, because I think we first want to get
closer to an implementation of Normal View that our target user, a church
secretary, would think Just Works the way they expect:

- don't draw borders or background (DONE)
- top ruler starts at the left margin, not the left of the page
- no left ruler
- format all content as inline blocks in series (SEE BELOW)
- labelled dotted or dashed lines for page / section / column breaks
- still print like the existing "page layout" view
- easy toggling between modes

Not surprisingly, all the hard work remains. :-(

One of the chief advantages of the current "page view" mode is that it's
a totally WYSIWYG layout, which makes printing easy. Yes, we had to do a
bunch of work to get all that math for page separation, margins, etc. in
place so that drawing, selections, mouse hit-tests, etc. functioning
properly, but at least it's done.

Forgive the ASCII art, but this means that with the right set of section,
column, and page breaks, we can render and print a layout like:

Header

Section 1 XXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXX
XXXX

Section 2, Column 2 X
Column 1 X XXXXXXXXXX
XXXXXXXXXX XXXXXXXXXX
XXXXX XXXXXXXXXX
XXXXX

Section 3 XXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXX
(forced page break)

Footer

----------------------

Header

Sec. 3 cont. XXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXX etc.

By contrast, doing a true normal view means that the same content needs to
be formatted and rendered quite differently for online:

Section 1 XXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXX
XXXX

(section break)

Section 2,
Column 1 X
XXXXXXXXXX
XXXXX

(column break)

Column 2 X
XXXXXXXXXX
XXXXXXXXXX
XXXXXXXXXX
XXXXX

(section break)

Section 3 XXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXX

(forced page break)

Sec. 3 cont. XXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXX etc.

To accomplish this effect, you'll need to dive (much?) further into the
formatter and make sure that everything occupies a single continuous flow.
Page constraints will still apply (for calculating line and page breaks),
but they have a very different affect on the layout and rendering. Worse,
you'll need to find a way to still run the existing layout algorithms at
print time, since nobody ever wants true WYSIWYG of a normal layout.

There may also be some additional page-centric assumptions in the ruler
code, but I expect that they'll be much easier to address.

Note that we'll need a similarly significant refactoring of the layout and
display algorithms to add outline mode. At first blush, I'd guess that the
layout work would be harder in this case, but the printing would be easier
(since that's a more WYSIWYG layout).

Bottom line
-----------
To make either Normal or Outline view Just Work is a significant project
because of the layout refactoring needed. Take another look at the code and
you'll see what I mean. If you're still interested in going forward, that's
great.

If not, we totally understand. After all, we deliberately punted all this
work to a future release, too. ;-)

>And I must point out - Abi is one of the best organized large source trees
>I had ever seen. I was able to dive into it and understand how everything
>worked. Perhaps becuase it's good old C++ :).

We've also worked on big bad source trees before, and we're trying to do
better with this one. The fact that we started from scratch helped. :-)

Thanks.

Paul



This archive was generated by hypermail 1.03b2.