root/OpenSceneGraph/trunk/examples/osgwidgetbox/osgwidgetbox.cpp @ 13376

Revision 13376, 3.8 kB (checked in by robert, 20 minutes ago)

From Mattias Helsing, "Seems I was only half right given what you asked for. CMP0017 only
says that modules that are found and ran from cmake modules dir should
prefer cmake-provided modules. find_package() and include() still look
in CMAKE_MODULE_PATH first.

After some investigating I've come up with a proposal examplified in
the attached FindGDAL.cmake script. It simply calls the cmake provided
FindGDAL.cmake if it exists and returns if it succeeds in finding GDAL
using that, otherwise continue with our local cmake code.
Pro: Wont clutter our root CMakeLists.txt
Con: If we begin to write more advanced Findxxx modules (using
COMPONENTS, REQUIRED etc.) we may have to revise this scheme.
"

  • Property svn:eol-style set to native
RevLine 
[8588]1// -*-c++-*- osgWidget - Code by: Jeremy Moles (cubicool) 2007-2008
2// $Id: osgwidgetbox.cpp 59 2008-05-15 20:55:31Z cubicool $
3
4// NOTE: You'll find this example very similar to osgwidgetwindow. However, here we
5// demonstrate a bit of subclassing of Widget so that we can respond to events
6// such as mouseEnter and mouseLeave. We also demonstrate the use of padding, though
7// fill and alignment should be working too.
8
9#include <osg/io_utils>
10#include <osgDB/ReadFile>
11#include <osgWidget/Util>
12#include <osgWidget/WindowManager>
13#include <osgWidget/Box>
14
15const unsigned int MASK_2D = 0xF0000000;
16const unsigned int MASK_3D = 0x0F000000;
17
18struct ColorWidget: public osgWidget::Widget {
[9370]19    ColorWidget():
20    osgWidget::Widget("", 256.0f, 256.0f) {
[10779]21        setEventMask(osgWidget::EVENT_ALL);
[9370]22    }
[8588]23
[10779]24    bool mouseEnter(double, double, const osgWidget::WindowManager*) {
[9370]25        addColor(-osgWidget::Color(0.4f, 0.4f, 0.4f, 0.0f));
26       
27        // osgWidget::warn() << "enter: " << getColor() << std::endl;
[8588]28
[9370]29        return true;
30    }
[8588]31
[10779]32    bool mouseLeave(double, double, const osgWidget::WindowManager*) {
[9370]33        addColor(osgWidget::Color(0.4f, 0.4f, 0.4f, 0.0f));
34       
35        // osgWidget::warn() << "leave: " << getColor() << std::endl;
36       
37        return true;
38    }
[8588]39
[10779]40    bool mouseOver(double x, double y, const osgWidget::WindowManager*) {
[13376]41       
[9370]42        osgWidget::Color c = getImageColorAtPointerXY(x, y);
[8588]43
[9370]44        if(c.a() < 0.001f) {
45            // osgWidget::warn() << "Transparent Pixel: " << x << " " << y << std::endl;
[8588]46
[9370]47            return false;
48        }
49        return true;
50    }
[8588]51
[9370]52    bool keyUp(int key, int keyMask, osgWidget::WindowManager*) {
53        // osgWidget::warn() << "..." << key << " - " << keyMask << std::endl;
[8588]54
[9370]55        return true;
56    }
[8588]57};
58
[9289]59osgWidget::Box* createBox(const std::string& name, osgWidget::Box::BoxType bt) {
[9370]60    osgWidget::Box*    box     = new osgWidget::Box(name, bt, true);
61    osgWidget::Widget* widget1 = new osgWidget::Widget(name + "_widget1", 100.0f, 100.0f);
62    osgWidget::Widget* widget2 = new osgWidget::Widget(name + "_widget2", 100.0f, 100.0f);
63    osgWidget::Widget* widget3 = new ColorWidget();
[8588]64
[9370]65    widget1->setColor(0.3f, 0.3f, 0.3f, 1.0f);
66    widget2->setColor(0.6f, 0.6f, 0.6f, 1.0f);
[8588]67
[9370]68    widget3->setImage("osgWidget/natascha.png");
69    widget3->setTexCoord(0.0f, 0.0f, osgWidget::Widget::LOWER_LEFT);
70    widget3->setTexCoord(1.0f, 0.0f, osgWidget::Widget::LOWER_RIGHT);
71    widget3->setTexCoord(1.0f, 1.0f, osgWidget::Widget::UPPER_RIGHT);
72    widget3->setTexCoord(0.0f, 1.0f, osgWidget::Widget::UPPER_LEFT);
[8588]73
[9370]74    box->addWidget(widget1);
75    box->addWidget(widget2);
76    box->addWidget(widget3);
[8588]77
[9370]78    return box;
[8588]79}
80
81int main(int argc, char** argv) {
[9370]82    osgViewer::Viewer viewer;
[8588]83
[9370]84    osgWidget::WindowManager* wm = new osgWidget::WindowManager(
85        &viewer,
86        1280.0f,
87        1024.0f,
88        MASK_2D,
89        osgWidget::WindowManager::WM_PICK_DEBUG
90    );
91   
92    wm->setPointerFocusMode(osgWidget::WindowManager::PFM_SLOPPY);
[8588]93
[9370]94    osgWidget::Window* box1 = createBox("HBOX", osgWidget::Box::HORIZONTAL);
95    osgWidget::Window* box2 = createBox("VBOX", osgWidget::Box::VERTICAL);
96    osgWidget::Window* box3 = createBox("HBOX2", osgWidget::Box::HORIZONTAL);
97    osgWidget::Window* box4 = createBox("VBOX2", osgWidget::Box::VERTICAL);
[8588]98
[9370]99    box1->getBackground()->setColor(1.0f, 0.0f, 0.0f, 0.8f);
100    box1->attachMoveCallback();
[8588]101
[9370]102    box2->getBackground()->setColor(0.0f, 1.0f, 0.0f, 0.8f);
103    box2->attachMoveCallback();
[8588]104
[9370]105    box3->getBackground()->setColor(0.0f, 0.0f, 1.0f, 0.8f);
106    box3->attachMoveCallback();
[8588]107
[9370]108    wm->addChild(box1);
109    wm->addChild(box2);
110    wm->addChild(box3);
111    wm->addChild(box4);
[8588]112
[9370]113    box4->hide();
[8588]114
[12529]115    osg::Node* model = osgDB::readNodeFile("spaceship.osgt");
[8588]116
[9370]117    model->setNodeMask(MASK_3D);
[8588]118
[9370]119    return osgWidget::createExample(viewer, wm, model);
[8588]120}
Note: See TracBrowser for help on using the browser.