Kaynağa Gözat

Implemented more API glue.

woollybah 9 yıl önce
ebeveyn
işleme
fbc2aedcbb
5 değiştirilmiş dosya ile 248 ekleme ve 18 silme
  1. 58 12
      win32.mod/gdi32.bmx
  2. 40 0
      win32.mod/gdi32.cpp
  3. 1 1
      win32.mod/gdi32.x
  4. 91 5
      win32.mod/user32.bmx
  5. 58 0
      win32.mod/user32.cpp

+ 58 - 12
win32.mod/gdi32.bmx

@@ -386,18 +386,64 @@ Type PIXELFORMATDESCRIPTOR
 	Field dwDamageMask 
 End Type
 
+Extern
+	Function bmx_win32_BITMAPINFOHEADER_new:Byte Ptr()
+	Function bmx_win32_BITMAPINFOHEADER_free(handle:Byte Ptr)
+	Function bmx_win32_BITMAPINFOHEADER_SetbiWidth(handle:Byte Ptr, biWidth:Int)
+	Function bmx_win32_BITMAPINFOHEADER_SetbiHeight(handle:Byte Ptr, biHeight:Int)
+	Function bmx_win32_BITMAPINFOHEADER_SetbiPlanes(handle:Byte Ptr, biPlanes:Int)
+	Function bmx_win32_BITMAPINFOHEADER_SetbiBitCount(handle:Byte Ptr, biBitCount:Int)
+	Function bmx_win32_BITMAPINFOHEADER_SetbiCompression(handle:Byte Ptr, biCompression:Int)
+End Extern
 Type BITMAPINFOHEADER
-	Field biSize
-	Field biWidth
-	Field biHeight
-	Field biPlanes:Short
-	Field biBitCount:Short
-	Field biCompression
-	Field biSizeImage
-	Field biXPelsPerMeter
-	Field biYPelsPerMeter
-	Field biClrUsed
-	Field biClrImportant
+	Field infoPtr:Byte Ptr
+	
+	Method New()
+		infoPtr = bmx_win32_BITMAPINFOHEADER_new()
+	End Method
+
+	Method Delete()
+		Free()
+	End Method
+	
+	Method Free()
+		If infoPtr Then
+			bmx_win32_BITMAPINFOHEADER_free(infoPtr)
+		End If
+		infoPtr = Null
+	End Method
+	
+	Method SetbiWidth(biWidth:Int)
+		bmx_win32_BITMAPINFOHEADER_SetbiWidth(infoPtr, biWidth)
+	End Method
+	
+	Method SetbiHeight(biHeight:Int)
+		bmx_win32_BITMAPINFOHEADER_SetbiHeight(infoPtr, biHeight)
+	End Method
+	
+	Method SetbiPlanes(biPlanes:Int)
+		bmx_win32_BITMAPINFOHEADER_SetbiPlanes(infoPtr, biPlanes)
+	End Method
+	
+	Method SetbiBitCount(biBitCount:Int)
+		bmx_win32_BITMAPINFOHEADER_SetbiBitCount(infoPtr, biBitCount)
+	End Method
+	
+	Method SetbiCompression(biCompression:Int)
+		bmx_win32_BITMAPINFOHEADER_SetbiCompression(infoPtr, biCompression)
+	End Method
+	
+'	Field biSize
+'	Field biWidth
+'	Field biHeight
+'	Field biPlanes:Short
+'	Field biBitCount:Short
+'	Field biCompression
+'	Field biSizeImage
+'	Field biXPelsPerMeter
+'	Field biYPelsPerMeter
+'	Field biClrUsed
+'	Field biClrImportant
 End Type
 
 Extern
@@ -665,7 +711,7 @@ Function CreateSolidBrush:Byte Ptr( crColor )
 Function CreateCompatibleDC:Byte Ptr( hdc:Byte Ptr )
 Function CreateCompatibleBitmap:Byte Ptr( hdc:Byte Ptr,nWidth,nHeight )
 
-Function SetDIBits( hdc:Byte Ptr,hbmp,uStartScan,cScanLines,lpvBits:Byte Ptr,lpbmi:Byte Ptr,fuColorUse )
+Function SetDIBits( hdc:Byte Ptr,hbmp:Byte Ptr,uStartScan:UInt,cScanLines:UInt,lpvBits:Byte Ptr,lpbmi:Byte Ptr,fuColorUse:UInt )
 Function DeleteDC( hdc:Byte Ptr )
 
 Function SetStretchBltMode( hdc:Byte Ptr,iStretchMode )

+ 40 - 0
win32.mod/gdi32.cpp

@@ -28,6 +28,14 @@ extern "C" {
 	TEXTMETRIC * bmx_win32_TEXTMETRIC_new();
 	void bmx_win32_TEXTMETRIC_free(TEXTMETRIC * metric);
 	int bmx_win32_TEXTMETRIC_tmAveCharWidth(TEXTMETRIC * metric);
+
+	BITMAPINFOHEADER * bmx_win32_BITMAPINFOHEADER_new();
+	void bmx_win32_BITMAPINFOHEADER_free(BITMAPINFOHEADER * hdr);
+	void bmx_win32_BITMAPINFOHEADER_SetbiWidth(BITMAPINFOHEADER * hdr, int biWidth);
+	void bmx_win32_BITMAPINFOHEADER_SetbiHeight(BITMAPINFOHEADER * hdr, int biHeight);
+	void bmx_win32_BITMAPINFOHEADER_SetbiPlanes(BITMAPINFOHEADER * hdr, int biPlanes);
+	void bmx_win32_BITMAPINFOHEADER_SetbiBitCount(BITMAPINFOHEADER * hdr, int biBitCount);
+	void bmx_win32_BITMAPINFOHEADER_SetbiCompression(BITMAPINFOHEADER * hdr, int biCompression);
 }
 
 // ********************************************************
@@ -134,3 +142,35 @@ int bmx_win32_TEXTMETRIC_tmAveCharWidth(TEXTMETRIC * metric) {
 	return metric->tmAveCharWidth;
 }
 
+// ********************************************************
+
+BITMAPINFOHEADER * bmx_win32_BITMAPINFOHEADER_new() {
+	BITMAPINFOHEADER * hdr = (BITMAPINFOHEADER *)calloc(1, sizeof(BITMAPINFOHEADER));
+	hdr->biSize = sizeof(BITMAPINFOHEADER);
+	return hdr;
+}
+
+void bmx_win32_BITMAPINFOHEADER_free(BITMAPINFOHEADER * hdr) {
+	free(hdr);
+}
+
+void bmx_win32_BITMAPINFOHEADER_SetbiWidth(BITMAPINFOHEADER * hdr, int biWidth) {
+	hdr->biWidth = biWidth;
+}
+
+void bmx_win32_BITMAPINFOHEADER_SetbiHeight(BITMAPINFOHEADER * hdr, int biHeight) {
+	hdr->biHeight = biHeight;
+}
+
+void bmx_win32_BITMAPINFOHEADER_SetbiPlanes(BITMAPINFOHEADER * hdr, int biPlanes) {
+	hdr->biPlanes = biPlanes;
+}
+
+void bmx_win32_BITMAPINFOHEADER_SetbiBitCount(BITMAPINFOHEADER * hdr, int biBitCount) {
+	hdr->biBitCount = biBitCount;
+}
+
+void bmx_win32_BITMAPINFOHEADER_SetbiCompression(BITMAPINFOHEADER * hdr, int biCompression) {
+	hdr->biCompression = biCompression;
+}
+

+ 1 - 1
win32.mod/gdi32.x

@@ -1,4 +1,4 @@
-int SetDIBits(HDC,HBITMAP,UINT,UINT,PCVOID,const BITMAPINFO*,UINT)!
+int SetDIBits(HDC,HBITMAP,UINT,UINT,VOID *,const BITMAPINFO*,UINT)!
 BOOL DeleteDC(HDC)!
 BOOL StretchBlt(HDC,int,int,int,int,HDC,int,int,int,int,DWORD)!
 HFONT CreateFontIndirectW(const LOGFONTW*)!

+ 91 - 5
win32.mod/user32.bmx

@@ -845,12 +845,63 @@ Type WNDCLASSW
 '	Field lpszClassName:Short Ptr
 End Type
 
+Extern
+	Function bmx_win32_MINMAXINFO_new:Byte Ptr()
+	Function bmx_win32_MINMAXINFO_free(handle:Byte Ptr)
+	Function bmx_win32_MINMAXINFO_SetminTrackSizeX(handle:Byte Ptr, x:Int)
+	Function bmx_win32_MINMAXINFO_SetminTrackSizeY(handle:Byte Ptr, y:Int)
+	Function bmx_win32_MINMAXINFO_SetmaxTrackSizeX(handle:Byte Ptr, x:Int)
+	Function bmx_win32_MINMAXINFO_SetmaxTrackSizeY(handle:Byte Ptr, y:Int)
+End Extern
 Type MINMAXINFO
-	Field reserved0,reserved1
-	Field maxw,maxh
-	Field maxx,maxy
-	Field minw,minh
-	Field minx,miny
+	Field infoPtr:Byte Ptr
+
+	Field _owner:Int = True
+
+	Method New()
+		infoPtr = bmx_win32_MINMAXINFO_new()
+	End Method
+
+	Method Delete()
+		Free()
+	End Method
+	
+	Method Free()
+		If infoPtr And _owner Then
+			bmx_win32_MINMAXINFO_free(infoPtr)
+		End If
+		infoPtr = Null
+	End Method
+
+	Function _create:MINMAXINFO(infoPtr:Byte Ptr)
+		Local this:MINMAXINFO = New MINMAXINFO
+		this.Free()
+		this.infoPtr = infoPtr
+		this._owner = False
+		Return this
+	End Function
+	
+	Method SetminTrackSizeX(x:Int)
+		bmx_win32_MINMAXINFO_SetminTrackSizeX(infoPtr, x)
+	End Method
+
+	Method SetminTrackSizeY(y:Int)
+		bmx_win32_MINMAXINFO_SetminTrackSizeY(infoPtr, y)
+	End Method
+
+	Method SetmaxTrackSizeX(x:Int)
+		bmx_win32_MINMAXINFO_SetmaxTrackSizeX(infoPtr, x)
+	End Method
+
+	Method SetmaxTrackSizeY(y:Int)
+		bmx_win32_MINMAXINFO_SetmaxTrackSizeY(infoPtr, y)
+	End Method	
+
+'	Field reserved0,reserved1
+'	Field maxw,maxh
+'	Field maxx,maxy
+'	Field minw,minh
+'	Field minx,miny
 End Type
 
 Extern
@@ -1042,6 +1093,41 @@ Type ICONINFO
 '    Field hbmColor
 EndType
 
+Extern
+	Function bmx_win32_TRACKMOUSEEVENT_new:Byte Ptr()
+	Function bmx_win32_TRACKMOUSEEVENT_free(handle:Byte Ptr)
+	Function bmx_win32_TRACKMOUSEEVENT_SetdwFlags(handle:Byte Ptr, dwFlags:Int)
+	Function bmx_win32_TRACKMOUSEEVENT_SethwndTrack(handle:Byte Ptr, hwndTrack:Byte Ptr)
+End Extern
+Type TRACKMOUSEEVENT
+	Field eventPtr:Byte Ptr
+	
+	Method New()
+		eventPtr = bmx_win32_TRACKMOUSEEVENT_new()
+	End Method
+
+	Method Delete()
+		Free()
+	End Method
+	
+	Method Free()
+		If eventPtr Then
+			bmx_win32_TRACKMOUSEEVENT_free(eventPtr)
+			eventPtr = Null
+		End If
+	End Method
+
+	Method SetdwFlags(dwFlags:Int)
+		bmx_win32_TRACKMOUSEEVENT_SetdwFlags(eventPtr, dwFlags)
+	End Method
+	
+	Method SethwndTrack(hwndTrack:Byte Ptr)
+		bmx_win32_TRACKMOUSEEVENT_SethwndTrack(eventPtr, hwndTrack)
+	End Method
+	
+End Type
+
+
 Extern "Win32"
 
 Function SetCapture( hWnd:Byte Ptr )

+ 58 - 0
win32.mod/user32.cpp

@@ -58,6 +58,18 @@ extern "C" {
 	void bmx_win32_WINDOWINFO_free(WINDOWINFO * info);
 	int bmx_win32_WINDOWINFO_dwStyle(WINDOWINFO * info);
 
+	TRACKMOUSEEVENT * bmx_win32_TRACKMOUSEEVENT_new();
+	void bmx_win32_TRACKMOUSEEVENT_free(TRACKMOUSEEVENT * event);
+	void bmx_win32_TRACKMOUSEEVENT_SetdwFlags(TRACKMOUSEEVENT * event, int dwFlags);
+	void bmx_win32_TRACKMOUSEEVENT_SethwndTrack(TRACKMOUSEEVENT * event, HWND hwndTrack);
+
+	MINMAXINFO * bmx_win32_MINMAXINFO_new();
+	void bmx_win32_MINMAXINFO_free(MINMAXINFO * info);
+	void bmx_win32_MINMAXINFO_SetminTrackSizeX(MINMAXINFO * info, int x);
+	void bmx_win32_MINMAXINFO_SetminTrackSizeY(MINMAXINFO * info, int y);
+	void bmx_win32_MINMAXINFO_SetmaxTrackSizeX(MINMAXINFO * info, int x);
+	void bmx_win32_MINMAXINFO_SetmaxTrackSizeY(MINMAXINFO * info, int y);
+
 }
 
 // ********************************************************
@@ -268,3 +280,49 @@ int bmx_win32_WINDOWINFO_dwStyle(WINDOWINFO * info) {
 	return info->dwStyle;
 }
 
+// ********************************************************
+
+TRACKMOUSEEVENT * bmx_win32_TRACKMOUSEEVENT_new() {
+	TRACKMOUSEEVENT * event = (TRACKMOUSEEVENT *)calloc(1, sizeof(TRACKMOUSEEVENT));
+	event->cbSize = sizeof(TRACKMOUSEEVENT);
+	return event;
+}
+
+void bmx_win32_TRACKMOUSEEVENT_free(TRACKMOUSEEVENT * event) {
+	free(event);
+}
+
+void bmx_win32_TRACKMOUSEEVENT_SetdwFlags(TRACKMOUSEEVENT * event, int dwFlags) {
+	event->dwFlags = dwFlags;
+}
+
+void bmx_win32_TRACKMOUSEEVENT_SethwndTrack(TRACKMOUSEEVENT * event, HWND hwndTrack) {
+	event->hwndTrack = hwndTrack;
+}
+
+// ********************************************************
+
+MINMAXINFO * bmx_win32_MINMAXINFO_new() {
+	return (MINMAXINFO *)calloc(1, sizeof(MINMAXINFO));
+}
+
+void bmx_win32_MINMAXINFO_free(MINMAXINFO * info) {
+	free(info);
+}
+
+void bmx_win32_MINMAXINFO_SetminTrackSizeX(MINMAXINFO * info, int x) {
+	info->ptMinTrackSize.x = x;
+}
+
+void bmx_win32_MINMAXINFO_SetminTrackSizeY(MINMAXINFO * info, int y) {
+	info->ptMinTrackSize.y = y;
+}
+
+void bmx_win32_MINMAXINFO_SetmaxTrackSizeX(MINMAXINFO * info, int x) {
+	info->ptMaxTrackSize.x = x;
+}
+
+void bmx_win32_MINMAXINFO_SetmaxTrackSizeY(MINMAXINFO * info, int y) {
+	info->ptMaxTrackSize.y = y;
+}
+