第二人生的源码分析(九十四)LLTextBox类实现文

系统 1473 0
在登录的画面里,可以看到程序的版本显示,那么它是怎么样显示出来的呢?现在就来分析显示这个版本号的代码,其实它是由静态文本显示框 LLTextBox来显示的。比如在登录时创建版本显示的代码如下:
 
这里就是创建静态文本框。
#001 LLTextBox* version_text = LLUICtrlFactory::getTextBoxByName(this, "version_text");
 
下面是先格式化再显示版本字符串。
#002     if (version_text)
#003     {
#004         LLString version = llformat("%d.%d.%d (%d)",
#005             LL_VERSION_MAJOR,
#006             LL_VERSION_MINOR,
#007             LL_VERSION_PATCH,
#008             LL_VIEWER_BUILD );
#009         version_text->setText(version);
#010         version_text->setClickedCallback(onClickVersion);
#011         version_text->setCallbackUserData(this);
#012     }
 
LLTextBox类的继承关系代码如下:
class LLTextBox
:     public LLUICtrl
 
接着来分析一下它的显示代码,如下:
#001 void LLTextBox::draw()
#002 {
 
查看是否可以显示。
#003     if( getVisible() )
#004     {
 
是否显示边框。
#005         if (mBorderVisible)
#006         {
#007             gl_rect_2d_offset_local(getLocalRect(), 2, FALSE);
#008         }
#009 
 
是否显示边框为阴影方式。
#010         if( mBorderDropShadowVisible )
#011         {
#012             static LLColor4 color_drop_shadow = LLUI::sColorsGroup->getColor("ColorDropShadow");
#013             static S32 drop_shadow_tooltip = LLUI::sConfigGroup->getS32("DropShadowTooltip");
#014             gl_drop_shadow(0, getRect().getHeight(), getRect().getWidth(), 0,
#015                 color_drop_shadow, drop_shadow_tooltip);
#016         }
#017    
 
背景是否可见。
#018         if (mBackgroundVisible)
#019         {
#020             LLRect r( 0, getRect().getHeight(), getRect().getWidth(), 0 );
#021             gl_rect_2d( r, mBackgroundColor );
#022         }
#023  
 
显示字符串的对齐方式。
#024         S32 text_x = 0;
#025         switch( mHAlign )
#026         {
#027         case LLFontGL::LEFT:   
#028             text_x = mHPad;                    
#029             break;
#030         case LLFontGL::HCENTER:
#031             text_x = getRect().getWidth() / 2;
#032             break;
#033         case LLFontGL::RIGHT:
#034             text_x = getRect().getWidth() - mHPad;
#035             break;
#036         }
#037 
 
计算字符串显示的高度。
#038         S32 text_y = getRect().getHeight() - mVPad;
#039 
#040         if ( getEnabled() )
#041         {
 
是否有鼠标在上面,而显示不同的颜色。
#042             if(mHasHover)
#043             {
#044                 drawText( text_x, text_y, mHoverColor );
#045             }
#046             else
#047             {
#048                 drawText( text_x, text_y, mTextColor );
#049             }              
#050         }
#051         else
#052         {
#053             drawText( text_x, text_y, mDisabledColor );
#054         }
#055 
 
是否调试输出窗口。
#056         if (sDebugRects)
#057         {
#058             drawDebugRect();
#059         }
#060     }
#061 
#062     mHasHover = FALSE; // This is reset every frame.
#063 }
 
上面这个函数先显示边框,然后显示背景,最后显示字符串出来,这样就实现了静态的文本显示。

第二人生的源码分析(九十四)LLTextBox类实现文本显示


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论