Spaces:
Runtime error
Runtime error
| # Xlib.ext.damage -- DAMAGE extension module | |
| # | |
| # Copyright (C) 2018 Joseph Kogut <joseph.kogut@gmail.com> | |
| # | |
| # This library is free software; you can redistribute it and/or | |
| # modify it under the terms of the GNU Lesser General Public License | |
| # as published by the Free Software Foundation; either version 2.1 | |
| # of the License, or (at your option) any later version. | |
| # | |
| # This library is distributed in the hope that it will be useful, | |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | |
| # See the GNU Lesser General Public License for more details. | |
| # | |
| # You should have received a copy of the GNU Lesser General Public | |
| # License along with this library; if not, write to the | |
| # Free Software Foundation, Inc., | |
| # 59 Temple Place, | |
| # Suite 330, | |
| # Boston, MA 02111-1307 USA | |
| from Xlib import X | |
| from Xlib.protocol import rq, structs | |
| from Xlib.error import XError | |
| extname = 'DAMAGE' | |
| # Event codes # | |
| DamageNotifyCode = 0 | |
| # Error codes # | |
| BadDamageCode = 0 | |
| class BadDamageError(XError): | |
| pass | |
| # DamageReportLevel options | |
| DamageReportRawRectangles = 0 | |
| DamageReportDeltaRectangles = 1 | |
| DamageReportBoundingBox = 2 | |
| DamageReportNonEmpty = 3 | |
| DamageReportLevel = ( | |
| DamageReportRawRectangles, | |
| DamageReportDeltaRectangles, | |
| DamageReportBoundingBox, | |
| DamageReportNonEmpty, | |
| ) | |
| DAMAGE = rq.Card32 | |
| # Methods | |
| class QueryVersion(rq.ReplyRequest): | |
| _request = rq.Struct(rq.Card8('opcode'), | |
| rq.Opcode(0), | |
| rq.RequestLength(), | |
| rq.Card32('major_version'), | |
| rq.Card32('minor_version'), | |
| ) | |
| _reply = rq.Struct(rq.ReplyCode(), | |
| rq.Pad(1), | |
| rq.Card16('sequence_number'), | |
| rq.ReplyLength(), | |
| rq.Card32('major_version'), | |
| rq.Card32('minor_version'), | |
| rq.Pad(16), | |
| ) | |
| def query_version(self): | |
| return QueryVersion(display=self.display, | |
| opcode=self.display.get_extension_major(extname), | |
| major_version=1, | |
| minor_version=1) | |
| class DamageCreate(rq.Request): | |
| _request = rq.Struct(rq.Card8('opcode'), | |
| rq.Opcode(1), | |
| rq.RequestLength(), | |
| DAMAGE('damage'), | |
| rq.Drawable('drawable'), | |
| rq.Set('level', 1, DamageReportLevel), | |
| rq.Pad(3), | |
| ) | |
| def damage_create(self, level): | |
| did = self.display.allocate_resource_id() | |
| DamageCreate(display=self.display, | |
| opcode=self.display.get_extension_major(extname), | |
| damage=did, | |
| drawable=self.id, | |
| level=level, | |
| ) | |
| return did | |
| class DamageDestroy(rq.Request): | |
| _request = rq.Struct(rq.Card8('opcode'), | |
| rq.Opcode(2), | |
| rq.RequestLength(), | |
| DAMAGE('damage') | |
| ) | |
| def damage_destroy(self, damage): | |
| DamageDestroy(display=self.display, | |
| opcode=self.display.get_extension_major(extname), | |
| damage=damage, | |
| ) | |
| self.display.free_resource_id(damage) | |
| class DamageSubtract(rq.Request): | |
| _request = rq.Struct(rq.Card8('opcode'), | |
| rq.Opcode(3), | |
| rq.RequestLength(), | |
| DAMAGE('damage'), | |
| rq.Card32('repair'), | |
| rq.Card32('parts') | |
| ) | |
| def damage_subtract(self, damage, repair=X.NONE, parts=X.NONE): | |
| DamageSubtract(display=self.display, | |
| opcode=self.display.get_extension_major(extname), | |
| damage=damage, | |
| repair=repair, | |
| parts=parts) | |
| class DamageAdd(rq.Request): | |
| _request = rq.Struct(rq.Card8('opcode'), | |
| rq.Opcode(4), | |
| rq.RequestLength(), | |
| rq.Card32('repair'), | |
| rq.Card32('parts'), | |
| ) | |
| def damage_add(self, repair, parts): | |
| DamageAdd(display=self.display, | |
| opcode=self.display.get_extension_major(extname), | |
| repair=repair, | |
| parts=parts) | |
| # Events # | |
| class DamageNotify(rq.Event): | |
| _code = None | |
| _fields = rq.Struct( | |
| rq.Card8('type'), | |
| rq.Card8('level'), | |
| rq.Card16('sequence_number'), | |
| rq.Drawable('drawable'), | |
| DAMAGE('damage'), | |
| rq.Card32('timestamp'), | |
| rq.Object('area', structs.Rectangle), | |
| rq.Object('drawable_geometry', structs.Rectangle) | |
| ) | |
| def init(disp, info): | |
| disp.extension_add_method('display', | |
| 'damage_query_version', | |
| query_version) | |
| disp.extension_add_method('drawable', | |
| 'damage_create', | |
| damage_create) | |
| disp.extension_add_method('display', | |
| 'damage_destroy', | |
| damage_destroy) | |
| disp.extension_add_method('display', | |
| 'damage_subtract', | |
| damage_subtract) | |
| disp.extension_add_method('drawable', | |
| 'damage_add', | |
| damage_add) | |
| disp.extension_add_event(info.first_event + DamageNotifyCode, DamageNotify) | |
| disp.extension_add_error(code=BadDamageCode, err=BadDamageError) | |