[prev in list] [next in list] [prev in thread] [next in thread] 

List:       koffice-devel
Subject:    Re: Request for comment: snapping in kivio / flake
From:       Sven Langkamp <sven.langkamp () gmail ! com>
Date:       2009-08-30 17:45:17
Message-ID: 478b087a0908301045v11e50272t84f257b4d3ad543b () mail ! gmail ! com
[Download RAW message or body]

[Attachment #2 (multipart/alternative)]


On Sun, Aug 30, 2009 at 2:57 PM, Andrew Dorrell <andrew.dorrell@gmail.com>wrote:

> Hi,
>
> The first thing I found myself hankering for when playing with kivio was
> snapping.  Then I found there was the start of snapping already implemented
> within flake; a snapping docker and a few menu options also.  The design
> seemed good from the perspective that snapping would be available in all
> apps
> and there seems to be plenty of scope for writing new snapping strategies.
>
> However I found that the current operation of snapping didn't really meet
> my
> expectations and in general seemed difficult to understand and a bit
> clunky.
> So after asking on IRC I agreed to post a discussion item.
>
> What follows is my notes on how I'd like to see snapping work (some of this
> is
> already implemented, I'm just trying to be complete):
>
> Requirements:
> ------------------
> 1. Objects should be easy to align with each other and the page.  As mouse
> placement can be imprecise, snapping is used to attract objects to
> preferred
> positions on the page.
>
> 2. Snapping should be applied appropriately when objects are moved,
> resized,
> rotated etc.
>
> 3. It should be possible to temporarily toggle snapping mode during object
> moving, resizing etc.  This requirement implies a modifier key be used.


Shift


> 4. It should be possible to adjust the "strength" of snapping


The proximity distance used for the snapping is configurable in the snapping
docker.

5. Objects should snap during a move or resize operation so as to:
>    a. align any edge of the object being modified with and edge of another
>        object on the page
>    b. align the center of the object being modified with the center of
>        another object on the page
>    c. match the size of of the object being modified to the size of an
>        existing object on the page (resize only)
>    d. align any edge of the object with a page grid
>
> (As an aside I should point out that I don't like snap to grid but it will
> be
> familiar and a desired feature.  Grid snapping goes bad if the grid
> dimentions
> are changed or if objects are resized as a group etc.  I'd like to keep
> grid
> and object snapping as separate concepts.)
>
> 6. Objects should snap during rotation so as to:
>    a. match the rotation of the object being modified to the rotation of an
>        existing, previously rotated, object on the page.
>    b. align the axis of rotation with multiples of a rotation step size
> (say
>        15 degrees)


a. is currently missing
b. is done with alt modifier, currently 45 degrees steps


> 7.  It should be possible to snap the position and / or size of an object
> to a
>     ruler so that the actual drawn dimentions of the object are effectively
>     specified.  This is a little like snap to grid except that it can
> easily
>     be used just to fix the size of and object, not its position on the
> page.


We have snapping to guide lines, which can also provide this.


> 8.  When snapping to another object, the grid or a ruler, visual feedback
> will
>     be provided so that the user can see both the object being snapped to
> and
>     the mode of snapping being employed.


Mostly done I think. Depending on the snapping strategy the guide or point
used to snapping will be highlighted.


> 9.  It should be possible to exclude objects from the snapping rules so
>     that no object will snap-to the excluded objects.  This would take two
>     forms:
>     a. Explicitly exclude an object by modifying its properties
>     b. Implicitly exclude an object by adjusting the page view (by zoom and
>         scroll) so that the object to be excluded is not visible.
>
> (Second aside: I'd like to see it possible to resize the document page in a
> similar way to any other shape - perhaps via the master page? and in that
> case
> I'd expect the operation to make use of ruler snapping as well as
> significant
> size snapping: tight bounding box and standard paper sizes).
>
>
> User controls:
> ------------------
> My first hack at the controls I would expect to see on the docker for
> snapping
> are:
> "snapping mode" check boxes: object; grid; ruler
> "snapping strength" slider
> "snap only to visible objects"
> "Prevent snapping to this object" toggle.
>

The snapping mode are mostly there and even more fine-grained than that.
There also is the proximity spinbox and I don't think it needs a slider.
Most of your suggestions could be implemented as extensions of the current
snapping strategys.

You should discuss the snapping with Jan Hambrecht who wrote the snapping.
Note that we are currently is feature freeze.


>
>
>
> Okay... so there is the kind of thing I'd like to see, personally.  I'm not
> sure how significantly this violates current use cases or working modes
> etc.
> Please comment freely.

[Attachment #5 (text/html)]

<div class="gmail_quote">On Sun, Aug 30, 2009 at 2:57 PM, Andrew Dorrell <span \
dir="ltr">&lt;<a href="mailto:andrew.dorrell@gmail.com" \
target="_blank">andrew.dorrell@gmail.com</a>&gt;</span> wrote:<br><blockquote \
class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt \
0pt 0.8ex; padding-left: 1ex;">

Hi,<br>
<br>
The first thing I found myself hankering for when playing with kivio was<br>
snapping.  Then I found there was the start of snapping already implemented<br>
within flake; a snapping docker and a few menu options also.  The design<br>
seemed good from the perspective that snapping would be available in all apps<br>
and there seems to be plenty of scope for writing new snapping strategies.<br>
<br>
However I found that the current operation of snapping didn&#39;t really meet my<br>
expectations and in general seemed difficult to understand and a bit clunky.<br>
So after asking on IRC I agreed to post a discussion item.<br>
<br>
What follows is my notes on how I&#39;d like to see snapping work (some of this \
is<br> already implemented, I&#39;m just trying to be complete):<br>
<br>
Requirements:<br>
------------------<br>
1. Objects should be easy to align with each other and the page.  As mouse<br>
placement can be imprecise, snapping is used to attract objects to preferred<br>
positions on the page.<br>
<br>
2. Snapping should be applied appropriately when objects are moved, resized,<br>
rotated etc.<br>
<br>
3. It should be possible to temporarily toggle snapping mode during object<br>
moving, resizing etc.  This requirement implies a modifier key be \
used.</blockquote><div><br>Shift<br> </div><blockquote class="gmail_quote" \
style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; \
padding-left: 1ex;">


4. It should be possible to adjust the &quot;strength&quot; of \
snapping</blockquote><div><br>The proximity distance used for the snapping is \
configurable in the snapping docker.<br><br></div><blockquote class="gmail_quote" \
style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; \
padding-left: 1ex;">


5. Objects should snap during a move or resize operation so as to:<br>
    a. align any edge of the object being modified with and edge of another<br>
        object on the page<br>
    b. align the center of the object being modified with the center of<br>
        another object on the page<br>
    c. match the size of of the object being modified to the size of an<br>
        existing object on the page (resize only)<br>
    d. align any edge of the object with a page grid<br>
<br>
(As an aside I should point out that I don&#39;t like snap to grid but it will be<br>
familiar and a desired feature.  Grid snapping goes bad if the grid dimentions<br>
are changed or if objects are resized as a group etc.  I&#39;d like to keep grid<br>
and object snapping as separate concepts.)<br>
<br>
6. Objects should snap during rotation so as to:<br>
    a. match the rotation of the object being modified to the rotation of an<br>
        existing, previously rotated, object on the page.<br>
    b. align the axis of rotation with multiples of a rotation step size (say<br>
        15 degrees)</blockquote><div><br>a. is currently missing<br>b. is done with \
alt modifier, currently 45 degrees steps<br> </div><blockquote class="gmail_quote" \
style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; \
padding-left: 1ex;">


7.  It should be possible to snap the position and / or size of an object to a<br>
     ruler so that the actual drawn dimentions of the object are effectively<br>
     specified.  This is a little like snap to grid except that it can easily<br>
     be used just to fix the size of and object, not its position on the \
page.</blockquote><div><br>We have snapping to guide lines, which can also provide \
this.<br> </div><blockquote class="gmail_quote" style="border-left: 1px solid \
rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">


8.  When snapping to another object, the grid or a ruler, visual feedback will<br>
     be provided so that the user can see both the object being snapped to and<br>
     the mode of snapping being employed.</blockquote><div><br>Mostly done I think. \
Depending on the snapping strategy the guide or point used to snapping will be \
highlighted. <br> </div><blockquote class="gmail_quote" style="border-left: 1px solid \
rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">


9.  It should be possible to exclude objects from the snapping rules so<br>
     that no object will snap-to the excluded objects.  This would take two<br>
     forms:<br>
     a. Explicitly exclude an object by modifying its properties<br>
     b. Implicitly exclude an object by adjusting the page view (by zoom and<br>
         scroll) so that the object to be excluded is not visible.<br>
<br>
(Second aside: I&#39;d like to see it possible to resize the document page in a<br>
similar way to any other shape - perhaps via the master page? and in that case<br>
I&#39;d expect the operation to make use of ruler snapping as well as significant<br>
size snapping: tight bounding box and standard paper sizes).<br>
<br>
<br>
User controls:<br>
------------------<br>
My first hack at the controls I would expect to see on the docker for snapping<br>
are:<br>
&quot;snapping mode&quot; check boxes: object; grid; ruler<br>
&quot;snapping strength&quot; slider<br>
&quot;snap only to visible objects&quot;<br>
&quot;Prevent snapping to this object&quot; toggle.<br>
</blockquote><div><br>The snapping mode are mostly there and even more fine-grained \
than that. There also is the proximity spinbox and I don&#39;t think it needs a \
slider.<br>Most of your suggestions could be implemented as extensions of the current \
snapping strategys.<br> <br>You should discuss the snapping with Jan Hambrecht who \
wrote the snapping. Note that we are currently is feature freeze.<br> \
</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, \
204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> <br>
<br>
<br>
Okay... so there is the kind of thing I&#39;d like to see, personally.  I&#39;m \
not<br> sure how significantly this violates current use cases or working modes \
etc.<br> Please comment freely.</blockquote><div><br><br> </div></div><br>



_______________________________________________
koffice-devel mailing list
koffice-devel@kde.org
https://mail.kde.org/mailman/listinfo/koffice-devel


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic