1. Index: LuaCanvas.pas
  2. ===================================================================
  3. --- LuaCanvas.pas (wersja 1700)
  4. +++ LuaCanvas.pas (kopia robocza)
  5. @@ -8,7 +8,7 @@
  6. interface
  7. uses
  8. - Classes, SysUtils, Graphics,lua, lualib, lauxlib, LuaHandler, fpcanvas;
  9. + Classes, SysUtils, Graphics,lua, lualib, lauxlib, LuaHandler, fpcanvas, LCLType, LCLIntf;
  10. procedure initializeLuaCanvas;
  11. @@ -283,6 +283,56 @@
  12. end;
  13. end;
  14. +procedure drawWithMask(DestCanvas:TCanvas; Dx,Dy,Dw,Dh:integer; graph:TRasterImage; Sx,Sy,Sw,Sh:integer);
  15. +var
  16. + UseMaskHandle: HBitmap;
  17. + SrcDC: hDC;
  18. + DestDC: hDC;
  19. +begin
  20. + if (graph.Width=0) or (graph.Height=0)
  21. + then Exit;
  22. +
  23. + if graph.Masked then
  24. + UseMaskHandle:=graph.MaskHandle
  25. + else
  26. + UseMaskHandle:=0;
  27. +
  28. + SrcDC := graph.Canvas.GetUpdatedHandle([csHandleValid]);
  29. + DestCanvas.Changing;
  30. + DestDC := DestCanvas.GetUpdatedHandle([csHandleValid]);
  31. + StretchMaskBlt(DestDC, Dx,Dy,Dw,Dh,
  32. + SrcDC , Sx,Sy,Sw,Sh, UseMaskHandle,Sx,Sy,DestCanvas.CopyMode);
  33. + DestCanvas.Changed;
  34. +end;
  35. +
  36. +function canvas_drawWithMask(L: PLua_State): integer; cdecl;
  37. +var
  38. + graphic: TGraphic;
  39. + d_canvas: TCanvas;
  40. + d_x1,d_y1: integer;
  41. + d_x2,d_y2: integer;
  42. + s_x1,s_y1: integer;
  43. + s_x2,s_y2: integer;
  44. +begin
  45. + result:=0;
  46. + d_canvas:=luaclass_getClassObject(L);
  47. +
  48. + if lua_gettop(L)>=9 then
  49. + begin
  50. + d_x1:=lua_tointeger(L,-9);
  51. + d_y1:=lua_tointeger(L,-8);
  52. + d_x2:=lua_tointeger(L,-7);
  53. + d_y2:=lua_tointeger(L,-6);
  54. +
  55. + graphic:=lua_toceuserdata(L,-5);
  56. + s_x1:=lua_tointeger(L,-4);
  57. + s_y1:=lua_tointeger(L,-3);
  58. + s_x2:=lua_tointeger(L,-2);
  59. + s_y2:=lua_tointeger(L,-1);
  60. + drawWithMask(d_canvas, d_x1, d_y1, d_x2-d_x1, d_y2-d_y1, TRasterImage(graphic), s_x1, s_y1, s_x2-s_x1,s_y2-s_y1);
  61. + end;
  62. +end;
  63. +
  64. function canvas_copyRect(L: PLua_State): integer; cdecl;
  65. var
  66. s_canvas: TCanvas;
  67. @@ -391,6 +441,7 @@
  68. luaclass_addClassFunctionToTable(L, metatable, userdata, 'gradientFill', canvas_gradientFill);
  69. luaclass_addClassFunctionToTable(L, metatable, userdata, 'copyRect', canvas_copyRect);
  70. luaclass_addClassFunctionToTable(L, metatable, userdata, 'draw', canvas_draw);
  71. + luaclass_addClassFunctionToTable(L, metatable, userdata, 'drawWithMask', canvas_drawWithMask);
  72. luaclass_addClassFunctionToTable(L, metatable, userdata, 'getPenPosition', canvas_getPenPosition);
  73. luaclass_addClassFunctionToTable(L, metatable, userdata, 'setPenPosition', canvas_setPenPosition);
  74. luaclass_addClassFunctionToTable(L, metatable, userdata, 'getClipRect', canvas_getClipRect);