⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 buddybutton.cpp

📁 hl2 source code. Do not use it illegal.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	else
	{
		if (IsArmed())
		{
			SetFgColor(m_ArmedFgColor2);
		}
		else
		{
			SetFgColor(m_FgColor2);
		}
		SetDefaultColor(m_FgColor2, m_BgColor);
		SetArmedColor(m_ArmedFgColor2, m_ArmedBgColor);
		SetDepressedColor(m_ArmedFgColor2, m_ArmedBgColor);
	}

	MenuButton::PerformLayout();
}

//-----------------------------------------------------------------------------
// Purpose: !!Hack to get highlights to draw in right place
//-----------------------------------------------------------------------------
void CBuddyButton::PaintBackground(void)
{
	int wide, tall;
	GetSize(wide, tall);

	surface()->DrawSetColor(GetBgColor());

	// don't draw behind the icon
	int iWide, iTall;
	_statusImage->GetSize(iWide, iTall);
	iWide += m_iImageOffset;

	surface()->DrawFilledRect(iWide, 0, wide, tall);

	//This makes it so the menu will always be in front in GameUI
	if (m_pMenu->IsVisible())
		m_pMenu->MoveToFront();

}


//-----------------------------------------------------------------------------
// Purpose: 
// Input  : *inResourceData - 
//-----------------------------------------------------------------------------
void CBuddyButton::ApplySchemeSettings(vgui::IScheme *pScheme)
{
	Button::ApplySchemeSettings(pScheme);

	SetImageAtIndex(0, NULL, 0);

	// get buddybutton specific settings
	m_ArmedFgColor1 = GetSchemeColor("BuddyButton/ArmedFgColor1");
	m_ArmedFgColor2 = GetSchemeColor("BuddyButton/ArmedFgColor2");
	m_ArmedBgColor = GetSchemeColor("BuddyButton/ArmedBgColor");

	SetArmedColor(m_ArmedFgColor2, m_ArmedBgColor);
	SetDepressedColor(m_ArmedFgColor2, m_ArmedBgColor);

	m_FgColor1 = GetSchemeColor("BuddyButton/FgColor1");
	m_FgColor2 = GetSchemeColor("BuddyButton/FgColor2");

	m_BgColor = GetSchemeColor("BuddyListBgColor", GetBgColor());

	m_GameColor = GetSchemeColor("StatusSelectFgColor2");
	m_GameNameColor = GetSchemeColor("BaseBrightText");
}

//-----------------------------------------------------------------------------
// Purpose: 
// Input  : depressed - 
//			armed - 
//			selected - 
// Output : Border
//-----------------------------------------------------------------------------
IBorder *CBuddyButton::GetBorder(bool depressed, bool armed, bool selected, bool keyfocus)
{
	// never use a border
	return NULL;
}

//-----------------------------------------------------------------------------
// Purpose: 
//-----------------------------------------------------------------------------
void CBuddyButton::recalculateMenuItems()
{
	// recalculate menu items, in order of priority (lowest to highest)
	// the last visible item will be the default (double-click) menu option

	// block/unblock user
	Panel *panel = m_pMenu->FindChildByName("Block");
	if (panel)
	{
		if (m_pBuddyData->GetInt("RemoteBlock"))
		{
			panel->SetVisible(false);
		}
		else
		{
			panel->SetVisible(true);
		}
	}

	panel = m_pMenu->FindChildByName("Unblock");
	if (panel)
	{
		if (m_pBuddyData->GetInt("RemoteBlock"))
		{
			panel->SetVisible(true);
		}
		else
		{
			panel->SetVisible(false);
		}
	}

	// user info
	panel = m_pMenu->FindChildByName("UserInfo");
	if (panel)
	{
		panel->SetVisible(true);
		m_pDefaultCommand = "UserInfo";
	}

	// game information
	panel = m_pMenu->FindChildByName("GameInfo");
	Panel *panel2 = m_pMenu->FindChildByName("JoinGame");
	if (panel && panel2)
	{
		// don't let us view the game info if they're not in a game
		if (m_iBuddyStatus != COnlineStatus::INGAME)
		{
			panel->SetVisible(false);
			panel2->SetVisible(false);
		}
		else
		{
			panel->SetVisible(true);
			panel2->SetVisible(true);
			m_pDefaultCommand = "GameInfo";
		}
	}

	// instant messaging
	panel = m_pMenu->FindChildByName("Chat");
	if (panel)
	{
		// don't send messages to people who are offline
		if (m_iBuddyStatus < COnlineStatus::ONLINE)
		{
			panel->SetVisible(false);
		}
		else
		{
			panel->SetVisible(true);
			m_pDefaultCommand = "Chat";
		}
	}

	// add/remove the auth request menu option
	panel = m_pMenu->FindChildByName("AuthReq");
	if (panel)
	{
		if (m_iBuddyStatus != COnlineStatus::REQUESTINGAUTHORIZATION)
		{
			panel->SetVisible(false);
		}
		else
		{
			panel->SetVisible(true);
			m_pDefaultCommand = "AuthReq";
		}
	}


	m_pMenu->InvalidateLayout();
}

//-----------------------------------------------------------------------------
// Purpose: returns a pointer to the right-click context menu
//-----------------------------------------------------------------------------
Menu *CBuddyButton::GetContextMenu()
{
	return m_pMenu;
}

//-----------------------------------------------------------------------------
// Purpose: 
//-----------------------------------------------------------------------------
void CBuddyButton::setNameText(const char *text)
{
	SetText(text);
}

//-----------------------------------------------------------------------------
// Purpose: 
//-----------------------------------------------------------------------------
void CBuddyButton::setStatusText(const char *text)
{
	_statusText->SetText(text);
}

//-----------------------------------------------------------------------------
// Purpose: 
// Input  : *menu - 
//-----------------------------------------------------------------------------
void CBuddyButton::OnShowMenu(Menu *menu)
{
	recalculateMenuItems();
}

//-----------------------------------------------------------------------------
// Purpose: 
// Input  : code - 
//-----------------------------------------------------------------------------
void CBuddyButton::OnMousePressed(vgui::MouseCode code)
{
	if (code == MOUSE_LEFT)
	{
		input()->SetMouseCapture(GetVPanel());
		m_bDragging = true;
	}
	else
	{
		BaseClass::OnMousePressed(code);
	}
}

//-----------------------------------------------------------------------------
// Purpose: Drag-drop support - sees what panel we're over and sees if we can drop on it
// Input  : x - 
//			y - 
//-----------------------------------------------------------------------------
void CBuddyButton::OnCursorMoved(int x, int y)
{
	if (m_bDragging)
	{
		// get the panel the mouse is over
		VPanel *mouseOver = input()->GetMouseOver();
		if (mouseOver != GetVPanel())
		{
			bool bAccept = false;
			if (mouseOver)
			{
				// check to see if the panel has drag/drop support
				KeyValues *keyVal = new KeyValues("DragDrop", "type", "TrackerFriend");
				keyVal->SetInt("friendID", m_iBuddyID);
				if (ipanel()->Client(mouseOver)->RequestInfo(keyVal))
				{
					// info request was successful, set the cursor to acceptable
					bAccept = true;
				}

				keyVal->deleteThis();
			}

			if (bAccept)
			{
				SetCursor(dc_hand);
			}
			else
			{
				SetCursor(dc_no);
			}
		}
		else
		{
			SetCursor(dc_arrow);
		}
	}

	BaseClass::OnCursorMoved(x, y);
}

//-----------------------------------------------------------------------------
// Purpose: Called when mouse capture has been lost
//-----------------------------------------------------------------------------
void CBuddyButton::OnMouseCaptureLost()
{
	m_bDragging = false;
	SetCursor(dc_arrow);
}


//-----------------------------------------------------------------------------
// Purpose: 
// Input  : code - 
//-----------------------------------------------------------------------------
void CBuddyButton::OnMouseReleased(vgui::MouseCode code)
{
	if (m_bDragging)
	{
		// make sure we're over a valid panel
		VPanel *imouseOver = input()->GetMouseOver();
		if (imouseOver)
		{
			Panel *mouseOver = ipanel()->Client(imouseOver)->GetPanel();
			KeyValues *keyVal = new KeyValues("DragDrop", "type", "TrackerFriend");
			keyVal->SetInt("friendID", m_iBuddyID);

			if (mouseOver->RequestInfo(keyVal))
			{
				Panel *acceptPanel = (Panel *)keyVal->GetPtr("AcceptPanel");
				if (acceptPanel)
				{
					PostMessage(acceptPanel, keyVal);
					keyVal = NULL;
				}
			}

			if (keyVal)
			{
				keyVal->deleteThis();
			}
		}

		input()->SetMouseCapture(NULL);
	}

	m_bDragging = false;
	
	BaseClass::OnMouseReleased(code);
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -