On Apr 14, 2016, at 3:28 AM, Jonas Ådahl <jad...@gmail.com> wrote:
> 
> xdg_positioner is a method for declarative positioning of child surfaces
> (currently only xdg_popup surfaces). A client creates a description of a
> positioning logic using the xdg_positioner interface. The xdg_positioner
> object is then used when creating a xdg_popup for describing how the
> child surface should be positioned in relation to the parent surface.
> 
> Signed-off-by: Jonas Ådahl <jad...@gmail.com>
> Signed-off-by: Mike Blumenkrantz <zm...@samsung.com>

Hi,
My last mildly-annoying corrections to this patchset are inline, below.
Thanks for putting up with me. :)

yong


> ---
> unstable/xdg-shell/xdg-shell-unstable-v6.xml | 206 ++++++++++++++++++++++++++-
> 1 file changed, 204 insertions(+), 2 deletions(-)
> 
> diff --git a/unstable/xdg-shell/xdg-shell-unstable-v6.xml 
> b/unstable/xdg-shell/xdg-shell-unstable-v6.xml
> index a2a6f12..2b51802 100644
> --- a/unstable/xdg-shell/xdg-shell-unstable-v6.xml
> +++ b/unstable/xdg-shell/xdg-shell-unstable-v6.xml
> @@ -57,6 +57,15 @@
>       </description>
>     </request>
> 
> +    <request name="create_positioner">
> +      <description summary="create a positioner object">
> +     Create a positioner object. A positioner object is used to position
> +     surfaces relative to some parent surface. See the interface description
> +     for details.
> +      </description>
> +      <arg name="id" type="new_id" interface="zxdg_positioner_v6"/>
> +    </request>
> +
>     <request name="get_xdg_surface">
>       <description summary="create a shell surface from a surface">
>       This creates an xdg_surface for the given surface. While xdg_surface
> @@ -96,6 +105,186 @@
>     </event>
>   </interface>
> 
> +  <interface name="zxdg_positioner_v6" version="1">
> +    <description summary="child surface positioner">
> +      The xdg_positioner provides an interface for constructing positioning
> +      rules used for positioning a child surface relative to another surface
> +      in a certain way. It allows methods for defining a rule that will make
> +      the child surface stay within the border of the visible area of the
> +      screen, with different ways in which the child surface should change
> +      its position, including sliding along an axis, or flipping around a
> +      rectangle.
> +
> +      See the various requests for details about possible rules.
> +
> +      An xdg_positioner object may be re-used when positioning different
> +      surfaces until destroyed using xdg_positioner.destroy.
> +    </description>
> +
> +    <enum name="error">
> +      <entry name="invalid_input" value="0" summary="invalid input 
> provided"/>
> +    </enum>
> +
> +    <request name="destroy" type="destructor">
> +      <description summary="destroy the xdg_positioner object">
> +     Notify the compositor that the xdg_positioner will no longer be used.
> +      </description>
> +    </request>
> +
> +    <request name="set_anchor_rect">
> +      <description summary="set the anchor rectangle of the parent surface">
> +     Specify the anchor rectangle of the parent surface that the child
> +     surface will be placed relative to. The rectangle is relative to the
> +     window geometry as defined by xdg_surface.set_window_geometry of the
> +     parent surface. The rectangle must be at least be 1x1 large.

must be at least 1x1 large.


> +
> +     When used to position a child surface, the attach rectangle may not
> +     extend outside of the window geometry of the parent surface.
> +      </description>
> +      <arg name="x" type="int" summary="x position of anchor rectangle"/>
> +      <arg name="y" type="int" summary="y position of anchor rectangle"/>
> +      <arg name="width" type="int" summary="width of anchor rectangle"/>
> +      <arg name="height" type="int" summary="height of anchor rectangle"/>
> +    </request>
> +
> +    <enum name="anchor">
> +      <entry name="none" value="0"
> +          summary="the center of the anchor rectangle"/>
> +      <entry name="left" value="1"
> +          summary="the left edge of the anchor rectangle"/>
> +      <entry name="right" value="2"
> +          summary="the right edge of the anchor rectangle"/>
> +      <entry name="top" value="4"
> +          summary="the top edge of the anchor rectangle"/>
> +      <entry name="bottom" value="8"
> +          summary="the bottom edge of the anchor rectangle"/>
> +    </enum>
> +
> +    <request name="set_anchor">
> +      <description summary="set anchor rect anchor edges">
> +     Set the anchor edges of the anchor rectangle. The anchor edges
> +     defines where on the anchor rectangle the child surface should

define where ... should be


> +     positioned relative to. An anchor is a bit mask of zero to two values of
> +     the anchor enum. Two values on the same axis (for example left and
> +     right) may not be combined.
> +
> +     If no anchor is set on any axis, the anchor position will be positioned
> +     at the center of the anchor rectangle on the unset axis. The default
> +     value is "none".
> +      </description>
> +      <arg name="anchor" type="uint" bitfield="true"
> +        summary="bit mask of anchor edges"/>
> +    </request>
> +
> +    <enum name="gravity">
> +      <entry name="none" value="0"
> +          summary="center above the anchor position"/>
> +      <entry name="left" value="1"
> +          summary="position to the left of the anchor position"/>
> +      <entry name="right" value="2"
> +          summary="position to the right of the anchor position"/>
> +      <entry name="top" value="4"
> +          summary="position above the anchor position"/>
> +      <entry name="bottom" value="8"
> +          summary="position below the anchor position"/>
> +    </enum>
> +
> +    <request name="set_gravity">
> +      <description summary="set child surface gravity">
> +     The gravity defines in what direction a surface would be positioned,
> +     relative to the anchor position on the parent surface. A gravity
> +     is a bit mask of zero to two values of the gravity enum. Two values
> +     on the same axis (for example left and right) may not be combined.
> +
> +     If no gravity is set on an axis, the gravity for that axis will be
> +     equivalent to setting "none" for that axis, resulting in the child being
> +     centered over the anchor on that axis.
> +      </description>
> +      <arg name="gravity" type="uint" bitfield="true"
> +        summary="bit mask of gravity directions"/>
> +    </request>
> +
> +    <enum name="constrain_action">
> +      <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 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.
> +       If the left side of the surface is constrained, slide towards the
> +       right; if the right side of the surface is constrained, slide towards
> +       the left. If both sides are ends up being constrained, the behaviour 
> is

If both sides end up being constrained,


> +       undefined.
> +     </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.
> +       If the top side of the surface is constrained, slide towards the
> +       bottom; if the bottom side of the surface is constrained, slide 
> towards
> +       the top. If both sides are ends up being constrained, the behaviour is

If both sides end up being constrained,


> +       undefined.
> +     </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_action">
> +      <description summary="set the action to be done when constrained">
> +     Specify how the window should be positioned if the originally intended
> +     position caused the surface to be constrained, meaning partially outside
> +     positioning boundaries set by the compositor. The action is set by
> +     constructing a bitmask with one bit per axis set describing the action
> +     to be taken 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 action is none.
> +      </description>
> +      <arg name="constrain_action" type="uint" bitfield="true"
> +        summary="bit mask of constrain actions"/>
> +    </request>
> +
> +    <request name="set_offset">
> +      <description summary="set surface position offset">
> +     Specify the surface position offset relative to the position of the
> +     anchor on the anchor rectangle and the anchor on the surface. For
> +     example if the anchor of the anchor rectangle is at (x, y), the surface
> +     has the gravity bottom|right, and the offset is (ox, oy), the calculated
> +     surface position will be (x + ox, y + oy). The offset position of the
> +     surface is the one used for constraint testing. See
> +     set_constraint_actions.

set_constrain_action.


> +
> +     An example use case is placing a popup menu on top of a user interface
> +     element, while aligning the user interface element of the parent surface
> +     with some user interface element placed somewhere in the popup surface.
> +      </description>
> +      <arg name="x" type="int" summary="surface position x offset"/>
> +      <arg name="y" type="int" summary="surface position y offset"/>
> +    </request>
> +  </interface>
> +
>   <interface name="zxdg_surface_v6" version="1">
>     <description summary="desktop user interface surface base interface">
>       An interface that may be implemented by a wl_surface, for
> @@ -167,8 +356,7 @@
>       </description>
>       <arg name="id" type="new_id" interface="zxdg_popup_v6"/>
>       <arg name="parent" type="object" interface="zxdg_surface_v6"/>
> -      <arg name="x" type="int"/>
> -      <arg name="y" type="int"/>
> +      <arg name="positioner" type="object" interface="zxdg_positioner_v6"/>
>     </request>
> 
>     <request name="set_window_geometry">
> @@ -675,6 +863,20 @@
>       <arg name="serial" type="uint" summary="the serial of the user event"/>
>     </request>
> 
> +    <event name="configure">
> +      <description summary="configure the popup surface">
> +     This event asks the popup surface to configure itself given the
> +     configuration. It is not sent by itself but is a latched state finalized
> +     by the xdg_surface.configure event.
> +
> +     The x and y arguments represents the position the popup was placed at

represent


> +     given the xdg_positioner rule, relative to the upper left corner of the
> +     window geometry of the parent surface.
> +      </description>
> +      <arg name="x" type="int" summary="X position relative to parent 
> surface"/>
> +      <arg name="y" type="int" summary="Y position relative to parent 
> surface"/>

I suggest downcasing X and Y, consistent with similar summaries.


> +    </event>
> +
>     <event name="popup_done">
>       <description summary="popup interaction is done">
>       The popup_done event is sent out when a popup is dismissed by the
> -- 
> 2.4.3
> 
> _______________________________________________
> wayland-devel mailing list
> wayland-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/wayland-devel

_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to