commit: Fix lots of stuff.


Subject: commit: Fix lots of stuff.
From: Martin Sevior (msevior@mccubbin.ph.unimelb.edu.au)
Date: Thu Jan 31 2002 - 18:17:08 CST


OK this commit is the multi-threaded loader I've been talking about. I've
already explain that so I won't do it again. Also included are fixes for
character dirt caused by italix "f" in the irst column and a major fix for
fields.

For the first time Fields work as they should and automatically update. So
if you put "Word Count" field in your doicument is updates as you type. If
you put "Current Time" in your document it updates in real time.

I got the idea for doing this is a sane way after tracing through the code
that caused list elements to flash. There was code in
fv_View::_generalUpdate to
update every field in the document by scanning every run in the document
after every keypress. There were some good ideas in this code, especially
the "isLayoutDependent()" method on field runs. I changed the name of this
to "needsFrequentUpdates()" and put another bool in fl_BlockLayout
"hasUpdatableField()". This is (un)set during a format if there is a field
run with "needsFrequentUpdates()" true. Then during the background redraw
(which happens every 0.5 seconds) blocks with "HasUpdatableField()" set
have a recalculateFields() done on them. If the field width changes on the
recalculation, the block is reformated. Anyway it all works rather nicely
and scales reasonablly well.

Fields like "Current Time" and "Word Count" have
"needsFrequentUpdates()" set true. Fields like "date", "page number" and
"liast label" do not.

Anyway as far as I can see this all works rather nicely. You can put
clocks in your documents that update once a second now :-)

Regarding the multi-threaded loader, I expect some race conditions to
emerge as this code is tested on other hardware. I got all the conditions
out on the hardware I have handy but thers might appear. Please test post
a stack trace to the list.

I've also included a gzipped patch against previous CVS to help people see
what I've changed.

Anyway enjoy our new features (and implement what's needed on other
platforms :-)

Cheers

Martin

CVS: ----------------------------------------------------------------------
CVS: Enter Log. Lines beginning with `CVS:' are removed automatically
CVS:
CVS: Committing in .
CVS:
CVS: Modified Files:
CVS: src/af/ev/unix/ev_UnixToolbar.cpp
CVS: src/af/gr/unix/gr_UnixGraphics.cpp src/af/gr/xp/gr_Graphics.h
CVS: src/af/xap/beos/xap_BeOSFrame.h
CVS: src/af/xap/cocoa/xap_CocoaFrame.h
CVS: src/af/xap/mac/xap_MacFrame.h src/af/xap/qnx/xap_QNXFrame.h
CVS: src/af/xap/unix/xap_UnixFont.cpp
CVS: src/af/xap/unix/xap_UnixFrame.cpp
CVS: src/af/xap/unix/xap_UnixFrame.h
CVS: src/af/xap/win/xap_Win32Frame.h src/af/xap/xp/xap_Frame.cpp
CVS: src/af/xap/xp/xap_Frame.h src/af/xap/xp/xap_String_Id.h
CVS: src/af/xap/xp/xav_View.cpp src/af/xap/xp/xav_View.h
CVS: src/text/fmt/xp/fl_BlockLayout.cpp
CVS: src/text/fmt/xp/fl_BlockLayout.h
CVS: src/text/fmt/xp/fl_DocListener.cpp
CVS: src/text/fmt/xp/fl_SectionLayout.cpp
CVS: src/text/fmt/xp/fp_Column.cpp
CVS: src/text/fmt/xp/fp_FieldListLabelRun.cpp
CVS: src/text/fmt/xp/fp_FieldListLabelRun.h
CVS: src/text/fmt/xp/fp_Line.cpp src/text/fmt/xp/fp_Run.cpp
CVS: src/text/fmt/xp/fp_Run.h src/text/fmt/xp/fp_TextRun.cpp
CVS: src/text/fmt/xp/fv_View.cpp src/text/fmt/xp/fv_View.h
CVS: src/text/ptbl/xp/pd_Document.cpp
CVS: src/wp/ap/beos/ap_BeOSFrame.cpp
CVS: src/wp/ap/cocoa/ap_CocoaFrame.h
CVS: src/wp/ap/cocoa/ap_CocoaFrame.mm src/wp/ap/mac/ap_MacFrame.cpp
CVS: src/wp/ap/qnx/ap_QNXFrame.cpp src/wp/ap/qnx/ap_QNXFrame.h
CVS: src/wp/ap/unix/ap_UnixFrame.cpp src/wp/ap/unix/ap_UnixFrame.h
CVS: src/wp/ap/unix/ap_UnixLeftRuler.cpp
CVS: src/wp/ap/unix/ap_UnixTopRuler.cpp
CVS: src/wp/ap/win/ap_Win32Frame.cpp src/wp/ap/win/ap_Win32Frame.h
CVS: src/wp/ap/xp/ap_EditMethods.cpp
CVS: src/wp/ap/xp/ap_Preview_Abi.cpp src/wp/ap/xp/ap_String_Id.h
CVS: src/wp/ap/xp/ap_TopRuler.h




This archive was generated by hypermail 2b25 : Thu Jan 31 2002 - 18:19:28 CST