void PsiContactListViewDelegate::drawGroup(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const { QStyleOptionViewItemV2 o = option; o.font = *font_; o.fontMetrics = *fontMetrics_; QPalette palette = o.palette; QColor background = ColorOpt::instance()->color("options.ui.look.colors.contactlist.grouping.header-background"); QColor foreground = ColorOpt::instance()->color("options.ui.look.colors.contactlist.grouping.header-foreground"); if (!slimGroup_) palette.setColor(QPalette::Base, background); palette.setColor(QPalette::Text, foreground); o.palette = palette; drawBackground(painter, o, index); QRect r = option.rect; if (!slimGroup_ && outlinedGroup_) { painter->setPen(QPen(foreground)); QRect gr(r); gr.setLeft(contactList()->x()); painter->drawRect(gr); } const QPixmap& pixmap = index.data(ContactListModel::ExpandedRole).toBool() ? IconsetFactory::iconPtr("psi/groupOpen")->pixmap() : IconsetFactory::iconPtr("psi/groupClosed")->pixmap(); const QSize pixmapSize = pixmap.size(); QRect pixmapRect = relativeRect(option, pixmapSize, QRect()); r = relativeRect(option, QSize(), pixmapRect, 3); painter->drawPixmap(pixmapRect.topLeft(), pixmap); QString text = index.data(Qt::ToolTipRole).toString(); drawText(painter, o, r, text, index); if(slimGroup_ && !(option.state & QStyle::State_Selected)) { int h = r.y() + (r.height() / 2); int x = r.left() + fontMetrics_->width(text) + 8; painter->setPen(QPen(background,2)); painter->drawLine(x, h, r.right(), h); } }
void PsiContactListViewDelegate::drawAccount(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const { QStyleOptionViewItemV2 o = option; o.font = *font_; o.fontMetrics = *fontMetrics_; QPalette palette = o.palette; palette.setColor(QPalette::Base, ColorOpt::instance()->color("options.ui.look.colors.contactlist.profile.header-background")); QColor foreground = ColorOpt::instance()->color("options.ui.look.colors.contactlist.profile.header-foreground"); palette.setColor(QPalette::Text, foreground); o.palette = palette; drawBackground(painter, o, index); if (outlinedGroup_) { painter->setPen(QPen(foreground)); painter->drawRect(option.rect); } const QPixmap statusPixmap = this->statusPixmap(index); const QSize pixmapSize = statusPixmap.size(); const QRect avatarRect = relativeRect(o, pixmapSize, QRect()); QString text = nameText(o, index); QRect r = relativeRect(o, QSize(o.fontMetrics.width(text), o.rect.height()), avatarRect, 3); painter->drawPixmap(avatarRect.topLeft(), statusPixmap); drawText(painter, o, r, text, index); QPixmap sslPixmap = index.data(ContactListModel::UsingSSLRole).toBool() ? IconsetFactory::iconPixmap("psi/cryptoYes") : IconsetFactory::iconPixmap("psi/cryptoNo"); const QSize sslPixmapSize = statusPixmap.size(); QRect sslRect = relativeRect(o, sslPixmapSize, r, 3); painter->drawPixmap(sslRect.topLeft(), sslPixmap); r = relativeRect(option, QSize(), sslRect, 3); text = QString("(%1/%2)") .arg(index.data(ContactListModel::OnlineContactsRole).toInt()) .arg(index.data(ContactListModel::TotalContactsRole).toInt()); drawText(painter, o, r, text, index); }
KisTextureTile::KisTextureTile(QRect imageRect, const KisGLTexturesInfo *texturesInfo, const QByteArray &fillData, FilterMode filter) : m_textureId(0) #ifdef USE_PIXEL_BUFFERS , m_glBuffer(0) #endif , m_tileRectInImagePixels(imageRect) , m_filter(filter) , m_texturesInfo(texturesInfo) , m_needsMipmapRegeneration(false) { const GLvoid *fd = fillData.constData(); m_textureRectInImagePixels = stretchRect(m_tileRectInImagePixels, texturesInfo->border); m_tileRectInTexturePixels = relativeRect(m_textureRectInImagePixels, m_tileRectInImagePixels, m_texturesInfo); glGenTextures(1, &m_textureId); glBindTexture(GL_TEXTURE_2D, m_textureId); setTextureParameters(); #ifdef USE_PIXEL_BUFFERS createTextureBuffer(fillData); // we set fill data to 0 so the next glTexImage2D call uses our buffer fd = 0; #endif glTexImage2D(GL_TEXTURE_2D, 0, m_texturesInfo->internalFormat, m_texturesInfo->width, m_texturesInfo->height, 0, m_texturesInfo->format, m_texturesInfo->type, fd); #ifdef USE_PIXEL_BUFFERS KisConfig cfg; if (cfg.useOpenGLTextureBuffer()) { m_glBuffer->release(); } #endif setNeedsMipmapRegeneration(); }
KisTextureTile::KisTextureTile(QRect imageRect, const KisGLTexturesInfo *texturesInfo, const GLvoid *fillData, FilterMode filter) : m_tileRectInImagePixels(imageRect), m_texturesInfo(texturesInfo) { m_textureRectInImagePixels = stretchRect(m_tileRectInImagePixels, texturesInfo->border); m_tileRectInTexturePixels = relativeRect(m_textureRectInImagePixels, m_tileRectInImagePixels, m_texturesInfo); glGenTextures(1, &m_textureId); glBindTexture(GL_TEXTURE_2D, m_textureId); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); switch(filter) { case NearestFilterMode: glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); break; case BilinearFilterMode: glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); break; case TrilinearFilterMode: glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); break; } glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glTexImage2D(GL_TEXTURE_2D, 0, m_texturesInfo->internalFormat, m_texturesInfo->width, m_texturesInfo->height, 0, m_texturesInfo->format, GL_UNSIGNED_BYTE, fillData); }
void PsiContactListViewDelegate::drawContact(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const { drawBackground(painter, option, index); const QPixmap statusPixmap = this->statusPixmap(index); const QSize pixmapSize = statusPixmap.size(); const QRect avatarRect = relativeRect(option, pixmapSize, QRect()); painter->drawPixmap(avatarRect.topLeft(), statusPixmap); QRect r = relativeRect(option, QSize(), avatarRect, 3); QColor textColor; if(index.data(ContactListModel::IsAnimRole).toBool()) { if(index.data(ContactListModel::PhaseRole).toBool()) { textColor = ColorOpt::instance()->color("options.ui.look.colors.contactlist.status-change-animation2"); } else { textColor = ColorOpt::instance()->color("options.ui.look.colors.contactlist.status-change-animation1"); } } else { if (statusType(index) == XMPP::Status::Away || statusType(index) == XMPP::Status::XA) textColor = ColorOpt::instance()->color("options.ui.look.colors.contactlist.status.away"); else if (statusType(index) == XMPP::Status::DND) textColor = ColorOpt::instance()->color("options.ui.look.colors.contactlist.status.do-not-disturb"); else if (statusType(index) == XMPP::Status::Offline) textColor = ColorOpt::instance()->color("options.ui.look.colors.contactlist.status.offline"); else textColor = ColorOpt::instance()->color("options.ui.look.colors.contactlist.status.online"); } QStyleOptionViewItemV2 o = option; o.font = *font_; o.fontMetrics = *fontMetrics_; QPalette palette = o.palette; palette.setColor(QPalette::Text, textColor); o.palette = palette; QString text = nameText(o, index); if (showStatusMessages_ && !statusText(index).isEmpty()) { if(!statusSingle_) { text = tr("%1 (%2)").arg(text).arg(statusText(index)); drawText(painter, o, r, text, index); } else { QRect txtRect(r); txtRect.setHeight(r.height()*2/3); drawText(painter, o, txtRect, text, index); QString statusMsg = statusText(index); palette.setColor(QPalette::Text, ColorOpt::instance()->color("options.ui.look.colors.contactlist.status-messages")); o.palette = palette; txtRect.moveTopRight(txtRect.bottomRight()); txtRect.setHeight(r.height() - txtRect.height()); o.font.setPointSize(qMax(o.font.pointSize()-2, 7)); o.fontMetrics = QFontMetrics(o.font); drawText(painter, o, txtRect, statusMsg, index); } } else { if(showStatusMessages_ && statusSingle_) r.setHeight(r.height()*2/3); drawText(painter, o, r, text, index); } #if 0 int x; if (d->status_single) x = widthUsed(); else { QFontMetrics fm(p->font()); const QPixmap *pix = pixmap(column); x = fm.width(text(column)) + (pix ? pix->width() : 0) + 8; } if (d->u) { UserResourceList::ConstIterator it = d->u->priority(); if (it != d->u->userResourceList().end()) { if (d->u->isSecure((*it).name())) { const QPixmap &pix = IconsetFactory::iconPixmap("psi/cryptoYes"); int y = (height() - pix.height()) / 2; p->drawPixmap(x, y, pix); x += 24; } } } #endif }
void Console::draw( gfx::Engine& painter ) { if( !font().isValid() ) { Widget::draw( painter ); return; } if( visible() ) // render only if the console is visible { if( toggle_visible_ != NONE ) { if( toggle_visible_ == DOWNLIGTH ) { if (_opacity > 5) _opacity -= 9; else setVisible(false); _d->dirty = true; } else { if (_opacity < 0xff) _opacity += 3; else toggle_visible_ = NONE; _d->dirty = true; } } Rect textRect, shellRect; //we calculate where the message log shall be printed and where the prompt shall be printed calculatePrintRects(textRect,shellRect); if(_d->dirty) { Decorator::drawLines(_d->bg, ColorList::red, relativeRect().lines()); _d->bg.fill(ColorList::blue); unsigned int maxLines, lineHeight; //now, render the messages int fontHeight=0; if (!calculateLimits(maxLines,lineHeight,fontHeight)) { return; } Rect lineRect( textRect.left(), //calculate the line rectangle textRect.top(), textRect.right(), textRect.bottom() + lineHeight); for (unsigned int index = 0; index < console_messages_.size(); index++) { unsigned int rindex = (_d->curIndex + index) % console_messages_.size(); const std::string& line = console_messages_[rindex]; font().draw(_d->bg, line, lineRect.lefttop(), false, false); lineRect += Point(0, lineHeight); //update line rectangle } std::string shellText = "$>" + currentCommand_; font().draw( _d->bg, shellText, shellRect.lefttop(), false, false); //draw the prompt string _d->dirty = false; _d->bg.update(); _d->bg.setAlpha(_opacity/3*2); } painter.draw( _d->bg, absoluteRect().lefttop() ); if( DateTime::elapsedTime() % 700 < 350 ) { NColor color = ColorList::white; color.setAlpha(_opacity/2); painter.fillRect( color, Rect(0, 0, _d->commandCursorWidth,shellRect.height()*0.8) +absoluteRect().leftbottom() + Point(_d->commandTextSize.width(), -shellRect.height()) ); } } Widget::draw( painter ); }