[PATCH 2/2] protocol: Support scaled outputs and surfaces
Bill Spitzak
spitzak at gmail.com
Mon May 20 17:58:30 PDT 2013
Pekka Paalanen wrote:
>> This seems pretty limiting to me. What happens when *all* the outputs
>> are hi-res? You really think wayland clients should not be able to take
>> full advantage of this?
>
> Then the individual pixels are so small that it won't matter.
It does not matter how tiny the pixels are. The step between possible
surface sizes and subsurface positions remains the size of a scale-1
unit. Or else I am seriously mis-understanding the proposal:
Let's say the output is 10,000dpi and the compositor has set it's scale
to 100. Can a client make a buffer that is 10,050 pixels wide appear 1:1
on the pixels of this output? It looks to me like only multiples of 100
are possible.
>>> If nothing else it makes it so that subsurfaces are
>>> always positioned on integer positions on non-scaled displays, which
>>> makes things easier when monitor of differen scales are mixed.
>> This is false if the subsurface is attached to a scaled parent surface.
>
> Huh?
Parent surface uses the scaler api to change a buffer width of 100 to
150. The fullscreen and this hi-dpi interface can also produce similar
scales. The subsurface has a width of 51. Either the left or right edge
is going to land in the middle of an output pixel.
>> The input rectangle to the scaler proposal is in the space between the
>> buffer transform and the scaling. Therefore there are *three* coordinate
>> spaces.
>
> Where did you get this? Where is this defined or proposed?
The input rectangle is in the same direction as the output rectangle
even if the buffer is rotated 90 degrees by the buffer_transform.
> On a quick thought, that seems only a different way of doing it,
> without any benefits, and possibly having cons.
Benefits: the buffer can be any integer number of pixels in size,
non-integer buffer sizes cannot be specified by the api, you can align
subsurfaces with pixels in the buffer (which means a precomposite of
subsurfaces into the main one before scaling is possible).
> Actually, it means that the surface coordinate system can change
> dramatically when a client sends a new buffer with a different scale,
> which then raises a bucketful of races: is an incoming event using new
> or old surface coordinates? That includes at least all input events
> with a surface position,
This is a good point and the only counter argument that makes sense.
All solutions I can think of are equivalent to reporting events in the
output space, the same as your proposal. However I still feel that the
surface size, input area, and other communication from client to server
should be specified in input space.
> and the shell geometry event.
Geometry is in the space of the parent surface, not this surface. This
is true in both proposals. Both would get exactly the same geometry events.
> For the record, wl_surface.attach changes the surface coordinate system
> by translating with x,y, but that is not a problem. The x,y do not
> describe how the surface moves, they describe how pixel rows and
> columns are added or removed on the edges.
If x,y is in buffer pixels then it matches my proposal. It can change
the results of the scaler to non-integers then, so I was under the
impression it would be ignored in this case. Assuming logical use of the
hi-dpi I don't see a problem with it being in buffer pixels then.
More information about the wayland-devel
mailing list