diff --git a/ee.linux.cbp b/ee.linux.cbp
index 97ff86adb..e0b18eb2e 100644
--- a/ee.linux.cbp
+++ b/ee.linux.cbp
@@ -202,6 +202,8 @@
+
+
diff --git a/src/base.hpp b/src/base.hpp
index 71e24a36b..0024e9a20 100644
--- a/src/base.hpp
+++ b/src/base.hpp
@@ -48,7 +48,7 @@
#elif defined( __APPLE_CC__) || defined ( __APPLE__ )
# define EE_PLATFORM EE_PLATFORM_MACOSX
-#else
+#elif defined ( linux ) || defined( __linux__ )
# define EE_PLATFORM EE_PLATFORM_LINUX
#endif
diff --git a/src/graphics/cfont.cpp b/src/graphics/cfont.cpp
index a63048826..0124287d4 100644
--- a/src/graphics/cfont.cpp
+++ b/src/graphics/cfont.cpp
@@ -160,11 +160,13 @@ void cFont::Draw( cTextCache& TextCache, const eeFloat& X, const eeFloat& Y, con
glRotatef( Angle, 0.0f, 0.0f, 1.0f );
glScalef( Scale, Scale, 1.0f );
glTranslatef( -Center.x, -Center.y, 0.f );
+
+ glTranslatef( X, Y, 0.f );
}
std::vector& RenderCoords = TextCache.VertextCoords();
std::vector& Colors = TextCache.Colors();
-
+
#ifndef EE_GLES
if ( !TextCache.CachedCoords() ) {
#else
@@ -191,21 +193,26 @@ void cFont::Draw( cTextCache& TextCache, const eeFloat& X, const eeFloat& Y, con
if ( Char >= 0 && Char < tGlyphSize ) {
eeTexCoords* C = &mTexCoords[ Char ];
-
+
switch(Char) {
case L'\v':
+ {
if (mVerticalDraw)
nY += GetFontHeight();
else
nX += mGlyphs[ Char ].Advance;
break;
+ }
case L'\t':
+ {
if (mVerticalDraw)
nY += GetFontHeight() * 4;
else
nX += mGlyphs[ Char ].Advance * 4;
break;
+ }
case L'\n':
+ {
if (mVerticalDraw) {
nX += (GetFontSize() * Scale);
nY = 0;
@@ -228,36 +235,38 @@ void cFont::Draw( cTextCache& TextCache, const eeFloat& X, const eeFloat& Y, con
}
break;
+ }
default:
- if ( Char >= 0 && Char < tGlyphSize ) {
- for ( Uint8 z = 0; z < 8; z+=2 ) {
- RenderCoords[ numvert ].TexCoords[0] = C->TexCoords[z];
- RenderCoords[ numvert ].TexCoords[1] = C->TexCoords[ z + 1 ];
- RenderCoords[ numvert ].Vertex[0] = cX + C->Vertex[z] + nX;
- RenderCoords[ numvert ].Vertex[1] = cY + C->Vertex[ z + 1 ] + nY;
- numvert++;
- }
-
- #ifdef EE_GLES
- glColorPointer( 4, GL_UNSIGNED_BYTE, 0, reinterpret_cast( &Colors[0] ) );
- glTexCoordPointer( 2, GL_FLOAT, sizeof(eeVertexCoords), reinterpret_cast( &RenderCoords[ numvert - 4 ] ) );
- glVertexPointer( 2, GL_FLOAT, sizeof(eeVertexCoords), reinterpret_cast( &RenderCoords[ numvert - 4 ] ) + sizeof(eeFloat) * 2 );
-
- glDrawElements( GL_TRIANGLE_STRIP, 4, GL_UNSIGNED_BYTE, EE_GLES_INDICES );
- #endif
-
- if (mVerticalDraw)
- nY += GetFontHeight();
- else
- nX += mGlyphs[ Char ].Advance;
+ {
+ for ( Uint8 z = 0; z < 8; z+=2 ) {
+ RenderCoords[ numvert ].TexCoords[0] = C->TexCoords[z];
+ RenderCoords[ numvert ].TexCoords[1] = C->TexCoords[ z + 1 ];
+ RenderCoords[ numvert ].Vertex[0] = cX + C->Vertex[z] + nX;
+ RenderCoords[ numvert ].Vertex[1] = cY + C->Vertex[ z + 1 ] + nY;
+ numvert++;
}
+
+ #ifdef EE_GLES
+ glColorPointer( 4, GL_UNSIGNED_BYTE, 0, reinterpret_cast( &Colors[0] ) );
+ glTexCoordPointer( 2, GL_FLOAT, sizeof(eeVertexCoords), reinterpret_cast( &RenderCoords[ numvert - 4 ] ) );
+ glVertexPointer( 2, GL_FLOAT, sizeof(eeVertexCoords), reinterpret_cast( &RenderCoords[ numvert - 4 ] ) + sizeof(eeFloat) * 2 );
+
+ glDrawElements( GL_TRIANGLE_STRIP, 4, GL_UNSIGNED_BYTE, EE_GLES_INDICES );
+ #endif
+
+ if (mVerticalDraw)
+ nY += GetFontHeight();
+ else
+ nX += mGlyphs[ Char ].Advance;
+ }
}
}
}
TextCache.CachedCoords( true );
+ TextCache.CachedVerts( numvert );
} else {
- numvert = (eeUint)TextCache.Text().size() * 4;
+ numvert = TextCache.CachedVerts();
}
#ifndef EE_GLES
@@ -268,8 +277,9 @@ void cFont::Draw( cTextCache& TextCache, const eeFloat& X, const eeFloat& Y, con
glDrawArrays( GL_QUADS, 0, numvert );
#endif
- if ( Angle != 0.0f || Scale != 1.0f )
+ if ( Angle != 0.0f || Scale != 1.0f ) {
glPopMatrix();
+ }
}
void cFont::SubDraw( const std::wstring& Text, const eeFloat& X, const eeFloat& Y, const Uint32& Flags, const eeFloat& Scale, const eeFloat& Angle, const bool& Cached, const EE_PRE_BLEND_FUNC& Effect ) {
@@ -414,11 +424,13 @@ void cFont::CacheWidth( const std::wstring& Text, std::vector& LinesWid
eeFloat Width = 0, MaxWidth = 0;
Int32 CharID;
Int32 Lines = 1;
-
+
+ Int32 tGlyphSize = (Int32)mGlyphs.size();
+
for (std::size_t i = 0; i < Text.size(); ++i) {
CharID = static_cast( Text.at(i) );
- if ( CharID >= 0 && CharID < (Int32)mGlyphs.size() ) {
+ if ( CharID >= 0 && CharID < tGlyphSize ) {
Width += mGlyphs[CharID].Advance;
if ( CharID == L'\t' )
@@ -458,9 +470,10 @@ void cFont::ShrinkText( std::string& Str, const Uint32& MaxWidth ) {
Int32 tPrev = -1;
char * tStringLoop = &Str[0];
char * tLastSpace = NULL;
-
+ Uint32 tGlyphSize = (Uint32)mGlyphs.size();
+
while ( *tStringLoop ) {
- if ( (Uint32)( *tStringLoop ) < mGlyphs.size() ) {
+ if ( (Uint32)( *tStringLoop ) < tGlyphSize ) {
eeGlyph * pChar = &mGlyphs[ ( *tStringLoop ) ];
eeFloat fCharWidth = (eeFloat)pChar->Advance;
diff --git a/src/graphics/cfontmanager.cpp b/src/graphics/cfontmanager.cpp
index 1319e5736..10c086ead 100644
--- a/src/graphics/cfontmanager.cpp
+++ b/src/graphics/cfontmanager.cpp
@@ -8,4 +8,8 @@ cFontManager::cFontManager() {
cFontManager::~cFontManager() {
}
+cFont * cFontManager::Add( cFont * Font ) {
+ return tResourceManager::Add( Font );
+}
+
}}
diff --git a/src/graphics/cfontmanager.hpp b/src/graphics/cfontmanager.hpp
index f2c3d0411..6e21e78be 100644
--- a/src/graphics/cfontmanager.hpp
+++ b/src/graphics/cfontmanager.hpp
@@ -12,6 +12,8 @@ class EE_API cFontManager : public tResourceManager, public tSingletonCacheWidth( mText, mLinesWidth, mCachedWidth, mNumLines );
- else
+ }else {
mCachedWidth = 0;
+ }
mCachedCoords = false;
}
@@ -129,25 +132,20 @@ const std::vector& cTextCache::LinesWidth() {
void cTextCache::Draw( const eeFloat& X, const eeFloat& Y, const Uint32& Flags, const eeFloat& Scale, const eeFloat& Angle, const EE_PRE_BLEND_FUNC& Effect ) {
if ( NULL != mFont ) {
- eeColorA FontColor = mFont->Color();
- eeColorA FontShadowColor = mFont->ShadowColor();
-
- mFont->Color( mFontColor );
- mFont->ShadowColor( mFontShadowColor );
-
if ( mFlags != Flags ) {
mFlags = Flags;
mCachedCoords = false;
}
-
- glTranslatef( X, Y, 0.f );
-
- mFont->Draw( *this, 0, 0, Flags, Scale, Angle, Effect );
-
- glTranslatef( -X, -Y, 0.f );
-
- mFont->Color( FontColor );
- mFont->ShadowColor( FontShadowColor );
+
+ if ( Angle != 0.0f || Scale != 1.0f ) {
+ mFont->Draw( *this, X, Y, Flags, Scale, Angle, Effect );
+ } else {
+ glTranslatef( X, Y, 0.f );
+
+ mFont->Draw( *this, 0, 0, Flags, Scale, Angle, Effect );
+
+ glTranslatef( -X, -Y, 0.f );
+ }
}
}
@@ -163,4 +161,12 @@ cFont * cTextCache::GetFont() const {
return mFont;
}
+const eeUint& cTextCache::CachedVerts() const {
+ return mVertexNumCached;
+}
+
+void cTextCache::CachedVerts( const eeUint& num ) {
+ mVertexNumCached = num;
+}
+
}}
diff --git a/src/graphics/ctextcache.hpp b/src/graphics/ctextcache.hpp
index 6584d1f92..c3b801a30 100644
--- a/src/graphics/ctextcache.hpp
+++ b/src/graphics/ctextcache.hpp
@@ -74,12 +74,17 @@ class EE_API cTextCache {
std::vector mColors;
bool mCachedCoords;
Uint32 mFlags;
+ Uint32 mVertexNumCached;
void UpdateCoords();
const bool& CachedCoords() const;
void CachedCoords( const bool& cached );
+
+ const eeUint& CachedVerts() const;
+
+ void CachedVerts( const eeUint& num );
};
}}
diff --git a/src/graphics/cttffont.cpp b/src/graphics/cttffont.cpp
index 2b874137c..068aaf2ca 100755
--- a/src/graphics/cttffont.cpp
+++ b/src/graphics/cttffont.cpp
@@ -9,10 +9,6 @@ cTTFFont::cTTFFont( const std::string FontName ) :
mThreadedLoading(false),
mTexReady(false)
{
- if ( hkFontManager::instance()->Init() )
- mTTFInit = false;
- else
- mTTFInit = true;
}
cTTFFont::~cTTFFont() {
@@ -70,9 +66,6 @@ bool cTTFFont::iLoad( const eeUint& Size, EE_TTF_FONTSTYLE Style, const bool& Ve
Uint8 OutlineTotal = OutlineSize * 2;
Uint32 TexSize;
- if ( !mTTFInit )
- return false;
-
try {
if ( mFont == NULL )
return false;
diff --git a/src/graphics/cttffont.hpp b/src/graphics/cttffont.hpp
index 8b02bc0cb..58806b469 100755
--- a/src/graphics/cttffont.hpp
+++ b/src/graphics/cttffont.hpp
@@ -87,7 +87,6 @@ class EE_API cTTFFont : public cFont {
EE_TTF_FONTSTYLE mStyle;
eeFloat mTexWidth, mTexHeight;
- bool mTTFInit;
bool mLoadedFromMemory;
diff --git a/src/helper/SOIL/stb_image.c b/src/helper/SOIL/stb_image.c
index 5f9070aac..e56c0522a 100644
--- a/src/helper/SOIL/stb_image.c
+++ b/src/helper/SOIL/stb_image.c
@@ -1,4 +1,4 @@
-/* stbi-1.29 - public domain JPEG/PNG reader - http://nothings.org/stb_image.c
+/* stbi-1.30 - public domain JPEG/PNG reader - http://nothings.org/stb_image.c
when you control the images you're loading
no warranty implied; use at your own risk
diff --git a/src/helper/haikuttf/hkbase.hpp b/src/helper/haikuttf/hkbase.hpp
index 5968860e0..746d7031d 100644
--- a/src/helper/haikuttf/hkbase.hpp
+++ b/src/helper/haikuttf/hkbase.hpp
@@ -14,6 +14,34 @@ typedef SOPHIST_int32 s32;
typedef SOPHIST_uint32 u32;
}
+#define HK_PLATFORM_WIN (1)
+#define HK_PLATFORM_LINUX (2)
+#define HK_PLATFORM_MACOSX (3)
+
+#if defined( __WIN32__ ) || defined( _WIN32 ) || defined( _WIN64 )
+# define HK_PLATFORM HK_PLATFORM_WIN
+#elif defined( __APPLE_CC__) || defined ( __APPLE__ )
+# define HK_PLATFORM HK_PLATFORM_MACOSX
+#elif defined( LINUX ) || defined( __linux__ )
+# define HK_PLATFORM HK_PLATFORM_LINUX
+#endif
+
+#if HK_PLATFORM == HK_PLATFORM_LINUX || HK_PLATFORM == HK_PLATFORM_MACOSX
+#define HK_PLATFORM_UNIX
+#endif
+
+#if HK_PLATFORM == HK_PLATFORM_WIN
+#ifndef WIN32_LEAN_AND_MEAN
+ #define WIN32_LEAN_AND_MEAN
+#endif
+#include
+#elif defined( HK_PLATFORM_UNIX )
+#include
+#else
+// Fallback to SDL mutex
+#include
+#endif
+
#include
#include FT_FREETYPE_H
#include FT_OUTLINE_H
diff --git a/src/helper/haikuttf/hkfont.cpp b/src/helper/haikuttf/hkfont.cpp
index 681784028..e6437afff 100644
--- a/src/helper/haikuttf/hkfont.cpp
+++ b/src/helper/haikuttf/hkfont.cpp
@@ -106,12 +106,15 @@ FT_Error hkFont::GlyphLoad( u16 ch, hkGlyph * cached, int want ) {
return FT_Err_Invalid_Handle;
face = mFace;
-
+
+ mFm->MutexLock();
+
if ( !cached->Index() )
cached->Index( FT_Get_Char_Index( face, ch ) );
-
+
+
error = FT_Load_Glyph( face, cached->Index(), FT_LOAD_DEFAULT | mHinting );
-
+
if( error )
return error;
@@ -255,6 +258,8 @@ FT_Error hkFont::GlyphLoad( u16 ch, hkGlyph * cached, int want ) {
FT_Done_Glyph( bitmap_glyph );
}
}
+
+ mFm->MutexUnlock();
cached->Cached( ch );
diff --git a/src/helper/haikuttf/hkfontmanager.cpp b/src/helper/haikuttf/hkfontmanager.cpp
index 29b0551e5..26f868dc4 100644
--- a/src/helper/haikuttf/hkfontmanager.cpp
+++ b/src/helper/haikuttf/hkfontmanager.cpp
@@ -33,8 +33,9 @@ int hkFontManager::Init() {
void hkFontManager::Destroy() {
if ( mInitialized ) {
- if ( --mInitialized == 0 )
+ if ( --mInitialized == 0 ) {
FT_Done_FreeType( mLibrary );
+ }
}
}
@@ -56,17 +57,21 @@ void hkFontManager::CloseFont( hkFont * Font ) {
}
hkFont * hkFontManager::OpenFromMemory( const u8* data, unsigned long size, int ptsize, long index, unsigned int glyphCacheSize ) {
- if ( Init() != 0)
+ if ( Init() != 0 )
return NULL;
FT_Face face = NULL;
-
+
+ MutexLock();
+
if ( FT_New_Memory_Face( mLibrary, reinterpret_cast(data), static_cast(size), index, &face ) != 0 )
return NULL;
if ( FT_Select_Charmap( face, FT_ENCODING_UNICODE ) != 0 )
return NULL;
-
+
+ MutexUnlock();
+
hkFont * Font = new hkFont( this, glyphCacheSize );
Font->Face( face );
@@ -79,7 +84,9 @@ hkFont * hkFontManager::OpenFromFile( const char* filename, int ptsize, long ind
return NULL;
FT_Face face;
-
+
+ MutexLock();
+
if ( FT_New_Face( mLibrary, filename, index, &face ) != 0 )
return NULL;
@@ -87,6 +94,8 @@ hkFont * hkFontManager::OpenFromFile( const char* filename, int ptsize, long ind
if ( FT_Select_Charmap(face, FT_ENCODING_UNICODE) != 0 )
return NULL;
+ MutexUnlock();
+
hkFont * Font = new hkFont( this, glyphCacheSize );
Font->Face( face );
@@ -102,12 +111,19 @@ hkFont * hkFontManager::FontPrepare( hkFont * font, int ptsize ) {
face = font->Face();
if ( FT_IS_SCALABLE( face ) ) {
+ MutexLock();
+
error = FT_Set_Char_Size( font->Face(), 0, ptsize * 64, 0, 0 );
-
+
if( error ) {
CloseFont( font );
+
+ MutexUnlock();
+
return NULL;
}
+
+ MutexUnlock();
scale = face->size->metrics.y_scale;
font->Ascent( FT_CEIL( FT_MulFix( face->ascender, scale) ) );
@@ -152,4 +168,12 @@ hkFont * hkFontManager::FontPrepare( hkFont * font, int ptsize ) {
return font;
}
+void hkFontManager::MutexLock() {
+ Lock();
+}
+
+void hkFontManager::MutexUnlock() {
+ Unlock();
+}
+
}
diff --git a/src/helper/haikuttf/hkfontmanager.hpp b/src/helper/haikuttf/hkfontmanager.hpp
index 3932403fe..d13fde38d 100644
--- a/src/helper/haikuttf/hkfontmanager.hpp
+++ b/src/helper/haikuttf/hkfontmanager.hpp
@@ -4,10 +4,11 @@
#include "hkbase.hpp"
#include "hkglyph.hpp"
#include "hkfont.hpp"
+#include "hkmutex.hpp"
namespace HaikuTTF {
-class hkFontManager {
+class hkFontManager : private hkMutex {
static hkFontManager * mSingleton;
public:
static hkFontManager * instance() {
@@ -42,12 +43,18 @@ class hkFontManager {
FT_Library Library() const { return mLibrary; }
protected:
+ friend class hkFont;
+
FT_Library mLibrary;
int mInitialized;
hkFont * FontPrepare( hkFont * font, int ptsize );
+
+ void MutexLock();
+
+ void MutexUnlock();
private:
-
+ //SDL_mutex * mMutex;
};
}
diff --git a/src/helper/haikuttf/hkmutex.cpp b/src/helper/haikuttf/hkmutex.cpp
new file mode 100644
index 000000000..1f67d146f
--- /dev/null
+++ b/src/helper/haikuttf/hkmutex.cpp
@@ -0,0 +1,48 @@
+#include "hkmutex.hpp"
+
+namespace HaikuTTF {
+
+hkMutex::hkMutex() {
+ #if HK_PLATFORM == HK_PLATFORM_WIN
+ InitializeCriticalSection(&mMutex);
+ #elif defined( HK_PLATFORM_UNIX )
+ pthread_mutex_init(&mMutex, NULL);
+ #else
+ mMutex = SDL_CreateMutex();
+ #endif
+}
+
+hkMutex::~hkMutex() {
+ #if HK_PLATFORM == HK_PLATFORM_WIN
+ DeleteCriticalSection(&mMutex);
+ #elif defined( HK_PLATFORM_UNIX )
+ pthread_mutex_destroy(&mMutex);
+ #else
+ SDL_DestroyMutex(mMutex);
+ #endif
+}
+
+void hkMutex::Lock() {
+ #if HK_PLATFORM == HK_PLATFORM_WIN
+ EnterCriticalSection(&mMutex);
+ #elif defined( HK_PLATFORM_UNIX )
+ pthread_mutex_lock(&mMutex);
+ #else
+ SDL_LockMutex(mMutex)
+ #endif
+}
+
+void hkMutex::Unlock() {
+ #if HK_PLATFORM == HK_PLATFORM_WIN
+ LeaveCriticalSection(&mMutex);
+ #elif defined( HK_PLATFORM_UNIX )
+ pthread_mutex_unlock(&mMutex);
+ #else
+ SDL_UnlockMutex(mMutex)
+ #endif
+}
+
+}
+
+
+
diff --git a/src/helper/haikuttf/hkmutex.hpp b/src/helper/haikuttf/hkmutex.hpp
new file mode 100644
index 000000000..5d61bdea1
--- /dev/null
+++ b/src/helper/haikuttf/hkmutex.hpp
@@ -0,0 +1,28 @@
+#ifndef HAIKUTTF_HKMUTEX_HPP
+#define HAIKUTTF_HKMUTEX_HPP
+
+#include "hkbase.hpp"
+
+namespace HaikuTTF {
+
+class hkMutex {
+ public:
+ hkMutex();
+
+ ~hkMutex();
+
+ void Lock();
+
+ void Unlock();
+ protected:
+ #if HK_PLATFORM == HK_PLATFORM_WIN
+ CRITICAL_SECTION mMutex;
+ #elif defined( HK_PLATFORM_UNIX )
+ pthread_mutex_t mMutex;
+ #else
+ SDL_mutex * mMutex;
+ #endif
+};
+
+}
+#endif
diff --git a/src/system/cmutex.cpp b/src/system/cmutex.cpp
index 4ad4793d6..89a49cab2 100755
--- a/src/system/cmutex.cpp
+++ b/src/system/cmutex.cpp
@@ -11,17 +11,11 @@ cMutex::~cMutex() {
}
bool cMutex::Lock() {
- int ret = SDL_LockMutex(mMutex);
- if (ret == 0)
- return true;
- return false;
+ return 0 == SDL_LockMutex(mMutex);
}
bool cMutex::Unlock() {
- int ret = SDL_UnlockMutex(mMutex);
- if (ret == 0)
- return true;
- return false;
+ return 0 == SDL_UnlockMutex(mMutex);
}
}}
diff --git a/src/test/ee.cpp b/src/test/ee.cpp
index e88af966d..3ac3f0546 100644
--- a/src/test/ee.cpp
+++ b/src/test/ee.cpp
@@ -100,6 +100,8 @@ class cEETest : private cThread {
cTextureFont * FF;
cTextureFont * FF2;
cTTFFont * TTF;
+ cTTFFont * TTFB;
+
cPrimitives PR;
bool iL1, iL2;
eeFloat HWidth, HHeight;
@@ -166,7 +168,7 @@ class cEETest : private cThread {
eeInt mHeight;
std::wstring mBuda;
- cTextCache * mBudaTC;
+ cTextCache mBudaTC;
bool mTextureLoaded;
cResourceLoader mResLoad;
@@ -185,8 +187,6 @@ class cEETest : private cThread {
eeFloat mAxisX;
eeFloat mAxisY;
- Uint32 mFace;
-
cTextureGroupLoader * mTGL;
cSprite mBlindy;
@@ -203,6 +203,8 @@ class cEETest : private cThread {
cUIProgressBar * mProgressBar;
cTextCache mEEText;
+ cTextCache mFBOText;
+ cTextCache mInfoText;
};
void cEETest::CreateAquaTextureAtlas() {
@@ -245,8 +247,6 @@ void cEETest::Init() {
MyPath = AppPath();
- CreateAquaTextureAtlas();
-
cIniFile Ini( MyPath + "data/ee.ini" );
Ini.ReadFile();
@@ -284,10 +284,10 @@ void cEETest::Init() {
SetRandomSeed();
- LoadFonts();
-
LoadTextures();
+ LoadFonts();
+
CreateShaders();
if ( Mus.OpenFromPack( &PAK, "music.ogg" ) ) {
@@ -317,7 +317,7 @@ void cEETest::Init() {
mFB->ClearColor( eeColorAf( 0, 0, 0, 0.5f ) );
- eePolygon2f Poly = CreateRoundedPolygon( 0.f, 0.f, 250.f, 50.f );
+ eePolygon2f Poly = CreateRoundedPolygon( 0.f, 0.f, 256.f, 50.f );
mVBO = cVertexBuffer::Create( VERTEX_FLAG_GET( VERTEX_FLAG_POSITION ) | VERTEX_FLAG_GET( VERTEX_FLAG_COLOR ), DM_POLYGON );
@@ -337,16 +337,21 @@ void cEETest::Init() {
}
void cEETest::LoadFonts() {
+ mFontLoader.Add( eeNew( cTTFFontLoader, ( "arialb", &PAK, "arial.ttf", 12, EE_TTF_STYLE_NORMAL, false, 256, eeColor(255,255,255), 1, eeColor(0,0,0), true ) ) );
+ mFontLoader.Add( eeNew( cTTFFontLoader, ( "arial", &PAK, "arial.ttf", 12, EE_TTF_STYLE_NORMAL, false, 256, eeColor(255,255,255) ) ) );
mFontLoader.Add( eeNew( cTextureFontLoader, ( "conchars", eeNew( cTextureLoader, ( &PAK, "conchars.png", false, eeRGB(0,0,0) ) ), (eeUint)32 ) ) );
mFontLoader.Add( eeNew( cTextureFontLoader, ( "ProggySquareSZ", eeNew( cTextureLoader, ( &PAK, "ProggySquareSZ.png" ) ), &PAK, "ProggySquareSZ.dat" ) ) );
- mFontLoader.Add( eeNew( cTTFFontLoader, ( "arial", &PAK, "arial.ttf", 12, EE_TTF_STYLE_NORMAL, false, 256, eeColor(255,255,255), 1, eeColor(0,0,0), true ) ) );
+
mFontLoader.Load( cb::Make1( this, &cEETest::OnFontLoaded ) );
}
void cEETest::OnFontLoaded( cResourceLoader * ObjLoaded ) {
- FF = reinterpret_cast ( cFontManager::instance()->GetByName( "conchars" ) );
- FF2 = reinterpret_cast ( cFontManager::instance()->GetByName( "ProggySquareSZ" ) );
- TTF = reinterpret_cast ( cFontManager::instance()->GetByName( "arial" ) );
+ FF = reinterpret_cast ( cFontManager::instance()->GetByName( "conchars" ) );
+ FF2 = reinterpret_cast ( cFontManager::instance()->GetByName( "ProggySquareSZ" ) );
+ TTF = reinterpret_cast ( cFontManager::instance()->GetByName( "arial" ) );
+ TTFB = reinterpret_cast ( cFontManager::instance()->GetByName( "arialb" ) );
+
+ eeASSERT( TTFB != NULL );
Con.Create( FF, true );
Con.IgnoreCharOnPrompt( 186 ); // L'º'
@@ -369,6 +374,7 @@ void cEETest::CreateShaders() {
void cEETest::CreateUI() {
cUIManager::instance()->Init();
+ cUIThemeManager::instance()->DefaultFont( TTF );
cUIControl::CreateParams Params( cUIManager::instance()->MainControl(), eeVector2i(0,0), eeSize( 320, 240 ), UI_FILL_BACKGROUND | UI_CLIP_ENABLE | UI_BORDER );
@@ -422,7 +428,6 @@ void cEETest::CreateUI() {
TextParams.PosSet( 0, 0 );
TextParams.Size = eeSize( 320, 240 );
TextParams.Flags = UI_VALIGN_TOP | UI_HALIGN_RIGHT;
- TextParams.Font = TTF;
cUITextBox * Text = eeNew( cUITextBox, ( TextParams ) );
Text->Visible( true );
Text->Enabled( false );
@@ -436,16 +441,18 @@ void cEETest::CreateUI() {
InputParams.PosSet( 20, 216 );
InputParams.Size = eeSize( 200, 22 );
InputParams.Flags = UI_VALIGN_CENTER | UI_HALIGN_LEFT | UI_CLIP_ENABLE; // | UI_BORDER | UI_FILL_BACKGROUND
- InputParams.Font = TTF;
cUITextInput * Input = eeNew( cUITextInput, ( InputParams ) );
- Input->Padding( eeRectf( 4, -2, -8, 0 ) );
+ Input->Padding( eeRectf( 4, -2, 8, 0 ) );
Input->Visible( true );
Input->Enabled( true );
- TextParams.Flags = UI_VALIGN_CENTER | UI_HALIGN_CENTER;
- TextParams.PosSet( 230, 216 );
- TextParams.Size = eeSize( 80, 22 );
- cUIPushButton * Button = eeNew( cUIPushButton, ( TextParams ) );
+ cUIPushButton::CreateParams ButtonParams;
+ ButtonParams.Parent( C );
+ ButtonParams.Flags = UI_VALIGN_CENTER | UI_HALIGN_CENTER;
+ ButtonParams.PosSet( 225, 216 );
+ ButtonParams.Size = eeSize( 90, 22 );
+ ButtonParams.SetIcon( cGlobalShapeGroup::instance()->GetByName( "aqua_button_ok" ) );
+ cUIPushButton * Button = eeNew( cUIPushButton, ( ButtonParams ) );
Button->Visible( true );
Button->Enabled( true );
Button->Text( L"Click Me" );
@@ -453,6 +460,7 @@ void cEETest::CreateUI() {
Button->AddEventListener( cUIEvent::EventMouseClick, cb::Make1( this, &cEETest::ButtonClick ) );
TextParams.PosSet( 120, 20 );
+ TextParams.Size = eeSize( 80, 22 );
TextParams.Flags = UI_VALIGN_CENTER | UI_HALIGN_LEFT;
cUICheckBox * Checkbox = eeNew( cUICheckBox, ( TextParams ) );
Checkbox->Visible( true );
@@ -496,7 +504,6 @@ void cEETest::CreateUI() {
SpinBoxParams.PosSet( 80, 150 );
SpinBoxParams.Size = eeSize( 80, 24 );
SpinBoxParams.Flags = UI_VALIGN_CENTER | UI_HALIGN_LEFT | UI_CLIP_ENABLE;
- SpinBoxParams.Font = TTF;
SpinBoxParams.AllowDotsInNumbers = true;
cUISpinBox * mSpinBox = eeNew( cUISpinBox, ( SpinBoxParams ) );
mSpinBox->Visible( true );
@@ -517,9 +524,8 @@ void cEETest::CreateUI() {
cUIProgressBar::CreateParams PBParams;
PBParams.Parent( C );
PBParams.PosSet( 20, 197 );
- PBParams.Size = eeSize( 150, 16 );
+ PBParams.Size = eeSize( 200, 16 );
PBParams.DisplayPercent = true;
- PBParams.Font = TTF;
mProgressBar = eeNew( cUIProgressBar, ( PBParams ) );
mProgressBar->Visible( true );
mProgressBar->Enabled( true );
@@ -530,21 +536,24 @@ void cEETest::CreateUI() {
mTextBoxValue->Visible( true );
mBuda = L"El mono ve el pez en el agua y sufre. Piensa que su mundo es el único que existe, el mejor, el real. Sufre porque es bueno y tiene compasión, lo ve y piensa: \"Pobre se está ahogando no puede respirar\". Y lo saca, lo saca y se queda tranquilo, por fin lo salvé. Pero el pez se retuerce de dolor y muere. Por eso te mostré el sueño, es imposible meter el mar en tu cabeza, que es un balde.";
- TTF->ShrinkText( mBuda, 400 );
+ TTFB->ShrinkText( mBuda, 400 );
- //cGlobalShapeGroup::instance()->Add( eeNew( cShape, ( TF->Load( MyPath + "data/aqua/aqua_textinput_normal.png" ), "aqua_textinput_normal" ) ) );
- //cUIThemeManager::instance()->Add( cUITheme::LoadFromPath( MyPath + "data/aqua/", "aqua", "aqua" ) );
+ cGlobalShapeGroup::instance()->Add( eeNew( cShape, ( TF->Load( MyPath + "data/aqua/aqua_textinput_normal.png" ), "aqua_textinput_normal" ) ) );
+ cUIThemeManager::instance()->Add( cUITheme::LoadFromPath( MyPath + "data/aqua/", "aqua", "aqua" ) );
+/*
+ CreateAquaTextureAtlas();
cTextureGroupLoader tgl( MyPath + "data/aqua.etg" );
- TF->GetByName( "data/aqua.png" )->ClampMode( EE_CLAMP_REPEAT );
TF->GetByName( "data/aqua.png" )->TextureFilter( TEX_FILTER_NEAREST );
cUIThemeManager::instance()->Add( cUITheme::LoadFromShapeGroup( cShapeGroupManager::instance()->GetByName( "aqua" ), "aqua", "aqua" ) );
+*/
cUIManager::instance()->SetTheme( "aqua" );
- mBudaTC = eeNew( cTextCache, ( TTF, mBuda, eeColorA(255,255,255,255) ) );
-
- mEEText.Create( TTF, L"Entropia Engine++\nCTRL + 1 = Screen 1 - CTRL + 2 = Screen 2\nCTRL + 3 = Screen 3" );
+ mBudaTC.Create( TTFB, mBuda, eeColorA(255,255,255,255) );
+ mEEText.Create( TTFB, L"Entropia Engine++\nCTRL + 1 = Screen 1 - CTRL + 2 = Screen 2\nCTRL + 3 = Screen 3" );
+ mFBOText.Create( TTFB, L"This is a VBO\nInside of a FBO" );
+ mInfoText.Create( FF, L"", eeColorA(255,255,255,150) );
}
void cEETest::OnValueChange( const cUIEvent * Event ) {
@@ -632,32 +641,6 @@ void cEETest::LoadTextures() {
eeInt w, h;
- mFace = TF->LoadFromPack( &PakTest, "adjutantportrait_l_static.dds" );
- /** // DDS Lock/Unlock Test
- cTexture * mFacePtr = TF->GetTexture( mFace );
-
- if ( NULL != mFacePtr ) {
- w = (eeInt)mFacePtr->Width();
- h = (eeInt)mFacePtr->Height();
-
- mFacePtr->Lock();
-
- for ( y = 0; y < h; y++ ) {
- for ( x = 0; x < w; x++ ) {
- eeColorA tempC = mFacePtr->GetPixel( x, y );
-
- tempC.Red = std::min( tempC.Red + 50, 255 );
- tempC.Green = std::min( tempC.Green + 50, 255 );
- tempC.Blue = std::min( tempC.Blue + 50, 255 );
-
- eeColorA newC( tempC.R(), tempC.G(), tempC.B(), 255 );
- mFacePtr->SetPixel( x, y, newC );
- }
- }
-
- mFacePtr->Unlock(false,true);
- }*/
-
for ( Int32 my = 0; my < 4; my++ )
for( Int32 mx = 0; mx < 8; mx++ )
SP.AddFrame( TN[4], 0, 0, 0, 0, eeRecti( mx * 64, my * 64, mx * 64 + 64, my * 64 + 64 ) );
@@ -717,6 +700,8 @@ void cEETest::LoadTextures() {
TreeTilingCreated = false;
CreateTiling(Wireframe);
+
+ cGlobalShapeGroup::instance()->Add( eeNew( cShape, ( TF->Load( MyPath + "data/aqua/aqua_button_ok.png" ), "aqua_button_ok" ) ) );
}
void cEETest::RandomizeHeights() {
@@ -981,6 +966,8 @@ void cEETest::Render() {
SizeToString( TF->MemorySize() ).c_str()
);
#endif
+
+ mInfoText.Text( mInfo );
}
if ( !MultiViewportMode ) {
@@ -1019,14 +1006,10 @@ void cEETest::Render() {
mEEText.GetTextHeight(),
ColRR1, ColRR2, ColRR3, ColRR4
);
-
+
mEEText.Draw( 0.f, (eeFloat)EE->GetHeight() - mEEText.GetTextHeight(), FONT_DRAW_CENTER, 1.f, Ang );
-
- FF->Color( eeColorA(255,255,255,200) );
- FF->Draw( mInfo, 6, 6 );
-
- FF2->SetText( InBuf.Buffer() );
- FF2->Draw( 6, 180, FONT_DRAW_SHADOW );
+ mInfoText.Draw( 6.f, 6.f );
+ mBudaTC.Draw( 5.f, 60.f );
Uint32 NLPos = 0;
Uint32 LineNum = InBuf.GetCurPosLinePos( NLPos );
@@ -1037,14 +1020,11 @@ void cEETest::Render() {
FF2->Draw( L"_", 6.f + FF2->GetTextWidth(), 180.f + (eeFloat)LineNum * (eeFloat)FF2->GetFontSize() );
}
- mBudaTC->Draw( 5.f, 50.f );
-/*
- cTexture * TexFace = TF->GetTexture( mFace );
- if ( TexFace )
- TexFace->Draw( (eeFloat)EE->GetWidth() - (eeFloat)TexFace->Width() , (eeFloat)EE->GetHeight() - (eeFloat)TexFace->Height(), 0.f, 1.f, eeColorA(), ALPHA_DESTALPHA, RN_MIRROR );
-*/
FF2->SetText( L"FPS: " + toWStr( EE->FPS() ) );
FF2->Draw( EE->GetWidth() - FF2->GetTextWidth() - 15, 0 );
+
+ FF2->SetText( InBuf.Buffer() );
+ FF2->Draw( 6, 180, FONT_DRAW_SHADOW );
if ( NULL != mFB ) {
mFB->Bind();
@@ -1055,6 +1035,8 @@ void cEETest::Render() {
mVBO->Bind();
mVBO->Draw();
mVBO->Unbind();
+
+ mFBOText.Draw( 128.f - (eeFloat)(Int32)( mFBOText.GetTextWidth() * 0.5f ), 25.f - (eeFloat)(Int32)( mFBOText.GetTextHeight() * 0.5f ), FONT_DRAW_CENTER );
mFB->Unbind();
@@ -1316,7 +1298,6 @@ void cEETest::End() {
eeSAFE_DELETE( mTGL );
eeSAFE_DELETE( mFB );
eeSAFE_DELETE( mVBO );
- eeSAFE_DELETE( mBudaTC );
cLog::instance()->Save();
diff --git a/src/ui/cuicontrol.cpp b/src/ui/cuicontrol.cpp
index 6c31e5551..377ed7483 100644
--- a/src/ui/cuicontrol.cpp
+++ b/src/ui/cuicontrol.cpp
@@ -306,9 +306,7 @@ Uint32 cUIControl::OnFocus() {
Uint32 cUIControl::OnFocusLoss() {
SendCommonEvent( cUIEvent::EventOnFocusLoss );
-
- SetSkinState( cUISkinState::StateLostFocus );
-
+
return 1;
}
diff --git a/src/ui/cuigfx.cpp b/src/ui/cuigfx.cpp
index 20a5c9f14..df6b33518 100644
--- a/src/ui/cuigfx.cpp
+++ b/src/ui/cuigfx.cpp
@@ -8,9 +8,6 @@ cUIGfx::cUIGfx( const cUIGfx::CreateParams& Params ) :
mColor( Params.ShapeColor ),
mRender( Params.ShapeRender )
{
- if ( NULL == mShape)
- Close();
-
mType |= UI_TYPE_GET(UI_TYPE_GFX);
if ( NULL != mShape && ( ( Flags() & UI_AUTO_SIZE ) || ( Params.Size.x == -1 && Params.Size.y == -1 ) ) )
@@ -25,6 +22,13 @@ cUIGfx::cUIGfx( const cUIGfx::CreateParams& Params ) :
cUIGfx::~cUIGfx() {
}
+void cUIGfx::Shape( cShape * shape ) {
+ mShape = shape;
+
+ if ( NULL != mShape && ( ( Flags() & UI_AUTO_SIZE ) ) )
+ Size( mShape->Size() );
+}
+
void cUIGfx::Draw() {
cUIControlAnim::Draw();
diff --git a/src/ui/cuigfx.hpp b/src/ui/cuigfx.hpp
index 0ba99d964..fce684c95 100644
--- a/src/ui/cuigfx.hpp
+++ b/src/ui/cuigfx.hpp
@@ -32,6 +32,8 @@ class EE_API cUIGfx : public cUIControlAnim {
cShape * Shape() const;
+ void Shape( cShape * shape );
+
const eeRGBA& Color() const;
void Color( const eeRGBA& color );
diff --git a/src/ui/cuiprogressbar.cpp b/src/ui/cuiprogressbar.cpp
index e1d2649fb..531c03940 100644
--- a/src/ui/cuiprogressbar.cpp
+++ b/src/ui/cuiprogressbar.cpp
@@ -12,6 +12,8 @@ cUIProgressBar::cUIProgressBar( const cUIProgressBar::CreateParams& Params ) :
mTotalSteps( 100.f ),
mParallax( NULL )
{
+ mType |= UI_TYPE_GET(UI_TYPE_PROGRESSBAR);
+
cUITextBox::CreateParams TxtBoxParams = Params;
TxtBoxParams.Parent( this );
diff --git a/src/ui/cuipushbutton.cpp b/src/ui/cuipushbutton.cpp
index d892c2ea1..0af7d7904 100644
--- a/src/ui/cuipushbutton.cpp
+++ b/src/ui/cuipushbutton.cpp
@@ -2,10 +2,39 @@
namespace EE { namespace UI {
-cUIPushButton::cUIPushButton( const cUITextBox::CreateParams& Params ) :
- cUITextBox( Params )
+cUIPushButton::cUIPushButton( const cUIPushButton::CreateParams& Params ) :
+ cUIControlAnim( Params ),
+ mIcon( NULL ),
+ mTextBox( NULL ),
+ mIconSpace( Params.IconHorizontalMargin )
{
mType |= UI_TYPE_GET(UI_TYPE_PUSHBUTTON);
+
+ cUIGfx::CreateParams GfxParams;
+ GfxParams.Parent( this );
+ GfxParams.Shape = Params.Icon;
+ GfxParams.Flags = UI_AUTO_SIZE;
+ mIcon = eeNew( cUIGfx, ( GfxParams ) );
+ mIcon->Visible( true );
+ mIcon->Enabled( false );
+
+ Icon( Params.Icon );
+
+ cUITextBox::CreateParams TxtParams = Params;
+ TxtParams.Parent( this );
+ TxtParams.Flags = UI_VALIGN_CENTER | UI_HALIGN_CENTER;
+ mTextBox = eeNew( cUITextBox, ( TxtParams ) );
+ mTextBox->Visible( true );
+ mTextBox->Enabled( false );
+
+ OnSizeChange();
+}
+
+void cUIPushButton::OnSizeChange() {
+ mTextBox->Size( mSize.Width(), mSize.Height() );
+ mTextBox->Pos( 0, 0 );
+ mIcon->Pos( mIconSpace, 0 );
+ mIcon->CenterVertical();
}
cUIPushButton::~cUIPushButton() {
@@ -15,4 +44,45 @@ void cUIPushButton::SetTheme( cUITheme * Theme ) {
cUIControl::SetTheme( Theme, "button" );
}
+void cUIPushButton::Icon( cShape * Icon ) {
+ mIcon->Shape( Icon );
+ mIcon->Pos( mIconSpace, 0 );
+ mIcon->CenterVertical();
+}
+
+cUIGfx * cUIPushButton::Icon() const {
+ return mIcon;
+}
+
+void cUIPushButton::Text( const std::wstring& text ) {
+ mTextBox->Text( text );
+ OnSizeChange();
+}
+
+void cUIPushButton::Text( const std::string& text ) {
+ mTextBox->Text( text );
+ OnSizeChange();
+}
+
+void cUIPushButton::Padding( const eeRectf& padding ) {
+ mTextBox->Padding( padding );
+}
+
+const eeRectf& cUIPushButton::Padding() const {
+ return mTextBox->Padding();
+}
+
+void cUIPushButton::IconHorizontalMargin( Int32 margin ) {
+ mIconSpace = margin;
+ OnSizeChange();
+}
+
+const Int32& cUIPushButton::IconHorizontalMargin() const {
+ return mIconSpace;
+}
+
+cUITextBox * cUIPushButton::TextBox() const {
+ return mTextBox;
+}
+
}}
diff --git a/src/ui/cuipushbutton.hpp b/src/ui/cuipushbutton.hpp
index feeeab7af..2e1a69134 100644
--- a/src/ui/cuipushbutton.hpp
+++ b/src/ui/cuipushbutton.hpp
@@ -2,18 +2,63 @@
#define EE_UICUIPUSHBUTTON_HPP
#include "cuitextbox.hpp"
+#include "cuigfx.hpp"
namespace EE { namespace UI {
-class EE_API cUIPushButton : public cUITextBox {
+class EE_API cUIPushButton : public cUIControlAnim {
public:
- cUIPushButton( const cUITextBox::CreateParams& Params );
+ class CreateParams : public cUITextBox::CreateParams {
+ public:
+ inline CreateParams() :
+ cUITextBox::CreateParams(),
+ Icon( NULL ),
+ IconHorizontalMargin( 0 )
+ {
+ }
+
+ inline ~CreateParams() {}
+
+ cShape * Icon;
+
+ inline void SetIcon( cShape * icon ) {
+ Icon = icon;
+
+ if ( !IconHorizontalMargin )
+ IconHorizontalMargin = 4;
+ }
+
+ Int32 IconHorizontalMargin;
+ };
+ cUIPushButton( const cUIPushButton::CreateParams& Params );
~cUIPushButton();
virtual void SetTheme( cUITheme * Theme );
- protected:
+
+ void Icon( cShape * Icon );
+
+ cUIGfx * Icon() const;
+
+ void Text( const std::wstring& text );
+ void Text( const std::string& text );
+
+ void Padding( const eeRectf& padding );
+
+ const eeRectf& Padding() const;
+
+ void IconHorizontalMargin( Int32 margin );
+
+ const Int32& IconHorizontalMargin() const;
+
+ cUITextBox * TextBox() const;
+ protected:
+ cUIGfx * mIcon;
+ cUITextBox * mTextBox;
+ Int32 mIconSpace;
+
+ virtual void OnSizeChange();
};
}}
diff --git a/src/ui/cuiskin.cpp b/src/ui/cuiskin.cpp
index 3917918ce..a9e3bfcc3 100644
--- a/src/ui/cuiskin.cpp
+++ b/src/ui/cuiskin.cpp
@@ -5,7 +5,7 @@ namespace EE { namespace UI {
const char * UISkinStatesNames[] = {
"normal",
"focus",
- "unfocus",
+ "selected",
"menter",
"mexit",
"mdown"
diff --git a/src/ui/cuiskinstate.hpp b/src/ui/cuiskinstate.hpp
index ccfb89780..5bbeffc3b 100644
--- a/src/ui/cuiskinstate.hpp
+++ b/src/ui/cuiskinstate.hpp
@@ -12,7 +12,7 @@ class cUISkinState {
enum UISkinStates {
StateNormal = 0,
StateFocus,
- StateLostFocus,
+ StateSelected,
StateMouseEnter,
StateMouseExit,
StateMouseDown,
diff --git a/src/ui/cuispinbox.cpp b/src/ui/cuispinbox.cpp
index 943d2a499..9fbfc407e 100644
--- a/src/ui/cuispinbox.cpp
+++ b/src/ui/cuispinbox.cpp
@@ -141,6 +141,8 @@ void cUISpinBox::InternalValue( const eeFloat& Val, const bool& Force ) {
}
mValue = Val;
+
+ mInput->GetInputTextBuffer()->ChangedSinceLastUpdate( false );
OnValueChange();
}
diff --git a/src/ui/cuitextbox.cpp b/src/ui/cuitextbox.cpp
index b77ae2f6e..1d4207839 100644
--- a/src/ui/cuitextbox.cpp
+++ b/src/ui/cuitextbox.cpp
@@ -1,5 +1,6 @@
#include "cuitextbox.hpp"
#include "cuimanager.hpp"
+#include "cuithememanager.hpp"
namespace EE { namespace UI {
@@ -9,11 +10,17 @@ cUITextBox::cUITextBox( const cUITextBox::CreateParams& Params ) :
mFontShadowColor( Params.FontShadowColor ),
mAlignOffset( 0.f, 0.f )
{
+ mType |= UI_TYPE_GET(UI_TYPE_TEXTBOX);
+
mTextCache.Font( Params.Font );
mTextCache.Color( mFontColor );
mTextCache.ShadowColor( mFontShadowColor );
-
- mType |= UI_TYPE_GET(UI_TYPE_TEXTBOX);
+
+ if ( NULL == Params.Font && NULL != cUIThemeManager::instance()->DefaultFont() ) {
+ mTextCache.Font( cUIThemeManager::instance()->DefaultFont() );
+ } else {
+ eePRINT( "cUITextBox::cUITextBox : Created a UI TextBox without a defined font." );
+ }
AutoAlign();
}
@@ -27,7 +34,7 @@ void cUITextBox::Draw() {
if ( mTextCache.GetTextWidth() ) {
if ( IsClipped() )
- cUIManager::instance()->ClipEnable( mScreenPos.x + (Int32)mPadding.Left, mScreenPos.y + (Int32)mPadding.Top, mSize.Width() + (Int32)mPadding.Right, mSize.Height() + (Int32)mPadding.Bottom );
+ cUIManager::instance()->ClipEnable( mScreenPos.x + (Int32)mPadding.Left, mScreenPos.y + (Int32)mPadding.Top, mSize.Width() - (Int32)mPadding.Right, mSize.Height() - (Int32)mPadding.Bottom );
mTextCache.Draw( (eeFloat)mScreenPos.x + mAlignOffset.x + mPadding.Left + 1.f, (eeFloat)mScreenPos.y + mAlignOffset.y + mPadding.Top, Flags(), 1.f, 0.f, mBlend );
@@ -154,4 +161,12 @@ const eeRectf& cUITextBox::Padding() const {
return mPadding;
}
+void cUITextBox::SetTheme( cUITheme * Theme ) {
+ cUIControlAnim::SetTheme( Theme );
+
+ if ( NULL == mTextCache.Font() && NULL != Theme->DefaultFont() ) {
+ mTextCache.Font( Theme->DefaultFont() );
+ }
+}
+
}}
diff --git a/src/ui/cuitextbox.hpp b/src/ui/cuitextbox.hpp
index 764efca16..af903a8ff 100644
--- a/src/ui/cuitextbox.hpp
+++ b/src/ui/cuitextbox.hpp
@@ -11,7 +11,9 @@ class EE_API cUITextBox : public cUIControlAnim {
public:
inline CreateParams() :
cUIControl::CreateParams(),
- Font( NULL )
+ Font( NULL ),
+ FontColor( 0, 0, 0, 255 ),
+ FontShadowColor( 255, 255, 255, 150 )
{
}
@@ -55,6 +57,8 @@ class EE_API cUITextBox : public cUIControlAnim {
virtual void Padding( const eeRectf& padding );
const eeRectf& Padding() const;
+
+ virtual void SetTheme( cUITheme * Theme );
protected:
cTextCache mTextCache;
eeColorA mFontColor;
diff --git a/src/ui/cuitextinput.cpp b/src/ui/cuitextinput.cpp
index 9825b5f61..7abb41cdf 100644
--- a/src/ui/cuitextinput.cpp
+++ b/src/ui/cuitextinput.cpp
@@ -128,8 +128,8 @@ void cUITextInput::AlignFix() {
if ( tX < 0.f )
mAlignOffset.x = -( mAlignOffset.x + ( tW - mAlignOffset.x ) );
- else if ( tX > mSize.Width() + mPadding.Right )
- mAlignOffset.x = mSize.Width() + mPadding.Right - ( mAlignOffset.x + ( tW - mAlignOffset.x ) );
+ else if ( tX > mSize.Width() - mPadding.Right )
+ mAlignOffset.x = mSize.Width() - mPadding.Right - ( mAlignOffset.x + ( tW - mAlignOffset.x ) );
}
diff --git a/src/ui/cuitheme.cpp b/src/ui/cuitheme.cpp
index ab5113d81..79432cf67 100644
--- a/src/ui/cuitheme.cpp
+++ b/src/ui/cuitheme.cpp
@@ -203,11 +203,12 @@ bool cUITheme::SearchFilesOfElement( cShapeGroup * SG, const std::string& Path,
return Found;
}
-cUITheme::cUITheme( const std::string& Name, const std::string& Abbr ) :
+cUITheme::cUITheme( const std::string& Name, const std::string& Abbr, cFont * DefaultFont ) :
tResourceManager ( false ),
mName( Name ),
mNameHash( MakeHash( mName ) ),
- mAbbr( Abbr )
+ mAbbr( Abbr ),
+ mFont( DefaultFont )
{
}
@@ -238,4 +239,12 @@ cUISkin * cUITheme::Add( cUISkin * Resource ) {
return tResourceManager::Add( Resource );
}
+void cUITheme::DefaultFont( cFont * Font ) {
+ mFont = Font;
+}
+
+cFont * cUITheme::DefaultFont() const {
+ return mFont;
+}
+
}}
diff --git a/src/ui/cuitheme.hpp b/src/ui/cuitheme.hpp
index 0d489d450..f22ba17d0 100644
--- a/src/ui/cuitheme.hpp
+++ b/src/ui/cuitheme.hpp
@@ -3,6 +3,7 @@
#include "base.hpp"
#include "../graphics/cshapegroup.hpp"
+#include "../graphics/cfont.hpp"
#include "cuiskin.hpp"
namespace EE { namespace UI {
@@ -13,7 +14,7 @@ class EE_API cUITheme : public tResourceManager {
static cUITheme * LoadFromShapeGroup( cShapeGroup * ShapeGroup, const std::string& Name, const std::string NameAbbr );
- cUITheme( const std::string& Name, const std::string& Abbr );
+ cUITheme( const std::string& Name, const std::string& Abbr, cFont * DefaultFont = NULL );
virtual ~cUITheme();
@@ -26,11 +27,15 @@ class EE_API cUITheme : public tResourceManager {
const std::string& Abbr() const;
virtual cUISkin * Add( cUISkin * Resource );
+
+ void DefaultFont( cFont * Font );
+
+ cFont * DefaultFont() const;
protected:
std::string mName;
Uint32 mNameHash;
-
std::string mAbbr;
+ cFont * mFont;
private:
static bool SearchFilesOfElement( cShapeGroup * SG, const std::string& Path, std::string Element, Uint32& IsComplex, const std::string ImgExt );
diff --git a/src/ui/cuithememanager.cpp b/src/ui/cuithememanager.cpp
index fc020a4d2..9a32aad12 100644
--- a/src/ui/cuithememanager.cpp
+++ b/src/ui/cuithememanager.cpp
@@ -3,7 +3,8 @@
namespace EE { namespace UI {
cUIThemeManager::cUIThemeManager() :
- tResourceManager( true )
+ tResourceManager( true ),
+ mFont( NULL )
{
}
@@ -11,4 +12,12 @@ cUIThemeManager::~cUIThemeManager() {
}
+void cUIThemeManager::DefaultFont( cFont * Font ) {
+ mFont = Font;
+}
+
+cFont * cUIThemeManager::DefaultFont() const {
+ return mFont;
+}
+
}}
diff --git a/src/ui/cuithememanager.hpp b/src/ui/cuithememanager.hpp
index b9b955324..e7478a801 100644
--- a/src/ui/cuithememanager.hpp
+++ b/src/ui/cuithememanager.hpp
@@ -12,6 +12,12 @@ class EE_API cUIThemeManager : public tResourceManager, public tSingle
cUIThemeManager();
virtual ~cUIThemeManager();
+
+ void DefaultFont( cFont * Font );
+
+ cFont * DefaultFont() const;
+ protected:
+ cFont * mFont;
};
}}
diff --git a/src/ui/uihelper.hpp b/src/ui/uihelper.hpp
index 99672d821..7dda5e037 100644
--- a/src/ui/uihelper.hpp
+++ b/src/ui/uihelper.hpp
@@ -52,6 +52,7 @@ Uint32 EE_API VAlignGet( Uint32 Flags );
#define UI_TYPE_SLIDER (8)
#define UI_TYPE_SPINBOX (9)
#define UI_TYPE_SCROLLBAR (10)
+#define UI_TYPE_PROGRESSBAR (11)
#define UI_TYPE_GET(X) ( 1 << (X) )
diff --git a/src/window/cengine.cpp b/src/window/cengine.cpp
index 6d5018150..7294132d0 100755
--- a/src/window/cengine.cpp
+++ b/src/window/cengine.cpp
@@ -11,6 +11,7 @@
#include "../ui/cuimanager.hpp"
#include "../audio/caudiolistener.hpp"
#include "../graphics/glhelper.hpp"
+#include "../helper/haikuttf/hkfontmanager.hpp"
using namespace EE::Graphics;
using namespace EE::Graphics::Private;
@@ -117,6 +118,8 @@ cEngine::~cEngine() {
cLog::DestroySingleton();
+ HaikuTTF::hkFontManager::DestroySingleton();
+
SDL_Quit();
}
diff --git a/src/window/cinputtextbuffer.cpp b/src/window/cinputtextbuffer.cpp
index 3712e24b3..9ad3a0e08 100755
--- a/src/window/cinputtextbuffer.cpp
+++ b/src/window/cinputtextbuffer.cpp
@@ -160,6 +160,10 @@ bool cInputTextBuffer::ChangedSinceLastUpdate() {
return mChangeSinceLastUpdate;
}
+void cInputTextBuffer::ChangedSinceLastUpdate( const bool& Changed ) {
+ mChangeSinceLastUpdate = Changed;
+}
+
void cInputTextBuffer::SetAutoPromp( const bool& set ) {
if ( set ) {
mPromptAutoPos = true;
diff --git a/src/window/cinputtextbuffer.hpp b/src/window/cinputtextbuffer.hpp
index de6880bdb..64f527bd6 100755
--- a/src/window/cinputtextbuffer.hpp
+++ b/src/window/cinputtextbuffer.hpp
@@ -66,6 +66,9 @@ class EE_API cInputTextBuffer {
/** @return If something changed since last update */
bool ChangedSinceLastUpdate();
+ /** Set if changed since last update */
+ void ChangedSinceLastUpdate( const bool& Changed );
+
/** @return The Cursor Position (where is the cursor editing) */
eeInt CurPos() const;