/usr/include/osgUI/Widget is in libopenscenegraph-3.4-dev 3.4.1+dfsg1-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 | /* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2014 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.
*/
#ifndef OSGUI_WIDGET
#define OSGUI_WIDGET
#include <osg/Group>
#include <osg/BoundingBox>
#include <osg/ScriptEngine>
#include <osgGA/Event>
#include <osgGA/EventVisitor>
#include <osgUI/Style>
namespace osgUI
{
class OSGUI_EXPORT Widget : public osg::Group
{
public:
Widget();
Widget(const Widget& widget, const osg::CopyOp& copyop=osg::CopyOp::SHALLOW_COPY);
META_Node(osgUI, Widget);
virtual void traverse(osg::NodeVisitor& nv);
virtual void traverseImplementation(osg::NodeVisitor& nv);
virtual bool handle(osgGA::EventVisitor* ev, osgGA::Event* event);
virtual bool handleImplementation(osgGA::EventVisitor* ev, osgGA::Event* event);
typedef std::vector<osgUtil::LineSegmentIntersector::Intersection> Intersections;
virtual bool computeIntersections(osgGA::EventVisitor* ev, osgGA::GUIEventAdapter* event, Intersections& intersections, osg::Node::NodeMask traversalMask = 0xffffffff) const;
virtual bool computePositionInLocalCoordinates(osgGA::EventVisitor* ev, osgGA::GUIEventAdapter* event, osg::Vec3d& localPosition) const;
virtual bool computeExtentsPositionInLocalCoordinates(osgGA::EventVisitor* ev, osgGA::GUIEventAdapter* event, osg::Vec3d& localPosition, bool withinExtents=true) const;
virtual void dirty();
typedef std::map<int, osg::ref_ptr<osg::Node> > GraphicsSubgraphMap;
/** Set the subgraph to be used to render the widget.*/
void setGraphicsSubgraph(int orderNum, osg::Node* node) { _graphicsSubgraphMap[orderNum] = node; _graphicsInitialized = true; }
/** Get the subgraph to be used to render the widget.*/
osg::Node* getGraphicsSubgraph(int orderNum) { GraphicsSubgraphMap::iterator itr = _graphicsSubgraphMap.find(orderNum); return (itr!=_graphicsSubgraphMap.end()) ? itr->second.get() : 0; }
/** Get the const subgraph to be used to render the widget.*/
const osg::Node* getGraphicsSubgraph(int orderNum) const { GraphicsSubgraphMap::const_iterator itr = _graphicsSubgraphMap.find(orderNum); return (itr!=_graphicsSubgraphMap.end()) ? itr->second.get() : 0; }
void setGraphicsSubgraphMap(const GraphicsSubgraphMap& gsm) { _graphicsSubgraphMap = gsm; _graphicsInitialized = true; }
GraphicsSubgraphMap& getGraphicsSubgraphMap() { return _graphicsSubgraphMap; }
const GraphicsSubgraphMap& getGraphicsSubgraphMap() const { return _graphicsSubgraphMap; }
/** Set the WidgetStateSet is used internally by Widgets to manage state that decorates the subgraph.
* WidgetStateSet is not serialized and is typically populated by the Widget::createGraphics() implementation,
* end users will not normally touoch the WidgetStateSet, use the normal Node::setStateSet() if you want to apply
* your own state to the Widget and it's subgraphs.*/
void setWidgetStateSet(osg::StateSet* stateset) { _widgetStateSet = stateset; }
osg::StateSet* getWidgetStateSet() { return _widgetStateSet.get(); }
const osg::StateSet* getWidgetStateSet() const { return _widgetStateSet.get(); }
osg::StateSet* getOrCreateWidgetStateSet() { if (!_widgetStateSet) _widgetStateSet = new osg::StateSet; return _widgetStateSet.get(); }
/** createGraphics entry method, calls either callback object named "createGraphics" or the createGraphicsImplementation() method.*/
virtual void createGraphics();
/** createGraphicsImplementation method that creates the subgraph that will render the widget and assigns it to the Widget via the Widet::setGraphicsSubgraph() method.*/
virtual void createGraphicsImplementation();
virtual void setExtents(const osg::BoundingBoxf& bb);
const osg::BoundingBoxf& getExtents() const { return _extents; }
void setStyle(Style* style) { _style = style; }
Style* getStyle() { return _style.get(); }
const Style* getStyle() const { return _style.get(); }
void setAlignmentSettings(AlignmentSettings* alignmentSettings) { _alignmentSettings = alignmentSettings; }
AlignmentSettings* getAlignmentSettings() { return _alignmentSettings.get(); }
const AlignmentSettings* getAlignmentSettings() const { return _alignmentSettings.get(); }
void setFrameSettings(FrameSettings* textSettings) { _frameSettings = textSettings; }
FrameSettings* getFrameSettings() { return _frameSettings.get(); }
const FrameSettings* getFrameSettings() const { return _frameSettings.get(); }
void setTextSettings(TextSettings* textSettings) { _textSettings = textSettings; }
TextSettings* getTextSettings() { return _textSettings.get(); }
const TextSettings* getTextSettings() const { return _textSettings.get(); }
/** set whether the widget should fill the extents of its background.*/
virtual void setAutoFillBackground(bool enabled) { _autoFillBackground = enabled; }
/** get whether the widget should fill the extents of its background.*/
virtual bool getAutoFillBackground() const { return _autoFillBackground; }
/** set the visibility of the widget.*/
virtual void setVisible(bool visible) { _visible = visible; }
/** get the visibility of the widget.*/
virtual bool getVisible() const { return _visible; }
/** set whether the widget is enabled for user interaction.*/
virtual void setEnabled(bool enabled) { _enabled = enabled; }
/** get whether the widget is enabled for user interaction.*/
virtual bool getEnabled() const { return _enabled; }
enum FocusBehaviour
{
CLICK_TO_FOCUS,
FOCUS_FOLLOWS_POINTER,
EVENT_DRIVEN_FOCUS_DISABLED
};
void setFocusBehaviour(FocusBehaviour behaviour) { _focusBehaviour = behaviour; }
FocusBehaviour getFocusBehaviour() const { return _focusBehaviour; }
/** update the focus according to events.*/
virtual void updateFocus(osg::NodeVisitor& nv);
/** set whether the widget has focus or not.*/
virtual void setHasEventFocus(bool focus);
/** get whether the widget has focus or not.*/
virtual bool getHasEventFocus() const;
/** invoke all callbacks with specified names providing input and output parameters.*/
bool runCallbacks(const std::string& name, osg::Parameters& inputParameters, osg::Parameters& outputParameters) { return osg::runNamedCallbackObjects(this, name, inputParameters, outputParameters); }
/** invoke all callbacks with specified names without any specified input or output parameters.*/
bool runCallbacks(const std::string& name) { osg::Parameters inputParameters, outputParameters; return osg::runNamedCallbackObjects(this, name, inputParameters, outputParameters); }
/** Compute the bounding sphere of the widget.*/
virtual osg::BoundingSphere computeBound() const;
/** update any focus related graphics+state to the focused state.*/
virtual void enter();
virtual void enterImplementation();
/** update any focus related graphics+state to the unfocused state.*/
virtual void leave();
virtual void leaveImplementation();
/** resize all GLObjectBuffers.*/
virtual void resizeGLObjectBuffers(unsigned int maxSize);
/** resize all GLObjectBuffers.*/
virtual void releaseGLObjects(osg::State* = 0) const;
protected:
virtual ~Widget() {}
FocusBehaviour _focusBehaviour;
bool _hasEventFocus;
bool _graphicsInitialized;
GraphicsSubgraphMap _graphicsSubgraphMap;
osg::ref_ptr<osg::StateSet> _widgetStateSet;
osg::BoundingBoxf _extents;
osg::ref_ptr<Style> _style;
osg::ref_ptr<AlignmentSettings> _alignmentSettings;
osg::ref_ptr<FrameSettings> _frameSettings;
osg::ref_ptr<TextSettings> _textSettings;
bool _autoFillBackground;
bool _visible;
bool _enabled;
};
}
#endif
|