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));
}
示例#2
0
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 );
}
示例#3
0
文件: DropMenu.cpp 项目: axlib/OpenAX
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);
}