;============================================================ ; 2007/03/09 ; GPModule 1.01 ; ; S.Programs http://sprocket.babyblue.jp/ ;============================================================ #module gpm ; GDI+ Flat APIs #uselib "gdiplus" #func GdiplusStartup "GdiplusStartup" int, int, int #func GdiplusShutdown "GdiplusShutdown" int #func GdipCreateFromHDC "GdipCreateFromHDC" int, int #func GdipDeleteGraphics "GdipDeleteGraphics" int #func GdipSetSmoothingMode "GdipSetSmoothingMode" int, int #func GdipSetClipRectI "GdipSetClipRectI" int, int, int, int, int, int ; Pen / Brush #func GdipCreatePen1 "GdipCreatePen1" int, float, int, int #func GdipCreateSolidFill "GdipCreateSolidFill" int, int #func GdipDeletePen "GdipDeletePen" int #func GdipDeleteBrush "GdipDeleteBrush" int ; Draw (int) #func GdipDrawLineI "GdipDrawLineI" int, int, int, int, int, int #func GdipDrawEllipseI "GdipDrawEllipseI" int, int, int, int, int, int #func GdipFillEllipseI "GdipFillEllipseI" int, int, int, int, int, int ;----------------------------------------------------------- #deffunc gpexit if gdiplusToken { GdipDeletePen nativePen ; ペンを削除 GdipDeleteBrush nativeBrush ; ブラシを削除 GdipDeleteGraphics nativeGraphics ; Graphics を削除 GdiplusShutdown gdiplusToken ; GDI+ 終了 gdiplusToken = 0 } return ;----------------------------------------------------------- #deffunc gpinit gpexit if varptr(GdiplusStartup) { gdiplusToken = 0 gsi = 1, 0, 0, 0 GdiplusStartup varptr(gdiplusToken), varptr(gsi), 0 ; GDI+ 開始 nativeGraphics = 0 GdipCreateFromHDC hdc, varptr(nativeGraphics) ; Graphics 作成 (現在の screen の hdc) GdipSetSmoothingMode nativeGraphics, 2 ; アンチエイリアシングを有効化 nativePen = 0 nativeBrush = 0 } return ;----------------------------------------------------------- #deffunc gpcolor_ if hdc_bk ! hdc { hdc_bk = hdc gpinit } if gdiplusToken { if nativePen { GdipDeletePen nativePen ; ペンを削除 GdipDeleteBrush nativeBrush ; ブラシを削除 } ARGB = 0xff000000|(ginfo_r<<16)|(ginfo_g<<8)|ginfo_b ; ARGB (a=100%) GdipCreatePen1 ARGB, 1, 0, varptr(nativePen) ; ペンを作成 (width=1, unit=0) GdipCreateSolidFill ARGB, varptr(nativeBrush) ; ブラシを作成 ; GdipSetClipRectI nativeGraphics, 0, 0, ginfo_winx, ginfo_winy, 0 ; Clip Rect 設定 } return ; color 系命令 #define global gpcolor(%1=0, %2=0, %3=0) color %1, %2, %3 : gpcolor_ #define global gphsvcolor(%1=0, %2=0, %3=0) hsvcolor %1, %2, %3 : gpcolor_ #define global gppalcolor(%1=0) palcolor %1 : gpcolor_ #define global gpsyscolor(%1=0) syscolor %1 : gpcolor_ ;----------------------------------------------------------- #deffunc gpline_ int p1, int p2, int p3, int p4 if gdiplusToken { GdipDrawLineI nativeGraphics, nativePen, p1, p2, p3, p4 pos p1, p2 } else { line p1, p2, p3, p4 } return ; line (パラメータ省略用マクロ) #define global gpline(%1=0, %2=0, %3=ginfo_cx, %4=ginfo_cy) gpline_ %1, %2, %3, %4 ;----------------------------------------------------------- #deffunc gpcircle_ int p1, int p2, int p3, int p4, int p5 if gdiplusToken { if p5 { GdipFillEllipseI nativeGraphics, nativeBrush, p1, p2, p3-p1-1, p4-p2-1 } else { GdipDrawEllipseI nativeGraphics, nativePen, p1, p2, p3-p1-1, p4-p2-1 } } else { circle p1, p2, p3, p4, p5 } return ; circle (パラメータ省略用マクロ) #define global gpcircle(%1=0, %2=0, %3=0, %4=0, %5=1) gpcircle_ %1, %2, %3, %4, %5 #global