Skip to content

Commit a3be02a

Browse files
committed
New globe navigation controls (partially fixes #6192)
1 parent bf1d1b0 commit a3be02a

17 files changed

+113
-194
lines changed

src/plugins/globe/globe_plugin.cpp

+113-194
Original file line numberDiff line numberDiff line change
@@ -498,227 +498,146 @@ void GlobePlugin::setupControls()
498498
{
499499

500500
std::string imgDir = QDir::cleanPath( QgsApplication::pkgDataPath() + "/globe/gui" ).toStdString();
501-
502-
//MOVE CONTROLS
503-
//Horizontal container
504-
HBox* moveHControls = new HBox();
505-
moveHControls->setFrame( new RoundedFrame() );
506-
moveHControls->getFrame()->setBackColor( 1, 1, 1, 0.5 );
507-
moveHControls->setMargin( 0 );
508-
#if HAVE_OSGEARTH_CHILD_SPACING
509-
moveHControls->setChildSpacing( 47 );
510-
#else
511-
moveHControls->setSpacing( 47 );
512-
#endif
513-
moveHControls->setVertAlign( Control::ALIGN_CENTER );
514-
moveHControls->setHorizAlign( Control::ALIGN_CENTER );
515-
moveHControls->setPosition( 5, 30 );
516-
moveHControls->setPadding( 6 );
517-
518501
osgEarth::Util::EarthManipulator* manip = dynamic_cast<osgEarth::Util::EarthManipulator*>( mOsgViewer->getCameraManipulator() );
519-
//Move Left
520-
osg::Image* moveLeftImg = osgDB::readImageFile( imgDir + "/move-left.png" );
521-
ImageControl* moveLeft = new NavigationControl( moveLeftImg );
522-
moveLeft->addEventHandler( new PanControlHandler( manip, -MOVE_OFFSET, 0 ) );
523-
524-
//Move Right
525-
osg::Image* moveRightImg = osgDB::readImageFile( imgDir + "/move-right.png" );
526-
ImageControl* moveRight = new NavigationControl( moveRightImg );
527-
moveRight->addEventHandler( new PanControlHandler( manip, MOVE_OFFSET, 0 ) );
528-
529-
//Vertical container
530-
VBox* moveVControls = new VBox();
531-
moveVControls->setFrame( new RoundedFrame() );
532-
moveVControls->getFrame()->setBackColor( 1, 1, 1, 0.5 );
533-
moveVControls->setMargin( 0 );
534-
#if HAVE_OSGEARTH_CHILD_SPACING
535-
moveVControls->setChildSpacing( 36 );
536-
#else
537-
moveVControls->setSpacing( 36 );
538-
#endif
539-
moveVControls->setVertAlign( Control::ALIGN_CENTER );
540-
moveVControls->setHorizAlign( Control::ALIGN_CENTER );
541-
moveVControls->setPosition( 35, 5 );
542-
moveVControls->setPadding( 6 );
543-
544-
//Move Up
545-
osg::Image* moveUpImg = osgDB::readImageFile( imgDir + "/move-up.png" );
546-
ImageControl* moveUp = new NavigationControl( moveUpImg );
547-
moveUp->addEventHandler( new PanControlHandler( manip, 0, MOVE_OFFSET ) );
548502

549-
//Move Down
550-
osg::Image* moveDownImg = osgDB::readImageFile( imgDir + "/move-down.png" );
551-
ImageControl* moveDown = new NavigationControl( moveDownImg );
552-
moveDown->addEventHandler( new PanControlHandler( manip, 0, -MOVE_OFFSET ) );
553-
554-
//add controls to moveControls group
555-
moveHControls->addControl( moveLeft );
556-
moveHControls->addControl( moveRight );
557-
moveVControls->addControl( moveUp );
558-
moveVControls->addControl( moveDown );
559-
560-
//END MOVE CONTROLS
561-
562-
//ROTATE CONTROLS
563-
//Horizontal container
564-
HBox* rotateControls = new HBox();
565-
rotateControls->setFrame( new RoundedFrame() );
566-
rotateControls->getFrame()->setBackColor( 1, 1, 1, 0.5 );
567-
rotateControls->setMargin( 0 );
568-
#if HAVE_OSGEARTH_CHILD_SPACING
569-
rotateControls->setChildSpacing( 10 );
570-
#else
571-
rotateControls->setSpacing( 10 );
572-
#endif
573-
rotateControls->setVertAlign( Control::ALIGN_CENTER );
574-
rotateControls->setHorizAlign( Control::ALIGN_CENTER );
575-
rotateControls->setPosition( 5, 113 );
576-
rotateControls->setPadding( 6 );
577-
578-
//Rotate CCW
579-
osg::Image* rotateCCWImg = osgDB::readImageFile( imgDir + "/rotate-ccw.png" );
580-
ImageControl* rotateCCW = new NavigationControl( rotateCCWImg );
503+
osg::Image* yawPitchWheelImg = osgDB::readImageFile( imgDir + "/YawPitchWheel.png" );
504+
ImageControl* yawPitchWheel = new ImageControl( yawPitchWheelImg );
505+
int imgLeft = 16;
506+
int imgTop = 20;
507+
yawPitchWheel->setPosition( imgLeft, imgTop );
508+
mControlCanvas->addControl( yawPitchWheel );
509+
510+
//ROTATE CONTROLS
511+
Control* rotateCCW = new NavigationControl();
512+
rotateCCW->setHeight( 22 );
513+
rotateCCW->setWidth( 20 );
514+
rotateCCW->setPosition( imgLeft+0, imgTop+18 );
581515
rotateCCW->addEventHandler( new RotateControlHandler( manip, MOVE_OFFSET, 0 ) );
516+
mControlCanvas->addControl( rotateCCW );
582517

583-
//Rotate CW
584-
osg::Image* rotateCWImg = osgDB::readImageFile( imgDir + "/rotate-cw.png" );
585-
ImageControl* rotateCW = new NavigationControl( rotateCWImg );
518+
Control* rotateCW = new NavigationControl();
519+
rotateCW->setHeight( 22 );
520+
rotateCW->setWidth( 20 );
521+
rotateCW->setPosition( imgLeft+36, imgTop+18 );
586522
rotateCW->addEventHandler( new RotateControlHandler( manip, -MOVE_OFFSET , 0 ) );
523+
mControlCanvas->addControl( rotateCW );
587524

588525
//Rotate Reset
589-
osg::Image* rotateResetImg = osgDB::readImageFile( imgDir + "/rotate-reset.png" );
590-
ImageControl* rotateReset = new NavigationControl( rotateResetImg );
526+
Control* rotateReset = new NavigationControl();
527+
rotateReset->setHeight( 22 );
528+
rotateReset->setWidth( 16 );
529+
rotateReset->setPosition( imgLeft+20, imgTop+18 );
591530
rotateReset->addEventHandler( new RotateControlHandler( manip, 0, 0 ) );
531+
mControlCanvas->addControl( rotateReset );
592532

593-
//add controls to rotateControls group
594-
rotateControls->addControl( rotateCCW );
595-
rotateControls->addControl( rotateReset );
596-
rotateControls->addControl( rotateCW );
597-
598-
//END ROTATE CONTROLS
599-
600-
//TILT CONTROLS
601-
//Vertical container
602-
VBox* tiltControls = new VBox();
603-
tiltControls->setFrame( new RoundedFrame() );
604-
tiltControls->getFrame()->setBackColor( 1, 1, 1, 0.5 );
605-
tiltControls->setMargin( 0 );
606-
#if HAVE_OSGEARTH_CHILD_SPACING
607-
tiltControls->setChildSpacing( 30 );
608-
#else
609-
tiltControls->setSpacing( 30 );
610-
#endif
611-
tiltControls->setVertAlign( Control::ALIGN_CENTER );
612-
tiltControls->setHorizAlign( Control::ALIGN_CENTER );
613-
tiltControls->setPosition( 35, 90 );
614-
tiltControls->setPadding( 6 );
615-
616-
//tilt Up
617-
osg::Image* tiltUpImg = osgDB::readImageFile( imgDir + "/tilt-up.png" );
618-
ImageControl* tiltUp = new NavigationControl( tiltUpImg );
533+
//TILT CONTROLS
534+
Control* tiltUp = new NavigationControl();
535+
tiltUp->setHeight( 19 );
536+
tiltUp->setWidth( 24 );
537+
tiltUp->setPosition( imgLeft+20, imgTop+0 );
619538
tiltUp->addEventHandler( new RotateControlHandler( manip, 0, MOVE_OFFSET ) );
539+
mControlCanvas->addControl( tiltUp );
620540

621-
//tilt Down
622-
osg::Image* tiltDownImg = osgDB::readImageFile( imgDir + "/tilt-down.png" );
623-
ImageControl* tiltDown = new NavigationControl( tiltDownImg );
541+
Control* tiltDown = new NavigationControl();
542+
tiltDown->setHeight( 19 );
543+
tiltDown->setWidth( 24 );
544+
tiltDown->setPosition( imgLeft+16, imgTop+36 );
624545
tiltDown->addEventHandler( new RotateControlHandler( manip, 0, -MOVE_OFFSET ) );
546+
mControlCanvas->addControl( tiltDown );
625547

626-
//add controls to tiltControls group
627-
tiltControls->addControl( tiltUp );
628-
tiltControls->addControl( tiltDown );
548+
// -------
629549

630-
//END TILT CONTROLS
550+
osg::Image* moveWheelImg = osgDB::readImageFile( imgDir + "/MoveWheel.png" );
551+
ImageControl* moveWheel = new ImageControl( moveWheelImg );
552+
imgTop = 80;
553+
moveWheel->setPosition( imgLeft, imgTop );
554+
mControlCanvas->addControl( moveWheel );
631555

632-
//ZOOM CONTROLS
633-
//Vertical container
634-
VBox* zoomControls = new VBox();
635-
zoomControls->setFrame( new RoundedFrame() );
636-
zoomControls->getFrame()->setBackColor( 1, 1, 1, 0.5 );
637-
zoomControls->setMargin( 0 );
638-
#if HAVE_OSGEARTH_CHILD_SPACING
639-
zoomControls->setChildSpacing( 5 );
640-
#else
641-
zoomControls->setSpacing( 5 );
642-
#endif
643-
zoomControls->setVertAlign( Control::ALIGN_CENTER );
644-
zoomControls->setHorizAlign( Control::ALIGN_CENTER );
645-
zoomControls->setPosition( 35, 170 );
646-
zoomControls->setPadding( 6 );
647-
648-
//Zoom In
649-
osg::Image* zoomInImg = osgDB::readImageFile( imgDir + "/zoom-in.png" );
650-
ImageControl* zoomIn = new NavigationControl( zoomInImg );
651-
zoomIn->addEventHandler( new ZoomControlHandler( manip, 0, -MOVE_OFFSET ) );
556+
//MOVE CONTROLS
557+
Control* moveLeft = new NavigationControl();
558+
moveLeft->setHeight( 22 );
559+
moveLeft->setWidth( 20 );
560+
moveLeft->setPosition( imgLeft+0, imgTop+18 );
561+
moveLeft->addEventHandler( new PanControlHandler( manip, -MOVE_OFFSET, 0 ) );
562+
mControlCanvas->addControl( moveLeft );
652563

653-
//Zoom Out
654-
osg::Image* zoomOutImg = osgDB::readImageFile( imgDir + "/zoom-out.png" );
655-
ImageControl* zoomOut = new NavigationControl( zoomOutImg );
656-
zoomOut->addEventHandler( new ZoomControlHandler( manip, 0, MOVE_OFFSET ) );
564+
Control* moveRight = new NavigationControl();
565+
moveRight->setHeight( 22 );
566+
moveRight->setWidth( 20 );
567+
moveRight->setPosition( imgLeft+36, imgTop+18 );
568+
moveRight->addEventHandler( new PanControlHandler( manip, MOVE_OFFSET, 0 ) );
569+
mControlCanvas->addControl( moveRight );
657570

658-
//add controls to zoomControls group
659-
zoomControls->addControl( zoomIn );
660-
zoomControls->addControl( zoomOut );
571+
Control* moveUp = new NavigationControl();
572+
moveUp->setHeight( 19 );
573+
moveUp->setWidth( 24 );
574+
moveUp->setPosition( imgLeft+20, imgTop+0 );
575+
moveUp->addEventHandler( new PanControlHandler( manip, 0, MOVE_OFFSET ) );
576+
mControlCanvas->addControl( moveUp );
661577

662-
//END ZOOM CONTROLS
578+
Control* moveDown = new NavigationControl();
579+
moveDown->setHeight( 19 );
580+
moveDown->setWidth( 24 );
581+
moveDown->setPosition( imgLeft+16, imgTop+36 );
582+
moveDown->addEventHandler(new PanControlHandler( manip, 0, -MOVE_OFFSET ) );
583+
mControlCanvas->addControl( moveDown );
663584

664-
//EXTRA CONTROLS
665-
//#define ENABLE_SYNC_BUTTON 1
666-
#if ENABLE_SYNC_BUTTON
667-
//Horizontal container
668-
HBox* extraControls = new HBox();
669-
#else
670-
VBox* extraControls = new VBox();
671-
#endif
672-
extraControls->setFrame( new RoundedFrame() );
673-
extraControls->getFrame()->setBackColor( 1, 1, 1, 0.5 );
674-
extraControls->setMargin( 0 );
675-
#if HAVE_OSGEARTH_CHILD_SPACING
676-
extraControls->setChildSpacing( 10 );
677-
#else
678-
extraControls->setSpacing( 10 );
679-
#endif
680-
extraControls->setVertAlign( Control::ALIGN_CENTER );
681-
extraControls->setHorizAlign( Control::ALIGN_CENTER );
682-
#if ENABLE_SYNC_BUTTON
683-
extraControls->setPosition( 5, 231 );
684-
#else
685-
extraControls->setPosition( 35, 231 );
686-
#endif
687-
extraControls->setPadding( 6 );
585+
//Zoom Reset
586+
Control* zoomHome = new NavigationControl();
587+
zoomHome->setHeight( 22 );
588+
zoomHome->setWidth( 16 );
589+
zoomHome->setPosition( imgLeft+20, imgTop+18 );
590+
zoomHome->addEventHandler( new HomeControlHandler( manip ) );
591+
mControlCanvas->addControl( zoomHome );
592+
593+
// -------
594+
595+
osg::Image* backgroundImg = osgDB::readImageFile( imgDir + "/button-background.png" );
596+
ImageControl* backgroundGrp1 = new ImageControl( backgroundImg );
597+
imgTop = imgTop+62;
598+
backgroundGrp1->setPosition( imgLeft+12, imgTop );
599+
mControlCanvas->addControl( backgroundGrp1 );
600+
601+
osg::Image* plusImg = osgDB::readImageFile( imgDir + "/zoom-in.png" );
602+
ImageControl* zoomIn = new NavigationControl( plusImg );
603+
zoomIn->setPosition( imgLeft+12+3, imgTop+3 );
604+
zoomIn->addEventHandler( new ZoomControlHandler( manip, 0, -MOVE_OFFSET ) );
605+
mControlCanvas->addControl( zoomIn );
688606

689-
//Sync Extent
690-
#if ENABLE_SYNC_BUTTON
691-
osg::Image* extraSyncImg = osgDB::readImageFile( imgDir + "/sync-extent.png" );
692-
ImageControl* extraSync = new NavigationControl( extraSyncImg );
693-
extraSync->addEventHandler( new SyncExtentControlHandler( this ) );
694-
#endif
607+
osg::Image* minusImg = osgDB::readImageFile( imgDir + "/zoom-out.png" );
608+
ImageControl* zoomOut = new NavigationControl( minusImg );
609+
zoomOut->setPosition( imgLeft+12+3, imgTop+3+23+2 );
610+
zoomOut->addEventHandler( new ZoomControlHandler( manip, 0, MOVE_OFFSET ) );
611+
mControlCanvas->addControl( zoomOut );
612+
613+
// -------
614+
615+
ImageControl* backgroundGrp2 = new ImageControl( backgroundImg );
616+
imgTop = imgTop+60;
617+
backgroundGrp2->setPosition( imgLeft+12, imgTop );
618+
mControlCanvas->addControl( backgroundGrp2 );
695619

696620
//Zoom Reset
697-
osg::Image* extraHomeImg = osgDB::readImageFile( imgDir + "/zoom-home.png" );
698-
ImageControl* extraHome = new NavigationControl( extraHomeImg );
699-
extraHome->addEventHandler( new HomeControlHandler( manip ) );
621+
osg::Image* homeImg = osgDB::readImageFile( imgDir + "/zoom-home.png" );
622+
ImageControl* home = new NavigationControl( homeImg );
623+
home->setPosition( imgLeft+12+3, imgTop+2 );
624+
home->addEventHandler( new HomeControlHandler( manip ) );
625+
mControlCanvas->addControl( home );
700626

701627
//refresh layers
702-
osg::Image* extraRefreshImg = osgDB::readImageFile( imgDir + "/refresh-view.png" );
703-
ImageControl* extraRefresh = new NavigationControl( extraRefreshImg );
704-
extraRefresh->addEventHandler( new RefreshControlHandler( this ) );
628+
osg::Image* refreshImg = osgDB::readImageFile( imgDir + "/refresh-view.png" );
629+
ImageControl* refresh = new NavigationControl( refreshImg );
630+
refresh->setPosition( imgLeft+12+3, imgTop+2+23+2 );
631+
refresh->addEventHandler( new RefreshControlHandler( this ) );
632+
mControlCanvas->addControl( refresh );
705633

706-
//add controls to extraControls group
634+
//Sync Extent
707635
#if ENABLE_SYNC_BUTTON
708-
extraControls->addControl( extraSync );
636+
osg::Image* syncImg = osgDB::readImageFile( imgDir + "/sync-extent.png" );
637+
ImageControl* sync = new NavigationControl( syncImg );
638+
sync->addEventHandler( new SyncExtentControlHandler( this ) );
639+
mControlCanvas->addControl( sync );
709640
#endif
710-
extraControls->addControl( extraHome );
711-
extraControls->addControl( extraRefresh );
712-
713-
//END EXTRA CONTROLS
714-
715-
//add controls groups to canavas
716-
mControlCanvas->addControl( moveHControls );
717-
mControlCanvas->addControl( moveVControls );
718-
mControlCanvas->addControl( tiltControls );
719-
mControlCanvas->addControl( rotateControls );
720-
mControlCanvas->addControl( zoomControls );
721-
mControlCanvas->addControl( extraControls );
722641
}
723642

724643
void GlobePlugin::setupProxy()
4.85 KB
Loading
4.38 KB
Loading
311 Bytes
Loading
-619 Bytes
Binary file not shown.
-623 Bytes
Binary file not shown.
-631 Bytes
Binary file not shown.
-622 Bytes
Binary file not shown.
-295 Bytes
Loading
-753 Bytes
Binary file not shown.
-739 Bytes
Binary file not shown.
-1.15 KB
Binary file not shown.
-619 Bytes
Binary file not shown.
-622 Bytes
Binary file not shown.
-787 Bytes
Loading
-323 Bytes
Loading
-211 Bytes
Loading

0 commit comments

Comments
 (0)