+++ /dev/null
-/*\r
-* Copyright (c) 2007-2010 SlimDX Group\r
-* \r
-* Permission is hereby granted, free of charge, to any person obtaining a copy\r
-* of this software and associated documentation files (the "Software"), to deal\r
-* in the Software without restriction, including without limitation the rights\r
-* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
-* copies of the Software, and to permit persons to whom the Software is\r
-* furnished to do so, subject to the following conditions:\r
-* \r
-* The above copyright notice and this permission notice shall be included in\r
-* all copies or substantial portions of the Software.\r
-* \r
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
-* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
-* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
-* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
-* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
-* THE SOFTWARE.\r
-*/\r
-#include "stdafx.h"\r
-\r
-#include <d2d1.h>\r
-#include <d2d1helper.h>\r
-#include <vcclr.h>\r
-#include <dxgi.h>\r
-\r
-#include "../DataStream.h"\r
-\r
-#include "Direct2DException.h"\r
-\r
-#include "RenderTarget.h"\r
-#include "ConversionMethods.h"\r
-#include "Bitmap.h"\r
-#include "Layer.h"\r
-#include "BitmapRenderTarget.h"\r
-#include "MeshD2D.h"\r
-\r
-const IID IID_ID2D1RenderTarget = __uuidof(ID2D1RenderTarget);\r
-\r
-using namespace System;\r
-using namespace System::Drawing;\r
-\r
-namespace SlimDX\r
-{\r
-namespace Direct2D\r
-{\r
- RenderTarget^ RenderTarget::FromDXGI( SlimDX::Direct2D::Factory^ factory, SlimDX::DXGI::Surface^ surface, RenderTargetProperties properties )\r
- {\r
- ID2D1RenderTarget *target;\r
-\r
- HRESULT hr = factory->InternalPointer->CreateDxgiSurfaceRenderTarget( surface->InternalPointer, reinterpret_cast<D2D1_RENDER_TARGET_PROPERTIES*>( &properties ), &target );\r
- if( RECORD_D2D( hr ).IsFailure )\r
- return nullptr;\r
-\r
- return RenderTarget::FromPointer( target );\r
- }\r
-\r
- void RenderTarget::BeginDraw()\r
- {\r
- InternalPointer->BeginDraw();\r
- }\r
-\r
- Result RenderTarget::EndDraw()\r
- {\r
- return RECORD_D2D( InternalPointer->EndDraw() );\r
- }\r
-\r
- Result RenderTarget::EndDraw( [Out] Int64% tag1, [Out] Int64% tag2 )\r
- {\r
- pin_ptr<Int64> pt1 = &tag1;\r
- pin_ptr<Int64> pt2 = &tag2;\r
-\r
- HRESULT hr = InternalPointer->EndDraw( reinterpret_cast<D2D1_TAG*>( pt1 ), reinterpret_cast<D2D1_TAG*>( pt2 ) );\r
- return RECORD_D2D( hr );\r
- }\r
-\r
- Result RenderTarget::Flush()\r
- {\r
- return RECORD_D2D( InternalPointer->Flush() );\r
- }\r
-\r
- Result RenderTarget::Flush( [Out] Int64% tag1, [Out] Int64% tag2 )\r
- {\r
- pin_ptr<Int64> pt1 = &tag1;\r
- pin_ptr<Int64> pt2 = &tag2;\r
-\r
- HRESULT hr = InternalPointer->Flush( reinterpret_cast<D2D1_TAG*>( pt1 ), reinterpret_cast<D2D1_TAG*>( pt2 ) );\r
- return RECORD_D2D( hr );\r
- }\r
-\r
- void RenderTarget::SetTags( Int64 tag1, Int64 tag2 )\r
- {\r
- InternalPointer->SetTags( tag1, tag2 );\r
- }\r
-\r
- void RenderTarget::GetTags( [Out] Int64% tag1, [Out] Int64% tag2 )\r
- {\r
- pin_ptr<Int64> pt1 = &tag1;\r
- pin_ptr<Int64> pt2 = &tag2;\r
-\r
- InternalPointer->GetTags( reinterpret_cast<D2D1_TAG*>( pt1 ), reinterpret_cast<D2D1_TAG*>( pt2 ) );\r
- }\r
-\r
- BitmapRenderTarget^ RenderTarget::CreateCompatibleRenderTarget()\r
- {\r
- ID2D1BitmapRenderTarget *result = NULL;\r
-\r
- HRESULT hr = InternalPointer->CreateCompatibleRenderTarget( &result );\r
-\r
- if( RECORD_D2D( hr ).IsFailure )\r
- return nullptr;\r
-\r
- return BitmapRenderTarget::FromPointer( result );\r
- }\r
-\r
- BitmapRenderTarget^ RenderTarget::CreateCompatibleRenderTarget( System::Drawing::SizeF desiredSize )\r
- {\r
- ID2D1BitmapRenderTarget *result = NULL;\r
-\r
- HRESULT hr = InternalPointer->CreateCompatibleRenderTarget( D2D1::SizeF( desiredSize.Width, desiredSize.Height ), &result );\r
-\r
- if( RECORD_D2D( hr ).IsFailure )\r
- return nullptr;\r
-\r
- return BitmapRenderTarget::FromPointer( result );\r
- }\r
-\r
- BitmapRenderTarget^ RenderTarget::CreateCompatibleRenderTarget( System::Drawing::SizeF desiredSize, System::Drawing::Size desiredPixelSize )\r
- {\r
- ID2D1BitmapRenderTarget *result = NULL;\r
-\r
- HRESULT hr = InternalPointer->CreateCompatibleRenderTarget( D2D1::SizeF( desiredSize.Width, desiredSize.Height ), D2D1::SizeU( desiredPixelSize.Width, desiredPixelSize.Height ), &result );\r
-\r
- if( RECORD_D2D( hr ).IsFailure )\r
- return nullptr;\r
-\r
- return BitmapRenderTarget::FromPointer( result );\r
- }\r
-\r
- BitmapRenderTarget^ RenderTarget::CreateCompatibleRenderTarget( System::Drawing::SizeF desiredSize, System::Drawing::Size desiredPixelSize, SlimDX::Direct2D::PixelFormat desiredPixelFormat )\r
- {\r
- ID2D1BitmapRenderTarget *result = NULL;\r
-\r
- HRESULT hr = InternalPointer->CreateCompatibleRenderTarget( D2D1::SizeF( desiredSize.Width, desiredSize.Height ), D2D1::SizeU( desiredPixelSize.Width, desiredPixelSize.Height ),\r
- D2D1::PixelFormat( static_cast<DXGI_FORMAT>( desiredPixelFormat.Format ), static_cast<D2D1_ALPHA_MODE>( desiredPixelFormat.AlphaMode ) ), &result );\r
-\r
- if( RECORD_D2D( hr ).IsFailure )\r
- return nullptr;\r
-\r
- return BitmapRenderTarget::FromPointer( result );\r
- }\r
-\r
- BitmapRenderTarget^ RenderTarget::CreateCompatibleRenderTarget( System::Drawing::SizeF desiredSize, System::Drawing::Size desiredPixelSize, SlimDX::Direct2D::PixelFormat desiredPixelFormat, CompatibleRenderTargetOptions options )\r
- {\r
- ID2D1BitmapRenderTarget *result = NULL;\r
-\r
- HRESULT hr = InternalPointer->CreateCompatibleRenderTarget( D2D1::SizeF( desiredSize.Width, desiredSize.Height ), D2D1::SizeU( desiredPixelSize.Width, desiredPixelSize.Height ),\r
- D2D1::PixelFormat( static_cast<DXGI_FORMAT>( desiredPixelFormat.Format ), static_cast<D2D1_ALPHA_MODE>( desiredPixelFormat.AlphaMode ) ), \r
- static_cast<D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS>( options ), &result );\r
-\r
- if( RECORD_D2D( hr ).IsFailure )\r
- return nullptr;\r
-\r
- return BitmapRenderTarget::FromPointer( result );\r
- }\r
-\r
- void RenderTarget::Clear()\r
- {\r
- InternalPointer->Clear( NULL );\r
- }\r
-\r
- void RenderTarget::Clear( Color4 color )\r
- {\r
- InternalPointer->Clear( reinterpret_cast<D2D1_COLOR_F*>( &color ) );\r
- }\r
-\r
- void RenderTarget::DrawLine( Brush^ brush, PointF point1, PointF point2 )\r
- {\r
- D2D1_POINT_2F point1_n = D2D1::Point2F( point1.X, point1.Y );\r
- D2D1_POINT_2F point2_n = D2D1::Point2F( point2.X, point2.Y );\r
-\r
- InternalPointer->DrawLine( point1_n, point2_n, brush->InternalPointer );\r
- }\r
-\r
- void RenderTarget::DrawLine( Brush^ brush, PointF point1, PointF point2, float strokeWidth )\r
- {\r
- D2D1_POINT_2F point1_n = D2D1::Point2F( point1.X, point1.Y );\r
- D2D1_POINT_2F point2_n = D2D1::Point2F( point2.X, point2.Y );\r
-\r
- InternalPointer->DrawLine( point1_n, point2_n, brush->InternalPointer, strokeWidth );\r
- }\r
-\r
- void RenderTarget::DrawLine( Brush^ brush, PointF point1, PointF point2, float strokeWidth, StrokeStyle^ strokeStyle )\r
- {\r
- ID2D1StrokeStyle *style = strokeStyle == nullptr ? NULL : strokeStyle->InternalPointer;\r
- D2D1_POINT_2F point1_n = D2D1::Point2F( point1.X, point1.Y );\r
- D2D1_POINT_2F point2_n = D2D1::Point2F( point2.X, point2.Y );\r
-\r
- InternalPointer->DrawLine( point1_n, point2_n, brush->InternalPointer, strokeWidth, style );\r
- }\r
-\r
- void RenderTarget::DrawLine( Brush^ brush, float x1, float y1, float x2, float y2 )\r
- {\r
- DrawLine( brush, PointF( x1, y1 ), PointF( x2, y2 ) );\r
- }\r
-\r
- void RenderTarget::DrawLine( Brush^ brush, float x1, float y1, float x2, float y2, float strokeWidth )\r
- {\r
- DrawLine( brush, PointF( x1, y1 ), PointF( x2, y2 ), strokeWidth );\r
- }\r
-\r
- void RenderTarget::DrawLine( Brush^ brush, float x1, float y1, float x2, float y2, float strokeWidth, StrokeStyle^ strokeStyle )\r
- {\r
- DrawLine( brush, PointF( x1, y1 ), PointF( x2, y2 ), strokeWidth, strokeStyle );\r
- }\r
-\r
- void RenderTarget::FillRectangle( Brush^ brush, System::Drawing::Rectangle rectangle )\r
- {\r
- FillRectangle( brush, RectangleF( static_cast<FLOAT>( rectangle.X ), static_cast<FLOAT>( rectangle.Y ), \r
- static_cast<FLOAT>( rectangle.Width ), static_cast<FLOAT>( rectangle.Height ) ) );\r
- }\r
-\r
- void RenderTarget::FillRectangle( Brush^ brush, RectangleF rectangle )\r
- {\r
- D2D1_RECT_F rect = D2D1::RectF( rectangle.Left, rectangle.Top, rectangle.Right, rectangle.Bottom );\r
- InternalPointer->FillRectangle( rect, brush->InternalPointer );\r
- }\r
-\r
- void RenderTarget::FillRoundedRectangle( Brush^ brush, RoundedRectangle rectangle )\r
- {\r
- InternalPointer->FillRoundedRectangle( reinterpret_cast<D2D1_ROUNDED_RECT*>( &rectangle ), brush->InternalPointer );\r
- }\r
-\r
- void RenderTarget::FillEllipse( Brush^ brush, Ellipse ellipse )\r
- {\r
- InternalPointer->FillEllipse( reinterpret_cast<D2D1_ELLIPSE*>( &ellipse ), brush->InternalPointer );\r
- }\r
-\r
- void RenderTarget::DrawRectangle( Brush^ brush, System::Drawing::Rectangle rectangle )\r
- {\r
- DrawRectangle( brush, CastRectangle( rectangle ) );\r
- }\r
-\r
- void RenderTarget::DrawRectangle( Brush^ brush, System::Drawing::Rectangle rectangle, float strokeWidth )\r
- {\r
- DrawRectangle( brush, CastRectangle( rectangle ), strokeWidth );\r
- }\r
-\r
- void RenderTarget::DrawRectangle( Brush^ brush, System::Drawing::Rectangle rectangle, float strokeWidth, StrokeStyle^ strokeStyle )\r
- {\r
- DrawRectangle( brush, CastRectangle( rectangle ), strokeWidth, strokeStyle );\r
- }\r
-\r
- void RenderTarget::DrawRectangle( Brush^ brush, RectangleF rectangle )\r
- {\r
- D2D1_RECT_F rect = D2D1::RectF( rectangle.Left, rectangle.Top, rectangle.Right, rectangle.Bottom );\r
- InternalPointer->DrawRectangle( rect, brush->InternalPointer );\r
- }\r
-\r
- void RenderTarget::DrawRectangle( Brush^ brush, RectangleF rectangle, float strokeWidth )\r
- {\r
- D2D1_RECT_F rect = D2D1::RectF( rectangle.Left, rectangle.Top, rectangle.Right, rectangle.Bottom );\r
- InternalPointer->DrawRectangle( rect, brush->InternalPointer, strokeWidth );\r
- }\r
-\r
- void RenderTarget::DrawRectangle( Brush^ brush, RectangleF rectangle, float strokeWidth, StrokeStyle^ strokeStyle )\r
- {\r
- ID2D1StrokeStyle *style = strokeStyle == nullptr ? NULL : strokeStyle->InternalPointer;\r
- D2D1_RECT_F rect = D2D1::RectF( rectangle.Left, rectangle.Top, rectangle.Right, rectangle.Bottom );\r
-\r
- InternalPointer->DrawRectangle( rect, brush->InternalPointer, strokeWidth, style );\r
- }\r
-\r
- void RenderTarget::DrawRoundedRectangle( Brush^ brush, RoundedRectangle rectangle )\r
- {\r
- InternalPointer->DrawRoundedRectangle( reinterpret_cast<D2D1_ROUNDED_RECT*>( &rectangle ), brush->InternalPointer );\r
- }\r
-\r
- void RenderTarget::DrawRoundedRectangle( Brush^ brush, RoundedRectangle rectangle, float strokeWidth )\r
- {\r
- InternalPointer->DrawRoundedRectangle( reinterpret_cast<D2D1_ROUNDED_RECT*>( &rectangle ), brush->InternalPointer, strokeWidth );\r
- }\r
-\r
- void RenderTarget::DrawRoundedRectangle( Brush^ brush, RoundedRectangle rectangle, float strokeWidth, StrokeStyle^ strokeStyle )\r
- {\r
- ID2D1StrokeStyle *style = strokeStyle == nullptr ? NULL : strokeStyle->InternalPointer;\r
-\r
- InternalPointer->DrawRoundedRectangle( reinterpret_cast<D2D1_ROUNDED_RECT*>( &rectangle ), brush->InternalPointer, strokeWidth, style );\r
- }\r
-\r
- void RenderTarget::DrawEllipse( Brush^ brush, Ellipse ellipse )\r
- {\r
- InternalPointer->DrawEllipse( reinterpret_cast<D2D1_ELLIPSE*>( &ellipse ), brush->InternalPointer );\r
- }\r
-\r
- void RenderTarget::DrawEllipse( Brush^ brush, Ellipse ellipse, float strokeWidth )\r
- {\r
- InternalPointer->DrawEllipse( reinterpret_cast<D2D1_ELLIPSE*>( &ellipse ), brush->InternalPointer, strokeWidth );\r
- }\r
-\r
- void RenderTarget::DrawEllipse( Brush^ brush, Ellipse ellipse, float strokeWidth, StrokeStyle^ strokeStyle )\r
- {\r
- ID2D1StrokeStyle *style = strokeStyle == nullptr ? NULL : strokeStyle->InternalPointer;\r
-\r
- InternalPointer->DrawEllipse( reinterpret_cast<D2D1_ELLIPSE*>( &ellipse ), brush->InternalPointer, strokeWidth, style );\r
- }\r
-\r
- void RenderTarget::DrawTextLayout( Point origin, SlimDX::DirectWrite::TextLayout^ textLayout, Brush^ defaultBrush )\r
- {\r
- DrawTextLayout( origin, textLayout, defaultBrush, DrawTextOptions::None );\r
- }\r
-\r
- void RenderTarget::DrawTextLayout( Point origin, SlimDX::DirectWrite::TextLayout^ textLayout, Brush^ defaultBrush, DrawTextOptions options )\r
- {\r
- D2D1_POINT_2F po = D2D1::Point2F( static_cast<FLOAT>( origin.X ), static_cast<FLOAT>( origin.Y ) );\r
-\r
- InternalPointer->DrawTextLayout( po, textLayout->InternalPointer, defaultBrush->InternalPointer, static_cast<D2D1_DRAW_TEXT_OPTIONS>( options ) );\r
- }\r
-\r
- void RenderTarget::DrawTextLayout( PointF origin, SlimDX::DirectWrite::TextLayout^ textLayout, Brush^ defaultBrush )\r
- {\r
- DrawTextLayout( origin, textLayout, defaultBrush, DrawTextOptions::None );\r
- }\r
-\r
- void RenderTarget::DrawTextLayout( PointF origin, SlimDX::DirectWrite::TextLayout^ textLayout, Brush^ defaultBrush, DrawTextOptions options )\r
- {\r
- D2D1_POINT_2F po = D2D1::Point2F( origin.X, origin.Y );\r
-\r
- InternalPointer->DrawTextLayout( po, textLayout->InternalPointer, defaultBrush->InternalPointer, static_cast<D2D1_DRAW_TEXT_OPTIONS>( options ) );\r
- }\r
-\r
-#pragma push_macro("DrawText")\r
-#undef DrawText\r
- void RenderTarget::DrawText( String^ text, SlimDX::DirectWrite::TextFormat^ textFormat, System::Drawing::Rectangle layoutRectangle, Brush^ defaultBrush )\r
- {\r
- RectangleF rect = CastRectangle( layoutRectangle );\r
-\r
- DrawText( text, textFormat, rect, defaultBrush );\r
- }\r
-\r
- void RenderTarget::DrawText( String^ text, SlimDX::DirectWrite::TextFormat^ textFormat, System::Drawing::Rectangle layoutRectangle, Brush^ defaultBrush, DrawTextOptions options, SlimDX::DirectWrite::MeasuringMethod measuringMethod )\r
- {\r
- RectangleF rect = CastRectangle( layoutRectangle );\r
-\r
- DrawText( text, textFormat, rect, defaultBrush, options, measuringMethod );\r
- }\r
-\r
- void RenderTarget::DrawText( String^ text, SlimDX::DirectWrite::TextFormat^ textFormat, System::Drawing::RectangleF layoutRectangle, Brush^ defaultBrush )\r
- {\r
- D2D1_RECT_F rect = D2D1::RectF( layoutRectangle.Left, layoutRectangle.Top, layoutRectangle.Right, layoutRectangle.Bottom );\r
- pin_ptr<const wchar_t> pinnedText = PtrToStringChars( text );\r
-\r
- InternalPointer->DrawTextW( pinnedText, text->Length, textFormat->InternalPointer, rect, defaultBrush->InternalPointer );\r
- }\r
-\r
- void RenderTarget::DrawText( String^ text, SlimDX::DirectWrite::TextFormat^ textFormat, System::Drawing::RectangleF layoutRectangle, Brush^ defaultBrush, DrawTextOptions options, SlimDX::DirectWrite::MeasuringMethod measuringMethod )\r
- {\r
- D2D1_RECT_F rect = D2D1::RectF( layoutRectangle.Left, layoutRectangle.Top, layoutRectangle.Right, layoutRectangle.Bottom );\r
- pin_ptr<const wchar_t> pinnedText = PtrToStringChars( text );\r
-\r
- InternalPointer->DrawTextW( pinnedText, text->Length, textFormat->InternalPointer, rect, defaultBrush->InternalPointer,\r
- static_cast<D2D1_DRAW_TEXT_OPTIONS>( options ), static_cast<DWRITE_MEASURING_MODE>( measuringMethod ) );\r
- }\r
-#pragma pop_macro("DrawText")\r
-\r
- void RenderTarget::DrawBitmap( Bitmap^ bitmap )\r
- {\r
- InternalPointer->DrawBitmap( bitmap->InternalPointer );\r
- }\r
-\r
- void RenderTarget::DrawBitmap( Bitmap^ bitmap, System::Drawing::RectangleF destinationRectangle )\r
- {\r
- D2D1_RECT_F destRect = D2D1::RectF( destinationRectangle.Left, destinationRectangle.Top, destinationRectangle.Right, destinationRectangle.Bottom );\r
-\r
- InternalPointer->DrawBitmap( bitmap->InternalPointer, &destRect );\r
- }\r
-\r
- void RenderTarget::DrawBitmap( Bitmap^ bitmap, System::Drawing::RectangleF destinationRectangle, float opacity )\r
- {\r
- D2D1_RECT_F destRect = D2D1::RectF( destinationRectangle.Left, destinationRectangle.Top, destinationRectangle.Right, destinationRectangle.Bottom );\r
-\r
- InternalPointer->DrawBitmap( bitmap->InternalPointer, &destRect, opacity );\r
- }\r
-\r
- void RenderTarget::DrawBitmap( Bitmap^ bitmap, System::Drawing::RectangleF destinationRectangle, float opacity, InterpolationMode interpolationMode )\r
- {\r
- D2D1_RECT_F destRect = D2D1::RectF( destinationRectangle.Left, destinationRectangle.Top, destinationRectangle.Right, destinationRectangle.Bottom );\r
-\r
- InternalPointer->DrawBitmap( bitmap->InternalPointer, &destRect, opacity, static_cast<D2D1_BITMAP_INTERPOLATION_MODE>( interpolationMode ) );\r
- }\r
-\r
- void RenderTarget::DrawBitmap( Bitmap^ bitmap, System::Drawing::RectangleF destinationRectangle, float opacity, InterpolationMode interpolationMode, System::Drawing::RectangleF sourceRectangle )\r
- {\r
- D2D1_RECT_F sourceRect = D2D1::RectF( sourceRectangle.Left, sourceRectangle.Top, sourceRectangle.Right, sourceRectangle.Bottom );\r
- D2D1_RECT_F destRect = D2D1::RectF( destinationRectangle.Left, destinationRectangle.Top, destinationRectangle.Right, destinationRectangle.Bottom );\r
-\r
- InternalPointer->DrawBitmap( bitmap->InternalPointer, &destRect, opacity, static_cast<D2D1_BITMAP_INTERPOLATION_MODE>( interpolationMode ), &sourceRect );\r
- }\r
-\r
- void RenderTarget::DrawBitmap( Bitmap^ bitmap, System::Drawing::Rectangle destinationRectangle )\r
- {\r
- DrawBitmap( bitmap, CastRectangle( destinationRectangle ) );\r
- }\r
-\r
- void RenderTarget::DrawBitmap( Bitmap^ bitmap, System::Drawing::Rectangle destinationRectangle, float opacity )\r
- {\r
- DrawBitmap( bitmap, CastRectangle( destinationRectangle ), opacity );\r
- }\r
-\r
- void RenderTarget::DrawBitmap( Bitmap^ bitmap, System::Drawing::Rectangle destinationRectangle, float opacity, InterpolationMode interpolationMode )\r
- {\r
- DrawBitmap( bitmap, CastRectangle( destinationRectangle ), opacity, interpolationMode );\r
- }\r
-\r
- void RenderTarget::DrawBitmap( Bitmap^ bitmap, System::Drawing::Rectangle destinationRectangle, float opacity, InterpolationMode interpolationMode, System::Drawing::Rectangle sourceRectangle )\r
- {\r
- DrawBitmap( bitmap, CastRectangle( destinationRectangle ), opacity, interpolationMode, CastRectangle( sourceRectangle ) );\r
- }\r
-\r
- void RenderTarget::DrawGeometry( Geometry^ geometry, Brush^ brush )\r
- {\r
- InternalPointer->DrawGeometry( geometry->InternalPointer, brush->InternalPointer );\r
- }\r
-\r
- void RenderTarget::DrawGeometry( Geometry^ geometry, Brush^ brush, float strokeWidth )\r
- {\r
- InternalPointer->DrawGeometry( geometry->InternalPointer, brush->InternalPointer, strokeWidth );\r
- }\r
-\r
- void RenderTarget::DrawGeometry( Geometry^ geometry, Brush^ brush, float strokeWidth, StrokeStyle^ strokeStyle )\r
- {\r
- ID2D1StrokeStyle *style = strokeStyle == nullptr ? NULL : strokeStyle->InternalPointer;\r
-\r
- InternalPointer->DrawGeometry( geometry->InternalPointer, brush->InternalPointer, strokeWidth, style );\r
- }\r
-\r
- void RenderTarget::FillGeometry( Geometry^ geometry, Brush^ brush )\r
- {\r
- FillGeometry( geometry, brush, nullptr );\r
- }\r
-\r
- void RenderTarget::FillGeometry( Geometry^ geometry, Brush^ brush, Brush^ opacityBrush )\r
- {\r
- ID2D1Brush *ob = opacityBrush == nullptr ? NULL : opacityBrush->InternalPointer;\r
- InternalPointer->FillGeometry( geometry->InternalPointer, brush->InternalPointer, ob );\r
- }\r
-\r
- void RenderTarget::FillOpacityMask( Bitmap^ mask, Brush^ brush, OpacityMaskContent content, Nullable<RectangleF> sourceRectangle, Nullable<RectangleF> destinationRectangle )\r
- {\r
- D2D1_RECT_F sourceRect;\r
- D2D1_RECT_F destRect;\r
-\r
- D2D1_RECT_F *sourceRectPtr = NULL;\r
- D2D1_RECT_F *destRectPtr = NULL;\r
-\r
- if( sourceRectangle.HasValue )\r
- {\r
- sourceRect = D2D1::RectF( sourceRectangle.Value.Left, sourceRectangle.Value.Top, sourceRectangle.Value.Right, sourceRectangle.Value.Bottom );\r
- sourceRectPtr = &sourceRect;\r
- }\r
-\r
- if( destinationRectangle.HasValue )\r
- {\r
- destRect = D2D1::RectF( destinationRectangle.Value.Left, destinationRectangle.Value.Top, destinationRectangle.Value.Right, destinationRectangle.Value.Bottom );\r
- destRectPtr = &destRect;\r
- }\r
-\r
- InternalPointer->FillOpacityMask( mask->InternalPointer, brush->InternalPointer, static_cast<D2D1_OPACITY_MASK_CONTENT>( content ), \r
- destRectPtr, sourceRectPtr );\r
- }\r
-\r
- void RenderTarget::FillMesh( Mesh^ mesh, Brush^ brush )\r
- {\r
- InternalPointer->FillMesh( mesh->InternalPointer, brush->InternalPointer );\r
- }\r
-\r
- void RenderTarget::PopAxisAlignedClip()\r
- {\r
- InternalPointer->PopAxisAlignedClip();\r
- }\r
-\r
- void RenderTarget::PushAxisAlignedClip( System::Drawing::RectangleF clippingArea, SlimDX::Direct2D::AntialiasMode antialiasMode )\r
- {\r
- D2D1_RECT_F rect = D2D1::RectF( clippingArea.Left, clippingArea.Top, clippingArea.Right, clippingArea.Bottom );\r
- InternalPointer->PushAxisAlignedClip( rect, static_cast<D2D1_ANTIALIAS_MODE>( antialiasMode ) );\r
- }\r
-\r
- void RenderTarget::PushAxisAlignedClip( System::Drawing::Rectangle clippingArea, SlimDX::Direct2D::AntialiasMode antialiasMode )\r
- {\r
- PushAxisAlignedClip( RectangleF( static_cast<float>( clippingArea.X ), static_cast<float>( clippingArea.Y ), \r
- static_cast<float>( clippingArea.Width ), static_cast<float>( clippingArea.Height ) ), antialiasMode );\r
- }\r
-\r
- Bitmap^ RenderTarget::CreateSharedBitmap( Guid guid, DataStream^ data )\r
- {\r
- ID2D1Bitmap *bitmap = NULL;\r
-\r
- HRESULT hr = InternalPointer->CreateSharedBitmap( Utilities::ConvertManagedGuid( guid ), data->PositionPointer, NULL, &bitmap );\r
- if( RECORD_D2D( hr ).IsFailure )\r
- return nullptr;\r
-\r
- return Bitmap::FromPointer( bitmap );\r
- }\r
-\r
- void RenderTarget::PopLayer()\r
- {\r
- InternalPointer->PopLayer();\r
- }\r
-\r
- void RenderTarget::PushLayer( Layer^ layer, LayerParameters^ parameters )\r
- {\r
- D2D1_LAYER_PARAMETERS params = parameters == nullptr ? D2D1::LayerParameters() : parameters->ToUnmanaged();\r
- InternalPointer->PushLayer( params, layer->InternalPointer );\r
- }\r
-\r
- void RenderTarget::SaveDrawingState( StateBlock^ stateBlock )\r
- {\r
- InternalPointer->SaveDrawingState( stateBlock->InternalPointer );\r
- }\r
-\r
- void RenderTarget::RestoreDrawingState( StateBlock^ stateBlock )\r
- {\r
- InternalPointer->RestoreDrawingState( stateBlock->InternalPointer );\r
- }\r
-\r
- SlimDX::DirectWrite::RenderingParameters^ RenderTarget::TextRenderingParameters::get()\r
- {\r
- IDWriteRenderingParams *pointer = NULL;\r
- InternalPointer->GetTextRenderingParams( &pointer );\r
-\r
- return SlimDX::DirectWrite::RenderingParameters::FromPointer( pointer );\r
- }\r
-\r
- void RenderTarget::TextRenderingParameters::set( SlimDX::DirectWrite::RenderingParameters^ value )\r
- {\r
- IDWriteRenderingParams *pointer = value == nullptr ? NULL : value->InternalPointer;\r
- InternalPointer->SetTextRenderingParams( pointer );\r
- }\r
-\r
- SlimDX::Direct2D::PixelFormat RenderTarget::PixelFormat::get()\r
- {\r
- D2D1_PIXEL_FORMAT pf = InternalPointer->GetPixelFormat();\r
- return SlimDX::Direct2D::PixelFormat( static_cast<SlimDX::DXGI::Format>( pf.format ), static_cast<AlphaMode>( pf.alphaMode ) );\r
- }\r
-\r
- Matrix3x2 RenderTarget::Transform::get()\r
- {\r
- Matrix3x2 result;\r
- InternalPointer->GetTransform( reinterpret_cast<D2D1_MATRIX_3X2_F*>( &result ) );\r
-\r
- return result;\r
- }\r
-\r
- void RenderTarget::Transform::set( Matrix3x2 value )\r
- {\r
- InternalPointer->SetTransform( reinterpret_cast<D2D1_MATRIX_3X2_F*>( &value ) );\r
- }\r
-\r
- System::Drawing::SizeF RenderTarget::Size::get()\r
- {\r
- D2D1_SIZE_F size = InternalPointer->GetSize();\r
- return System::Drawing::SizeF( size.width, size.height );\r
- }\r
-\r
- System::Drawing::Size RenderTarget::PixelSize::get()\r
- {\r
- D2D1_SIZE_U size = InternalPointer->GetPixelSize();\r
- return System::Drawing::Size( size.width, size.height );\r
- }\r
-\r
- System::Drawing::SizeF RenderTarget::DotsPerInch::get()\r
- {\r
- float x, y;\r
- InternalPointer->GetDpi( &x, &y );\r
- return System::Drawing::SizeF( x, y );\r
- }\r
-\r
- void RenderTarget::DotsPerInch::set( SizeF value )\r
- {\r
- InternalPointer->SetDpi( value.Width, value.Height );\r
- }\r
-\r
- SlimDX::Direct2D::AntialiasMode RenderTarget::AntialiasMode::get()\r
- {\r
- return static_cast<SlimDX::Direct2D::AntialiasMode>( InternalPointer->GetAntialiasMode() );\r
- }\r
-\r
- void RenderTarget::AntialiasMode::set( SlimDX::Direct2D::AntialiasMode value )\r
- {\r
- InternalPointer->SetAntialiasMode( static_cast<D2D1_ANTIALIAS_MODE>( value ) );\r
- }\r
-\r
- SlimDX::Direct2D::TextAntialiasMode RenderTarget::TextAntialiasMode::get()\r
- {\r
- return static_cast<SlimDX::Direct2D::TextAntialiasMode>( InternalPointer->GetTextAntialiasMode() );\r
- }\r
-\r
- void RenderTarget::TextAntialiasMode::set( SlimDX::Direct2D::TextAntialiasMode value )\r
- {\r
- InternalPointer->SetTextAntialiasMode( static_cast<D2D1_TEXT_ANTIALIAS_MODE>( value ) );\r
- }\r
-}\r
-}
\ No newline at end of file