PageRenderTime 46ms CodeModel.GetById 36ms RepoModel.GetById 1ms app.codeStats 0ms

/platform/win/scaffold/view.d

http://github.com/wilkie/djehuty
D | 152 lines | 94 code | 43 blank | 15 comment | 3 complexity | 054ac9078e313a0198724ab776ed898a MD5 | raw file
  1. /*
  2. * view.d
  3. *
  4. * This file implements the Scaffold for platform specific View
  5. * operations in Windows.
  6. *
  7. * Author: Dave Wilkinson
  8. *
  9. */
  10. module scaffold.view;
  11. import platform.win.common;
  12. import platform.win.main;
  13. import Gdiplus = binding.win32.gdiplus;
  14. import platform.vars.view;
  15. import platform.vars.window;
  16. import gui.window;
  17. import graphics.view;
  18. import graphics.graphics;
  19. import graphics.bitmap;
  20. import core.string;
  21. import core.main;
  22. import core.definitions;
  23. import data.queue;
  24. import io.console;
  25. // views
  26. void ViewCreate(View view, ViewPlatformVars*viewVars) {
  27. // Gdiplus.GdipCreateBitmapFromScan0(view.width(), view.height(), 0, Gdiplus.PixelFormat32bppARGB, null, &viewVars.image);
  28. //viewVars.rt = Gdiplus.Rect(0, 0, view.width, view.height);
  29. //Gdiplus.GdipGetImageGraphicsContext(viewVars.image, &viewVars.g);
  30. // Gdiplus.GdipGetDC(viewVars.g, &viewVars.dc);
  31. viewVars.clipRegions = new _clipList();
  32. viewVars.length = (view.width() * view.height()) * 4;
  33. Gdiplus.GdipCreateBitmapFromScan0(view.width(), view.height(), 0, Gdiplus.PixelFormat32bppARGB, null, &viewVars.image);
  34. viewVars.rt = Gdiplus.Rect(0, 0, view.width, view.height);
  35. Gdiplus.GdipGetImageGraphicsContext(viewVars.image, &viewVars.g);
  36. }
  37. void ViewDestroy(ref View view, ViewPlatformVars*viewVars) {
  38. DeleteDC(viewVars.dc);
  39. Gdiplus.GdipDeleteGraphics(viewVars.g);
  40. }
  41. void ViewCreateDIB(ref Bitmap view, ViewPlatformVars*viewVars) {
  42. viewVars.clipRegions = new _clipList();
  43. viewVars.length = (view.width() * view.height()) * 4;
  44. Gdiplus.GdipCreateBitmapFromScan0(view.width(), view.height(), 0, Gdiplus.PixelFormat32bppARGB, null, &viewVars.image);
  45. viewVars.rt = Gdiplus.Rect(0, 0, view.width, view.height);
  46. Gdiplus.GdipGetImageGraphicsContext(viewVars.image, &viewVars.g);
  47. Gdiplus.GdipGetDC(viewVars.g, &viewVars.dc);
  48. }
  49. void ViewCreateForWindow(ref WindowView view, ViewPlatformVars*viewVars, ref Window window, WindowPlatformVars* windowVars) {
  50. //will set _inited to true:
  51. HDC dc;
  52. dc = GetDC(null);
  53. viewVars.clipRegions = new _clipList();
  54. viewVars.dc = CreateCompatibleDC(dc);
  55. HBITMAP bmp = CreateCompatibleBitmap(dc, view.width(), view.height());
  56. ReleaseDC(null, dc);
  57. SelectObject(viewVars.dc, bmp);
  58. DeleteObject(bmp);
  59. Gdiplus.GdipCreateFromHDC(viewVars.dc, &viewVars.g);
  60. }
  61. void ViewResizeForWindow(ref WindowView view, ViewPlatformVars*viewVars, ref Window window, WindowPlatformVars* windowVars) {
  62. }
  63. void ViewResize(ref View view, ViewPlatformVars*viewVars) {
  64. Console.putln("view resize");
  65. HDC dc;
  66. dc = GetDC(null);
  67. HBITMAP bmp;
  68. if (cast(Bitmap)view !is null) {
  69. BITMAPINFO bi;
  70. bi.bmiHeader.biSize = BITMAPINFOHEADER.sizeof;
  71. bi.bmiHeader.biWidth = view.width();
  72. bi.bmiHeader.biHeight = -view.height();
  73. bi.bmiHeader.biPlanes = 1;
  74. bi.bmiHeader.biBitCount = 32;
  75. bmp = CreateDIBSection(dc, &bi, DIB_RGB_COLORS, &viewVars.bits, null, 0);
  76. }
  77. else {
  78. bmp = CreateCompatibleBitmap(dc, view.width(), view.height());
  79. }
  80. ReleaseDC(null, dc);
  81. SelectObject(viewVars.dc, bmp);
  82. DeleteObject(bmp);
  83. Console.putln("view done");
  84. }
  85. void* ViewGetBytes(ViewPlatformVars*viewVars, ref ulong length) {
  86. Gdiplus.GdipBitmapLockBits(viewVars.image, &viewVars.rt, Gdiplus.ImageLockMode.ImageLockModeReadWrite, Gdiplus.PixelFormat32bppARGB, &viewVars.bdata);
  87. length = viewVars.length;
  88. return cast(void*)viewVars.bdata.Scan0;
  89. }
  90. void* ViewGetBytes(ViewPlatformVars*viewVars) {
  91. Gdiplus.GdipBitmapLockBits(viewVars.image, &viewVars.rt, Gdiplus.ImageLockMode.ImageLockModeReadWrite, Gdiplus.PixelFormat32bppARGB, &viewVars.bdata);
  92. return cast(void*)viewVars.bdata.Scan0;
  93. }
  94. void ViewUnlockBytes(ViewPlatformVars* viewVars) {
  95. Gdiplus.GdipBitmapUnlockBits(viewVars.image, &viewVars.bdata);
  96. }
  97. uint ViewRGBAToInt32(ref bool _forcenopremultiply, ViewPlatformVars*_pfvars, ref uint r, ref uint g, ref uint b, ref uint a) {
  98. if (!_forcenopremultiply) {
  99. float anew = a;
  100. anew /= cast(float)0xFF;
  101. r = cast(ubyte)(anew * cast(float)r);
  102. g = cast(ubyte)(anew * cast(float)g);
  103. b = cast(ubyte)(anew * cast(float)b);
  104. }
  105. return (r << 16) | (g << 8) | (b) | (a << 24);
  106. }
  107. uint ViewRGBAToInt32(ViewPlatformVars*_pfvars, ref uint r, ref uint g, ref uint b) {
  108. return (r << 16) | (g << 8) | (b) | 0xFF000000;
  109. }