On Wed, 1 May 2002, Titus J. Anderson wrote: > I was looking through the TODO file for dia and ran across the following: > > * If you hold down shift while moving the handle of an 'Element', > scale while keeping same proportions. > > So, I thought I'd try my hand at it.
Excellent! Somebody is actually *reading* that list:) > It only works for boxes right now, but shouldn't be too difficult to make > it work for the other basic objects. Here's the patch for v0.88.1 (I'm > not working with the CVS version at this point.) Thank you! We may hold off on applying it until the shortly upcoming new release, as we're trying to stabilize Dia. [...] > I don't know that this is the best way to do this, but it does work. The > basic idea is in addition to the width and height, keep a copy of the > aspect ratio of an element in the element object. Then, when resizing, > if the shift key is pressed, call the element_move_handle_aspect function > rather than element_move_handle. The element_move_handle function > updates the aspect ratio when it's finished while > element_move_handle_aspect does not, since it should be the same. That's > about it. Just have to make sure that the aspect ratio is calculated > anytime the height or width changes. Putting the aspect ratio calculation into foo_update_data is probably the safest way. > The only real trouble comes when > the height or width is 0. This is a little tricky and I used some ugly > hacks to make it work. Oh, I have to keep track of the ratio in the > element (I guess you could keep it in the box, but then it can't be used > in other objects) because if an object ever gets a width or height of > zero, you don't want to recalculate the ratio. Also, if you calculate > the ratio everytime the move_handle method gets called, if the width goes > to zero, the aspect ratio does as well, and then weird things start > happening (I had what looked like 5 unconnected handles stuck to the side > of the window.) Here's a slightly alternative approach: Only keep the aspect ratio around while resizing with ratio fixed. Initialize the aspect ratio to -1, then if we move with Shift, calculate the aspect ratio. When changing the coordinates, use the aspect ratio if != -1. When moving stops, reset the ratio to -1. That should make sure that the aspect ratio is current without needing changes all over. -Lars -- Lars Clausen (http://shasta.cs.uiuc.edu/~lrclause)| Hårdgrim of Numenor "I do not agree with a word that you say, but I |---------------------------- will defend to the death your right to say it." | Where are we going, and --Evelyn Beatrice Hall paraphrasing Voltaire | what's with the handbasket? _______________________________________________ Dia-list mailing list [EMAIL PROTECTED] http://mail.gnome.org/mailman/listinfo/dia-list