Re: Snap rewrite #2

2021-12-02 Thread Dominik Vogt
On Thu, Dec 02, 2021 at 11:25:07AM -0700, Jaimos Skriletz wrote:
> On Thu, Dec 2, 2021 at 10:46 AM Dominik Vogt  wrote:
> >
> > This is about an accident during elastic paging development, but
> > it feels "good" to me.  I've secretly always hated the "snapping"
> > effect of snap attraction.  Windows jumping around is confusing,
> > especially if the distance is big, e.g. if you use a "100" edge
> > resistance.  So here is the new idea:
> >
>
> I like it when my window snap to edges/other windows. Though I also
> like this idea as well, I can see both being useful. Is this going to
> be configurable so a user can use the behavior they prefer?

It could be configurable at the cost of complete code duplication.
The existing method is only aware of the window's requested
position.  The new method needs to keep two window positions, the
position where it was blocked and the position where it would be
if there were no blocking.

Apart from the visual annoyance, the conventional method has some
usability problems because it's impossible to place windows a few
pixels away from other windows, or a little bit over the screen
edge.  (Of course you can do that with the Alt key, but few people
know about the keybindings at all).

Ciao

Dominik ^_^  ^_^

--

Dominik Vogt



Re: Snap rewrite #2

2021-12-02 Thread Jaimos Skriletz
On Thu, Dec 2, 2021 at 10:46 AM Dominik Vogt  wrote:
>
> This is about an accident during elastic paging development, but
> it feels "good" to me.  I've secretly always hated the "snapping"
> effect of snap attraction.  Windows jumping around is confusing,
> especially if the distance is big, e.g. if you use a "100" edge
> resistance.  So here is the new idea:
>

I like it when my window snap to edges/other windows. Though I also
like this idea as well, I can see both being useful. Is this going to
be configurable so a user can use the behavior they prefer?

jaimos



Re: Removig the "Emulate" command

2021-12-02 Thread Jaimos Skriletz
On Thu, Dec 2, 2021 at 6:15 AM Dominik Vogt  wrote:
>
> The command
>
>   emulate mwm
>
> has almost no effect.  I'd like to remove it.  There are only
> three things it controls:
>
> 1) The geometry window during move and resize is hard coded to the
>center of the screen.
>
>=> Give the window it's coordinates explicitly.

There is already a new GeometryWindow option which can control the
location of the geometry window. So this is now fully configurable
outside of the emulate options.

>
> 2) During an interactive placement, to tell fvwm that you want to
>resize the window after placement:
>  mwm mode:  press shift + button 1
>  fvwm mode: press button 2
>
>=> Just allow both.
>

Is this configurable via some binding. If not we should make the
button for this configurable via a binding, and just choose one for
the default behavior that can be changed.

> 3) Some weirdness about initial drawing of the wire frame.
>
>=> Remove that special case.  It makes zero sense.
>
> Opinions?

I'm unsure of any other problems here. I would just put some other
method to configure these aspects if there isn't already one in place.

jaimos



Snap rewrite #2

2021-12-02 Thread Dominik Vogt
This is about an accident during elastic paging development, but
it feels "good" to me.  I've secretly always hated the "snapping"
effect of snap attraction.  Windows jumping around is confusing,
especially if the distance is big, e.g. if you use a "100" edge
resistance.  So here is the new idea:

When one window is pushed against another window's border or some
other barrier (screen edge, whatever):

  A +B +  C   +
   *|  |* |   *
  -+|-+|  -+
   |+ |+  +|---
  -+ -+   -+
 ->   ->  ->

It stops in that position while the pointer moves on (* in the
image), image B.  When the pointer finally moves too far, the
window does not jump towards the pointer position but simply
resumes moving as if this "blocking" never happened (image C).

When moving the window back to the left, it just moves freely
without being blocked in any place.

Think of the other windows border as a jammed door:  To get
through, you have to push.  This causes pressure, and when that's
hight enough, the door opens.  Going back is easy because the door
is already open.  And if you can give up pushing at any time and
just walk back.

--

To push a window past the screen edge, just keep pushing.  Once
the edge's resistance is overcome, the window moves as if nothing
had happened.  When you pull it back, it won't snap back to the
screen unless you push it aginst the border again.

--

This is now all possible because the elastic paging code keeps the
pointer in the middle of the screen (invisible).

There may be some tricky situations when top and bottom border are
both near obstacles.

--

To get a feeling for the new code (maybe 40% complete), check the
latest version of the branch "dv/elastic-paging-prototype".

It doesn't have paging yet or the new "snap" method.  But do try
to move windows over screen edges and try pressing Shift/Control
during mouse movement.  With Shift the window moves much faster
(factor 8) and with Conrol slower (factor 0.5).  Now that the
fixed offset between pointer and window position doesn't exist
anymore, it's easy to do things like this.

Ciao

Dominik ^_^  ^_^

--

Dominik Vogt