void OverlayMenuDisplay::openingAnimation()
 {
   ROS_DEBUG("openningAnimation");
   prepareOverlay();
   int current_width = animation_t_ / animate_duration * overlay_->getTextureWidth();
   int current_height = animation_t_ / animate_duration * overlay_->getTextureHeight();
   {
     ScopedPixelBuffer buffer = overlay_->getBuffer();
     QColor bg_color(0, 0, 0, 255.0 / 2.0);
     QColor transparent(0, 0, 0, 0.0);
     QImage Hud = buffer.getQImage(*overlay_);
     for (int i = 0; i < overlay_->getTextureWidth(); i++) {
       for (int j = 0; j < overlay_->getTextureHeight(); j++) {
         if (i > (overlay_->getTextureWidth() - current_width) / 2.0 &&
             i < overlay_->getTextureWidth() - (overlay_->getTextureWidth() - current_width) / 2.0 &&
             j > (overlay_->getTextureHeight() - current_height) / 2.0 &&
             j < overlay_->getTextureHeight() - (overlay_->getTextureHeight() - current_height) / 2.0) {
           Hud.setPixel(i, j, bg_color.rgba());
         }
         else {
           Hud.setPixel(i, j, transparent.rgba());
         }
       }
     }
   }
   overlay_->setDimensions(overlay_->getTextureWidth(), overlay_->getTextureHeight());
   int window_width = context_->getViewManager()->getRenderPanel()->width();
   int window_height = context_->getViewManager()->getRenderPanel()->height();
   double window_left = (window_width - (int)overlay_->getTextureWidth()) / 2.0;
   double window_top = (window_height - (int)overlay_->getTextureHeight()) / 2.0;
   overlay_->setPosition(window_left, window_top);
                         
   current_menu_ = next_menu_;
 }
Example #2
0
        WidgetEngine::WidgetEngine( const Device::Display& display, Device::Input& input ) : display( display ), input( input ), inputManager( std::make_shared< InputManager >( *this ) ) {
          prepareOverlay();

          root = RootContainer::create();

          buildDefaultStylesheet();

          eventManager.REFLOW_REQUIRED.listen( this, std::bind( &WidgetEngine::refreshStylesheet, this ) );
        }
 void OverlayMenuDisplay::redraw()
 {
   ROS_DEBUG("redraw");
   prepareOverlay();
   {
     ScopedPixelBuffer buffer = overlay_->getBuffer();
     QColor bg_color(0, 0, 0, 255.0 / 2.0);
     QColor fg_color(25, 255, 240, 255.0);
     QImage Hud = buffer.getQImage(*overlay_, bg_color);
     QPainter painter( &Hud );
     painter.setRenderHint(QPainter::Antialiasing, true);
     painter.setPen(QPen(fg_color, 1, Qt::SolidLine));
     painter.setFont(font());
     int line_height = fontMetrics().height();
     int w = drawAreaWidth(next_menu_);
     painter.drawText(menu_padding_x,  menu_padding_y,
                      w, line_height,
                      Qt::TextWordWrap | Qt::AlignLeft | Qt::AlignTop,
                      next_menu_->title.c_str());
     for (size_t i = 0; i < next_menu_->menus.size(); i++) {
       std::string menu = getMenuString(next_menu_, i);
       painter.drawText(menu_padding_x, line_height * ( 1 + i ) + menu_padding_y + menu_last_padding_y,
                        w, line_height,
                        Qt::TextWordWrap | Qt::AlignLeft | Qt::AlignTop,
                        menu.c_str());
     }
     if (next_menu_->current_index <= next_menu_->menus.size()) {
       // draw '>'
       painter.drawText(menu_padding_x - fontMetrics().width(">") * 2,
                        line_height * ( 1 + next_menu_->current_index ) + menu_padding_y + menu_last_padding_y,
                        w, line_height,
                        Qt::TextWordWrap | Qt::AlignLeft | Qt::AlignTop,
                        ">");
     }
     // draw line
     int texture_width = overlay_->getTextureWidth();
     int texture_height = overlay_->getTextureHeight();
     painter.drawLine(menu_padding_x / 2, menu_last_padding_y / 2 + line_height,
                      menu_padding_x / 2, texture_height - menu_last_padding_y / 2);
     painter.drawLine(texture_width - menu_padding_x / 2, menu_last_padding_y / 2 + line_height,
                      texture_width - menu_padding_x / 2, texture_height - menu_last_padding_y / 2);
     painter.drawLine(menu_padding_x / 2, menu_last_padding_y / 2 + line_height,
                      texture_width - menu_padding_x / 2, menu_last_padding_y / 2 + line_height);
     painter.drawLine(menu_padding_x / 2, texture_height - menu_last_padding_y / 2,
                      texture_width - menu_padding_x / 2, texture_height - menu_last_padding_y / 2);
     
     painter.end();
     current_menu_ = next_menu_;
   }
   overlay_->setDimensions(overlay_->getTextureWidth(), overlay_->getTextureHeight());
   int window_width = context_->getViewManager()->getRenderPanel()->width();
   int window_height = context_->getViewManager()->getRenderPanel()->height();
   double window_left = (window_width - (int)overlay_->getTextureWidth()) / 2.0;
   double window_top = (window_height - (int)overlay_->getTextureHeight()) / 2.0;
   overlay_->setPosition(window_left, window_top);
 }