📄 buddybutton.cpp
字号:
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 + -