<table><tr><td style="">romangg created this revision.<br />romangg added a reviewer: KWin.<br />Herald added a project: Frameworks.<br />Herald added a subscriber: kde-frameworks-devel.<br />romangg requested review of this revision.
</td><a style="text-decoration: none; padding: 4px 8px; margin: 0 8px 8px; float: right; color: #464C5C; font-weight: bold; border-radius: 3px; background-color: #F7F7F9; background-image: linear-gradient(to bottom,#fff,#f1f0f1); display: inline-block; border: 1px solid rgba(71,87,120,.2);" href="https://phabricator.kde.org/D23619">View Revision</a></tr></table><br /><div><strong>REVISION SUMMARY</strong><div><p>The org_kde_kwin_outputdevice and respective org_kde_kwin_outputconfiguration<br />
protocols will be extended by events to indicate the current replication and<br />
clone status of an output device and a request to change the replication.</p>

<p>Here the notion of clones designate outputs sharing the same properties in an<br />
immutable fahsion. This is mostly dependent on hardware characteristics when<br />
outputs share a common CRTC. Changes to such an output will inevitably apply to<br />
all its clones alike. The property is meant mainly to inform clients about<br />
such a relation.</p>

<p>Replicas on the other side are arbitrary duplications of the image on an<br />
output on other ones. This is an one-to-many relation allowing one output as<br />
source of the image, also called the replication source, and arbitrary many<br />
other outputs as replicas of the replicaiton source. It is expected that the<br />
compositor has means to facilitate the replication in a sensible way, for<br />
example by providing black bars to compensate for different aspect ratios.</p>

<p>Besides the protocol description changes and standard client API this patch<br />
introduces on server side new functions and algorithms to make use of this<br />
new interface in an efficient way:</p>

<ul class="remarkup-list">
<li class="remarkup-list-item">Logical position and size are cached values of the current position and size of the output in compositor space respecting the replication status.</li>
<li class="remarkup-list-item">The cached clients-scale is the recommended scaling factor sent to clients on this output such that clients on the replication source and all replicas can provide buffers of optimal resolution. It is the ceiled maximum of all width and height quotients between replicas and replication source and the replication source scale itself. When an output is not a replica it always equals the ceiled scale value of the output.</li>
<li class="remarkup-list-item">The view-geometry provides a recommended geometry, which is cached as well, of positioning the actual viewable area on the output in pixel-coordinates. Using this geometry the aspect ratio of the final image on every replica will be the same one as the one of the replication source. The geometry returned is a rectangle positioned at the origin with size equaling output's mode size when the output is not a replica.</li>
</ul></div></div><br /><div><strong>TEST PLAN</strong><div><p>Tested with patches in KWin, libkscreen and KScreen. Autotests in the future.</p></div></div><br /><div><strong>REPOSITORY</strong><div><div>R127 KWayland</div></div></div><br /><div><strong>BRANCH</strong><div><div>clone</div></div></div><br /><div><strong>REVISION DETAIL</strong><div><a href="https://phabricator.kde.org/D23619">https://phabricator.kde.org/D23619</a></div></div><br /><div><strong>AFFECTED FILES</strong><div><div>src/client/outputconfiguration.cpp<br />
src/client/outputconfiguration.h<br />
src/client/outputdevice.cpp<br />
src/client/outputdevice.h<br />
src/client/protocols/output-management.xml<br />
src/client/protocols/outputdevice.xml<br />
src/client/registry.cpp<br />
src/server/outputchangeset.cpp<br />
src/server/outputchangeset.h<br />
src/server/outputchangeset_p.h<br />
src/server/outputconfiguration_interface.cpp<br />
src/server/outputdevice_interface.cpp<br />
src/server/outputdevice_interface.h<br />
src/server/outputmanagement_interface.cpp</div></div></div><br /><div><strong>To: </strong>romangg, KWin<br /><strong>Cc: </strong>kde-frameworks-devel, LeGast00n, GB_2, michaelh, ngraham, bruns<br /></div>