* 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
This commit is contained in:
trass3r 2010-01-07 22:00:45 +00:00
parent 0baf8e9b46
commit 8293de5c50
15 changed files with 297 additions and 280 deletions

View File

@ -38,5 +38,4 @@ public import
dsfml.graphics.shape,
dsfml.graphics.sprite,
dsfml.graphics.text,
dsfml.graphics.textstyle,
dsfml.graphics.view;

View File

@ -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"));
}

View File

@ -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");

View File

@ -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"));
}
}

View File

@ -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,

View File

@ -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,

View File

@ -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()
{
}
}

View File

@ -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"));
}
}

View File

@ -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)
{

View File

@ -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

View File

@ -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;

View File

@ -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"));
}
}

View File

@ -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)

View File

@ -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"));
}

View File

@ -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"));
}
}