Old Virtual Pen Project History
29-30 June 2002
- Week-end. Reading Knuth's excellent Digital Typography.
28 June 2002
- Continuing work on creation and selection.
- Cleaning up the selection code.
27 June 2002
- Continuing work on creation and selection.
- I finally have the pen tool working properly; the VP.FrontEnd.Controller.DocView
is now almost clean.
26 June 2002
- Experimentation with InDesign 2.0 and OpenOffice.org 1.0. Both
have interesting behaviours, yet none are fully compatible. I will have to
choose the interaction based on my intuition, rather than consensus, since
there seems to be none.
- Selection now works as expected :
- A drag produces a rectangular selection zone. All
objects within that zone get added to the selection.
- A click (or tiny drag) produces a "pick"
selection. Only the object below the cursor gets added to the selection
(or removed from it, if it was in the selection and the user pressed
SHIFT when releasing the button).
- A click outside of any object deselects all selected
objects, unless SHIFT is pressed (in this case, nothing happens).
- When releasing the button, the state of the SHIFT key
determines if the former selection is kept or not (pressing SHIFT keeps
it).
25 June 2002
- Continuing work on creation and selection.
- No work this afternoon.
24 June 2002
- Made sub-path detection possible, in order to know where the cursor is,
when hovering over a complex figure. This uses GDI+ graphic
path markers, but the path iterator cannot be used, since it
mysteriously skips some markers.
- Modified all path generating object management classes in order to include
markers in their output. The markers can be used to identify sections
in paths, which is very useful when trying to find where the cursor is
hovering in a figure.
- Modified command DetectObjectOutlineAtPos
in order to return also the grips just before and after the detected
position in the figure.
- The bug in GDI+ is real. I have set up a page
which describes it in more detail. Tried to contact Microsoft on this
issue...
23-22 June 2002
- No work this week-end (just a few hours on Sunday evening).
21 June 2002
- VP::DocView supports a clipping rectangle
when rendering. This is used by command QueryViewAlphaAtPos.
- Added the QueryViewAlphaAtPos
command to determine if a certain point in the document view contains paint
(and if yes, which alpha value the resulting paint has). Coupled to limited
document rendering, this command can be used to determine if an object is
obscured by others at a specific position.
- Finished detection mechanism, which is transparency aware (see command
above). The worker thread now sorts the detected objects and marks the
obscured objects as such.
- Detect selected objects in the same pass as painting (experimental),
thanks to changes in VP::DocView, which also
produces a highlight of the possible candidates picked by the detection
mechanism.
- There seems to be a bug in GDI+ region handling. Following region addition
is wrong :
20 June 2002
- Continuing implementation of tool behaviour.
- The asynchronous worker thread is used to analyse what objects are below
the cursor. Since this might be time consuming, it is best to execute the
search in parallel. If the cursor moves while an analysis is still pending,
it gets interrupted and the new position is used for the next analysis.
- Added detection command used to locate objects based on their surface
(detection based on the object outline already existed).
- Added the notion of depth when rendering graphic objects (and
groups, which are trickier, since when skipping a group we have to increase
the depth). This allows the BelowCursorFinder
class to sort its hits and easily determine which object must be considered
when several choices are possible.
- Revised the VP::Render::Context matching
filter (used by method Execute) and added a
few flags (FLAG_DISABLE_PAINT,
FLAG_PAINT_ALPHA_BLACKNESS), which are used
by A-Color, A-Surface,
A-Outline and VP::DocView
to provide alpha related hit detection.
19 June 2002
- Implementing tool behaviour : every tool now has an associated class
(currently, there is a MainToolPen, a MainToolCursorArrow
and MainToolCursorIBeam). Part of the logic
formerly coded into the document view controller has moved into the new tool
classes.
- Added asynchronous worker thread.
18 June 2002
- Continuing work on revised VP user interface.
- Display the icon of the currently selected tool when in 'pen' mode.
- Added support for threading in command execution (the different elements
in VP now call Application.CommandHub.Execute
instead of calling CoreWrapper.CommandHub.Execute :
the application's command hub wrapper handles individual command locking and
complex transaction locking). This paves the way for background worker
threads which could do complex, interruptible tasks.
- Daniel has done some nice artwork for the Virtual Pen logo.
17 June 2002
- Updating my article
on The Code Project about my XP compatible TabPage
class.
- Continuing work on revised VP user interface.
16 June 2002
- Finishing work on the revised .NET widget set. This was a painful and very
frustrating experience : little documentation from Microsoft, illogical
behaviour in uxtheme.dll and in the .NET framework with respect to the
processing of WM_ERASEBKGND. Finally, I had
to reimplement the TabPage, GroupBox
and CheckBox classes. The standard RadioButton
works fine, however !
15 June 2002
- Continuing work on the revised .NET widget set.
14 June 2002
- Removed the a.path.closed attribute,
which does not really make sense as an attribute, and turned it into a flag of the
polyline and Bézier objects (more specifically, class VP::DocObj::MultiPt
now supports flags and MULTI_PT_PATH_CLOSED
is used to mark a multi point path closed).
- Started re-implementation of the user interface.
- Working on a revised .NET widget set which would allow the use of the XP
theme with the TabPage class. It is a shame
that .NET does not provide this by default. (the implentation of 9 June was
not working in all cases).
13 June 2002
- More thinking on the user interface design...
- Working for CRESUS Safe.
12 June 2002
- More thinking on the user interface design...
11 June 2002
- After yesterday's discussions, I will try to define what kind of tools
will be implemented in Virtual Pen, and how they will be made available to
the user. And Daniel won't work for the Virtual Pen plug-ins for at least
one more month.
10 June 2002
- Meeting with Daniel Roux.
9 June 2002
- Worked on a simple tool, external to VP, which allows me to test a few
.NET features (currently just formatting of numbers). While doing so, I
found that you cannot create TabPage instances with the XP
look & feel in .NET ! This took me about 6 hours to
figure out and find a way to nevertheless create tabbed views with C#.
- Experimented with uxtheme.dll in C# (created a managed C++ wrapper
for C#).
- Created a new TabPage class which uses uxtheme.dll
(when available) to provide an XP look.
8 June 2002
- Worked only the morning : trying to understand if Uniscribe is enough
for what I want to do in Virtual Pen. Obviously, it is not. Therefore, I
contacted Microsoft Typography group to get access to OTLS.
7 June 2002
6 June 2002
- Continuing work on the Bézier curve (adding support for primary point attribute
definition).
- Read book on C# by Eric Gunnerson. Good book, even if there are quite a
few typos.
5 June 2002
- Finished attribute edition (!). This took about 50 hours of work, but now
I have a clean implementation, which can be understood without becoming
crazy. Style replacement and style cloning both work fine. Picking a common
style when selecting multiple different objects is also OK.
- Added a TestFeature
method to VP.PIS.GUI.IObject interface.
- Added command FindObjectByUcid which can
be used to locate a PointDef object in a
figure, for instance.
- Started work on the Bézier tool to manipulate curve control points.
4 June 2002
- Added support for hiding/showing controls added to a VP.Forms.SepLine.
- Added support for a default text shown in the status bar, when no cursor
coordinates are displayed. The document view controller manages this
behaviour.
- Working on attribute edition when several different objects are
selected (propose a choice : either reset all attributes to default
family style or select one of the styles as the reference).
3 June 2002
- Finished the redesign of the attribute edition code.
- Finished rewrite of the color attribute edition code. It is amazing how
things can become simple if implemented correctly.
- Finished cleanup of AttributeAnalyser, AttributeBlock
and AttributeDef. These classes are now
simple and easy to maintain and no longer contain any dead code.
- Finished the painful extraction of VP::Styled
with all its ramifications. Its services are no longer needed, since
everything is now handled by the VP.FrontEnd.Logic.AttributeEditor
class. Also removed the CloneStyle, ReadAttribute,
WriteAttribute and QueryRootStyle(s)
commands, added a QueryFamilyStyle which
does logically the same as QueryRootStyle,
but without VP::Styled.
- Tried out a deployment project in Visual Studio. This allowed me to
build an msi compatible package which can be used to install Virtual
Pen (localisation is supported !), but there is no support for
automatic .NET Framework installation.
- Experimented witht the performance counters provided by perfmon.exe
to see how .NET behaves (GC, JIT, etc.). The GC does not produce the
slightest measurable glitch. Microsoft did a great job...
2 June 2002
- Continuing the redesign of the attribute edition code. Completely changed
the implementation of the alpha and line width attribute plug-ins. Started
new implementation of the color attribute plug-in.
1 June 2002
- Continuing the redesign of the attribute edition code. This is going to
drive me nuts... I must be very careful not to break anything else while
extracting the attribute GUI and replacing it with something more efficient
and compatible with the new way of cloning.
History of previous months.