| 1 | |
|---|
| 2 | |
|---|
| 3 | |
|---|
| 4 | #include <osgWidget/Util> |
|---|
| 5 | #include <osgWidget/WindowManager> |
|---|
| 6 | #include <osgWidget/Frame> |
|---|
| 7 | #include <osgWidget/Box> |
|---|
| 8 | |
|---|
| 9 | const unsigned int MASK_2D = 0xF0000000; |
|---|
| 10 | |
|---|
| 11 | |
|---|
| 12 | |
|---|
| 13 | bool scrollWindow(osgWidget::Event& ev) { |
|---|
| 14 | |
|---|
| 15 | osgWidget::Frame* frame = dynamic_cast<osgWidget::Frame*>(ev.getWindow()); |
|---|
| 16 | |
|---|
| 17 | if(!frame) return false; |
|---|
| 18 | |
|---|
| 19 | |
|---|
| 20 | osgWidget::Window::EmbeddedWindow* ew = |
|---|
| 21 | dynamic_cast<osgWidget::Window::EmbeddedWindow*>(frame->getEmbeddedWindow()) |
|---|
| 22 | ; |
|---|
| 23 | |
|---|
| 24 | if(!ew) return false; |
|---|
| 25 | |
|---|
| 26 | |
|---|
| 27 | |
|---|
| 28 | const osgWidget::Quad& va = ew->getWindow()->getVisibleArea(); |
|---|
| 29 | |
|---|
| 30 | |
|---|
| 31 | |
|---|
| 32 | if(ev.getWindowManager()->isMouseScrollingUp() && va[1] != 0.0f) |
|---|
| 33 | ew->getWindow()->addVisibleArea(0, -20) |
|---|
| 34 | ; |
|---|
| 35 | |
|---|
| 36 | else if(va[1] <= (ew->getWindow()->getHeight() - ew->getHeight())) |
|---|
| 37 | ew->getWindow()->addVisibleArea(0, 20) |
|---|
| 38 | ; |
|---|
| 39 | |
|---|
| 40 | |
|---|
| 41 | |
|---|
| 42 | frame->update(); |
|---|
| 43 | |
|---|
| 44 | return true; |
|---|
| 45 | } |
|---|
| 46 | |
|---|
| 47 | bool changeTheme(osgWidget::Event& ev) { |
|---|
| 48 | std::string theme; |
|---|
| 49 | |
|---|
| 50 | if(ev.key == osgGA::GUIEventAdapter::KEY_Right) |
|---|
| 51 | theme = "osgWidget/theme-1.png" |
|---|
| 52 | ; |
|---|
| 53 | |
|---|
| 54 | else if(ev.key == osgGA::GUIEventAdapter::KEY_Left) |
|---|
| 55 | theme = "osgWidget/theme-2.png" |
|---|
| 56 | ; |
|---|
| 57 | |
|---|
| 58 | else return false; |
|---|
| 59 | |
|---|
| 60 | osgWidget::Frame* frame = dynamic_cast<osgWidget::Frame*>(ev.getWindow()); |
|---|
| 61 | |
|---|
| 62 | if(!frame) return false; |
|---|
| 63 | |
|---|
| 64 | |
|---|
| 65 | |
|---|
| 66 | |
|---|
| 67 | |
|---|
| 68 | |
|---|
| 69 | for(unsigned int row = 0; row < 3; row++) { |
|---|
| 70 | for(unsigned int col = 0; col < 3; col++) { |
|---|
| 71 | frame->getByRowCol(row, col)->setImage(theme); |
|---|
| 72 | } |
|---|
| 73 | } |
|---|
| 74 | |
|---|
| 75 | return true; |
|---|
| 76 | } |
|---|
| 77 | |
|---|
| 78 | int main(int argc, char** argv) { |
|---|
| 79 | osgViewer::Viewer viewer; |
|---|
| 80 | |
|---|
| 81 | osgWidget::WindowManager* wm = new osgWidget::WindowManager( |
|---|
| 82 | &viewer, |
|---|
| 83 | 1280.0f, |
|---|
| 84 | 1024.0f, |
|---|
| 85 | MASK_2D, |
|---|
| 86 | osgWidget::WindowManager::WM_PICK_DEBUG |
|---|
| 87 | ); |
|---|
| 88 | |
|---|
| 89 | osgWidget::Frame* frame = osgWidget::Frame::createSimpleFrameWithSingleTexture( |
|---|
| 90 | "frame", |
|---|
| 91 | "osgWidget/theme-2.png", |
|---|
| 92 | 64.0f, |
|---|
| 93 | 64.0f, |
|---|
| 94 | 16.0f, |
|---|
| 95 | 16.0f, |
|---|
| 96 | 100.0f, |
|---|
| 97 | 100.0f |
|---|
| 98 | ); |
|---|
| 99 | |
|---|
| 100 | frame->getBackground()->setColor(0.0f, 0.0f, 0.0f, 0.0f); |
|---|
| 101 | |
|---|
| 102 | |
|---|
| 103 | osgWidget::Box* box = new osgWidget::Box("images", osgWidget::Box::VERTICAL); |
|---|
| 104 | osgWidget::Widget* img1 = new osgWidget::Widget("im1", 512.0f, 512.0f); |
|---|
| 105 | osgWidget::Widget* img2 = new osgWidget::Widget("im2", 512.0f, 512.0f); |
|---|
| 106 | osgWidget::Widget* img3 = new osgWidget::Widget("im3", 512.0f, 512.0f); |
|---|
| 107 | osgWidget::Widget* img4 = new osgWidget::Widget("im4", 512.0f, 512.0f); |
|---|
| 108 | |
|---|
| 109 | img1->setImage("osgWidget/scrolled1.jpg", true); |
|---|
| 110 | img2->setImage("osgWidget/scrolled2.jpg", true); |
|---|
| 111 | img3->setImage("osgWidget/scrolled3.jpg", true); |
|---|
| 112 | img4->setImage("osgWidget/scrolled4.jpg", true); |
|---|
| 113 | |
|---|
| 114 | img1->setMinimumSize(10.0f, 10.0f); |
|---|
| 115 | img2->setMinimumSize(10.0f, 10.0f); |
|---|
| 116 | img3->setMinimumSize(10.0f, 10.0f); |
|---|
| 117 | img4->setMinimumSize(10.0f, 10.0f); |
|---|
| 118 | |
|---|
| 119 | box->addWidget(img1); |
|---|
| 120 | box->addWidget(img2); |
|---|
| 121 | box->addWidget(img3); |
|---|
| 122 | box->addWidget(img4); |
|---|
| 123 | box->setEventMask(osgWidget::EVENT_NONE); |
|---|
| 124 | |
|---|
| 125 | frame->getEmbeddedWindow()->setWindow(box); |
|---|
| 126 | frame->getEmbeddedWindow()->setColor(1.0f, 1.0f, 1.0f, 1.0f); |
|---|
| 127 | frame->resize(300.0f, 300.0f); |
|---|
| 128 | frame->addCallback(osgWidget::Callback(&scrollWindow, osgWidget::EVENT_MOUSE_SCROLL)); |
|---|
| 129 | frame->addCallback(osgWidget::Callback(&changeTheme, osgWidget::EVENT_KEY_DOWN)); |
|---|
| 130 | |
|---|
| 131 | wm->addChild(frame); |
|---|
| 132 | |
|---|
| 133 | return osgWidget::createExample(viewer, wm); |
|---|
| 134 | } |
|---|