void BreadcrumbItemSortButton::drawHoverBackground( QPainter *painter ) { const bool isHovered = isDisplayHintEnabled( HoverHint ); if( isHovered ) { QStyleOptionViewItemV4 option; option.initFrom(this); option.state = QStyle::State_Enabled | QStyle::State_MouseOver; option.viewItemPosition = QStyleOptionViewItemV4::OnlyOne; if( m_arrowHovered ) { option.rect = m_arrowRect; } style()->drawPrimitive( QStyle::PE_PanelItemViewItem, &option, painter, this ); } }
void KUrlNavigatorButtonBase::drawHoverBackground(QPainter *painter) { const bool isHighlighted = isDisplayHintEnabled(EnteredHint) || isDisplayHintEnabled(DraggedHint) || isDisplayHintEnabled(PopupActiveHint); QColor backgroundColor = isHighlighted ? palette().color(QPalette::Highlight) : Qt::transparent; if (!m_active && isHighlighted) { backgroundColor.setAlpha(128); } if (backgroundColor != Qt::transparent) { // TODO: the backgroundColor should be applied to the style QStyleOptionViewItemV4 option; option.initFrom(this); option.state = QStyle::State_Enabled | QStyle::State_MouseOver; option.viewItemPosition = QStyleOptionViewItemV4::OnlyOne; style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &option, painter, this); } }
void AnimatedBarWidget::drawHoverBackground(QPainter* painter) { const bool isHovered = isHoverHintEnabled(); if( isHovered ) { QStyleOptionViewItemV4 option; option.initFrom(this); option.state = QStyle::State_Enabled | QStyle::State_Selected; option.viewItemPosition = QStyleOptionViewItemV4::OnlyOne; style()->drawPrimitive( QStyle::PE_PanelItemViewItem, &option, painter, this ); } else { QStyleOptionViewItemV4 option; option.initFrom(this); option.state = QStyle::State_Enabled | QStyle::State_MouseOver; option.viewItemPosition = QStyleOptionViewItemV4::OnlyOne; style()->drawPrimitive( QStyle::PE_PanelItemViewItem, &option, painter, this ); } }
QSize TestResultDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const { QStyleOptionViewItemV4 opt = option; // make sure opt.rect is initialized correctly - otherwise we might get a width of 0 opt.initFrom(opt.widget); initStyleOption(&opt, index); const QAbstractItemView *view = qobject_cast<const QAbstractItemView *>(opt.widget); const bool selected = view->selectionModel()->currentIndex() == index; QFontMetrics fm(opt.font); int fontHeight = fm.height(); TestResultFilterModel *resultFilterModel = static_cast<TestResultFilterModel *>(view->model()); LayoutPositions positions(opt, resultFilterModel); QSize s; s.setWidth(opt.rect.width()); if (selected) { const TestResult &testResult = resultFilterModel->testResult(index); QString output = outputString(testResult, selected); output.replace(QLatin1Char('\n'), QChar::LineSeparator); if (AutotestPlugin::instance()->settings()->limitResultOutput && output.length() > outputLimit) output = output.left(outputLimit).append(QLatin1String("...")); recalculateTextLayout(index, output, opt.font, positions.textAreaWidth()); s.setHeight(m_lastCalculatedHeight + 3); } else { s.setHeight(fontHeight + 3); } if (s.height() < positions.minimumHeight()) s.setHeight(positions.minimumHeight()); return s; }
void PartitionComboBox::paintEvent( QPaintEvent* event ) { Q_UNUSED( event ); QPainter painter( this ); QStyleOptionComboBox option; initStyleOption( &option ); option.rect.setWidth( layout()->itemAt( 0 )->geometry().width() -layout()->spacing() ); if ( option.state & QStyle::State_MouseOver || currentIndex() == -1 ) { style()->drawComplexControl( QStyle::CC_ComboBox, &option, &painter, this ); style()->drawControl( QStyle::CE_ComboBoxLabel, &option, &painter, this ); } else { const QModelIndex index = partitionModel()->QAbstractTableModel::index( currentIndex(), modelColumn(), rootModelIndex() ); QStyleOptionViewItemV4 o; o.initFrom( this ); o.widget = this; o.rect = option.rect; itemDelegate()->paint( &painter, o, index ); } }
void MoonPhaseCalendar::paintCell( QPainter *painter, int row, int col, const KColorScheme &colorScheme ) { double w = cellWidth - 1; double h = cellHeight - 1; QRectF cell = QRectF( 0, 0, w, h ); QString cellText; QPen pen; QColor cellBackgroundColor, cellTextColor; QFont cellFont = KGlobalSettings::generalFont(); bool workingDay = false; int cellWeekDay, pos; //Calculate the position of the cell in the grid pos = numDayColumns * ( row - 1 ) + col; //Calculate what day of the week the cell is cellWeekDay = col + calendar()->weekStartDay(); if ( cellWeekDay > numDayColumns ) { cellWeekDay -= numDayColumns; } //See if cell day is normally a working day if ( KGlobal::locale()->workingWeekStartDay() <= KGlobal::locale()->workingWeekEndDay() ) { workingDay = cellWeekDay >= KGlobal::locale()->workingWeekStartDay() && cellWeekDay <= KGlobal::locale()->workingWeekEndDay(); } else { workingDay = cellWeekDay >= KGlobal::locale()->workingWeekStartDay() || cellWeekDay <= KGlobal::locale()->workingWeekEndDay(); } if( row == 0 ) { //We are drawing a header cell //If not a normal working day, then use "do not work today" color if ( workingDay ) { cellTextColor = palette().color(QPalette::WindowText); } else { KColorScheme colorScheme(palette().currentColorGroup(), KColorScheme::Window); cellTextColor = colorScheme.foreground(KColorScheme::NegativeText).color(); } cellBackgroundColor = palette().color(QPalette::Window); //Set the text to the short day name and bold it cellFont.setBold( true ); cellText = calendar()->weekDayName( cellWeekDay, KCalendarSystem::ShortDayName ); } else { //We are drawing a day cell //Calculate the date the cell represents QDate cellDate = dateFromPos( pos ); bool validDay = calendar()->isValid( cellDate ); // Draw the day number in the cell, if the date is not valid then we don't want to show it if ( validDay ) { cellText = calendar()->dayString( cellDate, KCalendarSystem::ShortFormat ); } else { cellText = ""; } if( ! validDay || calendar()->month( cellDate ) != calendar()->month( date() ) ) { // we are either // ° painting an invalid day // ° painting a day of the previous month or // ° painting a day of the following month or cellBackgroundColor = palette().color(backgroundRole()); cellTextColor = colorScheme.foreground(KColorScheme::InactiveText).color(); } else { //Paint a day of the current month // Background Colour priorities will be (high-to-low): // * Selected Day Background Colour // * Customized Day Background Colour // * Normal Day Background Colour // Background Shape priorities will be (high-to-low): // * Customized Day Shape // * Normal Day Shape // Text Colour priorities will be (high-to-low): // * Customized Day Colour // * Day of Pray Colour (Red letter) // * Selected Day Colour // * Normal Day Colour //Determine various characteristics of the cell date bool selectedDay = ( cellDate == date() ); bool currentDay = ( cellDate == QDate::currentDate() ); bool dayOfPray = ( calendar()->dayOfWeek( cellDate ) == KGlobal::locale()->weekDayOfPray() ); //Default values for a normal cell cellBackgroundColor = palette().color( backgroundRole() ); cellTextColor = palette().color( foregroundRole() ); // If we are drawing the current date, then draw it bold and active if ( currentDay ) { cellFont.setBold( true ); cellTextColor = colorScheme.foreground(KColorScheme::ActiveText).color(); } // if we are drawing the day cell currently selected in the table if ( selectedDay ) { // set the background to highlighted cellBackgroundColor = palette().color( QPalette::Highlight ); cellTextColor = palette().color( QPalette::HighlightedText ); } //If the cell day is the day of religious observance, then always color text red unless Custom overrides if ( dayOfPray ) { KColorScheme colorScheme(palette().currentColorGroup(), selectedDay ? KColorScheme::Selection : KColorScheme::View); cellTextColor = colorScheme.foreground(KColorScheme::NegativeText).color(); } } } //Draw the background if (row == 0) { painter->setPen( cellBackgroundColor ); painter->setBrush( cellBackgroundColor ); painter->drawRect( cell ); } else if (cellBackgroundColor != palette().color(backgroundRole())) { QStyleOptionViewItemV4 opt; opt.initFrom(this); opt.rect = cell.toRect(); if (cellBackgroundColor != palette().color(backgroundRole())) { opt.palette.setBrush(QPalette::Highlight, cellBackgroundColor); opt.state |= QStyle::State_Selected; } if (false && opt.state & QStyle::State_Enabled) { opt.state |= QStyle::State_MouseOver; } else { opt.state &= ~QStyle::State_MouseOver; } opt.showDecorationSelected = true; opt.viewItemPosition = QStyleOptionViewItemV4::OnlyOne; style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &opt, painter, this); } if( row != 0 ) { // Paint the moon phase QDate cellDate = dateFromPos( pos ); if( calendar()->isValid( cellDate ) ) { int iPhase = computeMoonPhase( KStarsDateTime( cellDate, QTime(0, 0, 0) ) ); QRect drawRect = cell.toRect(); painter->drawPixmap( ( drawRect.width() - MoonImageSize )/2, 12 + (( drawRect.height() - 12 ) - MoonImageSize)/2, m_Images[ iPhase ] ); // FIXME: Using hard coded fon // + painter // painter->drawPixmap( ( drawRect.width() - MoonImageSize )/2, // 12 + (( drawRect.height() - 12 ) - MoonImageSize)/2, // m_Images[ iPhase ] ); // FIXME: Using hard coded fontsize // kDebug() << "Drew moon image " << iPhase; } } //Draw the text painter->setPen( cellTextColor ); painter->setFont( cellFont ); painter->drawText( cell, (row == 0) ? Qt::AlignCenter : (Qt::AlignTop | Qt::AlignHCenter), cellText, &cell ); //Draw the base line if (row == 0) { painter->setPen( palette().color(foregroundRole()) ); painter->drawLine( QPointF( 0, h ), QPointF( w, h ) ); } // If the day cell we just drew is bigger than the current max cell sizes, // then adjust the max to the current cell /* if ( cell.width() > d->maxCell.width() ) d->maxCell.setWidth( cell.width() ); if ( cell.height() > d->maxCell.height() ) d->maxCell.setHeight( cell.height() ); */ }