public AbstractOsMappingWidget CreateSurface(SystemWindow childSystemWindow) { AbstractOsMappingWidget newSurface = new WidgetForWindowsFormsBitmap(childSystemWindow); ((WidgetForWindowsFormsBitmap)newSurface).Init(childSystemWindow); return newSurface; }
public AbstractOsMappingWidget CreateSurface(SystemWindow childSystemWindow) { AbstractOsMappingWidget newSurface = new WidgetForWindowsFormsBitmap(childSystemWindow); ((WidgetForWindowsFormsBitmap)newSurface).Init(childSystemWindow); return(newSurface); }
public override void CopyBackBufferToScreen(Graphics displayGraphics) { WidgetForWindowsFormsBitmap aggBitmapAppWidget = ((WidgetForWindowsFormsBitmap)aggAppWidget); RectangleInt intRect = new RectangleInt(0, 0, (int)aggAppWidget.Width, (int)aggAppWidget.Height); aggBitmapAppWidget.bitmapBackBuffer.UpdateHardwareSurface(intRect); WidgetForWindowsFormsBitmap.copyTime.Restart(); if (OsInformation.OperatingSystem != OSType.Windows) { //displayGraphics.DrawImage(aggBitmapAppWidget.bitmapBackBuffer.windowsBitmap, windowsRect, windowsRect, GraphicsUnit.Pixel); // around 250 ms for full screen displayGraphics.DrawImageUnscaled(aggBitmapAppWidget.bitmapBackBuffer.windowsBitmap, 0, 0); // around 200 ms for full screnn } else { // or the code below which calls BitBlt directly running at 17 ms for full screnn. const int SRCCOPY = 0xcc0020; using (Graphics bitmapGraphics = Graphics.FromImage(aggBitmapAppWidget.bitmapBackBuffer.windowsBitmap)) { IntPtr displayHDC = displayGraphics.GetHdc(); IntPtr bitmapHDC = bitmapGraphics.GetHdc(); IntPtr hBitmap = aggBitmapAppWidget.bitmapBackBuffer.windowsBitmap.GetHbitmap(); IntPtr hOldObject = SelectObject(bitmapHDC, hBitmap); int result = BitBlt(displayHDC, 0, 0, aggBitmapAppWidget.bitmapBackBuffer.windowsBitmap.Width, aggBitmapAppWidget.bitmapBackBuffer.windowsBitmap.Height, bitmapHDC, 0, 0, SRCCOPY); SelectObject(bitmapHDC, hOldObject); DeleteObject(hBitmap); bitmapGraphics.ReleaseHdc(bitmapHDC); displayGraphics.ReleaseHdc(displayHDC); } } WidgetForWindowsFormsBitmap.copyTime.Stop(); }