[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: gEDA-dev: glist-dev without screen coordinate caching



Carlos Nieves Ónega writes:
 > [...]
 > You are correct. I don't forgot. I meant this is the first time we talk
 > about how the code works. The stretching problem is a bug, and I
 > consider the SELECTION type like a style comment.

I would have said a 'code readibility issue' or 'maintainability issue
on the mid to long term'... but yeah that's only vocabulary :).


 > [...]
 > I don't want you to shut up. I'd like you emailed a "I see these
 > problems" when you noticed them, and maybe some discussion about how can
 > it be improved where all people (including me) could be able to
 > participate. You don't need to have a working proposal just to say you
 > don't like using the undo functions.

I doubt it would have been much different if I had sent a message on
the 1st of December saying something like:

'the branch is wrongly using the undo system. As a result there is no
autosave in action, it loses the selection when cancelling, and I do
not see a realistic way to fix that, please do not merge the branch'

instead of my message on the 6th of December announcing a possible
improvement before the meeting where the technical aspects of the
merge were going to be discussed.


 > Your diffs are quite huge. Could you write a little brief explaining how
 > the move and copy actions are handled with your changes?

Sure.

The purpose of the alternative is to avoid modifying any object before
the user confirms the action. At any time during the action the user
can cancel and it is guaranteed that the data has not been modified.

To do so, a list of pointers to the objects concerned is built (a GList
in PAGE) and populated with either objects from the place list (a
single list for complex, attribs and text), for place, buffer actions
or from the main object list, for move and copy actions.

Every time the user moves the pointer (translation), require a
rotation or a symetry, a matrix is updated to record the changes the
user requested. This matrix is passed to the draw_xor() function that
display the object transformed but without modifying it.

When the user cancels, it just discards the matrix and the objects
from the place list (if used).

When the user applies the changes, the final matrix is broken down in
a combination of mirror, rotation, translation that is only now
applied to the objects.



Patrick


_______________________________________________
geda-dev mailing list
geda-dev@moria.seul.org
http://www.seul.org/cgi-bin/mailman/listinfo/geda-dev