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
thread_field.patch.gz
Description: Binary data
