diff --git a/include/eepp/graphics/text.hpp b/include/eepp/graphics/text.hpp index fc6e3f6ff..db11a20db 100644 --- a/include/eepp/graphics/text.hpp +++ b/include/eepp/graphics/text.hpp @@ -42,7 +42,7 @@ class EE_API Text { void setFont( Font* font ); - void setCharacterSize( unsigned int size ); + void setFontSize( unsigned int size ); void setStyle( Uint32 style ); @@ -151,10 +151,10 @@ class EE_API Text { Vector2f position; }; - String mString; ///< String to display - Font* mFont; ///< FontTrueType used to display the string - unsigned int mCharacterSize; ///< Base size of characters, in pixels - unsigned int mRealCharacterSize; + String mString; ///< String to display + Font* mFont; ///< FontTrueType used to display the string + unsigned int mFontSize; ///< Base size of characters, in pixels + unsigned int mRealFontSize; Uint32 mStyle; ///< Text style (see Style enum) Color mFillColor; ///< Text fill color Color mOutlineColor; ///< Text outline color diff --git a/include/eepp/ui/uitextview.hpp b/include/eepp/ui/uitextview.hpp index ef7b179a3..da616e74d 100644 --- a/include/eepp/ui/uitextview.hpp +++ b/include/eepp/ui/uitextview.hpp @@ -31,7 +31,7 @@ class EE_API UITextView : public UIWidget { Uint32 getCharacterSize() const; - UITextView* setCharacterSize( const Uint32& characterSize ); + UITextView* setFontSize( const Uint32& characterSize ); const Uint32& getFontStyle() const; diff --git a/include/eepp/ui/uitheme.hpp b/include/eepp/ui/uitheme.hpp index 316aeaf24..3c00bf284 100644 --- a/include/eepp/ui/uitheme.hpp +++ b/include/eepp/ui/uitheme.hpp @@ -71,12 +71,17 @@ class EE_API UITheme : protected ResourceManager { void setStyleSheet( const CSS::StyleSheet& styleSheet ); + const Float& getDefaultFontSize() const; + + void setDefaultFontSize( const Float& defaultFontSize ); + protected: std::string mName; Uint32 mNameHash; std::string mAbbr; Graphics::TextureAtlas* mTextureAtlas; Font* mDefaultFont; + Float mDefaultFontSize; CSS::StyleSheet mStyleSheet; void setTextureAtlas( Graphics::TextureAtlas* SG ); diff --git a/include/eepp/ui/uithememanager.hpp b/include/eepp/ui/uithememanager.hpp index 859d2b499..00e26bf38 100644 --- a/include/eepp/ui/uithememanager.hpp +++ b/include/eepp/ui/uithememanager.hpp @@ -18,6 +18,10 @@ class EE_API UIThemeManager : public ResourceManager { Font* getDefaultFont() const; + UIThemeManager* setDefaultFontSize( const Float& fontSize ); + + const Float& getDefaultFontSize() const; + UIThemeManager* setDefaultTheme( UITheme* Theme ); UIThemeManager* setDefaultTheme( const std::string& Theme ); @@ -56,6 +60,7 @@ class EE_API UIThemeManager : public ResourceManager { protected: Font* mFont; + Float mFontSize; UITheme* mThemeDefault; bool mAutoApplyDefaultTheme; diff --git a/projects/linux/ee.creator.user b/projects/linux/ee.creator.user index e5836acc9..d5ef5b3dc 100644 --- a/projects/linux/ee.creator.user +++ b/projects/linux/ee.creator.user @@ -1,6 +1,6 @@ - + EnvironmentId diff --git a/src/eepp/graphics/console.cpp b/src/eepp/graphics/console.cpp index 4cc855a43..1bb22cf2a 100755 --- a/src/eepp/graphics/console.cpp +++ b/src/eepp/graphics/console.cpp @@ -259,7 +259,7 @@ void Console::draw() { Text& text = mTextCache[Pos]; text.setFont( mFontStyleConfig.Font ); - text.setCharacterSize( mFontStyleConfig.CharacterSize ); + text.setFontSize( mFontStyleConfig.CharacterSize ); text.setStyle( mFontStyleConfig.Style ); text.setOutlineThickness( mFontStyleConfig.OutlineThickness ); text.setOutlineColor( mFontStyleConfig.OutlineColor ); @@ -277,7 +277,7 @@ void Console::draw() { Text& text = mTextCache[mTextCache.size() - 1]; text.setFont( mFontStyleConfig.Font ); - text.setCharacterSize( mFontStyleConfig.CharacterSize ); + text.setFontSize( mFontStyleConfig.CharacterSize ); text.setStyle( mFontStyleConfig.Style ); text.setOutlineThickness( mFontStyleConfig.OutlineThickness ); text.setOutlineColor( mFontStyleConfig.OutlineColor ); @@ -288,7 +288,7 @@ void Console::draw() { Text& text2 = mTextCache[mTextCache.size() - 2]; text2.setFont( mFontStyleConfig.Font ); - text2.setCharacterSize( mFontStyleConfig.CharacterSize ); + text2.setFontSize( mFontStyleConfig.CharacterSize ); text2.setStyle( mFontStyleConfig.Style ); text2.setOutlineThickness( mFontStyleConfig.OutlineThickness ); text2.setOutlineColor( mFontStyleConfig.OutlineColor ); diff --git a/src/eepp/graphics/text.cpp b/src/eepp/graphics/text.cpp index 41ae522f6..831a48fec 100644 --- a/src/eepp/graphics/text.cpp +++ b/src/eepp/graphics/text.cpp @@ -81,8 +81,8 @@ Text* Text::New( Font* font, unsigned int characterSize ) { Text::Text() : mString(), mFont( NULL ), - mCharacterSize( 12 ), - mRealCharacterSize( PixelDensity::dpToPxI( mCharacterSize ) ), + mFontSize( 12 ), + mRealFontSize( PixelDensity::dpToPxI( mFontSize ) ), mStyle( Regular ), mFillColor( 255, 255, 255, 255 ), mOutlineColor( 0, 0, 0, 255 ), @@ -101,8 +101,8 @@ Text::Text() : Text::Text( const String& string, Font* font, unsigned int characterSize ) : mString( string ), mFont( font ), - mCharacterSize( characterSize ), - mRealCharacterSize( PixelDensity::dpToPxI( mCharacterSize ) ), + mFontSize( characterSize ), + mRealFontSize( PixelDensity::dpToPxI( mFontSize ) ), mStyle( Regular ), mFillColor( 255, 255, 255, 255 ), mOutlineColor( 0, 0, 0, 255 ), @@ -115,13 +115,13 @@ Text::Text( const String& string, Font* font, unsigned int characterSize ) : mLargestLineCharCount( 0 ), mFontShadowColor( Color( 0, 0, 0, 255 ) ), mAlign( 0 ), - mFontHeight( mFont->getFontHeight( mRealCharacterSize ) ), + mFontHeight( mFont->getFontHeight( mRealFontSize ) ), mTabWidth( 4 ) {} Text::Text( Font* font, unsigned int characterSize ) : mFont( font ), - mCharacterSize( characterSize ), - mRealCharacterSize( PixelDensity::dpToPxI( mCharacterSize ) ), + mFontSize( characterSize ), + mRealFontSize( PixelDensity::dpToPxI( mFontSize ) ), mStyle( Regular ), mFillColor( 255, 255, 255, 255 ), mOutlineColor( 0, 0, 0, 255 ), @@ -134,15 +134,15 @@ Text::Text( Font* font, unsigned int characterSize ) : mLargestLineCharCount( 0 ), mFontShadowColor( Color( 0, 0, 0, 255 ) ), mAlign( 0 ), - mFontHeight( mFont->getFontHeight( mRealCharacterSize ) ), + mFontHeight( mFont->getFontHeight( mRealFontSize ) ), mTabWidth( 4 ) {} void Text::create( Font* font, const String& text, Color FontColor, Color FontShadowColor, Uint32 characterSize ) { mFont = font; mString = text; - mCharacterSize = characterSize; - mRealCharacterSize = PixelDensity::dpToPxI( mCharacterSize ); + mFontSize = characterSize; + mRealFontSize = PixelDensity::dpToPxI( mFontSize ); setFillColor( FontColor ); setShadowColor( FontShadowColor ); mGeometryNeedUpdate = true; @@ -165,20 +165,20 @@ void Text::setFont( Font* font ) { if ( NULL != font && mFont != font ) { mFont = font; - mRealCharacterSize = PixelDensity::dpToPxI( mCharacterSize ); - mFontHeight = mFont->getFontHeight( mRealCharacterSize ); + mRealFontSize = PixelDensity::dpToPxI( mFontSize ); + mFontHeight = mFont->getFontHeight( mRealFontSize ); mGeometryNeedUpdate = true; mCachedWidthNeedUpdate = true; } } -void Text::setCharacterSize( unsigned int size ) { - if ( NULL != mFont && mCharacterSize != size ) { - mCharacterSize = size; +void Text::setFontSize( unsigned int size ) { + if ( NULL != mFont && mFontSize != size ) { + mFontSize = size; - mRealCharacterSize = PixelDensity::dpToPxI( mCharacterSize ); - mFontHeight = mFont->getFontHeight( mRealCharacterSize ); + mRealFontSize = PixelDensity::dpToPxI( mFontSize ); + mFontHeight = mFont->getFontHeight( mRealFontSize ); mGeometryNeedUpdate = true; mCachedWidthNeedUpdate = true; @@ -230,11 +230,11 @@ Font* Text::getFont() const { } unsigned int Text::getCharacterSize() const { - return mCharacterSize; + return mFontSize; } unsigned int Text::getCharacterSizePx() const { - return mRealCharacterSize; + return mRealFontSize; } const Uint32& Text::getFontHeight() const { @@ -285,23 +285,23 @@ Int32 Text::findCharacterFromPos( const Vector2i& pos ) { if ( NULL == mFont ) return 0; - Float vspace = mFont->getLineSpacing( mRealCharacterSize ); + Float vspace = mFont->getLineSpacing( mRealFontSize ); Float Width = 0, lWidth = 0, Height = vspace, lHeight = 0; Uint32 CharID; Uint32 prevChar = 0; std::size_t tSize = mString.size(); bool bold = ( mStyle & Bold ) != 0; - Float hspace = static_cast( mFont->getGlyph( L' ', mRealCharacterSize, bold ).advance ); + Float hspace = static_cast( mFont->getGlyph( L' ', mRealFontSize, bold ).advance ); for ( std::size_t i = 0; i < tSize; ++i ) { CharID = mString[i]; - Glyph glyph = mFont->getGlyph( CharID, mRealCharacterSize, bold, mOutlineThickness ); + Glyph glyph = mFont->getGlyph( CharID, mRealFontSize, bold, mOutlineThickness ); lWidth = Width; if ( CharID != '\r' && CharID != '\t' ) { - Width += mFont->getKerning( prevChar, CharID, mRealCharacterSize ); + Width += mFont->getKerning( prevChar, CharID, mRealFontSize ); prevChar = CharID; Width += glyph.advance; } @@ -396,14 +396,14 @@ void Text::getWidthInfo( std::vector& LinesWidth, Float& CachedWidth, int LargestLineCharCount = 0; bool bold = ( mStyle & Bold ) != 0; - Float hspace = static_cast( mFont->getGlyph( L' ', mRealCharacterSize, bold ).advance ); + Float hspace = static_cast( mFont->getGlyph( L' ', mRealFontSize, bold ).advance ); for ( std::size_t i = 0; i < mString.size(); ++i ) { CharID = static_cast( mString.at( i ) ); - Glyph glyph = mFont->getGlyph( CharID, mRealCharacterSize, bold, mOutlineThickness ); + Glyph glyph = mFont->getGlyph( CharID, mRealFontSize, bold, mOutlineThickness ); if ( CharID != '\r' && CharID != '\t' ) { - Width += mFont->getKerning( prevChar, CharID, mRealCharacterSize ); + Width += mFont->getKerning( prevChar, CharID, mRealFontSize ); prevChar = CharID; Width += glyph.advance; } @@ -412,7 +412,8 @@ void Text::getWidthInfo( std::vector& LinesWidth, Float& CachedWidth, int if ( CharID == '\t' ) { Width += hspace * mTabWidth; - } if ( CharID == '\n' ) { + } + if ( CharID == '\n' ) { Lines++; LinesWidth.push_back( Width - glyph.advance ); @@ -449,10 +450,10 @@ void Text::shrinkText( const Uint32& MaxWidth ) { Uint32 prevChar = 0; bool bold = ( mStyle & Bold ) != 0; - Float hspace = static_cast( mFont->getGlyph( L' ', mRealCharacterSize, bold ).advance ); + Float hspace = static_cast( mFont->getGlyph( L' ', mRealFontSize, bold ).advance ); while ( *tChar ) { - Glyph pChar = mFont->getGlyph( *tChar, mRealCharacterSize, bold, mOutlineThickness ); + Glyph pChar = mFont->getGlyph( *tChar, mRealFontSize, bold, mOutlineThickness ); Float fCharWidth = (Float)pChar.advance; @@ -465,7 +466,7 @@ void Text::shrinkText( const Uint32& MaxWidth ) { tWordWidth += fCharWidth; if ( *tChar != '\r' ) { - tWordWidth += mFont->getKerning( prevChar, *tChar, mRealCharacterSize ); + tWordWidth += mFont->getKerning( prevChar, *tChar, mRealFontSize ); prevChar = *tChar; } @@ -553,7 +554,7 @@ Float Text::getTextHeight() { cacheWidth(); return NULL != mFont - ? mFont->getLineSpacing( mRealCharacterSize ) * ( 0 == mNumLines ? 1 : mNumLines ) + ? mFont->getLineSpacing( mRealFontSize ) * ( 0 == mNumLines ? 1 : mNumLines ) : 0; } @@ -570,7 +571,7 @@ void Text::draw( const Float& X, const Float& Y, const Vector2f& Scale, const Fl return; GlobalBatchRenderer::instance()->draw(); - TextureFactory::instance()->bind( mFont->getTexture( mRealCharacterSize ), + TextureFactory::instance()->bind( mFont->getTexture( mRealFontSize ), Texture::CoordinateType::Pixels ); BlendMode::setMode( Effect ); @@ -694,24 +695,24 @@ void Text::ensureGeometryUpdate() { bool underlined = ( mStyle & Underlined ) != 0; bool strikeThrough = ( mStyle & StrikeThrough ) != 0; Float italic = ( mStyle & Italic ) ? 0.208f : 0.f; // 12 degrees - Float underlineOffset = mFont->getUnderlinePosition( mRealCharacterSize ); - Float underlineThickness = mFont->getUnderlineThickness( mRealCharacterSize ); + Float underlineOffset = mFont->getUnderlinePosition( mRealFontSize ); + Float underlineThickness = mFont->getUnderlineThickness( mRealFontSize ); // Compute the location of the strike through dynamically // We use the center point of the lowercase 'x' glyph as the reference // We reuse the underline thickness as the thickness of the strike through as well - Rectf xBounds = mFont->getGlyph( L'x', mRealCharacterSize, bold ).bounds; + Rectf xBounds = mFont->getGlyph( L'x', mRealFontSize, bold ).bounds; Float strikeThroughOffset = xBounds.Top + xBounds.Bottom / 2.f; // Precompute the variables needed by the algorithm - Float hspace = static_cast( mFont->getGlyph( L' ', mRealCharacterSize, bold ).advance ); - Float vspace = static_cast( mFont->getLineSpacing( mRealCharacterSize ) ); + Float hspace = static_cast( mFont->getGlyph( L' ', mRealFontSize, bold ).advance ); + Float vspace = static_cast( mFont->getLineSpacing( mRealFontSize ) ); Float x = 0.f; - Float y = static_cast( mRealCharacterSize ); + Float y = static_cast( mRealFontSize ); // Create one quad for each character - Float minX = static_cast( mRealCharacterSize ); - Float minY = static_cast( mRealCharacterSize ); + Float minX = static_cast( mRealFontSize ); + Float minY = static_cast( mRealFontSize ); Float maxX = 0.f; Float maxY = 0.f; Uint32 prevChar = 0; @@ -734,7 +735,7 @@ void Text::ensureGeometryUpdate() { Uint32 curChar = mString[i]; // Apply the kerning offset - x += mFont->getKerning( prevChar, curChar, mRealCharacterSize ); + x += mFont->getKerning( prevChar, curChar, mRealFontSize ); prevChar = curChar; // If we're using the underlined style and there's a new line, draw a line @@ -777,7 +778,7 @@ void Text::ensureGeometryUpdate() { minX = std::min( minX, x ); minY = std::min( minY, y ); - mGlyphPos.push_back( Vector2f( x, y - mRealCharacterSize ) ); + mGlyphPos.push_back( Vector2f( x, y - mRealFontSize ) ); switch ( curChar ) { case ' ': @@ -804,8 +805,7 @@ void Text::ensureGeometryUpdate() { // Apply the outline if ( mOutlineThickness != 0 ) { - const Glyph& glyph = - mFont->getGlyph( curChar, mRealCharacterSize, bold, mOutlineThickness ); + const Glyph& glyph = mFont->getGlyph( curChar, mRealFontSize, bold, mOutlineThickness ); Float left = glyph.bounds.Left; Float top = glyph.bounds.Top; @@ -824,7 +824,7 @@ void Text::ensureGeometryUpdate() { } // Extract the current glyph's description - const Glyph& glyph = mFont->getGlyph( curChar, mRealCharacterSize, bold ); + const Glyph& glyph = mFont->getGlyph( curChar, mRealFontSize, bold ); // Add the glyph to the vertices addGlyphQuad( mVertices, Vector2f( x, y ), glyph, italic, 0, centerDiffX ); @@ -842,13 +842,13 @@ void Text::ensureGeometryUpdate() { maxY = std::max( maxY, y + bottom ); } - mGlyphPos.push_back( Vector2f( x, y - mRealCharacterSize ) ); + mGlyphPos.push_back( Vector2f( x, y - mRealFontSize ) ); // Advance to the next character x += glyph.advance; } - mGlyphPos.push_back( Vector2f( x, y - mRealCharacterSize ) ); + mGlyphPos.push_back( Vector2f( x, y - mRealFontSize ) ); // If we're using the underlined style, add the last line if ( underlined && ( x > 0 ) ) { @@ -940,7 +940,7 @@ void Text::cacheWidth() { void Text::setStyleConfig( const FontStyleConfig& styleConfig ) { setFont( styleConfig.Font ); - setCharacterSize( styleConfig.CharacterSize ); + setFontSize( styleConfig.CharacterSize ); setFillColor( styleConfig.FontColor ); setStyle( styleConfig.Style ); setOutlineThickness( styleConfig.OutlineThickness ); diff --git a/src/eepp/ui/uinode.cpp b/src/eepp/ui/uinode.cpp index 31c6685b6..8eba11856 100644 --- a/src/eepp/ui/uinode.cpp +++ b/src/eepp/ui/uinode.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -1173,9 +1174,82 @@ Uint32 UINode::onFocusLoss() { } Float UINode::convertLength( const CSS::StyleSheetLength& length, const Float& containerLength ) { - // TODO: Fix asPixels parameters + Float elFontSize = 12; + Float rootFontSize = 12; + + if ( length.getUnit() == CSS::StyleSheetLength::Unit::Rem ) { + if ( getUISceneNode() != NULL ) { + std::string fontSizeStr( getUISceneNode()->getRoot()->getPropertyString( + CSS::StyleSheetSpecification::instance()->getProperty( + (Uint32)PropertyId::FontSize ) ) ); + if ( !fontSizeStr.empty() ) { + Float num; + if ( String::fromString( num, fontSizeStr ) ) { + rootFontSize = num; + } + } else if ( NULL != getUISceneNode() && + NULL != getUISceneNode()->getUIThemeManager() ) { + UIThemeManager* themeManager = getUISceneNode()->getUIThemeManager(); + if ( NULL != themeManager->getDefaultTheme() ) { + rootFontSize = getUISceneNode() + ->getUIThemeManager() + ->getDefaultTheme() + ->getDefaultFontSize(); + } else { + rootFontSize = themeManager->getDefaultFontSize(); + } + } + } + } else if ( length.getUnit() == CSS::StyleSheetLength::Unit::Em ) { + if ( isWidget() ) { + std::string fontSizeStr( asType()->getPropertyString( + CSS::StyleSheetSpecification::instance()->getProperty( + (Uint32)PropertyId::FontSize ) ) ); + if ( !fontSizeStr.empty() ) { + Float num; + if ( String::fromString( num, fontSizeStr ) ) { + elFontSize = num; + } + } else { + Node* node = getParent(); + + while ( NULL != node ) { + if ( node->isWidget() ) { + std::string fontSizeStr( node->asType()->getPropertyString( + CSS::StyleSheetSpecification::instance()->getProperty( + (Uint32)PropertyId::FontSize ) ) ); + if ( !fontSizeStr.empty() ) { + Float num; + if ( String::fromString( num, fontSizeStr ) ) { + elFontSize = num; + break; + } + } + } + + node = node->getParent(); + } + + if ( node == NULL ) { + if ( NULL != getUISceneNode() && + NULL != getUISceneNode()->getUIThemeManager() ) { + UIThemeManager* themeManager = getUISceneNode()->getUIThemeManager(); + if ( NULL != themeManager->getDefaultTheme() ) { + elFontSize = getUISceneNode() + ->getUIThemeManager() + ->getDefaultTheme() + ->getDefaultFontSize(); + } else { + elFontSize = themeManager->getDefaultFontSize(); + } + } + } + } + } + } + return length.asPixels( containerLength, getSceneNode()->getPixelsSize(), - getSceneNode()->getDPI(), 12, 12 ); + getSceneNode()->getDPI(), elFontSize, rootFontSize ); } Float UINode::convertLengthAsDp( const CSS::StyleSheetLength& length, diff --git a/src/eepp/ui/uitextinput.cpp b/src/eepp/ui/uitextinput.cpp index 16d712ab4..24d2862fa 100644 --- a/src/eepp/ui/uitextinput.cpp +++ b/src/eepp/ui/uitextinput.cpp @@ -621,7 +621,7 @@ Uint32 UITextInput::getHintCharacterSize() const { UITextView* UITextInput::setHintCharacterSize( const Uint32& characterSize ) { if ( mHintCache->getCharacterSize() != characterSize ) { - mHintCache->setCharacterSize( characterSize ); + mHintCache->setFontSize( characterSize ); mHintStyleConfig.CharacterSize = characterSize; invalidateDraw(); } diff --git a/src/eepp/ui/uitextinputpassword.cpp b/src/eepp/ui/uitextinputpassword.cpp index 4394170b4..b1aeff627 100644 --- a/src/eepp/ui/uitextinputpassword.cpp +++ b/src/eepp/ui/uitextinputpassword.cpp @@ -147,7 +147,7 @@ Text* UITextInputPassword::getPassCache() const { } void UITextInputPassword::updateFontStyleConfig() { - mPassCache->setCharacterSize( mFontStyleConfig.CharacterSize ); + mPassCache->setFontSize( mFontStyleConfig.CharacterSize ); mPassCache->setFont( mFontStyleConfig.getFont() ); mPassCache->setFillColor( mFontStyleConfig.getFontColor() ); mPassCache->setShadowColor( mFontStyleConfig.getFontShadowColor() ); diff --git a/src/eepp/ui/uitextview.cpp b/src/eepp/ui/uitextview.cpp index 851893736..8fe9ff686 100644 --- a/src/eepp/ui/uitextview.cpp +++ b/src/eepp/ui/uitextview.cpp @@ -39,11 +39,18 @@ UITextView::UITextView( const std::string& tag ) : setFont( theme->getDefaultFont() ); } + if ( NULL != theme ) { + setFontSize( theme->getDefaultFontSize() ); + } else { + mTextCache->setFontSize( getUISceneNode()->getUIThemeManager()->getDefaultFontSize() ); + } + if ( NULL == getFont() ) { - if ( NULL != getUISceneNode()->getUIThemeManager()->getDefaultFont() ) + if ( NULL != getUISceneNode()->getUIThemeManager()->getDefaultFont() ) { setFont( getUISceneNode()->getUIThemeManager()->getDefaultFont() ); - else + } else { eePRINTL( "UITextView::UITextView : Created a without a defined font." ); + } } alignFix(); @@ -113,10 +120,10 @@ Uint32 UITextView::getCharacterSize() const { return mTextCache->getCharacterSize(); } -UITextView* UITextView::setCharacterSize( const Uint32& characterSize ) { +UITextView* UITextView::setFontSize( const Uint32& characterSize ) { if ( mTextCache->getCharacterSize() != characterSize ) { mFontStyleConfig.CharacterSize = characterSize; - mTextCache->setCharacterSize( characterSize ); + mTextCache->setFontSize( characterSize ); recalculate(); onFontStyleChanged(); notifyLayoutAttrChange(); @@ -510,7 +517,7 @@ const UIFontStyleConfig& UITextView::getFontStyleConfig() const { void UITextView::setFontStyleConfig( const UIFontStyleConfig& fontStyleConfig ) { mFontStyleConfig = fontStyleConfig; setFont( fontStyleConfig.getFont() ); - setCharacterSize( fontStyleConfig.getFontCharacterSize() ); + setFontSize( fontStyleConfig.getFontCharacterSize() ); setFontColor( fontStyleConfig.getFontColor() ); setFontShadowColor( fontStyleConfig.getFontShadowColor() ); setOutlineThickness( fontStyleConfig.getOutlineThickness() ); @@ -615,7 +622,7 @@ bool UITextView::applyProperty( const StyleSheetProperty& attribute ) { break; } case PropertyId::FontSize: - setCharacterSize( attribute.asDpDimensionI() ); + setFontSize( attribute.asDpDimensionI() ); break; case PropertyId::FontStyle: { Uint32 flags = attribute.asFontStyle(); diff --git a/src/eepp/ui/uitheme.cpp b/src/eepp/ui/uitheme.cpp index 6903741cc..a7a56c1b7 100644 --- a/src/eepp/ui/uitheme.cpp +++ b/src/eepp/ui/uitheme.cpp @@ -258,7 +258,8 @@ UITheme::UITheme( const std::string& name, const std::string& Abbr, Graphics::Fo mNameHash( String::hash( mName ) ), mAbbr( Abbr ), mTextureAtlas( NULL ), - mDefaultFont( defaultFont ) {} + mDefaultFont( defaultFont ), + mDefaultFontSize( 12 ) {} UITheme::~UITheme() {} @@ -310,6 +311,14 @@ void UITheme::setStyleSheet( const CSS::StyleSheet& styleSheet ) { mStyleSheet = styleSheet; } +const Float& UITheme::getDefaultFontSize() const { + return mDefaultFontSize; +} + +void UITheme::setDefaultFontSize( const Float& defaultFontSize ) { + mDefaultFontSize = defaultFontSize; +} + Font* UITheme::getDefaultFont() const { return mDefaultFont; } diff --git a/src/eepp/ui/uithememanager.cpp b/src/eepp/ui/uithememanager.cpp index 6027cc61e..d0fb3298c 100644 --- a/src/eepp/ui/uithememanager.cpp +++ b/src/eepp/ui/uithememanager.cpp @@ -10,6 +10,7 @@ UIThemeManager* UIThemeManager::New() { UIThemeManager::UIThemeManager() : ResourceManager( true ), mFont( NULL ), + mFontSize( 12 ), mThemeDefault( NULL ), mAutoApplyDefaultTheme( true ), mEnableDefaultEffects( false ), @@ -35,6 +36,15 @@ Font* UIThemeManager::getDefaultFont() const { return mFont; } +UIThemeManager* UIThemeManager::setDefaultFontSize( const Float& fontSize ) { + mFontSize = fontSize; + return this; +} + +const Float& UIThemeManager::getDefaultFontSize() const { + return mFontSize; +} + UIThemeManager* UIThemeManager::setDefaultTheme( UITheme* Theme ) { mThemeDefault = Theme; diff --git a/src/eepp/ui/uitooltip.cpp b/src/eepp/ui/uitooltip.cpp index 99b9898a1..41c377d87 100644 --- a/src/eepp/ui/uitooltip.cpp +++ b/src/eepp/ui/uitooltip.cpp @@ -261,7 +261,7 @@ Uint32 UITooltip::getCharacterSize() const { UITooltip* UITooltip::setCharacterSize( const Uint32& characterSize ) { if ( mTextCache->getCharacterSize() != characterSize ) { mStyleConfig.CharacterSize = characterSize; - mTextCache->setCharacterSize( characterSize ); + mTextCache->setFontSize( characterSize ); onAutoSize(); autoAlign(); invalidateDraw(); @@ -321,7 +321,7 @@ void UITooltip::setFontStyleConfig( const UIFontStyleConfig& styleConfig ) { setFont( mStyleConfig.Font ); setFontColor( mStyleConfig.FontColor ); setFontShadowColor( mStyleConfig.ShadowColor ); - mTextCache->setCharacterSize( mStyleConfig.CharacterSize ); + mTextCache->setFontSize( mStyleConfig.CharacterSize ); mTextCache->setStyle( mStyleConfig.Style ); mTextCache->setOutlineThickness( mStyleConfig.OutlineThickness ); mTextCache->setOutlineColor( mStyleConfig.OutlineColor ); diff --git a/src/eepp/ui/uiwidget.cpp b/src/eepp/ui/uiwidget.cpp index ee61e8b9a..fbdd1e292 100644 --- a/src/eepp/ui/uiwidget.cpp +++ b/src/eepp/ui/uiwidget.cpp @@ -264,7 +264,9 @@ Uint32 UIWidget::onMouseOver( const Vector2i& position, const Uint32& flags ) { EventDispatcher* eventDispatcher = getEventDispatcher(); if ( NULL != eventDispatcher && eventDispatcher->getOverControl() == this ) { - updateDebugData(); + if ( NULL != mSceneNode && mSceneNode->getDrawDebugData() ) { + updateDebugData(); + } if ( mVisible && NULL != mTooltip && !mTooltip->getText().empty() ) { UIThemeManager* themeManager = getUISceneNode()->getUIThemeManager(); @@ -279,7 +281,7 @@ Uint32 UIWidget::onMouseOver( const Vector2i& position, const Uint32& flags ) { } else { runAction( Actions::Runnable::New( [&] { - if ( isMouseOver() ) { + if ( getEventDispatcher()->getOverControl() == this ) { mTooltip->setPixelsPosition( getTooltipPosition() ); mTooltip->show(); } @@ -331,6 +333,9 @@ String UIWidget::getTooltipText() { } void UIWidget::tooltipRemove() { + if ( NULL != mTooltip ) { + mTooltip->close(); + } mTooltip = NULL; } diff --git a/src/examples/fonts/fonts.cpp b/src/examples/fonts/fonts.cpp index f0db6ab04..1ecc19e07 100644 --- a/src/examples/fonts/fonts.cpp +++ b/src/examples/fonts/fonts.cpp @@ -64,7 +64,7 @@ EE_MAIN_FUNC int main( int argc, char* argv[] ) { fontTest->loadFromFile( "assets/fonts/DejaVuSansMono.ttf" ); text.setFont( fontTest ); - text.setCharacterSize( 24 ); + text.setFontSize( 24 ); text.setAlign( TEXT_ALIGN_CENTER ); text.setString( Txt ); text.shrinkText( win->getWidth() - 96 ); @@ -82,13 +82,13 @@ EE_MAIN_FUNC int main( int argc, char* argv[] ) { text2.setFont( fontTest2 ); text2.setString( "Lorem ipsum dolor sit amet, consectetur adipisicing elit." ); - text2.setCharacterSize( 32 ); + text2.setFontSize( 32 ); text2.setFillColor( Color::Black ); text3.setFont( fontTest ); text3.setString( text2.getString() ); text3.setOutlineThickness( 2 ); - text3.setCharacterSize( 24 ); + text3.setFontSize( 24 ); text3.setFillColor( Color( 255, 255, 255, 255 ) ); text3.setOutlineColor( Color( 0, 0, 0, 255 ) ); @@ -97,7 +97,7 @@ EE_MAIN_FUNC int main( int argc, char* argv[] ) { text4.setFont( fontBMFont ); text4.setString( "Lorem ipsum dolor sit amet, consectetur adipisicing elit." ); - text4.setCharacterSize( 45 ); + text4.setFontSize( 45 ); text4.setFillColor( Color::Black ); fontSprite = FontSprite::New( @@ -106,7 +106,7 @@ EE_MAIN_FUNC int main( int argc, char* argv[] ) { text5.setFont( fontSprite ); text5.setString( "Lorem ipsum dolor sit amet, consectetur adipisicing elit." ); - text5.setCharacterSize( 38 ); + text5.setFontSize( 38 ); // Application loop win->runMainLoop( &mainLoop );