'Classes/System/Drawing/Drawing2D/LinearGradientBrush.ab /* ToDo: Get/SetBlend及びGet/SetInterpolationColorsのプロパティ化 それにはBlend及びColorBlendクラスの実装が必要 */ #require #require #require #require #require #require #require #require Namespace System Namespace Drawing Namespace Drawing2D Enum LinearGradientMode Horizontal ' 0 Vertical ' 1 ForwardDiagonal ' 2 BackwardDiagonal ' 3 End Enum Class LinearGradientBrush Inherits Brush Public Sub LinearGradientBrush(point1 As /*Const*/ PointF, point2 As /*Const*/ PointF, color1 As /*Const*/ Color, color2 As /*Const*/ Color) Dim brush = 0 As *GpLineGradient lastResult = GdiPlus.DllExports.GdipCreateLineBrush(point1, point2, color1.Value, color2.Value, WrapModeTile, brush) SetNativeBrush(brush) End Sub Sub LinearGradientBrush(point1 As /*Const*/ Point, point2 As /*Const*/ Point, color1 As /*Const*/ Color, color2 As /*Const*/ Color) Dim brush = 0 As *GpLineGradient lastResult = GdiPlus.DllExports.GdipCreateLineBrushI(point1, point2, color1.Value, color2.Value, WrapModeTile, brush) SetNativeBrush(brush) End Sub Sub LinearGradientBrush(rect As /*Const*/ RectangleF, color1 As /*Const*/ Color, color2 As /*Const*/ Color, mode As LinearGradientMode) Dim brush = 0 As *GpLineGradient lastResult = GdiPlus.DllExports.GdipCreateLineBrushFromRect(rect, color1.Value, color2.Value, mode, WrapModeTile, brush) SetNativeBrush(brush) End Sub Sub LinearGradientBrush(rect As /*Const*/ Rectangle, color1 As /*Const*/ Color, color2 As /*Const*/ Color, mode As LinearGradientMode) Dim brush = 0 As *GpLineGradient lastResult = GdiPlus.DllExports.GdipCreateLineBrushFromRectI(rect, color1.Value, color2.Value, mode, WrapModeTile, brush) SetNativeBrush(brush) End Sub Sub LinearGradientBrush(rect As /*Const*/ RectangleF, color1 As /*Const*/ Color, color2 As /*Const*/ Color, angle As Single, isAngleScalable = False As Boolean) Dim brush = 0 As *GpLineGradient lastResult = GdiPlus.DllExports.GdipCreateLineBrushFromRectWithAngle(rect, color1.Value, color2.Value, angle, isAngleScalable As BOOL, WrapModeTile, brush) SetNativeBrush(brush) End Sub Sub LinearGradientBrush(rect As /*Const*/ Rectangle, color1 As /*Const*/ Color, color2 As /*Const*/ Color, angle As Single, isAngleScalable = False As Boolean) Dim brush = 0 As *GpLineGradient lastResult = GdiPlus.DllExports.GdipCreateLineBrushFromRectWithAngleI(rect, color1.Value, color2.Value, angle, isAngleScalable As BOOL, WrapModeTile, brush) SetNativeBrush(brush) End Sub Function SetLinearColors(color1 As /*Const*/ Color, color2 As /*Const*/ Color) As Status Return SetStatus(GdiPlus.DllExports.GdipSetLineColors(nativeBrush As GpLineGradient, color1.Value, color2.Value)) End Function Const Function GetLinearColors(ByRef colors As *Color) As Status Dim argb[1] As ARGB colors = New[1] Color GetLinearColors = SetStatus(GdiPlus.DllExports.GdipGetLineColors(nativeBrush As *GpLineGradient, argb)) If GetLinearColors = Status.Ok Then colors[0] = New Color(argb[0]) colors[1] = New Color(argb[1]) End If End Function Const Function Rectangle() As RectangleF Rectangle = New RectangleF Return SetStatus(GdiPlus.DllExports.GdipGetLineRect(nativeBrush As *GpLineGradient, Rectangle)) End Function Const Function Rectangle() As Rectangle Rectangle = New Rectangle Return SetStatus(GdiPlus.DllExports.GdipGetLineRectI(nativeBrush As *GpLineGradient, Rectangle)) End Function Function GammaCorrection(useGammaCorrection As Boolean) As Status Return SetStatus(GdiPlus.DllExports.GdipSetLineGammaCorrection(nativeBrush As *GpLineGradient, useGammaCorrection As BOOL)) End Function Const Function GammaCorrection() As Boolean Dim b As BOOL SetStatus(GdiPlus.DllExports.GdipGetLineGammaCorrection(nativeBrush As *GpLineGradient, b)) Return b <> FALSE End Function Const Function GetBlendCount() As Long SetStatus(GdiPlus.DllExports.GdipGetLineBlendCount(nativeBrush As *GpLineGradient, GetBlendCount)) End Function Function SetBlend(blendFactors As * /*Const*/ Single, blendPositions As * /*Const*/ Single, count As Long) As Status Return SetStatus(GdiPlus.DllExports.GdipSetLineBlend(nativeBrush As *GpLineGradient, blendFactors, blendPositions, count)) End Function Const Function GetBlend(blendFactors As *Single, blendPositions As *Single, count As Long) As Status Return SetStatus(GdiPlus.DllExports.GdipGetLineBlend(nativeBrush As *GpLineGradient, blendFactors, blendPositions, count)) End Function Const Function GetInterpolationColorCount() As Long GetInterpolationColorCount = 0 SetStatus(GdiPlus.DllExports.GdipGetLinePresetBlendCount(nativeBrush As *GpLineGradient, GetInterpolationColorCount)) End Function Function SetInterpolationColors(presetColors As * /*Const*/ Color, blendPositions As * /*Const*/ Single, count As Long) As Status If count <= 0 Or presetColors = 0 Then Return SetStatus(Status.InvalidParameter) End If Dim argbs = malloc(SizeOf (ARGB) * count) As *ARGB If argbs = 0 Then Return SetStatus(Status.OutOfMemory) End If Dim i As Long For i = 0 To ELM(count) argbs[i] = presetColors[i].Value Next SetInterpolationColors = SetStatus(GdiPlus.DllExports.GdipSetLinePresetBlend( nativeBrush As *GpLineGradient, argbs, blendPositions, count)) free(argbs) End Function Const Function GetInterpolationColors(ByRef presetColors As *Color, blendPositions As *Single, count As Long) As Status If count <= 0 Or presetColors = 0 Then Return SetStatus(Status.InvalidParameter) End If Dim argbs = malloc(SizeOf (ARGB) * count) As *ARGB If argbs = 0 Then Return SetStatus(Status.OutOfMemory) End If GetInterpolationColors = SetStatus(GdiPlus.DllExports.GdipGetLinePresetBlend(nativeBrush As *GpLineGradient, argbs, blendPositions, count)) If GetInterpolationColors = Status.Ok Then Dim i As Long For i = 0 To ELM(count) presetColors[i] = New Color(argbs[i]) Next End If free(argbs) End Function Function SetSigmaBellShape(focus As Single, scale = 1.0 As Single) As Status Return SetStatus(GdiPlus.DllExports.GdipSetLineSigmaBlend(nativeBrush As *GpLineGradient, focus, scale)) End Function Function SetBlendTriangularShape(focus As Single, scale = 1.0 As Single) As Status Return SetStatus(GdiPlus.DllExports.GdipSetLineLinearBlend(nativeBrush As *GpLineGradient, focus, scale)) End Function Function Transform(matrix As /*Const*/ Matrix) As Status Return SetStatus(GdiPlus.DllExports.GdipSetLineTransform(nativeBrush As *GpLineGradient, matrix.NativeMatrix)) End Function Const Function Transform() As Matrix Transform = New Matrix SetStatus(GdiPlus.DllExports.GdipGetLineTransform(nativeBrush As *GpLineGradient, Transform.NativeMatrix)) End Function Function ResetTransform() As Status Return SetStatus(GdiPlus.DllExports.GdipResetLineTransform(nativeBrush As *GpLineGradient)) End Function Function MultiplyTransform(matrix As /*Const*/ Matrix, order = MatrixOrder.Prepend As MatrixOrder) As Status Return SetStatus(GdiPlus.DllExports.GdipMultiplyLineTransform(nativeBrush As *GpLineGradient, matrix.NativeMatrix, order)) End Function Function TranslateTransform(dx As Single, dy As Single, order = MatrixOrder.Prepend As MatrixOrder) As Status Return SetStatus(GdiPlus.DllExports.GdipTranslateLineTransform(nativeBrush As *GpLineGradient, dx, dy, order)) End Function Function ScaleTransform(sx As Single, sy As Single, order = MatrixOrder.Prepend As MatrixOrder) As Status Return SetStatus(GdiPlus.DllExports.GdipScaleLineTransform(nativeBrush As *GpLineGradient, sx, sy, order)) End Function Function RotateTransform(angl As Single, order = MatrixOrder.Prepend As MatrixOrder) As Status Return SetStatus(GdiPlus.DllExports.GdipRotateLineTransform(nativeBrush As *GpLineGradient, angle, order)) End Function Function WrapMode(wrapMode As WrapMode) As Status Return SetStatus(GdiPlus.DllExports.GdipSetLineWrapMode(nativeBrush As *GpLineGradient, wrapMode)) End Function Const Function WrapMode() As WrapMode SetStatus(GdiPlus.DllExports.GdipGetLineWrapMode(nativeBrush As *GpLineGradient, GetWrapMode)) End Function 'Protected Sub LinearGradientBrush() End Sub End Class End Namespace 'Drawing2D End Namespace 'Drawing End Namespace 'System