void PindianBox::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *) { QString title = QString("%1: %2").arg(tr("pindian")).arg(Sanguosha->translate(reason)); GraphicsBox::paintGraphicsBoxStyle(painter, title, boundingRect()); const int card_width = G_COMMON_LAYOUT.m_cardNormalWidth; const int card_height = G_COMMON_LAYOUT.m_cardNormalHeight; int first = (width - targets.length() * card_width - (targets.length() - 1) * (cardInterval + 20)) / 2; for (int i = 0; i < targets.length(); ++i) { int x, y = 0; x = (first + (card_width + cardInterval + 20) * i); y = (45); QString description1 = ClientInstance->getPlayerName(targets.at(i)); QRect up_rect(x - cardInterval / 2 - 20, 45, 20, card_height); G_COMMON_LAYOUT.playerCardBoxPlaceNameText.paintText(painter, up_rect, Qt::AlignCenter, description1); QRect top_rect(x, y, card_width, card_height); painter->drawPixmap(top_rect, G_ROOM_SKIN.getPixmap(QSanRoomSkin::S_SKIN_KEY_CHOOSE_GENERAL_BOX_DEST_SEAT)); IQSanComponentSkin::QSanSimpleTextFont font = G_COMMON_LAYOUT.m_chooseGeneralBoxDestSeatFont; font.paintText(painter, top_rect, Qt::AlignCenter, ClientInstance->getPlayerName(targets.at(i))); } QString description2 = tr("requestor"); QRect down_rect((width - card_width) / 2 - cardInterval / 2 - 20, 45 + (card_height + cardInterval), 20, card_height); QRect down_rect2((width - card_width) / 2 - cardInterval - 40, 45 + (card_height + cardInterval), 20, card_height); G_COMMON_LAYOUT.playerCardBoxPlaceNameText.paintText(painter, down_rect, Qt::AlignCenter, ClientInstance->getPlayerName(zhuge)); G_COMMON_LAYOUT.playerCardBoxPlaceNameText.paintText(painter, down_rect2, Qt::AlignCenter, description2); QRect bottom_rect((width - card_width) / 2, 45 + card_height + cardInterval, card_width, card_height); painter->drawPixmap(bottom_rect, G_ROOM_SKIN.getPixmap(QSanRoomSkin::S_SKIN_KEY_CHOOSE_GENERAL_BOX_DEST_SEAT)); IQSanComponentSkin::QSanSimpleTextFont font = G_COMMON_LAYOUT.m_chooseGeneralBoxDestSeatFont; font.paintText(painter, bottom_rect, Qt::AlignCenter, ClientInstance->getPlayerName(zhuge)); }
LLSpinCtrl::LLSpinCtrl( const std::string& name, const LLRect& rect, const std::string& label, const LLFontGL* font, void (*commit_callback)(LLUICtrl*, void*), void* callback_user_data, F32 initial_value, F32 min_value, F32 max_value, F32 increment, const std::string& control_name, S32 label_width) : LLUICtrl(name, rect, TRUE, commit_callback, callback_user_data, FOLLOWS_LEFT | FOLLOWS_TOP ), mValue( initial_value ), mInitialValue( initial_value ), mMaxValue( max_value ), mMinValue( min_value ), mIncrement( increment ), mPrecision( 3 ), mLabelBox( NULL ), mTextEnabledColor( LLUI::sColorsGroup->getColor( "LabelTextColor" ) ), mTextDisabledColor( LLUI::sColorsGroup->getColor( "LabelDisabledColor" ) ), mbHasBeenSet( FALSE ) { S32 top = getRect().getHeight(); S32 bottom = top - 2 * SPINCTRL_BTN_HEIGHT; S32 centered_top = top; S32 centered_bottom = bottom; S32 btn_left = 0; // Label if( !label.empty() ) { LLRect label_rect( 0, centered_top, label_width, centered_bottom ); mLabelBox = new LLTextBox( std::string("SpinCtrl Label"), label_rect, label, font ); addChild(mLabelBox); btn_left += label_rect.mRight + SPINCTRL_SPACING; } S32 btn_right = btn_left + SPINCTRL_BTN_WIDTH; // Spin buttons LLRect up_rect( btn_left, top, btn_right, top - SPINCTRL_BTN_HEIGHT ); std::string out_id = "UIImgBtnSpinUpOutUUID"; std::string in_id = "UIImgBtnSpinUpInUUID"; mUpBtn = new LLButton(std::string("SpinCtrl Up"), up_rect, out_id, in_id, LLStringUtil::null, &LLSpinCtrl::onUpBtn, this, LLFontGL::getFontSansSerif() ); mUpBtn->setFollowsLeft(); mUpBtn->setFollowsBottom(); mUpBtn->setHeldDownCallback( &LLSpinCtrl::onUpBtn ); mUpBtn->setTabStop(FALSE); addChild(mUpBtn); LLRect down_rect( btn_left, top - SPINCTRL_BTN_HEIGHT, btn_right, bottom ); out_id = "UIImgBtnSpinDownOutUUID"; in_id = "UIImgBtnSpinDownInUUID"; mDownBtn = new LLButton(std::string("SpinCtrl Down"), down_rect, out_id, in_id, LLStringUtil::null, &LLSpinCtrl::onDownBtn, this, LLFontGL::getFontSansSerif() ); mDownBtn->setFollowsLeft(); mDownBtn->setFollowsBottom(); mDownBtn->setHeldDownCallback( &LLSpinCtrl::onDownBtn ); mDownBtn->setTabStop(FALSE); addChild(mDownBtn); LLRect editor_rect( btn_right + 1, centered_top, getRect().getWidth(), centered_bottom ); mEditor = new LLLineEditor( std::string("SpinCtrl Editor"), editor_rect, LLStringUtil::null, font, MAX_STRING_LENGTH, &LLSpinCtrl::onEditorCommit, NULL, NULL, this, &LLLineEditor::prevalidateFloat ); mEditor->setFollowsLeft(); mEditor->setFollowsBottom(); mEditor->setFocusReceivedCallback( &LLSpinCtrl::onEditorGainFocus, this ); //RN: this seems to be a BAD IDEA, as it makes the editor behavior different when it has focus // than when it doesn't. Instead, if you always have to double click to select all the text, // it's easier to understand //mEditor->setSelectAllonFocusReceived(TRUE); mEditor->setIgnoreTab(TRUE); addChild(mEditor); updateEditor(); setUseBoundingRect( TRUE ); }
void ax::DropMenu::OnPaint(ax::GC gc) { const ax::Rect rect(win->dimension.GetDrawingRect()); widget::Component::Ptr widget = win->component.Get<widget::Component>("Widget"); ax::DropMenu::Info* info = static_cast<ax::DropMenu::Info*>(widget->GetInfo()); gc.SetColor(ax::Color(255, 0, 0)); gc.DrawRectangle(rect); ax::Point txt_delta(5, 3); struct MenuDraw { ax::Color bg_color; ax::Color txt_color; std::string txt; }; std::vector<MenuDraw> draw_info(_items.size()); for (int i = 0; i < _items.size(); i++) { draw_info[i].txt = _items[i]; if (i == _selected_item && i == _mouse_hover_item) { draw_info[i].bg_color = info->selected_hover; draw_info[i].txt_color = info->selected_font_color; } else if (i == _selected_item) { draw_info[i].bg_color = info->selected; draw_info[i].txt_color = info->selected_font_color; } else if (i == _mouse_hover_item) { draw_info[i].bg_color = info->hover; draw_info[i].txt_color = info->font_color; } else { draw_info[i].bg_color = info->normal; draw_info[i].txt_color = info->font_color; } } std::function<void(ax::Font&, const std::string&, const ax::Rect&)> draw_string; if (ax::IsFlag(Flags::TEXT_ALIGN_CENTER, _flags)) { draw_string = [&]( ax::Font& font, const std::string& text, const ax::Rect& s_rect) { gc.DrawStringAlignedCenter(font, text, s_rect); }; } else if (ax::IsFlag(Flags::TEXT_ALIGN_RIGHT, _flags)) { draw_string = [&]( ax::Font& font, const std::string& text, const ax::Rect& s_rect) { gc.DrawStringAlignedRight(font, text, s_rect); }; } else { draw_string = [&]( ax::Font& font, const std::string& text, const ax::Rect& s_rect) { gc.DrawStringAlignedLeft(font, text, s_rect); }; } int index_offset = 0; if (_over_flow) { if (_over_flow_up && _over_flow_down) { index_offset = 1; // Up. ax::Rect up_rect(0, 0, rect.size.x, info->item_height); if (_mouse_hover_item == ITEM_SCROLL_UP) { gc.SetColor(info->hover); } else { gc.SetColor(info->normal); } gc.DrawRectangle(up_rect); ax::Size u_img_s = _up_img->GetSize(); ax::Point img_pos( up_rect.position.x + (up_rect.size.x - u_img_s.x) * 0.5, up_rect.position.y + (up_rect.size.y - u_img_s.y) * 0.5); gc.DrawImageColor(_up_img.get(), img_pos, info->up_down_arrow); // Down. int y = (_n_shown_item + 1) * info->item_height; ax::Rect down_rect(0, y, rect.size.x, info->item_height); if (_mouse_hover_item == ITEM_SCROLL_DOWN) { gc.SetColor(info->hover); } else { gc.SetColor(info->normal); } gc.DrawRectangle(down_rect); ax::Size d_img_s = _down_img->GetSize(); ax::Point d_img_pos( down_rect.position.x + (down_rect.size.x - d_img_s.x) * 0.5, down_rect.position.y + (down_rect.size.y - d_img_s.y) * 0.5); gc.DrawImageColor(_down_img.get(), d_img_pos, info->up_down_arrow); } else if (_over_flow_up) { index_offset = 1; ax::Rect up_rect(0, 0, rect.size.x, info->item_height); if (_mouse_hover_item == ITEM_SCROLL_UP) { gc.SetColor(info->hover); } else { gc.SetColor(info->normal); } gc.DrawRectangle(up_rect); ax::Size u_img_s = _up_img->GetSize(); ax::Point u_img_pos( up_rect.position.x + (up_rect.size.x - u_img_s.x) * 0.5, up_rect.position.y + (up_rect.size.y - u_img_s.y) * 0.5); gc.DrawImageColor(_up_img.get(), u_img_pos, info->up_down_arrow); } else if (_over_flow_down) { int y = _n_shown_item * info->item_height; ax::Rect down_rect(0, y, rect.size.x, info->item_height); if (_mouse_hover_item == ITEM_SCROLL_DOWN) { gc.SetColor(info->hover); } else { gc.SetColor(info->normal); } gc.DrawRectangle(down_rect); ax::Size d_img_s = _down_img->GetSize(); ax::Point d_img_pos( down_rect.position.x + (down_rect.size.x - d_img_s.x) * 0.5, down_rect.position.y + (down_rect.size.y - d_img_s.y) * 0.5); gc.DrawImageColor(_down_img.get(), d_img_pos, info->up_down_arrow); } else { ax::Error("ax::DropMenu::OnPaint -> Should not happen (draw)"); } // for (int i = 0; i < _n_shown_item; i++) { // int index = i + _top_item_index; // int y = (i + index_offset) * info->item_height; // ax::Rect item_rect = ax::Rect(0, y, rect.size.x, // info->item_height); // gc.SetColor(draw_info[index].bg_color); // gc.DrawRectangle(item_rect); // gc.SetColor(draw_info[index].txt_color); // draw_string(*_font.get(), draw_info[index].txt, item_rect); // // // Draw right arrow. // for (auto& n : _right_arrow_index) { // if (index == n) { // ax::Size img_s = _right_img->GetSize(); // ax::Point img_pos( // item_rect.position.x + (item_rect.size.x - // img_s.x), // item_rect.position.y // + (item_rect.size.y - img_s.y) * 0.5); // // gc.DrawImageColor(_right_img.get(), img_pos, // ax::Color(0.5)); // break; // } // } // // // Draw separation. // for (auto& n : _separator_index) { // if (index == n) { // gc.SetColor(info->separation); // gc.DrawLine(ax::Point(0, y), ax::Point(rect.size.x, // y)); // break; // } // } // } } // No overflow. // else { // for (int i = 0; i < draw_info.size(); i++) { // int y = i * info->item_height; // ax::Rect item_rect = ax::Rect(0, y, rect.size.x, // info->item_height); // gc.SetColor(draw_info[i].bg_color); // gc.DrawRectangle(item_rect); // gc.SetColor(draw_info[i].txt_color); // draw_string(*_font.get(), draw_info[i].txt, item_rect); // // // Draw right arrow. // for (auto& n : _right_arrow_index) { // if (i == n) { // ax::Size img_s = _right_img->GetSize(); // ax::Point img_pos( // item_rect.position.x + (item_rect.size.x - img_s.x), // item_rect.position.y // + (item_rect.size.y - img_s.y) * 0.5); // //// gc.DrawImage(_right_img.get(), img_pos); // gc.DrawImageColor(_right_img.get(), img_pos, //ax::Color(1.0f, // 0.0f, 0.0f)); // break; // } // } // // // Draw separation. // for (auto& n : _separator_index) { // if (i == n) { // gc.SetColor(info->separation); // gc.DrawLine(ax::Point(0, y), ax::Point(rect.size.x, y)); // break; // } // } // } // } for (int i = 0; i < _n_shown_item; i++) { int index = i + _top_item_index; int y = (i + index_offset) * info->item_height; ax::Rect item_rect = ax::Rect(0, y, rect.size.x, info->item_height); gc.SetColor(draw_info[index].bg_color); gc.DrawRectangle(item_rect); gc.SetColor(draw_info[index].txt_color); draw_string(*_font.get(), draw_info[index].txt, item_rect); // Draw right arrow. for (auto& n : _right_arrow_index) { if (index == n) { ax::Size img_s = _right_img->GetSize(); ax::Point img_pos( item_rect.position.x + (item_rect.size.x - img_s.x), item_rect.position.y + (item_rect.size.y - img_s.y) * 0.5); gc.DrawImageColor(_right_img.get(), img_pos, info->right_arrow); break; } } // Draw separation. for (auto& n : _separator_index) { if (index == n) { gc.SetColor(info->separation); gc.DrawLine(ax::Point(0, y), ax::Point(rect.size.x, y)); break; } } } gc.SetColor(info->contour); gc.DrawRectangleContour(rect); }