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

在登录的画面里,可以看到程序的版本显示,那么它是怎么样显示出来的呢?现在就来分析显示这个版本号的代码,其实它是由静态文本显示框 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 }
 
上面这个函数先显示边框,然后显示背景,最后显示字符串出来,这样就实现了静态的文本显示。

转载于:https://www.cnblogs.com/ajuanabc/archive/2008/06/18/2464049.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
用STM32F103RBT6芯片 开发的 PLC文本器 与信捷文本器功能相同 功能按键的基本功能如下表: 按键 基本功能 [ESC] 不论显示器处于显示任何画面,一旦按此键,返回系统初始画面。系统初 始画面由用户设计画面时指定(缺省值为1号画面,0号画面禁用)。一般将 系统初始画面设置成主菜单或使用频度最高的画面。 [ALM] 一旦按此键,返回系统自动切换到定义的报警信息画面,也可定义为功能按 键使用。 [←] 修改寄存器数据时,左移被修改的数据位,即闪烁显示数字左移一位. [→] 修改寄存器数据时,右移被修改的数据位,即闪烁显示数字右移一位. [↑] 将画面翻转到前页,前页画面号由用户在画面属性中指定(缺省值为当前画 面号-1) 如果在数据设定状态,被修改的数字位加1,递增范围:0—>9—>0 [↓] 将画面翻转到次页,次页画面号由用户在画面属性中指定(缺省值为当前画 面号+1) 如果在数据设定状态,被修改的数字位减1,递减范围:9—>0—>9 [SET] 按此键开始修改寄存器数值,当前正在被修改的寄存器窗反色显示,其中 被修改的位数闪烁显示。如果当前画面没有寄存器设定窗部件,则执行一次空操作。在按[ENT]键之前再按一次[SET]键,则当前修改操作被取消, 并继续修改下一个数据寄存器。 注意:SET键设定寄存器具有最高优先级,不能被用户功能键定义所屏蔽。 [ENT] 用户使用了加密功能的情况下,按此键弹出口令设定画面。 在寄存器设定状态下,将修改后的数据写入寄存器,并继续修改下一个数 据寄存器。当前画面的最后一个寄存器被修改后,退出修改寄存器状态。 SET 详细信息: 显示屏:3.7"STN 液晶屏 分辨率:192 × 64 像素(支持4行×12中文字符显示) LCM型:蓝屏 LCM显示效果:蓝屏为蓝底白字,配白光 LCM寿命:25±2℃、65±10%RH条件下50000小时以上 亮度:60 cd/m2 色彩:单色 对比度:电位器调节 背光灯:长寿命LED白光 CPU:8位处理器 存储器 64KB Flash ROM 配方记忆体:无 通信端口:COM1: PC RS232 & PLC RS485/422 & PLC RS232 功能按键:20个可自由定义 实时时钟:无 打印端口:无 允许掉电:20ms以内 一般规格 供电电源:12~24 VDC ±10% <150mA @ 24VDC 抗干扰测试:电压1500Vp-p,脉冲周期1us,持续1s 耐压测试:500 V AC 1分钟 绝缘电阻:超过 10M 欧姆 @ 500V DC 防震测试:10 ~ 25 Hz (X、Y、Z方向 2G 30分钟) 防护等级:IP65 ( 前面板 ) 工作环境温度:0 ~ 50 ℃ 工作环境湿度:20 ~ 90 % RH (非冷凝) 储存温度:d-20℃ ~ 70℃ 

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值