Hi Nikolov,

What does  
"http://www.linkedin.com/in/tnick<http://www.linkedin.com/in/tnick>Sent
from Devlet, Ankara, Turkey " mean. Is this undefined spam type?  Your
location changing too fast. I am crious because I am from Turkey, too :D

Regards.

Ümit Uzun


2010/1/15 Jean-Sébastien Guay <jean-sebastien.g...@cm-labs.com>

> Hi Nick,
>
>
>  However, I started the osgwidgetinput example and for some reason it is
>> not getting my input from the keyboard.
>>
>
> This is the same problem I noticed in other osgWidget classes lately.
> Someone changed the signature of virtual methods in the EventInterface class
> (which Widget inherits and thus, all other Widgets too) adding a const, but
> didn't change the signature of methods that are supposed to overload those
> virtual methods in derived classes. So for example, EventInterface defines:
>
> virtual bool keyDown (int, int, const WindowManager*) { return false; }
> virtual bool keyUp   (int, int, const WindowManager*) { return false; }
>
> but Input defines:
>
> virtual bool keyUp   (int, int, WindowManager*);
> virtual bool keyDown (int, int, WindowManager*);
>
> So there is no compile error, but the base class methods are called instead
> of the derived class methods because their argument lists don't match.
>
> Here's the change for Input. It would be nice to go across all osgWidget
> classes and fix this if you have the time. I already did it for Frame a week
> or so ago, and this fixes Input, but there are bound to be more.
>
> Hope this helps,
>
> J-S
> --
> ______________________________________________________
> Jean-Sebastien Guay    jean-sebastien.g...@cm-labs.com
>                               http://www.cm-labs.com/
>                        http://whitestar02.webhop.org/
>
> /* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2008 Robert Osfield
>  *
>  * This library is open source and may be redistributed and/or modified
> under
>  * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
>  * (at your option) any later version.  The full license is in LICENSE file
>  * included with this distribution, and on the openscenegraph.org website.
>  *
>  * This library is distributed in the hope that it will be useful,
>  * but WITHOUT ANY WARRANTY; without even the implied warranty of
>  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>  * OpenSceneGraph Public License for more details.
> */
>
> // Code by: Jeremy Moles (cubicool) 2007-2008
>
> #ifndef OSGWIDGET_INPUT
> #define OSGWIDGET_INPUT
>
> #include <osgWidget/Label>
>
> namespace osgWidget {
>
> // This is a string of values we use to try and determine the best Y
> // descent value (yoffset); you're welcome to use what works best for
> // your font.
> const std::string DESCENT_STRING("qpl");
>
> class OSGWIDGET_EXPORT Input: public Label
> {
>    public:
>
>        Input(const std::string& = "", const std::string& = "", unsigned int
> = 20);
>
>        virtual void parented   (Window*);
>        virtual void positioned ();
>
>        virtual bool focus   (const WindowManager*);
>        virtual bool unfocus (const WindowManager*);
>        virtual bool keyUp   (int, int, const WindowManager*);
>        virtual bool keyDown (int, int, const WindowManager*);
>
>        void         setCursor            (Widget*);
>        unsigned int calculateBestYOffset (const std::string& = "qgl");
>
>        void setXOffset(point_type xo) {
>            _xoff = xo;
>        }
>
>        void setYOffset(point_type yo) {
>            _yoff = yo;
>        }
>
>        void setXYOffset(point_type xo, point_type yo) {
>            _xoff = xo;
>            _yoff = yo;
>        }
>
>        osg::Drawable* getCursor() {
>            return _cursor.get();
>        }
>
>        const osg::Drawable* getCursor() const {
>            return _cursor.get();
>        }
>
>        point_type getXOffset() const {
>            return _xoff;
>        }
>
>        point_type getYOffset() const {
>            return _yoff;
>        }
>
>        XYCoord getXYOffset() const {
>            return XYCoord(_xoff, _yoff);
>        }
>
>    protected:
>        virtual void _calculateSize(const XYCoord&);
>
>        void _calculateCursorOffsets();
>
>        point_type _xoff;
>        point_type _yoff;
>
>        unsigned int _index;
>        unsigned int _size;
>        unsigned int _cursorIndex;
>        unsigned int _maxSize;
>
>        std::vector<point_type> _offsets;
>        osg::ref_ptr<Widget>    _cursor;
> };
>
> }
>
> #endif
>
> // -*-c++-*- osgWidget - Code by: Jeremy Moles (cubicool) 2007-2008
>
> #include <osg/io_utils>
> #include <osgWidget/WindowManager>
> #include <osgWidget/Input>
>
> namespace osgWidget {
>
> Input::Input(const std::string& name, const std::string& label, unsigned
> int size):
> Label        (name, label),
> _xoff        (0.0f),
> _yoff        (0.0f),
> _index       (0),
> _size        (0),
> _cursorIndex (0),
> _maxSize     (size),
> _cursor      (new Widget("cursor")) {
>    _text->setAlignment(osgText::Text::LEFT_BOTTOM_BASE_LINE);
>    _text->setKerningType(osgText::KERNING_NONE);
>
>    // Make the cursor un-copyable.
>    _cursor->setCanClone(false);
>    _cursor->setDataVariance(osg::Object::DYNAMIC);
>    _cursor->setColor(0.0f, 0.0f, 0.0f, 1.0f);
>
>    setEventMask(
>        // For showing/hiding the "cursor."
>        EVENT_MASK_FOCUS |
>        // For keypresses, obviously.
>        EVENT_MASK_KEY |
>        // For "click" focusing.
>        EVENT_MOUSE_PUSH
>    );
>
>    _offsets.resize(size, 0.0f);
>
>    _text->getText().resize(size, ' ');
>    _text->update();
> }
>
> void Input::_calculateSize(const XYCoord& size) {
>    // An Input cannot currently set it's own size RELIABLY until the
> osgText implementation
>    // is dratiscally improved. I'm getting wildly crazy results. :(
>    // point_type height = size.y() > _cursor->getHeight() ? size.y() :
> _cursor->getHeight();
>
> #if 0
>    point_type width  = size.x() + _cursor->getWidth();
>    point_type height = _cursor->getHeight();
>
>    if(width > getWidth()) setWidth(osg::round(width));
>
>    if(height > getHeight()) setHeight(osg::round(height));
> #endif
> }
>
> void Input::_calculateCursorOffsets() {
>    // Determine the "offset"
>    const osgText::Text::TextureGlyphQuadMap& tgqm =
> _text->getTextureGlyphQuadMap();
>
>    const osgText::Text::TextureGlyphQuadMap::const_iterator tgqmi =
> tgqm.begin();
>
>    const osgText::Text::GlyphQuads& gq = tgqmi->second;
>
>    osg::Vec3 pos = _text->getPosition();
>
>    for(unsigned int i = 0; i < _maxSize; i++) {
>        osg::Vec3 ul = gq.getTransformedCoords(0)[0 + (i * 4)];
>        osg::Vec3 ll = gq.getTransformedCoords(0)[1 + (i * 4)];
>        osg::Vec3 lr = gq.getTransformedCoords(0)[2 + (i * 4)];
>        osg::Vec3 ur = gq.getTransformedCoords(0)[3 + (i * 4)];
>
>        _offsets[i] = lr.x() - pos.x();
>
>        // warn() << "vb: " << gq.getGlyphs()[i]->getHorizontalBearing() <<
> std::endl;
>    }
> }
>
> bool Input::focus(const WindowManager*) {
>    _cursor->setColor(0.0f, 0.0f, 0.0f, 1.0f);
>
>    return true;
> }
>
> bool Input::unfocus(const WindowManager*) {
>    _cursor->setColor(0.0f, 0.0f, 0.0f, 0.0f);
>
>    return true;
> }
>
> void Input::parented(Window* parent) {
>    Label::parented(parent);
>
>    _cursor->setSize(2.0f, _text->getCharacterHeight());
>
>    if(_cursorIndex) parent->getGeode()->setDrawable(_cursorIndex,
> _cursor.get());
>
>    else _cursorIndex = parent->addDrawableAndGetIndex(_cursor.get());
> }
>
> void Input::positioned() {
>    point_type ln = static_cast<point_type>(_text->getLineCount());
>
>    ln = ln == 0.0f ? 1.0f : ln;
>
>    // point_type th = (_text->getCharacterHeight() * ln) +
> (_text->getLineSpacing() * (ln - 1.0f));
>
>    point_type x = getX() + _xoff;
>    point_type y = getY() + _yoff;
>
>    // XYCoord size = getTextSize();
>
>    _text->setPosition(osg::Vec3(x, y, _calculateZ(LAYER_MIDDLE)));
>
>    point_type xoffset = _index > 0 ? _offsets[_index - 1] : 0.0f;
>
>    _cursor->setOrigin(x + xoffset + 1.0f, y + 1.0f);
>    _cursor->setZ(_calculateZ(LAYER_MIDDLE));
> }
>
> bool Input::keyUp(int key, int mask, const WindowManager*) {
>    return false;
> }
>
> bool Input::keyDown(int key, int mask, const WindowManager*) {
>    osgText::String& s = _text->getText();
>
>    if(key == osgGA::GUIEventAdapter::KEY_BackSpace) {
>        if(_index >= 1) {
>            // s.erase(s.begin() + (_index - 1));
>
>            s[_index - 1] = ' ';
>
>            _text->update();
>
>            _calculateCursorOffsets();
>
>            _index--;
>        }
>    }
>
>    else {
>        if(key > 255 || _index >= _maxSize) return false;
>
>        // else if(_index < s.size()) s.insert(s.begin() + _index, key);
>        // else if(_index == s.size()) s.push_back(key);
>
>        s[_index] = key;
>
>        _text->update();
>
>        _calculateCursorOffsets();
>
>        _index++;
>    }
>
>    // _text->update();
>
>    _calculateSize(getTextSize());
>
>    getParent()->resize();
>
>    return false;
> }
>
> void Input::setCursor(Widget*) {
> }
>
> unsigned int Input::calculateBestYOffset(const std::string& s)
> {
>
>    const osgText::FontResolution fr(static_cast<unsigned
> int>(_text->getCharacterHeight()),
>                                     static_cast<unsigned
> int>(_text->getCharacterHeight()));
>
>    osgText::String utf(s);
>
>    unsigned int descent = 0;
>
>    for(osgText::String::iterator i = utf.begin(); i != utf.end(); i++) {
>        osgText::Font*        font  =
> const_cast<osgText::Font*>(_text->getFont());
>        osgText::Font::Glyph* glyph = font->getGlyph(fr, *i);
>        unsigned int          d     =
> abs((int)glyph->getHorizontalBearing().y());
>
>        if(d > descent) descent = d;
>    }
>
>    return descent;
> }
>
> }
>
>
> _______________________________________________
> osg-users mailing list
> osg-users@lists.openscenegraph.org
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
>
_______________________________________________
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to