| /* |
| * noVNC: HTML5 VNC client |
| * Copyright (C) 2019 The noVNC Authors |
| * Licensed under MPL 2.0 (see LICENSE.txt) |
| * |
| * See README.md for usage and integration instructions. |
| * |
| */ |
| |
| export default class RREDecoder { |
| constructor() { |
| this._subrects = 0; |
| } |
| |
| decodeRect(x, y, width, height, sock, display, depth) { |
| if (this._subrects === 0) { |
| if (sock.rQwait("RRE", 4 + 4)) { |
| return false; |
| } |
| |
| this._subrects = sock.rQshift32(); |
| |
| let color = sock.rQshiftBytes(4); // Background |
| display.fillRect(x, y, width, height, color); |
| } |
| |
| while (this._subrects > 0) { |
| if (sock.rQwait("RRE", 4 + 8)) { |
| return false; |
| } |
| |
| let color = sock.rQshiftBytes(4); |
| let sx = sock.rQshift16(); |
| let sy = sock.rQshift16(); |
| let swidth = sock.rQshift16(); |
| let sheight = sock.rQshift16(); |
| display.fillRect(x + sx, y + sy, swidth, sheight, color); |
| |
| this._subrects--; |
| } |
| |
| return true; |
| } |
| } |