1d4401354Smrg<?xml version="1.0" encoding="utf-8"?>
2d4401354Smrg<!--
3d4401354SmrgCopyright (C) 2004 Josh Triplett
4d4401354SmrgCopyright (C) 2007 Jeremy Kolb
5d4401354SmrgAll Rights Reserved.
6d4401354Smrg
7d4401354SmrgPermission is hereby granted, free of charge, to any person obtaining a copy
8d4401354Smrgof this software and associated documentation files (the "Software"), to deal
9d4401354Smrgin the Software without restriction, including without limitation the rights
10d4401354Smrgto use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11d4401354Smrgcopies of the Software, and to permit persons to whom the Software is
12d4401354Smrgfurnished to do so, subject to the following conditions:
13d4401354Smrg
14d4401354SmrgThe above copyright notice and this permission notice shall be included in all
15d4401354Smrgcopies or substantial portions of the Software.
16d4401354Smrg
17d4401354SmrgTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18d4401354SmrgIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19d4401354SmrgFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20d4401354SmrgAUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
21d4401354SmrgACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22d4401354SmrgWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23d4401354Smrg
24d4401354SmrgExcept as contained in this notice, the names of the authors or their
25d4401354Smrginstitutions shall not be used in advertising or otherwise to promote the
26d4401354Smrgsale, use or other dealings in this Software without prior written
27d4401354Smrgauthorization from the authors.
28d4401354Smrg-->
29d4401354Smrg<!-- This file describes version 1.1 of DAMAGE. -->
30d4401354Smrg<xcb header="damage" extension-xname="DAMAGE" extension-name="Damage"
31d4401354Smrg    major-version="1" minor-version="1">
32d4401354Smrg  <import>xproto</import>
33d4401354Smrg  <import>xfixes</import>
34d4401354Smrg
35d4401354Smrg  <xidtype name="DAMAGE" />
36d4401354Smrg
37d4401354Smrg  <enum name="ReportLevel">
38f591e195Smrg    <item name="RawRectangles">   <value>0</value> </item>
39f591e195Smrg    <item name="DeltaRectangles"> <value>1</value> </item>
40f591e195Smrg    <item name="BoundingBox">     <value>2</value> </item>
41f591e195Smrg    <item name="NonEmpty">        <value>3</value> </item>
42d4401354Smrg  </enum>
43d4401354Smrg
44d4401354Smrg  <error name="BadDamage" number="0" />
45d4401354Smrg
46d4401354Smrg  <request name="QueryVersion" opcode="0">
47d4401354Smrg    <field type="CARD32" name="client_major_version" />
48d4401354Smrg    <field type="CARD32" name="client_minor_version" />
49d4401354Smrg    <reply>
50d4401354Smrg      <pad bytes="1" />
51d4401354Smrg      <field type="CARD32" name="major_version" />
52d4401354Smrg      <field type="CARD32" name="minor_version" />
53d4401354Smrg      <pad bytes="16" />
5418ea056eSmrg      <doc>
5518ea056eSmrg	<brief>The negotiated version of the DAMAGE extension</brief>
5618ea056eSmrg	<description>
5718ea056eSmrgThis indicates the version of the DAMAGE extension chosen by the server.
5818ea056eSmrgIt will always be less than or equal to the version offered by the client.
5918ea056eSmrg	</description>
6018ea056eSmrg	<field name="major_version">The major version chosen by the server.</field>
6118ea056eSmrg	<field name="minor_version">The minor version chosen by the server.</field>
6218ea056eSmrg      </doc>
63d4401354Smrg    </reply>
6418ea056eSmrg    <doc>
6518ea056eSmrg      <brief>Negotiate the version of the DAMAGE extension</brief>
6618ea056eSmrg      <description>
6718ea056eSmrgThis negotiates the version of the DAMAGE extension.  It must precede any other
6818ea056eSmrgrequest using the DAMAGE extension.  Failure to do so will cause a BadRequest
6918ea056eSmrgerror for those requests.
7018ea056eSmrg      </description>
7118ea056eSmrg      <field name="client_major_version">The major version supported by the client.</field>
7218ea056eSmrg      <field name="client_minor_version">The minor version supported by the client.</field>
7318ea056eSmrg    </doc>
74d4401354Smrg  </request>
75d4401354Smrg
76d4401354Smrg  <request name="Create" opcode="1">
77d4401354Smrg    <field type="DAMAGE"   name="damage" />
78d4401354Smrg    <field type="DRAWABLE" name="drawable" />
79d4401354Smrg    <field type="CARD8"    name="level" enum="ReportLevel" />
80d4401354Smrg    <pad bytes="3" />
8118ea056eSmrg    <doc>
8218ea056eSmrg      <brief>Creates a Damage object to monitor changes to a drawable.</brief>
8318ea056eSmrg      <description><![CDATA[
8418ea056eSmrgThis creates a Damage object to monitor changes to a drawable, and specifies
8518ea056eSmrgthe level of detail to be reported for changes.
8618ea056eSmrg
8718ea056eSmrgWe call changes made to pixel contents of windows and pixmaps 'damage'
8818ea056eSmrgthroughout this extension.
8918ea056eSmrg
9018ea056eSmrgDamage accumulates as drawing occurs in the drawable.  Each drawing operation
9118ea056eSmrg'damages' one or more rectangular areas within the drawable.  The rectangles
9218ea056eSmrgare guaranteed to include the set of pixels modified by each operation, but
9318ea056eSmrgmay include significantly more than just those pixels.  The desire is for
9418ea056eSmrgthe damage to strike a balance between the number of rectangles reported and
9518ea056eSmrgthe extraneous area included.  A reasonable goal is for each primitive
9618ea056eSmrgobject drawn (line, string, rectangle) to be represented as a single
9718ea056eSmrgrectangle and for the damage area of the operation to be the union of these
9818ea056eSmrgrectangles.
9918ea056eSmrg
10018ea056eSmrgThe DAMAGE extension allows applications to either receive the raw
10118ea056eSmrgrectangles as a stream of events, or to have them partially processed within
10218ea056eSmrgthe X server to reduce the amount of data transmitted as well as reduce the
10318ea056eSmrgprocessing latency once the repaint operation has started.
10418ea056eSmrg
10518ea056eSmrgThe Damage object holds any accumulated damage region and reflects the
10618ea056eSmrgrelationship between the drawable selected for damage notification and the
10718ea056eSmrgdrawable for which damage is tracked.
10818ea056eSmrg      ]]></description>
10918ea056eSmrg      <field name="damage"><![CDATA[
11018ea056eSmrgThe ID with which you will refer to the new Damage object, created by
11118ea056eSmrg`xcb_generate_id`.
11218ea056eSmrg      ]]></field>
11318ea056eSmrg      <field name="drawable">The ID of the drawable to be monitored.</field>
11418ea056eSmrg      <field name="level">The level of detail to be provided in Damage events.</field>
11518ea056eSmrg    </doc>
116d4401354Smrg  </request>
117d4401354Smrg
118d4401354Smrg  <request name="Destroy" opcode="2">
119d4401354Smrg    <field type="DAMAGE" name="damage" />
12018ea056eSmrg    <doc>
12118ea056eSmrg      <brief>Destroys a previously created Damage object.</brief>
12218ea056eSmrg      <description>
12318ea056eSmrgThis destroys a Damage object and requests the X server stop reporting
12418ea056eSmrgthe changes it was tracking.
12518ea056eSmrg      </description>
12618ea056eSmrg      <field name="damage"><![CDATA[
12718ea056eSmrgThe ID you provided to `xcb_create_damage`.
12818ea056eSmrg      ]]></field>
12918ea056eSmrg    </doc>
130d4401354Smrg  </request>
131d4401354Smrg
132d4401354Smrg  <request name="Subtract" opcode="3">
133d4401354Smrg    <field type="DAMAGE" name="damage" />
134d4401354Smrg    <field type="REGION" name="repair" altenum="Region" />
135d4401354Smrg    <field type="REGION" name="parts" altenum="Region" />
13618ea056eSmrg    <doc>
13718ea056eSmrg      <brief>Remove regions from a previously created Damage object.</brief>
13818ea056eSmrg      <description>
13918ea056eSmrgThis updates the regions of damage recorded in a a Damage object.
14018ea056eSmrgSee https://www.x.org/releases/current/doc/damageproto/damageproto.txt
14118ea056eSmrgfor details.
14218ea056eSmrg      </description>
14318ea056eSmrg      <field name="damage">The ID you provided to `xcb_create_damage`.</field>
14418ea056eSmrg    </doc>
145d4401354Smrg  </request>
146d4401354Smrg
147d4401354Smrg  <request name="Add" opcode="4">
148d4401354Smrg    <field type="DRAWABLE" name="drawable" />
149d4401354Smrg    <field type="REGION" name="region" />
15018ea056eSmrg    <doc>
15118ea056eSmrg      <brief>Add a region to a previously created Damage object.</brief>
15218ea056eSmrg      <description>
15318ea056eSmrgThis updates the regions of damage recorded in a a Damage object.
15418ea056eSmrgSee https://www.x.org/releases/current/doc/damageproto/damageproto.txt
15518ea056eSmrgfor details.
15618ea056eSmrg      </description>
15718ea056eSmrg      <field name="damage">The ID you provided to `xcb_create_damage`.</field>
15818ea056eSmrg    </doc>
159d4401354Smrg  </request>
160d4401354Smrg
161d4401354Smrg  <event name="Notify" number="0">
162d4401354Smrg    <field type="CARD8"     name="level" enum="ReportLevel" />
163d4401354Smrg    <field type="DRAWABLE"  name="drawable" />
164d4401354Smrg    <field type="DAMAGE"    name="damage" />
165d4401354Smrg    <field type="TIMESTAMP" name="timestamp" />
166d4401354Smrg    <field type="RECTANGLE" name="area" />
167d4401354Smrg    <field type="RECTANGLE" name="geometry" />
16818ea056eSmrg    <doc>
16918ea056eSmrg      <brief>the contents of the monitored drawable have changed</brief>
17018ea056eSmrg      <field name="level"><![CDATA[
17118ea056eSmrgThe level of the damage being reported.
17218ea056eSmrgIf the 0x80 bit is set, indicates there are subsequent Damage events
17318ea056eSmrgbeing delivered immediately as part of a larger Damage region.
17418ea056eSmrg      ]]></field>
17518ea056eSmrg      <field name="drawable"><![CDATA[
17618ea056eSmrgThe drawable for which damage is being reported.
17718ea056eSmrg      ]]></field>
17818ea056eSmrg      <field name="damage"><![CDATA[
17918ea056eSmrgThe Damage object being used to track the damage.
18018ea056eSmrg      ]]></field>
18118ea056eSmrg      <field name="timestamp"><![CDATA[
18218ea056eSmrgTime when the event was generated (in milliseconds).
18318ea056eSmrg      ]]></field>
18418ea056eSmrg      <field name="area"><![CDATA[
18518ea056eSmrgDamaged area of the drawable.
18618ea056eSmrg      ]]></field>
18718ea056eSmrg      <field name="geometry"><![CDATA[
18818ea056eSmrgTotal area of the drawable.
18918ea056eSmrg      ]]></field>
19018ea056eSmrg      <see type="request" name="Create" />
19118ea056eSmrg    </doc>
192d4401354Smrg  </event>
193d4401354Smrg</xcb>
194