On Tue, Jun 14, 2016 at 01:01:15PM -0400, Jonas Ådahl wrote:
> On Thu, Jun 09, 2016 at 12:05:28AM +0200, Benoit Gschwind wrote:
> > Hello Jonas,
> > 
> > The proposal of xdg_positioner is a good idea. I still need to review
> > your proposal deeper, but at the moment I have few question to help my
> > understanding.
> > 

... snip ...

> > > +
> > > +    <enum name="constrain_adjustment" bitfield="true">
> > > +      <entry name="none" value="0">
> > > + <description summary="don't move the child surface when constrained">
> > > +   Don't alter the surface position even if it is constrained on some
> > > +   axis, for example partially outside the edge of a monitor.
> > > + </description>
> > > +      </entry>
> > > +      <entry name="slide_x" value="1">
> > > + <description summary="move along the x axis until unconstrained">
> > > +   Slide the surface along the x axis until it is no longer constrained.
> > > +
> > > +   First try to slide towards the direction of the gravity on the x axis
> > > +   until either the edge in the opposite direction of the gravity is
> > > +   unconstrained or the edge in the direction of the gravity is
> > > +   constrained.
> > > +
> > > +   Then try to slide towards the opposite direction of the gravity on the
> > > +   x axis until either the edge in the direction of the gravity is
> > > +   unconstrained or the edge in the opposite direction of the gravity is
> > > +   constrained.
> > > + </description>
> > > +      </entry>
> > > +      <entry name="slide_y" value="2">
> > > + <description summary="move along the y axis until unconstrained">
> > > +   Slide the surface along the y axis until it is no longer constrained.
> > > +
> > > +   First try to slide towards the direction of the gravity on the y axis
> > > +   until either the edge in the opposite direction of the gravity is
> > > +   unconstrained or the edge in the direction of the gravity is
> > > +   constrained.
> > > +
> > > +   Then try to slide towards the opposite direction of the gravity on the
> > > +   y axis until either the edge in the direction of the gravity is
> > > +   unconstrained or the edge in the opposite direction of the gravity is
> > > +   constrained.
> > > + </description>
> > > +      </entry>
> > > +      <entry name="flip_x" value="4">
> > > + <description summary="invert the anchor and gravity on the x axis">
> > > +   Invert the anchor and gravity on the x axis if the surface is
> > > +   constrained on the x axis. For example, if the left edge of the
> > > +   surface is constrained, the gravity is 'left' and the anchor is
> > > +   'left', change the gravity to 'right' and the anchor to 'right'. If
> > > +   the resulting position after inverting ends up also being constrained,
> > > +   the behaviour is undefined.
> > > + </description>
> > > +      </entry>
> > > +      <entry name="flip_y" value="8">
> > > + <description summary="invert the anchor and gravity on the y axis">
> > > +   Invert the anchor and gravity on the y axis if the surface is
> > > +   constrained on the y axis. For example, if the bottom edge of the
> > > +   surface is constrained, the gravity is 'bottom' and the anchor is
> > > +   'bottom', change the gravity to 'top' and the anchor to 'top'. If
> > > +   the resulting position after inverting ends up also being constrained,
> > > +   the behaviour is undefined.
> > > + </description>
> > > +      </entry>
> > > +    </enum>
> > > +
> > > +    <request name="set_constrain_adjustment">
> > > +      <description summary="set the adjustment to be done when 
> > > constrained">
> > > + Specify how the window should be positioned if the originally intended
> > > + position caused the surface to be constrained, meaning at least
> > > + partially outside positioning boundaries set by the compositor. The
> > > + adjustment is set by constructing a bitmask with one bit per axis set
> > > + describing the adjustment to be made when the surface is constrained on
> > > + that axis. If no bit for one axis is set, the compositor will assume
> > > + that the child surface should not change its position on that axis when
> > > + constrained. The default adjustment is none.
> > > +      </description>
> > > +      <arg name="constrain_adjustment" type="uint"
> > > +    summary="bit mask of constrain adjustments"/>
> > 
> > Does setting all the bitmask mean do what you prefer to the compositor ?
> 
> No, as written, its "one bit per axis".
> 
> > 
> > Would it be better to give a priority list like: try flip_x first, then
> > try slice_x then try flip_y for example ?
> 
> That would complicate the semantics of the constraints we have. For
> example, you could not try flipping after having tried sliding, since
> sliding is defined in a moving mechanism, not an boolean "on-off".
> 
> I think it might be more sane to just leave that case (flip and fallback
> to slide) out right now, and if we actually end up needing it, adding
> more rules to the enum is easy, and we can clearly specify the semantics
> without having to deal with inter-rule semantics.
> 

I have changed my mind about this part, I think it makes sense to be
able to combine them, kind of in a way that is what you described. But
rather than having a array, which would allow to create invalid
combinations, we should just allow combining them in a bitmask,
documenting the meaning of the combination.

For example, starting with "sliding" then falling back to "flipping" is
tricky, because "sliding" is defined as a set of actions; while
"flipping" and then falling back to "sliding" does make sense, because
flipping is more of a "boolean" transition.

So in the next version I'll change it to make it posible to allow more
than one bit set per axis, while what can be combined and the meaning of
it.


Jonas
_______________________________________________
wayland-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to