;============================================================ ; 2006/12/17 ; S.Programs GPModule 1.0 ; 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 ; 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 exist dir_sys + "\\uxtheme.dll" if strsize < 0 : exist dir_exe + "\\gdiplus.dll" if strsize < 0 : exist dir_sys + "\\gdiplus.dll" if strsize >= 0 { 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 gpcolorset 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) ; ブラシを作成 } return ; color 系命令 #define global gpcolor(%1=0, %2=0, %3=0) color %1, %2, %3 : gpcolorset #define global gphsvcolor(%1=0, %2=0, %3=0) hsvcolor %1, %2, %3 : gpcolorset #define global gppalcolor(%1=0) palcolor %1 : gpcolorset #define global gpsyscolor(%1=0) syscolor %1 : gpcolorset ;----------------------------------------------------------- #deffunc gpline2 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) gpline2 %1, %2, %3, %4 ;----------------------------------------------------------- #deffunc gpcircle2 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) gpcircle2 %1, %2, %3, %4, %5 #global