osgEarth 2.1.1
Public Member Functions | Private Attributes

osgEarth::Util::Controls::LabelControl Class Reference

Inheritance diagram for osgEarth::Util::Controls::LabelControl:
Collaboration diagram for osgEarth::Util::Controls::LabelControl:

List of all members.

Public Member Functions

 LabelControl (const std::string &value="", float fontSize=18.0f, const osg::Vec4f &foreColor=osg::Vec4f(1, 1, 1, 1))
 LabelControl (const std::string &value, const osg::Vec4f &foreColor)
void setText (const std::string &value)
const std::string & text () const
void setFont (osgText::Font *font)
osgText::Font * font () const
void setFontSize (float value)
float fontSize () const
void setHaloColor (const osg::Vec4f &value)
const optional< osg::Vec4f > & haloColor () const
virtual void calcSize (const ControlContext &context, osg::Vec2f &out_size)
virtual void draw (const ControlContext &context, DrawableList &out_drawables)

Private Attributes

std::string _text
osg::ref_ptr< osgText::Font > _font
float _fontSize
osg::ref_ptr< osgText::Text > _drawable
osg::Vec3 _bmin
osg::Vec3 _bmax
optional< osg::Vec4f > _haloColor

Detailed Description

Control that contains a text string, obviously

Definition at line 264 of file Controls.


Constructor & Destructor Documentation

LabelControl::LabelControl ( const std::string &  value = "",
float  fontSize = 18.0f,
const osg::Vec4f &  foreColor = osg::Vec4f(1,1,1,1) 
)

Definition at line 466 of file Controls.cpp.

{
    setText( text );
    setFont( osgText::readFontFile( "arial.ttf" ) ); // TODO: cache this?
    setFontSize( fontSize );
    setBackColor( osg::Vec4f(0,0,0,0) );
    setForeColor( foreColor );
}

Here is the call graph for this function:

LabelControl::LabelControl ( const std::string &  value,
const osg::Vec4f &  foreColor 
)

Definition at line 477 of file Controls.cpp.

{
    setText( text );
    setFont( osgText::readFontFile( "arial.ttf" ) ); // TODO: cache this?
    setFontSize( 18.0f );
    setBackColor( osg::Vec4f(0,0,0,0) );
    setForeColor( foreColor );
}

Here is the call graph for this function:


Member Function Documentation

void LabelControl::calcSize ( const ControlContext context,
osg::Vec2f &  out_size 
) [virtual]

Reimplemented from osgEarth::Util::Controls::Control.

Definition at line 524 of file Controls.cpp.

{
    if ( visible() == true )
    {
        // we have to create the drawable during the layout pass so we can calculate its size.
        LabelText* t = new LabelText();

#if 1
        // needs a special shader
        // todo: doesn't work. why?
        osg::Program* program = new osg::Program();
        program->addShader( new osg::Shader( osg::Shader::VERTEX, s_controlVertexShader ) );
        program->addShader( new osg::Shader( osg::Shader::FRAGMENT, s_labelControlFragmentShader ) );
        t->getOrCreateStateSet()->setAttributeAndModes( program, osg::StateAttribute::ON );
#endif

        t->setText( _text );
        // yes, object coords. screen coords won't work becuase the bounding box will be wrong.
        t->setCharacterSizeMode( osgText::Text::OBJECT_COORDS );
        t->setCharacterSize( _fontSize );
        // always align to top. layout alignment gets calculated layer in Control::calcPos().
        t->setAlignment( osgText::Text::LEFT_TOP ); 
        t->setColor( foreColor().value() );
        if ( _font.valid() )
            t->setFont( _font.get() );

        if ( haloColor().isSet() )
        {
            t->setBackdropType( osgText::Text::OUTLINE );
            t->setBackdropOffset( 0.03 );
            t->setBackdropColor( haloColor().value() );
        }

        osg::BoundingBox bbox = t->getTextBB();
        if ( cx._viewContextID != ~0u )
        {
            //the Text's autoTransformCache matrix puts some mojo on the bounding box
            osg::Matrix m = t->getATMatrix( cx._viewContextID );
            _bmin = osg::Vec3( bbox.xMin(), bbox.yMin(), bbox.zMin() ) * m;
            _bmax = osg::Vec3( bbox.xMax(), bbox.yMax(), bbox.zMax() ) * m;
        }
        else
        {
            _bmin = osg::Vec3( bbox.xMin(), bbox.yMin(), bbox.zMin() );
            _bmax = osg::Vec3( bbox.xMax(), bbox.yMax(), bbox.zMax() );
        }

        _renderSize.set(
            (_bmax.x() - _bmin.x()) + padding().x(),
            (_bmax.y() - _bmin.y()) + padding().y() );

        _drawable = t;

        out_size.set(
            margin().x() + _renderSize.x(),
            margin().y() + _renderSize.y() );
    }
    else
    {
        out_size.set(0,0);
    }

    //_dirty = false;
}

Here is the call graph for this function:

void LabelControl::draw ( const ControlContext context,
DrawableList out_drawables 
) [virtual]

Reimplemented from osgEarth::Util::Controls::Control.

Definition at line 590 of file Controls.cpp.

{
    if ( _drawable.valid() && visible() == true )
    {
        Control::draw( cx, out );

        float vph = cx._vp->height(); // - padding().bottom();

        LabelText* t = static_cast<LabelText*>( _drawable.get() );
        osg::BoundingBox bbox = t->getTextBB();
        t->setPosition( osg::Vec3( _renderPos.x(), vph - _renderPos.y(), 0 ) );
        out.push_back( _drawable.get() );
    }
}

Here is the call graph for this function:

osgText::Font* osgEarth::Util::Controls::LabelControl::font ( ) const [inline]

Definition at line 280 of file Controls.

{ return _font.get(); }
float osgEarth::Util::Controls::LabelControl::fontSize ( ) const [inline]

Definition at line 283 of file Controls.

{ return _fontSize; }
const optional<osg::Vec4f>& osgEarth::Util::Controls::LabelControl::haloColor ( ) const [inline]

Definition at line 286 of file Controls.

{ return _haloColor; }

Here is the caller graph for this function:

void LabelControl::setFont ( osgText::Font *  font)

Definition at line 497 of file Controls.cpp.

{
    if ( value != _font.get() ) {
        _font = value;
        dirty();
    }
}

Here is the call graph for this function:

Here is the caller graph for this function:

void LabelControl::setFontSize ( float  value)

Definition at line 506 of file Controls.cpp.

{
    if ( value != _fontSize ) {
        _fontSize = value;
        dirty();
    }
}

Here is the call graph for this function:

Here is the caller graph for this function:

void LabelControl::setHaloColor ( const osg::Vec4f &  value)

Definition at line 515 of file Controls.cpp.

{
    if ( !_haloColor.isSet() || *_haloColor != value ) {
        _haloColor = value;
        dirty();
    }
}

Here is the call graph for this function:

Here is the caller graph for this function:

void LabelControl::setText ( const std::string &  value)

Definition at line 488 of file Controls.cpp.

{
    if ( value != _text ) {
        _text = value;
        dirty();
    }
}

Here is the call graph for this function:

Here is the caller graph for this function:

const std::string& osgEarth::Util::Controls::LabelControl::text ( ) const [inline]

Definition at line 277 of file Controls.

{ return _text; }

Member Data Documentation

Definition at line 298 of file Controls.

Definition at line 298 of file Controls.

osg::ref_ptr<osgText::Text> osgEarth::Util::Controls::LabelControl::_drawable [private]

Definition at line 297 of file Controls.

osg::ref_ptr<osgText::Font> osgEarth::Util::Controls::LabelControl::_font [private]

Definition at line 295 of file Controls.

Definition at line 296 of file Controls.

Definition at line 299 of file Controls.

Definition at line 294 of file Controls.


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines