internal static void drawDestBltOrder(int x, int y, int cx, int cy, int Opcode) { int boundsRight = (x + cx) - 1; if (boundsRight > Options.BoundsRight) { boundsRight = Options.BoundsRight; } if (x < Options.BoundsLeft) { x = Options.BoundsLeft; } cx = (boundsRight - x) + 1; int boundsBottom = (y + cy) - 1; if (boundsBottom > Options.BoundsBottom) { boundsBottom = Options.BoundsBottom; } if (y < Options.BoundsTop) { y = Options.BoundsTop; } cy = (boundsBottom - y) + 1; ChangedRect.Invalidate(x, x, cx, cy); RasterOp.do_array(Opcode, Options.Canvas, Options.Canvas.Width, x, y, cx, cy, null, 0, 0, 0); }
internal static void drawScreenBltOrder(int x, int y, int cx, int cy, int SrcX, int SrcY, int Opcode) { int num = x; int num2 = y; int boundsRight = (x + cx) - 1; if (boundsRight > Options.BoundsRight) { boundsRight = Options.BoundsRight; } if (x < Options.BoundsLeft) { x = Options.BoundsLeft; } cx = (boundsRight - x) + 1; int boundsBottom = (y + cy) - 1; if (boundsBottom > Options.BoundsBottom) { boundsBottom = Options.BoundsBottom; } if (y < Options.BoundsTop) { y = Options.BoundsTop; } cy = (boundsBottom - y) + 1; int srcx = (SrcX + x) - num; int srcy = (SrcY + y) - num2; // ScreenBltOrder ChangedRect.Invalidate(x, y, cx, cy); RasterOp.do_array(Opcode, Options.Canvas, Options.Canvas.Width, x, y, cx, cy, null, Options.Canvas.Width, srcx, srcy); }
internal static void drawMemBltOrder() { int x = X; int y = Y; int cX = CX; int cY = CY; int srcX = SrcX; int srcY = SrcY; RdpBitmap bitmap = Cache.getBitmap(CacheID, CacheIDX); if (bitmap != null) { int boundsRight = (x + cX) - 1; if (boundsRight > Options.BoundsRight) { boundsRight = Options.BoundsRight; } if (x < Options.BoundsLeft) { x = Options.BoundsLeft; } cX = (boundsRight - x) + 1; int boundsBottom = (y + cY) - 1; if (boundsBottom > Options.BoundsBottom) { boundsBottom = Options.BoundsBottom; } if (y < Options.BoundsTop) { y = Options.BoundsTop; } cY = (boundsBottom - y) + 1; srcX += x - X; srcY += y - Y; Options.Enter(); try { ChangedRect.Invalidate(x, y, cX, cY); RasterOp.do_array(Opcode, Options.Canvas, Options.Canvas.Width, x, y, cX, cY, bitmap.getData(ColorTable), bitmap.getWidth(), srcX, srcY); } finally { Options.Exit(); } } }
internal static void drawPatBltOrder(int opcode, int x, int y, int cx, int cy, int fgcolor, int bgcolor, BrushOrder brush) { int num3; int boundsRight = (x + cx) - 1; if (boundsRight > Options.BoundsRight) { boundsRight = Options.BoundsRight; } if (x > Options.BoundsRight) { x = Options.BoundsRight; } if (x < Options.BoundsLeft) { x = Options.BoundsLeft; } cx = (boundsRight - x) + 1; if (cx < 0) { cx = 0; } int boundsBottom = (y + cy) - 1; if (boundsBottom > Options.BoundsBottom) { boundsBottom = Options.BoundsBottom; } if (y > Options.BoundsBottom) { y = Options.BoundsBottom; } if (y < Options.BoundsTop) { y = Options.BoundsTop; } cy = (boundsBottom - y) + 1; if (cy < 0) { cy = 0; } ChangedRect.Invalidate(x, y, cx, cy); uint[] src = null; switch (Brush.Style) { case 0: src = new uint[cx * cy]; for (num3 = 0; num3 < src.Length; num3++) { src[num3] = (uint)fgcolor; } RasterOp.do_array(opcode, Options.Canvas, Options.Canvas.Width, x, y, cx, cy, src, cx, 0, 0); break; case 1: case 2: break; case 3: { int xOrigin = Brush.XOrigin; int yOrigin = Brush.YOrigin; byte[] pattern = Brush.Pattern; src = new uint[cx * cy]; int index = 0; for (num3 = 0; num3 < cy; num3++) { for (int i = 0; i < cx; i++) { if ((pattern[(num3 + yOrigin) % 8] & (((int)1) << ((i + xOrigin) % 8))) == 0) { src[index] = (uint)fgcolor; } else { src[index] = (uint)bgcolor; } index++; } } RasterOp.do_array(opcode, Options.Canvas, Options.Canvas.Width, x, y, cx, cy, src, cx, 0, 0); return; } default: return; } }
internal static void drawTriBltOrder() { int x = X; int y = Y; int cX = CX; int cY = CY; int srcX = SrcX; int srcY = SrcY; int boundsRight = (x + cX) - 1; if (boundsRight > Options.BoundsRight) { boundsRight = Options.BoundsRight; } if (x < Options.BoundsLeft) { x = Options.BoundsLeft; } cX = (boundsRight - x) + 1; int boundsBottom = (y + cY) - 1; if (boundsBottom > Options.BoundsBottom) { boundsBottom = Options.BoundsBottom; } if (y < Options.BoundsTop) { y = Options.BoundsTop; } cY = (boundsBottom - y) + 1; srcX += x - X; srcY += y - Y; int fgcolor = RdpBitmap.convertColor(ForegroundColor); int bgcolor = RdpBitmap.convertColor(BackgroundColor); Options.Enter(); try { RdpBitmap bitmap = Cache.getBitmap(CacheID, CacheIDX); if (bitmap != null) { ChangedRect.Invalidate(x, y, cX, cY); switch (Opcode) { case 0x69: RasterOp.do_array(6, Options.Canvas, Options.Canvas.Width, x, y, cX, cY, bitmap.getData(ColorTable), bitmap.getWidth(), srcX, srcY); PatBltOrder.drawPatBltOrder(9, x, y, cX, cY, fgcolor, bgcolor, Brush); return; case 0xb8: PatBltOrder.drawPatBltOrder(6, x, y, cX, cY, fgcolor, bgcolor, Brush); RasterOp.do_array(8, Options.Canvas, Options.Canvas.Width, x, y, cX, cY, bitmap.getData(ColorTable), bitmap.getWidth(), srcX, srcY); PatBltOrder.drawPatBltOrder(6, x, y, cX, cY, fgcolor, bgcolor, Brush); return; case 0xc0: RasterOp.do_array(12, Options.Canvas, Options.Canvas.Width, x, y, cX, cY, bitmap.getData(ColorTable), bitmap.getWidth(), srcX, srcY); PatBltOrder.drawPatBltOrder(8, x, y, cX, cY, fgcolor, bgcolor, Brush); return; } // Unimplemented Triblt opcode: Opcode RasterOp.do_array(12, Options.Canvas, Options.Canvas.Width, x, y, cX, cY, bitmap.getData(ColorTable), bitmap.getWidth(), srcX, srcY); } } finally { Options.Exit(); } }