void EmojiBox::paintEvent(QPaintEvent *e) { QPainter p(this); if (_cache.isNull()) { if (!_hiding || a_opacity.current() > 0.01) { // fill bg p.fillRect(0, 0, _width, _height, st::boxBG->b); p.setFont(st::boxFont->f); p.setPen(st::boxGrayTitle->p); _header.draw(p, 0, st::boxPadding.top(), _width, Qt::AlignCenter); p.setFont(st::emojiTextFont->f); p.setPen(st::black->p); int32 top = st::boxPadding.top() + st::boxFont->height + (st::emojiReplaceHeight - _blockHeight) / 2; for (Blocks::const_iterator i = _blocks.cbegin(), e = _blocks.cend(); i != e; ++i) { int32 rowSize = i->size(), left = (_width - rowSize * st::emojiReplaceWidth) / 2; for (BlockRow::const_iterator j = i->cbegin(), en = i->cend(); j != en; ++j) { if (j->emoji) { QPoint pos(left + (st::emojiReplaceWidth - st::emojiSize) / 2, top + (st::emojiReplaceHeight - _blockHeight) / 2); p.drawPixmap(pos, App::emojis(), QRect(j->emoji->x, j->emoji->y, st::emojiSize, st::emojiSize)); } QRect trect(left, top + (st::emojiReplaceHeight + _blockHeight) / 2 - st::emojiTextFont->height, st::emojiReplaceWidth, st::emojiTextFont->height); p.drawText(trect, j->text, QTextOption(Qt::AlignHCenter | Qt::AlignTop)); left += st::emojiReplaceWidth; } top += st::emojiReplaceHeight; } } } else { p.setOpacity(a_opacity.current()); p.drawPixmap(0, 0, _cache); } }
void ServiceMessagePainter::paint(Painter &p, const HistoryService *message, const PaintContext &context, int height) { int left = 0, width = 0; message->countPositionAndSize(left, width); if (width < 1) return; uint64 fullAnimMs = App::main() ? App::main()->animActiveTimeStart(message) : 0; if (fullAnimMs > 0 && fullAnimMs <= context.ms) { int animms = context.ms - fullAnimMs; if (animms > st::activeFadeInDuration + st::activeFadeOutDuration) { App::main()->stopAnimActive(); } else { int skiph = st::msgServiceMargin.top() - st::msgServiceMargin.bottom(); textstyleSet(&st::inTextStyle); float64 dt = (animms > st::activeFadeInDuration) ? (1 - (animms - st::activeFadeInDuration) / float64(st::activeFadeOutDuration)) : (animms / float64(st::activeFadeInDuration)); float64 o = p.opacity(); p.setOpacity(o * dt); p.fillRect(0, skiph, message->history()->width, message->height() - skiph, textstyleCurrent()->selectOverlay->b); p.setOpacity(o); } } textstyleSet(&st::serviceTextStyle); if (auto media = message->getMedia()) { height -= st::msgServiceMargin.top() + media->height(); int32 left = st::msgServiceMargin.left() + (width - media->maxWidth()) / 2, top = st::msgServiceMargin.top() + height + st::msgServiceMargin.top(); p.translate(left, top); media->draw(p, context.clip.translated(-left, -top), message->toMediaSelection(context.selection), context.ms); p.translate(-left, -top); } QRect trect(QRect(left, st::msgServiceMargin.top(), width, height).marginsAdded(-st::msgServicePadding)); paintBubble(p, left, width, message->_text, trect); if (width > message->maxWidth()) { left += (width - message->maxWidth()) / 2; width = message->maxWidth(); } p.setBrush(Qt::NoBrush); p.setPen(st::msgServiceColor); p.setFont(st::msgServiceFont); message->_text.draw(p, trect.x(), trect.y(), trect.width(), Qt::AlignCenter, 0, -1, context.selection, false); textstyleRestore(); }
void TagView::paintEvent(QPaintEvent *e){ QPainter p(this); p.setRenderHints(p.Antialiasing); QFontMetrics fm(font); QColor white(255,255,255,100); if (nrow==1){ p.setFont(font); p.setPen(Qt::transparent); p.setBrush(white); int w=fm.width(name)+10; int h=fm.height()+6; p.drawRoundedRect(0,0,w,h,3,3); QRect trect(5,3,w-10,h-6); p.setPen(Qt::darkGray); p.drawText(trect,Qt::AlignCenter,name); } else if (nrow==2){} else e->ignore(); e->accept(); }
void PanelButton::paintEvent(QPaintEvent * e){ QPainter p(this); p.setRenderHint(p.Antialiasing); QColor lB(223,228,235); QColor lB2(203,208,215); QLinearGradient lg(0,0,0,height()); lg.setColorAt(0,lB); lg.setColorAt(1,lB2); p.setBrush(lg); p.setPen(Qt::transparent); p.drawRect(0,0,width()-5,height()); QColor lB3(183,188,195); p.setPen(lB3); p.drawLine(0,this->height(),this->width()-5,this->height()); if (count()>0) { QColor fc(60,60,60); p.setPen(fc); QFont font; //font.setBold(true); font.setFamily("URW Gothic L"); p.setFont(font); QRect trect(0,0,width()-5,height()); p.drawText(trect,Qt::AlignCenter,this->itemText(currentIndex())); } e->accept(); }
bool Level::_tryExecHotkey(NEvent &event) { bool handled = false; if( event.EventType == sEventKeyboard && !event.keyboard.pressed) { handled = game::HotkeyManager::instance().execute(event.keyboard.key, event.keyboard.control, event.keyboard.shift, event.keyboard.alt); if (handled) return true; if( !event.keyboard.shift ) { handled = true; switch (event.keyboard.key) { case KEY_KEY_E: { TilePos center = _d->renderer.camera()->center(); TileRect trect( center-config::tilemap.unitLocation(), center+config::tilemap.unitLocation()); TilePos currect = _d->game->city()->getBorderInfo(PlayerCity::roadEntry).epos(); PlayerCity::TileType rcenter = trect.contain(currect) ? PlayerCity::roadExit : PlayerCity::roadEntry; _d->renderer.camera()->setCenter( _d->game->city()->getBorderInfo( rcenter ).epos(), false ); } break; default: handled = false; break; } if (handled) return handled; } switch(event.keyboard.key) { case KEY_KEY_P: { _d->simulationPaused = !_d->simulationPaused; events::dispatch<Pause>(_d->simulationPaused ? Pause::pause : Pause::play); handled = true; } break; case KEY_F1: case KEY_F2: case KEY_F3: case KEY_F4: { if( event.keyboard.control ) { unsigned int index = event.keyboard.key - KEY_KEY_1; development::Options bopts; bopts = _d->game->city()->buildOptions(); if( event.keyboard.shift ) { TilePos camPos = _d->renderer.camera()->center(); _d->game->city()->activePoints().set( index, camPos ); _d->game->city()->setBuildOptions( bopts ); } else { TilePos camPos = _d->game->city()->activePoints().get( index ); _d->renderer.camera()->setCenter( camPos ); } handled = true; } } break; case KEY_SNAPSHOT: _d->makeScreenShot(); handled = true; break; case KEY_ESCAPE: { Widget::Widgets children = _d->game->gui()->rootWidget()->children(); for (auto it : children) { bool handled = it->onEvent(event); if (handled) break; } } break; default: break; } } return handled; }
LRESULT CSVGElementListView::OnPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { CPaintDC dc(m_hWnd); long scrollposY; m_vert->get_pos(&scrollposY); if (dc.IntersectClipRect(&m_areaRect) > NULLREGION) { dc.SetViewportOrg(m_areaRect.left, m_areaRect.top -scrollposY); HFONT hOldFont = dc.GetCurrentFont(); CFont font = (HFONT)GetStockObject(DEFAULT_GUI_FONT); LOGFONT lf; font.GetLogFont(&lf); lf.lfWeight = FW_BOLD; CFont boldFont; boldFont.CreateFontIndirect(&lf); dc.SetBkMode(TRANSPARENT); int itemHeight = (m_view == 0 || m_view == 2)? SMALL: LARGE; int ncolumns = m_areaRect.Width()/itemHeight; if (ncolumns == 0) ncolumns = 1; for (int i = 0; i < m_items.GetSize(); i++) { int x, y; int x2, y2; int twidth, theight; if (m_view == 0 || m_view == 1) // Small/Large Thumbnails { x = i%ncolumns *itemHeight; y = i/ncolumns *itemHeight; x2 = x+3; y2 = y+3; twidth = itemHeight-6; theight = itemHeight-6; } else // Small/Large ListView { x = 0; y = i*itemHeight; x2 = x+3; y2 = y+3; twidth = itemHeight-6; theight = itemHeight-6; } bool bSelected = IsItemSelected(m_items[i]); _bstr_t id; /* if (m_items[i]->m_element) { BSTR bid; m_items[i]->m_element->getAttribute(L"id", &bid); id = _bstr_t(bid, false); } else */ { id = m_items[i]->m_name; } if (m_view == 2 || m_view == 3) // Small/Large Listview, display id { dc.MoveTo(0, y); dc.LineTo(m_areaRect.Width(), y); dc.FillSolidRect(0, y+1, m_areaRect.Width(), itemHeight-1, GetSysColor(COLOR_WINDOW)); dc.Draw3dRect(x2-1, y2-1, twidth+2, theight+2, RGB(0, 0, 0), RGB(0, 0, 0)); if (bSelected) { dc.SelectFont(boldFont); dc.SetTextColor(GetSysColor(COLOR_HIGHLIGHTTEXT)); dc.SetBkColor(GetSysColor(COLOR_HIGHLIGHT)); dc.FillSolidRect(0, y+2, m_areaRect.Width(), itemHeight-3, dc.GetBkColor()); } else { dc.SelectFont(font); dc.SetTextColor(GetSysColor(COLOR_WINDOWTEXT)); dc.SetBkColor(GetSysColor(COLOR_WINDOW)); } CRect trect(itemHeight+2, y+3, m_areaRect.Width(), y+itemHeight-3); dc.DrawText(id, id.length(), &trect, DT_SINGLELINE | DT_VCENTER | DT_NOPREFIX | DT_END_ELLIPSIS); } else // Thumbnails { dc.Draw3dRect(x, y, itemHeight, itemHeight, RGB(0, 0, 0), RGB(0, 0, 0)); if (bSelected) { dc.Draw3dRect(x+2, y+2, itemHeight-4, itemHeight-4, RGB(0,0,0), RGB(0,0,0)); } } DRAWITEMSTRUCT dis; dis.hDC = dc.m_hDC; dis.rcItem = CRect(x2, y2, x2+twidth, y2+theight); dis.itemData = (ULONG_PTR)m_items[i]; ::SendMessage(GetParent(), WM_DRAWITEM, 0, (LPARAM)&dis); } dc.SelectFont(hOldFont); } return 0; }
void Menu::renderSubmenu(MenuItem *menu) { Common::Rect *r = &menu->subbbox; if (r->width() == 0 || r->height() == 0) return; Design::drawFilledRect(&_gui->_screen, *r, kColorWhite, _gui->_patterns, kPatternSolid); Design::drawRect(&_gui->_screen, *r, 1, kColorBlack, _gui->_patterns, kPatternSolid); Design::drawVLine(&_gui->_screen, r->right + 1, r->top + 3, r->bottom + 1, 1, kColorBlack, _gui->_patterns, kPatternSolid); Design::drawHLine(&_gui->_screen, r->left + 3, r->right + 1, r->bottom + 1, 1, kColorBlack, _gui->_patterns, kPatternSolid); int x = r->left + kMenuDropdownPadding; int y = r->top + 1; for (uint i = 0; i < menu->subitems.size(); i++) { Common::String text(menu->subitems[i]->text); Common::String acceleratorText(getAcceleratorString(menu->subitems[i], "")); int accelX = r->right - 25; int color = kColorBlack; if (i == (uint)_activeSubItem && !text.empty() && menu->subitems[i]->enabled) { color = kColorWhite; Common::Rect trect(r->left, y - (_gui->_builtInFonts ? 1 : 0), r->right, y + _font->getFontHeight()); Design::drawFilledRect(&_gui->_screen, trect, kColorBlack, _gui->_patterns, kPatternSolid); } if (!text.empty()) { Graphics::ManagedSurface *s = &_gui->_screen; int tx = x, ty = y; if (!menu->subitems[i]->enabled) { s = &_tempSurface; tx = 0; ty = 0; accelX -= x; _tempSurface.clear(kColorGreen); } _font->drawString(s, text, tx, ty, r->width(), color); if (!acceleratorText.empty()) _font->drawString(s, acceleratorText, accelX, ty, r->width(), color); if (!menu->subitems[i]->enabled) { // I am lazy to extend drawString() with plotProc as a parameter, so // fake it here for (int ii = 0; ii < _tempSurface.h; ii++) { const byte *src = (const byte *)_tempSurface.getBasePtr(0, ii); byte *dst = (byte *)_gui->_screen.getBasePtr(x, y+ii); byte pat = _gui->_patterns[kPatternCheckers2 - 1][ii % 8]; for (int j = 0; j < r->width(); j++) { if (*src != kColorGreen && (pat & (1 << (7 - (x + j) % 8)))) *dst = *src; src++; dst++; } } } } else { // Delimiter Design::drawHLine(&_gui->_screen, r->left + 1, r->right - 1, y + kMenuDropdownItemHeight / 2, 1, kColorBlack, _gui->_patterns, kPatternStripes); } y += kMenuDropdownItemHeight; } g_system->copyRectToScreen(_gui->_screen.getBasePtr(r->left, r->top), _gui->_screen.pitch, r->left, r->top, r->width() + 3, r->height() + 3); }
void KernelMemoryBarMenuItem::DrawBar(bool force) { bool selected = IsSelected(); BRect frame = Frame(); BMenu* menu = Menu(); // draw the bar itself BRect cadre (frame.right - kMargin - kBarWidth, frame.top + 5, frame.right - kMargin, frame.top + 13); if (fLastSum < 0) force = true; if (force) { if (selected) menu->SetHighColor(gFrameColorSelected); else menu->SetHighColor(gFrameColor); menu->StrokeRect (cadre); } cadre.InsetBy(1, 1); BRect r = cadre; float grenze1 = cadre.left + (cadre.right - cadre.left) * fCachedMemory / fPhysicalMemory; float grenze2 = cadre.left + (cadre.right - cadre.left) * fCommittedMemory / fPhysicalMemory; if (grenze1 > cadre.right) grenze1 = cadre.right; if (grenze2 > cadre.right) grenze2 = cadre.right; r.right = grenze1; if (!force) r.left = fGrenze1; if (r.left < r.right) { if (selected) menu->SetHighColor(gKernelColorSelected); else menu->SetHighColor(gKernelColor); // menu->SetHighColor(gKernelColor); menu->FillRect (r); } r.left = grenze1; r.right = grenze2; if (!force) { if (fGrenze2 > r.left && r.left >= fGrenze1) r.left = fGrenze2; if (fGrenze1 < r.right && r.right <= fGrenze2) r.right = fGrenze1; } if (r.left < r.right) { if (selected) menu->SetHighColor(tint_color (kLavender, B_HIGHLIGHT_BACKGROUND_TINT)); else menu->SetHighColor(kLavender); // menu->SetHighColor(gUserColor); menu->FillRect (r); } r.left = grenze2; r.right = cadre.right; if (!force) r.right = fGrenze2; if (r.left < r.right) { if (selected) menu->SetHighColor(gWhiteSelected); else menu->SetHighColor(kWhite); menu->FillRect(r); } menu->SetHighColor(kBlack); fGrenze1 = grenze1; fGrenze2 = grenze2; // draw the value double sum = fCachedMemory * FLT_MAX + fCommittedMemory; if (force || sum != fLastSum) { if (selected) { menu->SetLowColor(gMenuBackColorSelected); menu->SetHighColor(gMenuBackColorSelected); } else { menu->SetLowColor(gMenuBackColor); menu->SetHighColor(gMenuBackColor); } BRect trect(cadre.left - kMargin - gMemoryTextWidth, frame.top, cadre.left - kMargin, frame.bottom); menu->FillRect(trect); menu->SetHighColor(kBlack); char infos[128]; string_for_size(fCachedMemory * 1024.0, infos, sizeof(infos)); BPoint loc(cadre.left, cadre.bottom + 1); loc.x -= kMargin + gMemoryTextWidth / 2 + menu->StringWidth(infos); menu->DrawString(infos, loc); string_for_size(fCommittedMemory * 1024.0, infos, sizeof(infos)); loc.x = cadre.left - kMargin - menu->StringWidth(infos); menu->DrawString(infos, loc); fLastSum = sum; } }
void Editor::viewportTick(Viewport viewport, rect<s32> rect, bool mousehit, bool middlehit) { // Init IVideoDriver *driver = device->getVideoDriver(); ISceneManager *smgr = device->getSceneManager(); IGUIEnvironment *guienv = device->getGUIEnvironment(); ViewportType type = state->getViewportType(viewport); // Draw camera smgr->setActiveCamera(camera[(int)viewport]); driver->setViewPort(rect); if (type == VIEWT_BOTTOM) plane->setVisible(false); smgr->drawAll(); if (type == VIEWT_BOTTOM) plane->setVisible(true); // Callbacks if (state->Mode()) state->Mode()->viewportTick(viewport, driver, rect); if (viewport_drag == viewport) { vector2di delta = state->mouse_position; delta -= viewport_drag_last; viewport_drag_last = state->mouse_position; viewport_offset[(int)viewport].X -= (f32)delta.X * 0.01f; viewport_offset[(int)viewport].Y += (f32)delta.Y * 0.01f; if (viewport_offset[(int)viewport].X > 0.5) viewport_offset[(int)viewport].X = 0.5; if (viewport_offset[(int)viewport].X < -0.5) viewport_offset[(int)viewport].X = -0.5; if (viewport_offset[(int)viewport].Y > 0.5) viewport_offset[(int)viewport].Y = 0.5; if (viewport_offset[(int)viewport].Y < -0.5) viewport_offset[(int)viewport].Y = -0.5; applyCameraOffsets(viewport); } if (middlehit && rect.isPointInside(state->mouse_position) && type != VIEWT_PERS) { viewport_drag = viewport; viewport_drag_last = state->mouse_position; } // Draw text driver->setViewPort(rects32(0, 0, driver->getScreenSize().Width, driver->getScreenSize().Height)); { static const wchar_t* labels[7] = {L"Perspective", L"Front", L"Left", L"Top", L"Back", L"Right", L"Bottom"}; // Handle clicking position2d<s32> labelpos(rect.LowerRightCorner.X - 86, rect.UpperLeftCorner.Y + ((rect.UpperLeftCorner.Y < 50)?30:10)); rects32 backgroundrect(rect.LowerRightCorner.X - 96, rect.UpperLeftCorner.Y + ((rect.UpperLeftCorner.Y < 50)?25:5), rect.LowerRightCorner.X - 5, rect.UpperLeftCorner.Y + ((rect.UpperLeftCorner.Y < 50)?185:165)); bool context_is_open = (viewport_contextmenu == viewport); if (mousehit && !state->menu->dialog) { if ((rects32(labelpos.X, labelpos.Y, labelpos.X + 90, labelpos.Y + 25)).isPointInside(state->mouse_position)) { viewport_contextmenu = viewport; } else if (context_is_open) { context_is_open = false; viewport_contextmenu = VIEW_NONE; if (backgroundrect.isPointInside(state->mouse_position)) { int y = 0; for (int i = 0; i < 7; i++) { if (i != (int)type) { int ty = rect.UpperLeftCorner.Y + ((rect.UpperLeftCorner.Y < 50)?56:36) + y * 20; rects32 trect(rect.LowerRightCorner.X - 96, ty, rect.LowerRightCorner.X - 5, ty + 20); y++; if (trect.isPointInside(state->mouse_position)) { viewport_offset[(int)viewport] = vector3df(0, 0, 0); state->settings->set(viewportToSetting(viewport), viewportTypeToSetting((ViewportType)i)); recreateCameras(); break; } } } } } } // Context menu if (context_is_open) { // Context menu background driver->draw2DRectangle(SColor(100, 32, 32, 32), backgroundrect); s32 y2 = rect.UpperLeftCorner.Y + ((rect.UpperLeftCorner.Y < 50)?52:32); driver->draw2DLine(position2d<s32>(rect.LowerRightCorner.X - 96, y2), position2d<s32>(rect.LowerRightCorner.X - 5, y2), SColor(100, 255, 255, 255)); // Draw options guienv->getSkin()->getFont()->draw(labels[(int)type], core::rect<s32>(labelpos.X, labelpos.Y, 200, 50), video::SColor(255, 255, 255, 255)); int y = 0; for (int i = 0; i < 7; i++) { if (i != (int)type) { guienv->getSkin()->getFont()->draw( labels[i], core::rect<s32>(rect.LowerRightCorner.X - 86, rect.UpperLeftCorner.Y + ((rect.UpperLeftCorner.Y < 50)?59:39) + y * 20, 200, 50), video::SColor(255, 255, 255, 255) ); y++; } } } else { // Draw label guienv->getSkin()->getFont()->draw(labels[(int)type], core::rect<s32>(rect.LowerRightCorner.X - wcslen(labels[(int)type]) * 6 - 20, labelpos.Y, 200, 50), video::SColor(255, 255, 255, 255)); } } // Draw coordinate arrows if (type != VIEWT_PERS) { switch(type) { case VIEWT_TOP: drawCoord(guienv->getSkin()->getFont(), driver, rect.UpperLeftCorner.X + 10, rect.LowerRightCorner.Y - 42, L"X", L"Z"); break; case VIEWT_BOTTOM: drawCoord(guienv->getSkin()->getFont(), driver, rect.UpperLeftCorner.X + 10, rect.LowerRightCorner.Y - 42, L"X", L"-Z"); break; case VIEWT_LEFT: drawCoord(guienv->getSkin()->getFont(), driver, rect.UpperLeftCorner.X + 10, rect.LowerRightCorner.Y - 42, L"-Z", L"Y"); break; case VIEWT_RIGHT: drawCoord(guienv->getSkin()->getFont(), driver, rect.UpperLeftCorner.X + 10, rect.LowerRightCorner.Y - 42, L"Z", L"Y"); break; case VIEWT_FRONT: drawCoord(guienv->getSkin()->getFont(), driver, rect.UpperLeftCorner.X + 10, rect.LowerRightCorner.Y - 42, L"X", L"Y"); break; case VIEWT_BACK: drawCoord(guienv->getSkin()->getFont(), driver, rect.UpperLeftCorner.X + 10, rect.LowerRightCorner.Y - 42, L"-X", L"Y"); break; } } }