goo

DirectWrite

モジュール mod_DWMes - DirectWriteによる文字表示
mod_DWMes.hsp
#ifndef MOD_DWMES_HSP_
#define MOD_DWMES_HSP_

#include "user32.as"
#include "gdi32.as"
#include "kernel32.as"

#uselib "d2d1.dll"
#func global D2D1CreateFactory      "D2D1CreateFactory"      int,var,int,var
#func global D2D1InvertMatrix       "D2D1InvertMatrix"       var
#func global D2D1IsMatrixInvertible "D2D1IsMatrixInvertible" var
#func global D2D1MakeRotateMatrix   "D2D1MakeRotateMatrix"   int,int,int,var
#func global D2D1MakeSkewMatrix     "D2D1MakeSkewMatrix"     int,int,int,int,var

#uselib "dwrite.dll"
#func global DWriteCreateFactory "DWriteCreateFactory" int,var,var

#ifndef IID_ID2D1Factory
#define global IID_ID2D1Factory "{06152247-6F50-465A-9245-118BFD3B6007}"
#usecom global ID2D1Factory IID_ID2D1Factory "{}"
#comfunc global ID2D1Factory_ReloadSystemMetrics             3
#comfunc global ID2D1Factory_GetDesktopDpi                   4 var,var
#comfunc global ID2D1Factory_CreateRectangleGeometry         5 var,var
#comfunc global ID2D1Factory_CreateRoundedRectangleGeometry  6 var,var
#comfunc global ID2D1Factory_CreateEllipseGeometry           7 var,var
#comfunc global ID2D1Factory_CreateGeometryGroup             8 int,var,int,var
#comfunc global ID2D1Factory_CreateTransformedGeometry       9 int,var,var
#comfunc global ID2D1Factory_CreatePathGeometry             10 var
#comfunc global ID2D1Factory_CreateStrokeStyle              11 var,var,int,var
#comfunc global ID2D1Factory_CreateDrawingStateBlock        12 int,int,var
#comfunc global ID2D1Factory_CreateWicBitmapRenderTarget    13 int,var,var
#comfunc global ID2D1Factory_CreateHwndRenderTarget         14 var,var,var
#comfunc global ID2D1Factory_CreateDxgiSurfaceRenderTarget  15 int,var,var
#comfunc global ID2D1Factory_CreateDCRenderTarget           16 var,var
#endif // IID_ID2D1Factory

#ifndef IID_ID2D1DCRenderTarget
#define global IID_ID2D1DCRenderTarget "{1c51bc64-de61-46fd-9899-63a5d8f03950}"
#usecom global ID2D1DCRenderTarget IID_ID2D1DCRenderTarget "{}"
#comfunc global ID2D1DCRenderTarget_GetFactory                    3 var
#comfunc global ID2D1DCRenderTarget_CreateBitmap                  4 int,int,int,int,int,var
#comfunc global ID2D1DCRenderTarget_CreateBitmapFromWicBitmap     5 int,int,var
#comfunc global ID2D1DCRenderTarget_CreateSharedBitmap            6 var,var,int,var
#comfunc global ID2D1DCRenderTarget_CreateBitmapBrush             7 int,int,int,var
#comfunc global ID2D1DCRenderTarget_CreateSolidColorBrush         8 var,int,var
#comfunc global ID2D1DCRenderTarget_CreateGradientStopCollection  9 var,int,int,int,var
#comfunc global ID2D1DCRenderTarget_CreateLinearGradientBrush    10 int,int,int,var
#comfunc global ID2D1DCRenderTarget_CreateRadialGradientBrush    11 int,int,int,var
#comfunc global ID2D1DCRenderTarget_CreateCompatibleRenderTarget 12 int,int,int,int,int,int,var
#comfunc global ID2D1DCRenderTarget_CreateLayer                  13 int,int,var
#comfunc global ID2D1DCRenderTarget_CreateMesh                   14 var
#comfunc global ID2D1DCRenderTarget_DrawLine                     15 int,int,int,int,int,int,int
#comfunc global ID2D1DCRenderTarget_DrawRectangle                16 var,int,int,int
#comfunc global ID2D1DCRenderTarget_FillRectangle                17 var,var
#comfunc global ID2D1DCRenderTarget_DrawRoundedRectangle         18 var,int,int,int
#comfunc global ID2D1DCRenderTarget_FillRoundedRectangle         19 int,int
#comfunc global ID2D1DCRenderTarget_DrawEllipse                  20 int,int,int,int,int,int,int
#comfunc global ID2D1DCRenderTarget_FillEllipse                  21 var,int
#comfunc global ID2D1DCRenderTarget_DrawGeometry                 22 int,int,int,int
#comfunc global ID2D1DCRenderTarget_FillGeometry                 23 int,int,int
#comfunc global ID2D1DCRenderTarget_FillMesh                     24 int,int
#comfunc global ID2D1DCRenderTarget_FillOpacityMask              25 int,int,int,int,int
#comfunc global ID2D1DCRenderTarget_DrawBitmap                   26 int,int,int,int,int
#comfunc global ID2D1DCRenderTarget_DrawText                     27 wstr,int,int,var,int,int,int
#comfunc global ID2D1DCRenderTarget_DrawTextLayout               28 int,int,int,int,int
#comfunc global ID2D1DCRenderTarget_DrawGlyphRun                 29 int,int,int,int,int
#comfunc global ID2D1DCRenderTarget_SetTransform                 30 var
#comfunc global ID2D1DCRenderTarget_GetTransform                 31 var
#comfunc global ID2D1DCRenderTarget_SetAntialiasMode             32 int
#comfunc global ID2D1DCRenderTarget_GetAntialiasMode             33
#comfunc global ID2D1DCRenderTarget_SetTextAntialiasMode         34 int
#comfunc global ID2D1DCRenderTarget_GetTextAntialiasMode         35
#comfunc global ID2D1DCRenderTarget_SetTextRenderingParams       36 int
#comfunc global ID2D1DCRenderTarget_GetTextRenderingParams       37 var
#comfunc global ID2D1DCRenderTarget_SetTags                      38 int,int,int,int
#comfunc global ID2D1DCRenderTarget_GetTags                      39 int,int
#comfunc global ID2D1DCRenderTarget_PushLayer                    40 var,int
#comfunc global ID2D1DCRenderTarget_PopLayer                     41
#comfunc global ID2D1DCRenderTarget_Flush                        42 int,int
#comfunc global ID2D1DCRenderTarget_SaveDrawingState             43 int
#comfunc global ID2D1DCRenderTarget_RestoreDrawingState          44 int
#comfunc global ID2D1DCRenderTarget_PushAxisAlignedClip          45 var,int
#comfunc global ID2D1DCRenderTarget_PopAxisAlignedClip           46
#comfunc global ID2D1DCRenderTarget_Clear                        47 var
#comfunc global ID2D1DCRenderTarget_BeginDraw                    48
#comfunc global ID2D1DCRenderTarget_EndDraw                      49 int,int
#comfunc global ID2D1DCRenderTarget_GetPixelFormat               50
#comfunc global ID2D1DCRenderTarget_SetDpi                       51 int,int
#comfunc global ID2D1DCRenderTarget_GetDpi                       52 var,var
#comfunc global ID2D1DCRenderTarget_GetSize                      53 var
#comfunc global ID2D1DCRenderTarget_GetPixelSize                 54 var
#comfunc global ID2D1DCRenderTarget_GetMaximumBitmapSize         55
#comfunc global ID2D1DCRenderTarget_IsSupported                  56 var
#comfunc global ID2D1DCRenderTarget_BindDC                       57 int,var
#endif // IID_ID2D1DCRenderTarget

#ifndef IID_ID2D1SolidColorBrush
#define global IID_ID2D1SolidColorBrush "{2CD906A9-12E2-11DC-9FED-001143A055F9}"
#usecom global ID2D1SolidColorBrush IID_ID2D1SolidColorBrush "{}"
#comfunc global ID2D1SolidColorBrush_GetFactory    3 var
#comfunc global ID2D1SolidColorBrush_SetOpacity    4 int
#comfunc global ID2D1SolidColorBrush_SetTransform  5 var
#comfunc global ID2D1SolidColorBrush_GetOpacity    6
#comfunc global ID2D1SolidColorBrush_GetTransform  7 var
#comfunc global ID2D1SolidColorBrush_SetColor      8 var
#comfunc global ID2D1SolidColorBrush_GetColor      9 var
#endif // IID_ID2D1SolidColorBrush

#ifndef IID_IDWriteFactory
#define global IID_IDWriteFactory "{B859EE5A-D838-4B5B-A2E8-1ADC7D93DB48}"
#usecom global IDWriteFactory IID_IDWriteFactory "{}"
#comfunc global IDWriteFactory_GetSystemFontCollection         3 var,int
#comfunc global IDWriteFactory_CreateCustomFontCollection      4 int,var,int,var
#comfunc global IDWriteFactory_RegisterFontCollectionLoader    5 int
#comfunc global IDWriteFactory_UnregisterFontCollectionLoader  6 int
#comfunc global IDWriteFactory_CreateFontFileReference         7 wstr,int,var
#comfunc global IDWriteFactory_CreateCustomFontFileReference   8 int,int,int,var
#comfunc global IDWriteFactory_CreateFontFace                  9 int,int,int,int,int,var
#comfunc global IDWriteFactory_CreateRenderingParams          10 var
#comfunc global IDWriteFactory_CreateMonitorRenderingParams   11 int,var
#comfunc global IDWriteFactory_CreateCustomRenderingParams    12 int,int,int,int,int,var
#comfunc global IDWriteFactory_RegisterFontFileLoader         13 int
#comfunc global IDWriteFactory_UnregisterFontFileLoader       14 int
#comfunc global IDWriteFactory_CreateTextFormat               15 wstr,int,int,int,int,int,wstr,var
#comfunc global IDWriteFactory_CreateTypography               16 var
#comfunc global IDWriteFactory_GetGdiInterop                  17 var
#comfunc global IDWriteFactory_CreateTextLayout               18 wstr,int,int,int,int,var
#comfunc global IDWriteFactory_CreateGdiCompatibleTextLayout  19 wstr,int,int,int,int,int,int,int,var
#comfunc global IDWriteFactory_CreateEllipsisTrimmingSign     20 int,var
#comfunc global IDWriteFactory_CreateTextAnalyzer             21 var
#comfunc global IDWriteFactory_CreateNumberSubstitution       22 int,wstr,int,var
#comfunc global IDWriteFactory_CreateGlyphRunAnalysis         23 int,int,int,int,int,int,int,var
#endif // IID_IDWriteFactory

#ifndef IID_IDWriteTextFormat
#define global IID_IDWriteTextFormat "{9c906818-31d7-4fd3-a151-7c5e225db55a}"
#usecom global IDWriteTextFormat IID_IDWriteTextFormat "{}"
#comfunc global IDWriteTextFormat_SetTextAlignment         3 int
#comfunc global IDWriteTextFormat_SetParagraphAlignment    4 int
#comfunc global IDWriteTextFormat_SetWordWrapping          5 int
#comfunc global IDWriteTextFormat_SetReadingDirection      6 int
#comfunc global IDWriteTextFormat_SetFlowDirection         7 int
#comfunc global IDWriteTextFormat_SetIncrementalTabStop    8 int
#comfunc global IDWriteTextFormat_SetTrimming              9 var,int
#comfunc global IDWriteTextFormat_SetLineSpacing          10 int,int,int
#comfunc global IDWriteTextFormat_GetTextAlignment        11
#comfunc global IDWriteTextFormat_GetParagraphAlignment   12
#comfunc global IDWriteTextFormat_GetWordWrapping         13
#comfunc global IDWriteTextFormat_GetReadingDirection     14
#comfunc global IDWriteTextFormat_GetFlowDirection        15
#comfunc global IDWriteTextFormat_GetIncrementalTabStop   16
#comfunc global IDWriteTextFormat_GetTrimming             17 var,var
#comfunc global IDWriteTextFormat_GetLineSpacing          18 var,var,var
#comfunc global IDWriteTextFormat_GetFontCollection       19 var
#comfunc global IDWriteTextFormat_GetFontFamilyNameLength 20
#comfunc global IDWriteTextFormat_GetFontFamilyName       21 var,int
#comfunc global IDWriteTextFormat_GetFontWeight           22
#comfunc global IDWriteTextFormat_GetFontStyle            23
#comfunc global IDWriteTextFormat_GetFontStretch          24
#comfunc global IDWriteTextFormat_GetFontSize             25
#comfunc global IDWriteTextFormat_GetLocaleNameLength     26
#comfunc global IDWriteTextFormat_GetLocaleName           27 var,int
#endif // IID_IDWriteTextFormat

#ifndef IID_IDWriteTextLayout // inherits from IDWriteTextFormat
#define global IID_IDWriteTextLayout "{53737037-6d14-410b-9bfe-0b182bb70961}"
#usecom global IDWriteTextLayout IID_IDWriteTextLayout "{}"
#comfunc global IDWriteTextLayout_SetMaxWidth             28 int
#comfunc global IDWriteTextLayout_SetMaxHeight            29 int
#comfunc global IDWriteTextLayout_SetFontCollection       30 int,int,int
#comfunc global IDWriteTextLayout_SetFontFamilyName       31 wstr,int,int
#comfunc global IDWriteTextLayout_SetFontWeight           32 int,int,int
#comfunc global IDWriteTextLayout_SetFontStyle            33 int,int,int
#comfunc global IDWriteTextLayout_SetFontStretch          34 int,int,int
#comfunc global IDWriteTextLayout_SetFontSize             35 int,int,int
#comfunc global IDWriteTextLayout_SetUnderline            36 int,int,int
#comfunc global IDWriteTextLayout_SetStrikethrough        37 int,int,int
#comfunc global IDWriteTextLayout_SetDrawingEffect        38 int,int,int
#comfunc global IDWriteTextLayout_SetInlineObject         39 int,int,int
#comfunc global IDWriteTextLayout_SetTypography           40 int,int,int
#comfunc global IDWriteTextLayout_SetLocaleName           41 wstr,int,int
#comfunc global IDWriteTextLayout_GetMaxWidth             42
#comfunc global IDWriteTextLayout_GetMaxHeight            43
#comfunc global IDWriteTextLayout_GetFontCollection       44 int,var,int
#comfunc global IDWriteTextLayout_GetFontFamilyNameLength 45 int,var,int
#comfunc global IDWriteTextLayout_GetFontFamilyName       46 int,var,int,int
#comfunc global IDWriteTextLayout_GetFontWeight           47 int,var,int
#comfunc global IDWriteTextLayout_GetFontStyle            48 int,var,int
#comfunc global IDWriteTextLayout_GetFontStretch          49 int,var,int
#comfunc global IDWriteTextLayout_GetFontSize             50 int,var,int
#comfunc global IDWriteTextLayout_GetUnderline            51 int,var,int
#comfunc global IDWriteTextLayout_GetStrikethrough        52 int,var,int
#comfunc global IDWriteTextLayout_GetDrawingEffect        53 int,var,int
#comfunc global IDWriteTextLayout_GetInlineObject         54 int,var,int
#comfunc global IDWriteTextLayout_GetTypography           55 int,var,int
#comfunc global IDWriteTextLayout_GetLocaleNameLength     56 int,var,int
#comfunc global IDWriteTextLayout_GetLocaleName           57 int,var,int,int
#comfunc global IDWriteTextLayout_Draw                    58 int,int,int,int
#comfunc global IDWriteTextLayout_GetLineMetrics          59 int,int,var
#comfunc global IDWriteTextLayout_GetMetrics              60 var
#comfunc global IDWriteTextLayout_GetOverhangMetrics      61 var
#comfunc global IDWriteTextLayout_GetClusterMetrics       62 var,int,var
#comfunc global IDWriteTextLayout_DetermineMinWidth       63 var
#comfunc global IDWriteTextLayout_HitTestPoint            64 int,int,var,var,var
#comfunc global IDWriteTextLayout_HitTestTextPosition     65 int,int,var,var,var
#comfunc global IDWriteTextLayout_HitTestTextRange        66 int,int,int,int,var,int,var
#endif // IID_IDWriteTextLayout

#ifndef IDWriteInlineObject
#define global IID_IDWriteInlineObject "{8339FDE3-106F-47ab-8373-1C6295EB10B3}"
#usecom global IDWriteInlineObject IID_IDWriteInlineObject "{}"
#comfunc global IDWriteInlineObject_Draw                3 int,int,int,int,int,int,int
#comfunc global IDWriteInlineObject_GetMetrics          4 var
#comfunc global IDWriteInlineObject_GetOverhangMetrics  5 var
#comfunc global IDWriteInlineObject_GetBreakConditions  6 var,var
#endif // IDWriteInlineObject

#ifndef d2f
#module mod_d2f
#defcfunc d2f double d
	if( dtof == 0 ){
		d_ = 0.0 : f_ = 0
		dim prm, 2 : dim dtof,4
		dtof(0) = 0x0424448b, 0x4c8b00dd, 0x19d90824, 0x000000c3
		VirtualProtect varptr(dtof), 16, 0x40, varptr(r)
		prm = varptr(d_), varptr(f_)
	}
	d_ = d
	r = callfunc(prm, varptr(dtof), 2)
	return f_
#global
#endif // d2f

#ifndef f2d
#module mod_f2d
#defcfunc f2d int f
	if( ftod == 0 ){
		d_ = 0.0 : f_ = 0
		dim prm, 2 : dim ftod,4
		ftod(0) = 0x0424448b, 0x4c8b00d9, 0x19dd0824, 0x000000c3
		VirtualProtect varptr(ftod), 16, 0x40, varptr(r)
		prm = varptr(f_), varptr(d_)
	}
	f_ = f
	r = callfunc(prm, varptr(ftod), 2)
	return d_
#global
#endif // f2d

#ifndef GetF2D
#module mod_GetF2D
#defcfunc GetF2D
	if( getFtoD == 0 ){
		prm = 0 : dim getFtoD, 3
		getFtoD(0) = 0x241cd951, 0x5924048b, 0x000000c3
		VirtualProtect varptr(getFtoD), 12, 0x40, varptr(r)
	}
	r = callfunc(prm, varptr(getFtoD), 0)
	return f2d(r)
#global
#endif // GetF2D

#module mod_DWMes

#deffunc DWMes_Init
	mref bmscr, 67
	dim IID_ID2D1Factory_, 4
	dim IID_IDWriteFactory_, 4
	IID_ID2D1Factory_(0) = 0x6152247, 0x465a6f50, 0x8b114592, 0x7603bfd
	D2D1CreateFactory 0, IID_ID2D1Factory_, 0, pv
	if ( stat ){ return }
	newcom factory, ID2D1Factory, -1, pv
	IID_IDWriteFactory_(0) = 0xb859ee5a, 0x4b5bd838, 0xdc1ae8a2, 0x48db937d
	DWriteCreateFactory 0, IID_IDWriteFactory_, pv
	if ( stat ){ delcom factory : return }
	newcom dwFactory, IID_IDWriteFactory, -1, pv
	dim prm, 15 : prm(1) = 87, 3
	ID2D1Factory_CreateDCRenderTarget factory, prm, pv
	if ( stat ){ delcom factory : delcom dwFactory : return }
	newcom dcRT, ID2D1DCRenderTarget, -1, pv
	dim curDWInfo, 3
	mref bmscr, 67
	GetObjectA bmscr(38), 60, varptr(prm)
	dupptr dp, varptr(prm) + 28, 32, 2
	if ( prm < 0 ){ prm *= -1 }
	DWMes2Make curDWInfo, hdc, dp, prm, 400, ginfo_r, ginfo_g, ginfo_b
	return

#deffunc DWMes str s
	GetClientRect hwnd, varptr(prm)
	ID2D1DCRenderTarget_BindDC dcRT, hdc, prm
	MultiByteToWideChar 0, 0, s, -1, 0, 0
	if ( stat == 0 ){ return }
	prm(4) = stat - 1, d2f(ginfo_cx), d2f(ginfo_cy), d2f(prm(2)), d2f(prm(3))
	ID2D1DCRenderTarget_BeginDraw dcRT
	ID2D1DCRenderTarget_DrawText dcRT, s, prm(4), curDWInfo(1), prm(5), curDWInfo(2), 0, 0
	ID2D1DCRenderTarget_EndDraw dcRT, 0, 0
	IDWriteFactory_CreateTextLayout dwFactory, s, prm(4), curDWInfo(1), prm(7), prm(8), pv
	newcom objTmp, IDWriteTextLayout, -1, pv
	IDWriteTextLayout_GetMetrics objTmp, prm
	bmscr(28) += f2d(prm(4))
	objTmp = 0
	if ( wpeek(bmscr, 78) ){ redraw 1 }
	return

#deffunc DWMesFont str fontName, int size, int weight
	DWMes2Font curDWInfo, fontName, size, weight
	return

#deffunc DWMesColor int r, int g, int b
	DWMes2Color curDWInfo, r, g, b
	return

#deffunc DWMesGetSize str s, int w, int h, array rc
	DWMes2GetSize curDWInfo, s, w, h, rc
	return

#deffunc DWMesOpacity int opacity
	DWMes2Opacity curDWInfo, opacity
	return

#defcfunc DWMesGetTextAlignment
	return DWMes2GetTextAlignment(curDWInfo)

#deffunc DWMesSetTextAlignment int b
	DWMes2SetTextAlignment curDWInfo, b
	return

#defcfunc DWMesGetParagraphAlignment
	return DWMes2GetParagraphAlignment(curDWInfo)

#deffunc DWMesSetParagraphAlignment int b
	DWMes2SetParagraphAlignment curDWInfo, b
	return

#defcfunc DWMesGetWordWrapping
	return DWMes2GetWordWrapping(curDWInfo)

#deffunc DWMesSetWordWrapping int b
	DWMes2SetWordWrapping curDWInfo, b
	return

#defcfunc DWMesGetReadingDirection
	return DWMes2GetReadingDirection(curDWInfo)

#deffunc DWMesSetReadingDirection int b
	DWMes2SetReadingDirection curDWInfo, b
	return

#defcfunc DWMesGetFlowDirection
	return DWMes2GetFlowDirection(curDWInfo)

#deffunc DWMesSetFlowDirection int b
	DWMes2SetFlowDirection curDWInfo, b
	return

#defcfunc DWMesGetTabStop
	return DWMes2GetTabStop(curDWInfo)

#deffunc DWMesSetTabStop int size
	DWMes2SetTabStop curDWInfo, d2f(size)
	return

#defcfunc DWMesGetTrimmingOption
	return DWMes2GetTrimmingOption(curDWInfo)

#defcfunc DWMesGetTrimmingObj
	return DWMes2GetTrimmingObj(curDWInfo)

#deffunc DWMesSetTrimming int option, int bObj
	DWMes2SetTrimming curDWInfo, option, bObj
	return

#defcfunc DWMesGetLineSpacingMethod
	return DWMes2GetLineSpacingMethod(curDWInfo)

#defcfunc DWMesGetLineSpacingHeight
	return DWMes2GetLineSpacingHeight(curDWInfo)

#defcfunc DWMesGetLineSpacingBase
	return DWMes2GetLineSpacingBase(curDWInfo)

#deffunc DWMesSetLineSpacing int method, double h, double base
	DWMes2SetLineSpacing curDWInfo, method, h, base
	return

#deffunc DWMesClear int r, int g, int b
	GetClientRect hwnd, varptr(prm)
	ID2D1DCRenderTarget_BindDC dcRT, hdc, prm
	ID2D1DCRenderTarget_BeginDraw dcRT
	prm = d2f(1.0 * r / 255), d2f(1.0 * g / 255), d2f(1.0 * b / 255), d2f(1.0)
	ID2D1DCRenderTarget_Clear dcRT, prm
	ID2D1DCRenderTarget_EndDraw dcRT, 0, 0
	mref bmscr, 67
	if ( wpeek(bmscr, 78) ){ redraw 1 }
	return

#deffunc DWMesTransform array p
	ID2D1DCRenderTarget_SetTransform dcRT, p
	return

#deffunc DWMesScale double sx, double sy, double x, double y
	prm = d2f(sx), 0, 0, d2f(sy), d2f(x - x * sx), d2f(y - y * sy)
	ID2D1DCRenderTarget_SetTransform dcRT, prm
	return

#deffunc DWMesRotate double r, double x, double y
	D2D1MakeRotateMatrix d2f(r), d2f(x), d2f(y), prm
	ID2D1DCRenderTarget_SetTransform dcRT, prm
	return

#deffunc DWMesSkew double rx, double ry, double x, double y
	D2D1MakeSkewMatrix d2f(rx), d2f(ry), d2f(x), d2f(y), prm
	ID2D1DCRenderTarget_SetTransform dcRT, prm
	return

#deffunc DWMesHorizen
	DWMes2Horizen curDWInfo
	return

#deffunc DWMesVertical
	DWMes2Vertical curDWInfo
	return

#deffunc DWMes2Begin array dwInfo, int x, int y, int w, int h
	prm = x, y, w, h
	ID2D1DCRenderTarget_BindDC dcRT, dwInfo(0), prm
	ID2D1DCRenderTarget_BeginDraw dcRT
	return

#deffunc DWMes2End
	ID2D1DCRenderTarget_EndDraw dcRT, 0, 0
	return

#deffunc DWMes2 array dwInfo, str s, int x, int y, int w, int h
	prm = d2f(x), d2f(y), d2f(w), d2f(h)
	MultiByteToWideChar 0, 0, s, -1, 0, 0
	ID2D1DCRenderTarget_DrawText dcRT, s, stat - 1, dwInfo(1), prm, dwInfo(2), 0, 0
	return

#deffunc DWMes2Make array dwInfo, int hdc_, str fontName, int size, int weight, int r, int g, int b
	dim dwInfo, 3
	dwInfo = hdc_
	DWMes2Font dwInfo, fontName, size, weight
	DWMes2Color dwInfo, r, g, b
	return

#deffunc DWMes2Free array dwInfo
	newcom objTmp, IDWriteTextFormat, -1, dwInfo(1) : delcom objTmp
	newcom objTmp, ID2D1SolidColorBrush, -1, dwInfo(2) : delcom objTmp
	repeat 3 : dwInfo(cnt) = 0 : loop
	objTmp = 0
	return

#deffunc DWMes2Font array dwInfo, str fontName, int size, int weight
	if ( dwInfo(1) ){
		if ( dwInfo(1) == curDWInfo(1) ){
			delcom curTextFormat
		}
		else {
			newcom objTmp, IDWriteTextFormat, -1, dwInfo(1)
			delcom objTmp
		}
		dwInfo(1) = 0
	}
	prm = weight, size
	if ( prm == 0 ){ prm = 400 }
	if ( size < 0 ){ prm(1) *= -1 }
	IDWriteFactory_CreateTextFormat dwFactory, fontName, 0, prm, 0, 5, d2f(prm(1)), "", dwInfo(1)
	if ( stat ){ return }
	if ( dwInfo(1) == curDWInfo(1) ){
		newcom curTextFormat, IDWriteTextFormat, -1, dwInfo(1)
		DWMesSetWordWrapping 1
	}
	else {
		DWMes2SetWordWrapping dwInfo, 1
	}
	return

#deffunc DWMes2Color array dwInfo, int r, int g, int b
	prm = d2f(1.0 * r / 255), d2f(1.0 * g / 255), d2f(1.0 * b / 255), d2f(1.0)
	if ( dwInfo(2) == 0 ){
		ID2D1DCRenderTarget_CreateSolidColorBrush dcRT, prm, 0, dwInfo(2)
		if ( dwInfo(2) == curDWInfo(2) ){
			newcom curBrush, ID2D1SolidColorBrush, -1, dwInfo(2)
		}
	}
	else {
		if ( dwInfo(2) == curDWInfo(2) ){
			ID2D1SolidColorBrush_SetColor curBrush, prm
		}
		else {
			newcom objTmp, ID2D1SolidColorBrush, -2, dwInfo(2)
			ID2D1SolidColorBrush_SetColor objTmp, prm
		}
	}
	return

#deffunc DWMes2GetSize array dwInfo, str s, int w, int h, array rc
	MultiByteToWideChar 0, 0, s, -1, 0, 0
	if ( stat == 0 ){ return }
	IDWriteFactory_CreateTextLayout dwFactory, s, stat - 1, dwInfo(1), d2f(w), d2f(h), pv
	newcom objTmp, IDWriteTextLayout, -1, pv
	IDWriteTextLayout_GetMetrics objTmp, prm
	dim rc, 4
	rc = int(f2d(prm(0))), int(f2d(prm(1))), int(f2d(prm(2))), int(f2d(prm(4)))
	rc(2) += rc(0) : rc(3) += rc(1)
	objTmp = 0
	return

#deffunc DWMes2Opacity array dwInfo, int opacity
	newcom objTmp, ID2D1SolidColorBrush, -2, dwInfo(2)
	ID2D1SolidColorBrush_SetOpacity objTmp, d2f(1.0 * opacity / 100)
	return

#defcfunc DWMes2GetTextAlignment array dwInfo
	newcom objTmp, IDWriteTextFormat, -2, dwInfo(1)
	IDWriteTextFormat_GetTextAlignment objTmp
	return stat

#deffunc DWMes2SetTextAlignment array dwInfo, int b
	newcom objTmp, IDWriteTextFormat, -2, dwInfo(1)
	IDWriteTextFormat_SetTextAlignment objTmp, b
	return

#defcfunc DWMes2GetParagraphAlignment array dwInfo
	newcom objTmp, IDWriteTextFormat, -2, dwInfo(1)
	IDWriteTextFormat_GetParagraphAlignment objTmp
	return stat

#deffunc DWMes2SetParagraphAlignment array dwInfo, int b
	newcom objTmp, IDWriteTextFormat, -2, dwInfo(1)
	IDWriteTextFormat_SetParagraphAlignment objTmp, b
	return

#defcfunc DWMes2GetWordWrapping array dwInfo
	newcom objTmp, IDWriteTextFormat, -2, dwInfo(1)
	IDWriteTextFormat_GetWordWrapping objTmp
	return stat

#deffunc DWMes2SetWordWrapping array dwInfo, int b
	newcom objTmp, IDWriteTextFormat, -2, dwInfo(1)
	IDWriteTextFormat_SetWordWrapping objTmp, b
	return

#defcfunc DWMes2GetReadingDirection array dwInfo
	newcom objTmp, IDWriteTextFormat, -2, dwInfo(1)
	IDWriteTextFormat_SetReadingDirection objTmp
	return stat

#deffunc DWMes2SetReadingDirection array dwInfo, int b
	newcom objTmp, IDWriteTextFormat, -2, dwInfo(1)
	IDWriteTextFormat_SetReadingDirection objTmp, b
	return

#defcfunc DWMes2GetFlowDirection array dwInfo
	newcom objTmp, IDWriteTextFormat, -2, dwInfo(1)
	IDWriteTextFormat_GetFlowDirection objTmp
	return stat

#deffunc DWMes2SetFlowDirection array dwInfo, int b
	newcom objTmp, IDWriteTextFormat, -2, dwInfo(1)
	IDWriteTextFormat_SetFlowDirection objTmp, b
	return

#defcfunc DWMes2GetTabStop array dwInfo
	newcom objTmp, IDWriteTextFormat, -2, dwInfo(1)
	IDWriteTextFormat_GetIncrementalTabStop objTmp
	return GetF2D()

#deffunc DWMes2SetTabStop  array dwInfo, int size
	newcom objTmp, IDWriteTextFormat, -2, dwInfo(1)
	IDWriteTextFormat_SetIncrementalTabStop objTmp, d2f(size)
	return

#defcfunc DWMes2GetTrimmingOption array dwInfo
	newcom objTmp, IDWriteTextFormat, -2, dwInfo(1)
	IDWriteTextFormat_GetTrimming objTmp, prm, 0
	return prm

#defcfunc DWMes2GetTrimmingObj array dwInfo
	newcom objTmp, IDWriteTextFormat, -2, dwInfo(1)
	IDWriteTextFormat_GetTrimming objTmp, prm, prm(1)
	return prm(1)

#deffunc DWMes2SetTrimming array dwInfo, int option, int bObj
	newcom objTmp, IDWriteTextFormat, -2, dwInfo(1)
	if ( bObj == 0 ){
		pv = 0
	}
	else {
		IDWriteFactory_CreateEllipsisTrimmingSign dwFactory, curDWInfo(1), pv
		newcom objTmp2, IDWriteInlineObject, -1, pv
	}
	prm = option
	IDWriteTextFormat_SetTrimming objTmp, prm, pv
	if ( bObj ){ delcom objTmp2 }
	objTmp = 0
	return

#defcfunc DWMes2GetLineSpacingMethod array dwInfo
	newcom objTmp, IDWriteTextFormat, -2, dwInfo(1)
	IDWriteTextFormat_GetLineSpacing objTmp, prm(0), prm(1), prm(2)
	return prm

#defcfunc DWMes2GetLineSpacingHeight array dwInfo
	newcom objTmp, IDWriteTextFormat, -2, dwInfo(1)
	IDWriteTextFormat_GetLineSpacing objTmp, prm(0), prm(1), prm(2)
	return f2d(prm(1))

#defcfunc DWMes2GetLineSpacingBase array dwInfo
	newcom objTmp, IDWriteTextFormat, -2, dwInfo(1)
	IDWriteTextFormat_GetLineSpacing objTmp, prm(0), prm(1), prm(2)
	return f2d(prm(2))

#deffunc DWMes2SetLineSpacing array dwInfo, int method, double h, double base
	newcom objTmp, IDWriteTextFormat, -2, dwInfo(1)
	IDWriteTextFormat_SetLineSpacing objTmp, method, d2f(h), d2f(base)
	return

#deffunc DWMes2Clear array dwInfo, int r, int g, int b
	prm = d2f(1.0 * r / 255), d2f(1.0 * g / 255), d2f(1.0 * b / 255), d2f(1.0)
	ID2D1DCRenderTarget_Clear dcRT, prm
	return

#deffunc DWMes2Horizen array dwInfo
	DWMes2SetTextAlignment dwInfo, 0
	DWMes2SetParagraphAlignment dwInfo, 0
	DWMes2SetReadingDirection dwInfo, 0
	DWMes2SetFlowDirection dwInfo, 0
	DWMes2SetWordWrapping dwInfo, 0
	return

#deffunc DWMes2Vertical array dwInfo
	DWMes2SetTextAlignment dwInfo, 0
	DWMes2SetParagraphAlignment dwInfo, 0
	DWMes2SetReadingDirection dwInfo, 2
	DWMes2SetFlowDirection dwInfo, 3
	DWMes2SetWordWrapping dwInfo, 0
	return

#global
	DWMes_Init
#endif // MOD_DWMES_HSP_
コメント ( 0 ) | Trackback ( 0 )
« ガンマ設定 DirectWrite 2 »
 
コメント
 
コメントはありません。
コメントを投稿する
 
名前
タイトル
URL
コメント
コメント利用規約に同意の上コメント投稿を行ってください。

数字4桁を入力し、投稿ボタンを押してください。