From 8293de5c502977395a7a6076c54b710fade4d54c Mon Sep 17 00:00:00 2001 From: trass3r Date: Thu, 7 Jan 2010 22:00:45 +0000 Subject: [PATCH] * Fixed regression bug with DllLoader + added missing Font functions * using alias template parameter for DrawableImpl now git-svn-id: https://sfml.svn.sourceforge.net/svnroot/sfml/branches/sfml2@1337 4e206d99-4929-0410-ac5d-dfc041789085 --- DSFML/import/dsfml/graphics/all.d | 1 - DSFML/import/dsfml/graphics/common.d | 183 --------------------- DSFML/import/dsfml/graphics/drawableimpl.d | 21 +-- DSFML/import/dsfml/graphics/font.d | 91 +++++++++- DSFML/import/dsfml/graphics/image.d | 3 +- DSFML/import/dsfml/graphics/renderimage.d | 3 +- DSFML/import/dsfml/graphics/renderwindow.d | 71 +++++++- DSFML/import/dsfml/graphics/shader.d | 42 ++++- DSFML/import/dsfml/graphics/shape.d | 13 +- DSFML/import/dsfml/graphics/sprite.d | 2 +- DSFML/import/dsfml/graphics/text.d | 3 +- DSFML/import/dsfml/graphics/view.d | 55 ++++++- DSFML/import/dsfml/system/dllloader.d | 18 +- DSFML/import/dsfml/window/common.d | 50 ------ DSFML/import/dsfml/window/context.d | 21 ++- 15 files changed, 297 insertions(+), 280 deletions(-) delete mode 100644 DSFML/import/dsfml/graphics/common.d delete mode 100644 DSFML/import/dsfml/window/common.d diff --git a/DSFML/import/dsfml/graphics/all.d b/DSFML/import/dsfml/graphics/all.d index 9d81faf1..9fc102ce 100644 --- a/DSFML/import/dsfml/graphics/all.d +++ b/DSFML/import/dsfml/graphics/all.d @@ -38,5 +38,4 @@ public import dsfml.graphics.shape, dsfml.graphics.sprite, dsfml.graphics.text, - dsfml.graphics.textstyle, dsfml.graphics.view; diff --git a/DSFML/import/dsfml/graphics/common.d b/DSFML/import/dsfml/graphics/common.d deleted file mode 100644 index 44f06f1b..00000000 --- a/DSFML/import/dsfml/graphics/common.d +++ /dev/null @@ -1,183 +0,0 @@ -/* -* DSFML - SFML Library wrapper for the D programming language. -* Copyright (C) 2008 Julien Dagorn (sirjulio13@gmail.com) -* Copyright (C) 2010 Andreas Hollandt -* -* This software is provided 'as-is', without any express or -* implied warranty. In no event will the authors be held -* liable for any damages arising from the use of this software. -* -* Permission is granted to anyone to use this software for any purpose, -* including commercial applications, and to alter it and redistribute -* it freely, subject to the following restrictions: -* -* 1. The origin of this software must not be misrepresented; -* you must not claim that you wrote the original software. -* If you use this software in a product, an acknowledgment -* in the product documentation would be appreciated but -* is not required. -* -* 2. Altered source versions must be plainly marked as such, -* and must not be misrepresented as being the original software. -* -* 3. This notice may not be removed or altered from any -* source distribution. -*/ - -module dsfml.graphics.common; - -private import dsfml.system.common, - dsfml.window.window, - dsfml.window.windowhandle, - dsfml.graphics.color, - dsfml.graphics.rect, - dsfml.graphics.font, - dsfml.window.videomode; - -package extern (C) -{ - // sfFont - void* function() sfFont_Create; - void* function(cchar*) sfFont_CreateFromFile; - void* function(ubyte*, size_t) sfFont_CreateFromMemory; - void function(void*) sfFont_Destroy; - void* function() sfFont_GetDefaultFont; - - Glyph function(void*, uint, uint, bool) sfFont_GetGlyph; - - // sfRenderWindow - void* function(VideoMode, cchar*, uint, ContextSettings*) sfRenderWindow_Create; - void* function(WindowHandle, ContextSettings*) sfRenderWindow_CreateFromHandle; - void function(void*) sfRenderWindow_Destroy; - void* function(void*) sfRenderWindow_GetInput; -// bool function(void*) sfRenderWindow_IsOpened; - -/* - void function(void*, void*) sfRenderWindow_DrawSprite; - void function(void*, void*) sfRenderWindow_DrawShape; - void function(void*, void*) sfRenderWindow_DrawText; - - void function(void*, void*, void*) sfRenderWindow_DrawSpriteWithShader; - void function(void*, void*, void*) sfRenderWindow_DrawShapeWithShader; - void function(void*, void*, void*) sfRenderWindow_DrawTextWithShader; -*/ - - void* function(void*) sfRenderWindow_Capture; - void function(void*, Color) sfRenderWindow_Clear; - void function(void*, void*) sfRenderWindow_SetView; - void* function(void*) sfRenderWindow_GetView; - void* function (void*) sfRenderWindow_GetDefaultView; - void function(void*, uint, uint, float*, float*, void*) sfRenderWindow_ConvertCoords; - - // DSFML2 - - void function(void*) sfRenderWindow_Flush; - - // sfShader - void* function(cchar*) sfShader_CreateFromFile; - void* function(cchar*) sfShader_CreateFromMemory; - void function(void*) sfShader_Destroy; - void function(void*, cchar*, float) sfShader_SetParameter1; - void function(void*, cchar*, float, float) sfShader_SetParameter2; - void function(void*, cchar*, float, float, float) sfShader_SetParameter3; - void function(void*, cchar*, float, float, float, float) sfShader_SetParameter4; - void function(void*, cchar*, void*) sfShader_SetTexture; - int function() sfShader_IsAvailable; - void function(void*) sfShader_Bind; - void function(void*) sfShader_Unbind; - - // sfView - void* function() sfView_Create; - void* function(FloatRect) sfView_CreateFromRect; - void function(void*) sfView_Destroy; - void function(void*, float, float) sfView_SetCenter; - void function(void*, float, float) sfView_SetSize; - void function(void*, FloatRect) sfView_SetViewport; - float function(void*) sfView_GetCenterX; - float function(void*) sfView_GetCenterY; - float function(void*) sfView_GetWidth; - float function(void*) sfView_GetHeight; - FloatRect function(void*) sfView_GetViewport; - void function(void*, float, float) sfView_Move; - void function(void*, float) sfView_Zoom; - - // DSFML2 - void function(void*, float) sfView_SetRotation; - float function(void*) sfView_GetRotation; - void function(void*, float) sfView_Rotate; - void function(void*, FloatRect) sfView_Reset; -} - -static this() -{ -debug - DllLoader dll = DllLoader.load("csfml-graphics-d"); -else - DllLoader dll = DllLoader.load("csfml-graphics"); - - // sfFont - mixin(loadFromSharedLib("sfFont_CreateFromFile")); - mixin(loadFromSharedLib("sfFont_CreateFromMemory")); - mixin(loadFromSharedLib("sfFont_Destroy")); - mixin(loadFromSharedLib("sfFont_GetDefaultFont")); - mixin(loadFromSharedLib("sfFont_GetGlyph")); - - // sfRenderWindow - mixin(loadFromSharedLib("sfRenderWindow_Create")); - mixin(loadFromSharedLib("sfRenderWindow_CreateFromHandle")); - mixin(loadFromSharedLib("sfRenderWindow_Destroy")); - mixin(loadFromSharedLib("sfRenderWindow_GetInput")); - -/* - mixin(loadFromSharedLib("sfRenderWindow_DrawSprite")); - mixin(loadFromSharedLib("sfRenderWindow_DrawShape")); - mixin(loadFromSharedLib("sfRenderWindow_DrawText")); - - mixin(loadFromSharedLib("sfRenderWindow_DrawSpriteWithShader")); - mixin(loadFromSharedLib("sfRenderWindow_DrawShapeWithShader")); - mixin(loadFromSharedLib("sfRenderWindow_DrawTextWithShader")); -*/ - - mixin(loadFromSharedLib("sfRenderWindow_Clear")); - mixin(loadFromSharedLib("sfRenderWindow_SetView")); - mixin(loadFromSharedLib("sfRenderWindow_GetView")); - mixin(loadFromSharedLib("sfRenderWindow_GetDefaultView")); - mixin(loadFromSharedLib("sfRenderWindow_ConvertCoords")); - - // DSFML2 - mixin(loadFromSharedLib("sfRenderWindow_Flush")); - - // sfShader - mixin(loadFromSharedLib("sfShader_CreateFromFile")); - mixin(loadFromSharedLib("sfShader_CreateFromMemory")); - mixin(loadFromSharedLib("sfShader_Destroy")); - mixin(loadFromSharedLib("sfShader_SetParameter1")); - mixin(loadFromSharedLib("sfShader_SetParameter2")); - mixin(loadFromSharedLib("sfShader_SetParameter3")); - mixin(loadFromSharedLib("sfShader_SetParameter4")); - mixin(loadFromSharedLib("sfShader_SetTexture")); - mixin(loadFromSharedLib("sfShader_IsAvailable")); - mixin(loadFromSharedLib("sfShader_Bind")); - mixin(loadFromSharedLib("sfShader_Unbind")); - - // sfView - mixin(loadFromSharedLib("sfView_Create")); - mixin(loadFromSharedLib("sfView_CreateFromRect")); - mixin(loadFromSharedLib("sfView_Destroy")); - mixin(loadFromSharedLib("sfView_SetCenter")); - mixin(loadFromSharedLib("sfView_SetSize")); - mixin(loadFromSharedLib("sfView_SetViewport")); - mixin(loadFromSharedLib("sfView_GetCenterX")); - mixin(loadFromSharedLib("sfView_GetCenterY")); - mixin(loadFromSharedLib("sfView_GetWidth")); - mixin(loadFromSharedLib("sfView_GetHeight")); - mixin(loadFromSharedLib("sfView_GetViewport")); - mixin(loadFromSharedLib("sfView_Move")); - mixin(loadFromSharedLib("sfView_Zoom")); - - // DSFML2 - mixin(loadFromSharedLib("sfView_SetRotation")); - mixin(loadFromSharedLib("sfView_GetRotation")); - mixin(loadFromSharedLib("sfView_Rotate")); - mixin(loadFromSharedLib("sfView_Reset")); -} \ No newline at end of file diff --git a/DSFML/import/dsfml/graphics/drawableimpl.d b/DSFML/import/dsfml/graphics/drawableimpl.d index 6dcbcadc..72ea0606 100644 --- a/DSFML/import/dsfml/graphics/drawableimpl.d +++ b/DSFML/import/dsfml/graphics/drawableimpl.d @@ -36,18 +36,12 @@ import dsfml.graphics.idrawable, dsfml.graphics.renderimage, dsfml.graphics.shader; -package -{ - struct sfSprite{}; - struct sfShape{}; - struct sfText{}; -} /* * Package base class of all drawable. * Provide implementation of IDrawable and functions aliases. */ -package class Drawableimpl(T) : DSFMLObject, IDrawable +package class Drawableimpl(alias symbol) : DSFMLObject, IDrawable { protected: this() @@ -302,19 +296,6 @@ private: else DllLoader dll = DllLoader.load("csfml-graphics"); - static if (is (T : sfSprite)) - { - string symbol = "sfSprite"; - } - else static if (is (T : sfText)) - { - string symbol = "sfText"; - } - else static if (is (T : sfShape)) - { - string symbol = "sfShape"; - } - sfDrawable_Create = cast(pf_sfDrawable_Create)dll.getSymbol(symbol ~ "_Create"); sfDrawable_Destroy = cast(pf_sfDrawable_Destroy)dll.getSymbol(symbol ~ "_Destroy"); sfDrawable_SetX = cast(pf_sfDrawable_SetX)dll.getSymbol(symbol ~ "_SetX"); diff --git a/DSFML/import/dsfml/graphics/font.d b/DSFML/import/dsfml/graphics/font.d index 39e44323..3cbcaaa9 100644 --- a/DSFML/import/dsfml/graphics/font.d +++ b/DSFML/import/dsfml/graphics/font.d @@ -30,8 +30,8 @@ import dsfml.system.common, dsfml.system.exception, dsfml.system.stringutil; -import dsfml.graphics.common, - dsfml.graphics.rect; +import dsfml.graphics.rect, + dsfml.graphics.image; /// Glyph describes a glyph (a visual character) @@ -96,6 +96,55 @@ public: sfFont_Destroy(m_ptr); } + /** + * get a glyph in a font + * + * Params: + * codePoint = Unicode code point of the character to get + * charSize = Reference character size + * bold = Retrieve the bold version or the regular one? + * Returns: + * The glyph corresponding to codePoint and charSize + */ + Glyph getGlyph(uint codePoint, uint charSize, bool bold) + { + return sfFont_GetGlyph(m_ptr, codePoint, charSize, bold); + } + + /** + * Get the kerning offset of two glyphs + * + * Params: + * first = Unicode code point of the first character + * second = Unicode code point of the second character + * charSize = Reference character size + * + * Returns: + * Kerning value for first and second, in pixels + */ + int getKerning(uint first, uint second, uint charSize) + { + return sfFont_GetKerning(m_ptr, first, second, charSize); + } + + /** + * Get the vertical offset to apply between two consecutive lines of text. + * + * Params: + * charSize = Reference character size + * + * Returns: + * Line spacing, in pixels + */ + int getLineSpacing(uint charSize) + { + return sfFont_GetLineSpacing(m_ptr, charSize); + } + + Image getImage(uint charSize) + { + return new Image(sfFont_GetImage(m_ptr, charSize)); + } package: @@ -103,4 +152,42 @@ package: { super(ptr, true); } + +private: + static extern(C) + { + // sfFont + void* function() sfFont_Create; + void* function(cchar*) sfFont_CreateFromFile; + void* function(ubyte*, size_t) sfFont_CreateFromMemory; + void function(void*) sfFont_Destroy; + void* function() sfFont_GetDefaultFont; + + // DSFML2 + Glyph function(void*, uint, uint, bool) sfFont_GetGlyph; + int function(void*, uint, uint, uint) sfFont_GetKerning; + int function(void*, uint) sfFont_GetLineSpacing; + void* function(void*, uint) sfFont_GetImage; + } + + static this() + { + debug + DllLoader dll = DllLoader.load("csfml-graphics-d"); + else + DllLoader dll = DllLoader.load("csfml-graphics"); + + // sfFont + mixin(loadFromSharedLib("sfFont_CreateFromFile")); + mixin(loadFromSharedLib("sfFont_CreateFromMemory")); + mixin(loadFromSharedLib("sfFont_Destroy")); + mixin(loadFromSharedLib("sfFont_GetDefaultFont")); + + // DSFML2 + mixin(loadFromSharedLib("sfFont_GetGlyph")); + mixin(loadFromSharedLib("sfFont_GetKerning")); + mixin(loadFromSharedLib("sfFont_GetLineSpacing")); + mixin(loadFromSharedLib("sfFont_GetImage")); + + } } diff --git a/DSFML/import/dsfml/graphics/image.d b/DSFML/import/dsfml/graphics/image.d index 3f9446ae..f92e54fc 100644 --- a/DSFML/import/dsfml/graphics/image.d +++ b/DSFML/import/dsfml/graphics/image.d @@ -27,8 +27,7 @@ module dsfml.graphics.image; -import dsfml.graphics.common, - dsfml.graphics.color, +import dsfml.graphics.color, dsfml.graphics.rect; import dsfml.system.common, diff --git a/DSFML/import/dsfml/graphics/renderimage.d b/DSFML/import/dsfml/graphics/renderimage.d index 72008f05..73e937fe 100644 --- a/DSFML/import/dsfml/graphics/renderimage.d +++ b/DSFML/import/dsfml/graphics/renderimage.d @@ -31,8 +31,7 @@ import dsfml.system.common, dsfml.system.stringutil, dsfml.system.vector2; -import dsfml.graphics.common, - dsfml.graphics.idrawable, +import dsfml.graphics.idrawable, dsfml.graphics.image, dsfml.graphics.color, dsfml.graphics.rect, diff --git a/DSFML/import/dsfml/graphics/renderwindow.d b/DSFML/import/dsfml/graphics/renderwindow.d index 0d0d4765..8869c6c8 100644 --- a/DSFML/import/dsfml/graphics/renderwindow.d +++ b/DSFML/import/dsfml/graphics/renderwindow.d @@ -26,8 +26,7 @@ module dsfml.graphics.renderwindow; -import dsfml.graphics.common, - dsfml.graphics.color, +import dsfml.graphics.color, dsfml.graphics.sprite, dsfml.graphics.shape, dsfml.graphics.text, @@ -247,4 +246,72 @@ public: { sfRenderWindow_Flush(m_ptr); } + +private: + + static extern(C) + { + void* function(VideoMode, cchar*, uint, ContextSettings*) sfRenderWindow_Create; + void* function(WindowHandle, ContextSettings*) sfRenderWindow_CreateFromHandle; + void function(void*) sfRenderWindow_Destroy; + void* function(void*) sfRenderWindow_GetInput; +// bool function(void*) sfRenderWindow_IsOpened; // also in Window + + /* + void function(void*, void*) sfRenderWindow_DrawSprite; + void function(void*, void*) sfRenderWindow_DrawShape; + void function(void*, void*) sfRenderWindow_DrawText; + + void function(void*, void*, void*) sfRenderWindow_DrawSpriteWithShader; + void function(void*, void*, void*) sfRenderWindow_DrawShapeWithShader; + void function(void*, void*, void*) sfRenderWindow_DrawTextWithShader; + */ + + void* function(void*) sfRenderWindow_Capture; + void function(void*, Color) sfRenderWindow_Clear; + void function(void*, void*) sfRenderWindow_SetView; + void* function(void*) sfRenderWindow_GetView; + void* function (void*) sfRenderWindow_GetDefaultView; + void function(void*, uint, uint, float*, float*, void*) sfRenderWindow_ConvertCoords; + + // DSFML2 + void function(void*) sfRenderWindow_Flush; + } + + static this() + { + debug + DllLoader dll = DllLoader.load("csfml-graphics-d"); + else + DllLoader dll = DllLoader.load("csfml-graphics"); + + mixin(loadFromSharedLib("sfRenderWindow_Create")); + mixin(loadFromSharedLib("sfRenderWindow_CreateFromHandle")); + mixin(loadFromSharedLib("sfRenderWindow_Destroy")); + mixin(loadFromSharedLib("sfRenderWindow_GetInput")); + + /* + mixin(loadFromSharedLib("sfRenderWindow_DrawSprite")); + mixin(loadFromSharedLib("sfRenderWindow_DrawShape")); + mixin(loadFromSharedLib("sfRenderWindow_DrawText")); + + mixin(loadFromSharedLib("sfRenderWindow_DrawSpriteWithShader")); + mixin(loadFromSharedLib("sfRenderWindow_DrawShapeWithShader")); + mixin(loadFromSharedLib("sfRenderWindow_DrawTextWithShader")); + */ + + mixin(loadFromSharedLib("sfRenderWindow_Clear")); + mixin(loadFromSharedLib("sfRenderWindow_SetView")); + mixin(loadFromSharedLib("sfRenderWindow_GetView")); + mixin(loadFromSharedLib("sfRenderWindow_GetDefaultView")); + mixin(loadFromSharedLib("sfRenderWindow_ConvertCoords")); + + // DSFML2 + mixin(loadFromSharedLib("sfRenderWindow_Flush")); + } + + static ~this() + { + + } } \ No newline at end of file diff --git a/DSFML/import/dsfml/graphics/shader.d b/DSFML/import/dsfml/graphics/shader.d index 3d64dc3d..2c43cae9 100644 --- a/DSFML/import/dsfml/graphics/shader.d +++ b/DSFML/import/dsfml/graphics/shader.d @@ -26,7 +26,6 @@ module dsfml.graphics.shader; -import dsfml.graphics.common; import dsfml.graphics.image; import dsfml.system.common; @@ -51,6 +50,11 @@ enum LoadingType */ class Shader : DSFMLObject { +private: + Image m_texture; + +public: + /** * construct the effect * @@ -135,5 +139,39 @@ class Shader : DSFMLObject private: - Image m_texture; + + static extern(C) + { + void* function(cchar*) sfShader_CreateFromFile; + void* function(cchar*) sfShader_CreateFromMemory; + void function(void*) sfShader_Destroy; + void function(void*, cchar*, float) sfShader_SetParameter1; + void function(void*, cchar*, float, float) sfShader_SetParameter2; + void function(void*, cchar*, float, float, float) sfShader_SetParameter3; + void function(void*, cchar*, float, float, float, float) sfShader_SetParameter4; + void function(void*, cchar*, void*) sfShader_SetTexture; + int function() sfShader_IsAvailable; + void function(void*) sfShader_Bind; + void function(void*) sfShader_Unbind; + } + + static this() + { + debug + DllLoader dll = DllLoader.load("csfml-graphics-d"); + else + DllLoader dll = DllLoader.load("csfml-graphics"); + + mixin(loadFromSharedLib("sfShader_CreateFromFile")); + mixin(loadFromSharedLib("sfShader_CreateFromMemory")); + mixin(loadFromSharedLib("sfShader_Destroy")); + mixin(loadFromSharedLib("sfShader_SetParameter1")); + mixin(loadFromSharedLib("sfShader_SetParameter2")); + mixin(loadFromSharedLib("sfShader_SetParameter3")); + mixin(loadFromSharedLib("sfShader_SetParameter4")); + mixin(loadFromSharedLib("sfShader_SetTexture")); + mixin(loadFromSharedLib("sfShader_IsAvailable")); + mixin(loadFromSharedLib("sfShader_Bind")); + mixin(loadFromSharedLib("sfShader_Unbind")); + } } \ No newline at end of file diff --git a/DSFML/import/dsfml/graphics/shape.d b/DSFML/import/dsfml/graphics/shape.d index efb168f1..958e828c 100644 --- a/DSFML/import/dsfml/graphics/shape.d +++ b/DSFML/import/dsfml/graphics/shape.d @@ -37,8 +37,15 @@ import dsfml.graphics.drawableimpl; * helper functions to draw simple shapes like * lines, rectangles, circles, etc. */ -class Shape : Drawableimpl!(sfShape) +class Shape : Drawableimpl!("sfShape") { +private: + this (void* ptr) + { + super(ptr); + } + +public: this() { super(); @@ -271,10 +278,6 @@ class Shape : Drawableimpl!(sfShape) } private: - this (void* ptr) - { - super(ptr); - } extern (C) { diff --git a/DSFML/import/dsfml/graphics/sprite.d b/DSFML/import/dsfml/graphics/sprite.d index b59aebe1..5c189223 100644 --- a/DSFML/import/dsfml/graphics/sprite.d +++ b/DSFML/import/dsfml/graphics/sprite.d @@ -40,7 +40,7 @@ import dsfml.system.vector2; * See_Also: * IDrawable */ -class Sprite : Drawableimpl!(sfSprite) +class Sprite : Drawableimpl!("sfSprite") { private: Image m_image; //< Image used to draw the sprite diff --git a/DSFML/import/dsfml/graphics/text.d b/DSFML/import/dsfml/graphics/text.d index 2718e891..f6a6ccd2 100644 --- a/DSFML/import/dsfml/graphics/text.d +++ b/DSFML/import/dsfml/graphics/text.d @@ -29,7 +29,6 @@ module dsfml.graphics.text; import dsfml.graphics.blendmode; import dsfml.graphics.color; import dsfml.graphics.font; -import dsfml.graphics.textstyle; import dsfml.graphics.drawableimpl; import dsfml.graphics.rect; @@ -65,7 +64,7 @@ enum TextStyle * See_Also: * IDrawable */ -class Text : Drawableimpl!(sfText) +class Text : Drawableimpl!("sfText") { private: Font m_font; diff --git a/DSFML/import/dsfml/graphics/view.d b/DSFML/import/dsfml/graphics/view.d index aa855c51..f75f1c29 100644 --- a/DSFML/import/dsfml/graphics/view.d +++ b/DSFML/import/dsfml/graphics/view.d @@ -26,8 +26,7 @@ module dsfml.graphics.view; -import dsfml.graphics.common, - dsfml.graphics.rect; +import dsfml.graphics.rect; import dsfml.system.common, dsfml.system.vector2; @@ -283,4 +282,56 @@ package: { super(ptr, preventDelete); } + +private: + static extern(C) + { + void* function() sfView_Create; + void* function(FloatRect) sfView_CreateFromRect; + void function(void*) sfView_Destroy; + void function(void*, float, float) sfView_SetCenter; + void function(void*, float, float) sfView_SetSize; + void function(void*, FloatRect) sfView_SetViewport; + float function(void*) sfView_GetCenterX; + float function(void*) sfView_GetCenterY; + float function(void*) sfView_GetWidth; + float function(void*) sfView_GetHeight; + FloatRect function(void*) sfView_GetViewport; + void function(void*, float, float) sfView_Move; + void function(void*, float) sfView_Zoom; + + // DSFML2 + void function(void*, float) sfView_SetRotation; + float function(void*) sfView_GetRotation; + void function(void*, float) sfView_Rotate; + void function(void*, FloatRect) sfView_Reset; + } + + static this() + { + debug + DllLoader dll = DllLoader.load("csfml-graphics-d"); + else + DllLoader dll = DllLoader.load("csfml-graphics"); + + mixin(loadFromSharedLib("sfView_Create")); + mixin(loadFromSharedLib("sfView_CreateFromRect")); + mixin(loadFromSharedLib("sfView_Destroy")); + mixin(loadFromSharedLib("sfView_SetCenter")); + mixin(loadFromSharedLib("sfView_SetSize")); + mixin(loadFromSharedLib("sfView_SetViewport")); + mixin(loadFromSharedLib("sfView_GetCenterX")); + mixin(loadFromSharedLib("sfView_GetCenterY")); + mixin(loadFromSharedLib("sfView_GetWidth")); + mixin(loadFromSharedLib("sfView_GetHeight")); + mixin(loadFromSharedLib("sfView_GetViewport")); + mixin(loadFromSharedLib("sfView_Move")); + mixin(loadFromSharedLib("sfView_Zoom")); + + // DSFML2 + mixin(loadFromSharedLib("sfView_SetRotation")); + mixin(loadFromSharedLib("sfView_GetRotation")); + mixin(loadFromSharedLib("sfView_Rotate")); + mixin(loadFromSharedLib("sfView_Reset")); + } } \ No newline at end of file diff --git a/DSFML/import/dsfml/system/dllloader.d b/DSFML/import/dsfml/system/dllloader.d index bb8af2d2..61d4ea90 100644 --- a/DSFML/import/dsfml/system/dllloader.d +++ b/DSFML/import/dsfml/system/dllloader.d @@ -60,6 +60,11 @@ static this() } } +static ~this() +{ +// DllLoader.closeAll(); +} + private void report(string msg, string lib, string symb) { string str = "Loading error. Reason : " ~ msg ~ " (library : " ~ lib ~ ", symbol : " ~ symb ~ ")"; @@ -102,11 +107,6 @@ class DllLoader } } - ~this() - { - close(); - } - void* getSymbol(string symbolName) { void* symb; @@ -151,6 +151,14 @@ class DllLoader alreadyLoaded.remove(this.m_libPath); } } + + static void closeAll() + { + foreach(lib; alreadyLoaded.values) + { + lib.close(); + } + } private: this(string libraryPath) diff --git a/DSFML/import/dsfml/window/common.d b/DSFML/import/dsfml/window/common.d deleted file mode 100644 index 194d936e..00000000 --- a/DSFML/import/dsfml/window/common.d +++ /dev/null @@ -1,50 +0,0 @@ -/* -* DSFML - SFML Library wrapper for the D programming language. -* Copyright (C) 2008 Julien Dagorn (sirjulio13@gmail.com) -* Copyright (C) 2010 Andreas Hollandt -* -* This software is provided 'as-is', without any express or -* implied warranty. In no event will the authors be held -* liable for any damages arising from the use of this software. -* -* Permission is granted to anyone to use this software for any purpose, -* including commercial applications, and to alter it and redistribute -* it freely, subject to the following restrictions: -* -* 1. The origin of this software must not be misrepresented; -* you must not claim that you wrote the original software. -* If you use this software in a product, an acknowledgment -* in the product documentation would be appreciated but -* is not required. -* -* 2. Altered source versions must be plainly marked as such, -* and must not be misrepresented as being the original software. -* -* 3. This notice may not be removed or altered from any -* source distribution. -*/ - -module dsfml.window.common; - -import dsfml.system.dllloader; - -package extern(C) -{ - -void* function() sfContext_Create; -void function(void*) sfContext_Destroy; -void function(void*, bool) sfContext_SetActive; - -} - -static this() -{ -debug - DllLoader dll = DllLoader.load("csfml-window-d"); -else - DllLoader dll = DllLoader.load("csfml-window"); - - mixin(loadFromSharedLib("sfContext_Create")); - mixin(loadFromSharedLib("sfContext_Destroy")); - mixin(loadFromSharedLib("sfContext_SetActive")); -} \ No newline at end of file diff --git a/DSFML/import/dsfml/window/context.d b/DSFML/import/dsfml/window/context.d index 2d4bea50..4dbed7c9 100644 --- a/DSFML/import/dsfml/window/context.d +++ b/DSFML/import/dsfml/window/context.d @@ -55,5 +55,24 @@ class Context : DSFMLObject { sfContext_SetActive(m_ptr, active); } -} +private: + static extern(C) + { + void* function() sfContext_Create; + void function(void*) sfContext_Destroy; + void function(void*, bool) sfContext_SetActive; + } + + static this() + { + debug + DllLoader dll = DllLoader.load("csfml-window-d"); + else + DllLoader dll = DllLoader.load("csfml-window"); + + mixin(loadFromSharedLib("sfContext_Create")); + mixin(loadFromSharedLib("sfContext_Destroy")); + mixin(loadFromSharedLib("sfContext_SetActive")); + } +} \ No newline at end of file