void PropertyControlRuler::paintEvent(QPaintEvent *event) { ControlRuler::paintEvent(event); QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); QBrush brush(Qt::SolidPattern); QPen highlightPen(GUIPalette::getColour(GUIPalette::SelectedElement), 2, Qt::SolidLine, Qt::SquareCap, Qt::MiterJoin); QPen pen(GUIPalette::getColour(GUIPalette::MatrixElementBorder), 0.5, Qt::SolidLine, Qt::SquareCap, Qt::MiterJoin); // Use a fast vector list to record selected items that are currently visible so that they // can be drawn last - can't use m_selectedItems as this covers all selected, visible or not std::vector<ControlItem*> selectedvector; for (ControlItemList::iterator it = m_visibleItems.begin(); it != m_visibleItems.end(); ++it) { if (!(*it)->isSelected()) { brush.setColor((*it)->getColour().lighter()); painter.setBrush(brush); painter.setPen(Qt::NoPen); painter.drawPolygon(mapItemToWidget(*it)); painter.setPen(pen); painter.drawPolyline(mapItemToWidget(*it)); } else { selectedvector.push_back(*it); } } for (std::vector<ControlItem*>::iterator it = selectedvector.begin(); it != selectedvector.end(); ++it) { brush.setColor(((*it)->getColour())); painter.setBrush(brush); painter.setPen(Qt::NoPen); painter.drawPolygon(mapItemToWidget(*it)); painter.setPen(highlightPen); painter.drawPolyline(mapItemToWidget(*it)); } }
void ControllerEventsRuler::paintEvent(QPaintEvent *event) { ControlRuler::paintEvent(event); // If this is the first time we've drawn this view, // reconfigure all items to make sure their icons // come out the right size ///@TODO Only reconfigure all items if zoom has changed if (m_lastDrawnRect != m_pannedRect) { EventControlItem *item; for (ControlItemMap::iterator it = m_controlItemMap.begin(); it != m_controlItemMap.end(); ++it) { item = static_cast <EventControlItem *> (it->second); item->reconfigure(); } m_lastDrawnRect = m_pannedRect; } QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); QBrush brush(GUIPalette::getColour(GUIPalette::ControlItem),Qt::SolidPattern); // QPen highlightPen(GUIPalette::getColour(GUIPalette::SelectedElement), // 2, Qt::SolidLine, Qt::SquareCap, Qt::MiterJoin); QPen pen(GUIPalette::getColour(GUIPalette::MatrixElementBorder), 0.5, Qt::SolidLine, Qt::SquareCap, Qt::MiterJoin); painter.setBrush(brush); painter.setPen(pen); QString str; // str = QString::fromStdString(m_controller->getName()); // painter.drawText(10,20,str.toUpper()); ControlItemMap::iterator mapIt; float lastX, lastY; lastX = m_rulerScale->getXForTime(m_segment->getStartTime()); if (m_nextItemLeft != m_controlItemMap.end()) { EventControlItem *item = static_cast<EventControlItem*> (m_nextItemLeft->second); lastY = item->y(); } else { lastY = valueToY(m_controller->getDefault()); } mapIt = m_firstVisibleItem; while (mapIt != m_controlItemMap.end()) { EventControlItem *item = static_cast<EventControlItem*> (mapIt->second); painter.drawLine(mapXToWidget(lastX),mapYToWidget(lastY), mapXToWidget(item->xStart()),mapYToWidget(lastY)); painter.drawLine(mapXToWidget(item->xStart()),mapYToWidget(lastY), mapXToWidget(item->xStart()),mapYToWidget(item->y())); lastX = item->xStart(); lastY = item->y(); if (mapIt == m_lastVisibleItem) { mapIt = m_controlItemMap.end(); } else { ++mapIt; } } painter.drawLine(mapXToWidget(lastX),mapYToWidget(lastY), mapXToWidget(m_rulerScale->getXForTime(m_segment->getEndTime())*m_xScale), mapYToWidget(lastY)); // Use a fast vector list to record selected items that are currently visible so that they // can be drawn last - can't use m_selectedItems as this covers all selected, visible or not std::vector<ControlItem*> selectedvector; for (ControlItemList::iterator it = m_visibleItems.begin(); it != m_visibleItems.end(); ++it) { if (!(*it)->isSelected()) { painter.drawPolygon(mapItemToWidget(*it)); } else { selectedvector.push_back(*it); } } // painter.setBrush(brush); pen.setColor(GUIPalette::getColour(GUIPalette::SelectedElement)); pen.setWidthF(2.0); painter.setPen(pen); QFontMetrics fontMetrics(painter.font()); int fontHeight = fontMetrics.height(); int fontOffset = fontMetrics.width('+'); for (std::vector<ControlItem*>::iterator it = selectedvector.begin(); it != selectedvector.end(); ++it) { // Draw the marker painter.drawPolygon(mapItemToWidget(*it)); // For selected items, draw the value in text alongside the marker // By preference, this should sit on top of the new line that represents this value change str = QString::number(yToValue((*it)->y())-m_controller->getDefault()); int x = mapXToWidget((*it)->xStart())+0.4*fontOffset; int y = std::max(mapYToWidget((*it)->y())-0.2f*fontHeight,float(fontHeight)); painter.setPen(QPen(Qt::NoPen)); painter.setBrush(QBrush(Qt::white)); painter.drawRect(QRect(x,y+2,fontMetrics.width(str),-(fontMetrics.height()-2))); painter.setPen(pen); painter.setBrush(brush); painter.drawText(x,y,str); } if (m_selectionRect) { pen.setColor(GUIPalette::getColour(GUIPalette::MatrixElementBorder)); pen.setWidthF(0.5); painter.setPen(pen); brush.setStyle(Qt::NoBrush); painter.setBrush(brush); painter.drawRect(mapItemToWidget(m_selectionRect)); } // draw the rubber band indicating where a line of controllers will go if (m_rubberBand && m_rubberBandVisible) { int x1 = mapXToWidget(m_rubberBand->x1()); int y1 = mapYToWidget(m_rubberBand->y1()); int x2 = mapXToWidget(m_rubberBand->x2()); int y2 = mapYToWidget(m_rubberBand->y2()); painter.setPen(Qt::red); painter.drawLine(x1, y1, x2, y2); } }