📄 window.cpp
字号:
Pos oPos;
Rect oRect;
if (m_bMindMeldInProgress)
return;
if (m_bWindowMove)
{
Rect oActualPos;
m_oMoveStart.x1 += (oScreenPos.x - m_oMovePos.x);
m_oMoveStart.x2 += (oScreenPos.x - m_oMovePos.x);
m_oMoveStart.y1 += (oScreenPos.y - m_oMovePos.y);
m_oMoveStart.y2 += (oScreenPos.y - m_oMovePos.y);
oActualPos = m_oMoveStart;
if (m_iDesktopWidth > 0 && m_iDesktopHeight > 0)
{
if ((oActualPos.x1 >= 0 && oActualPos.x1 < iDesktopSnapAmount) ||
(oActualPos.x1 < 0 && oActualPos.x1 > -iDesktopSnapAmount))
{
oActualPos.x2 -= oActualPos.x1;
oActualPos.x1 = 0;
}
if ((oActualPos.y1 >= 0 && oActualPos.y1 < iDesktopSnapAmount) ||
(oActualPos.y1 < 0 && oActualPos.y1 > -iDesktopSnapAmount))
{
oActualPos.y2 -= oActualPos.y1;
oActualPos.y1 = 0;
}
if ((oActualPos.x2 < m_iDesktopWidth &&
oActualPos.x2 >= m_iDesktopWidth - iDesktopSnapAmount) ||
(oActualPos.x2 > m_iDesktopWidth &&
oActualPos.x2 <= m_iDesktopWidth + iDesktopSnapAmount))
{
oActualPos.x1 += m_iDesktopWidth - oActualPos.x2;
oActualPos.x2 = m_iDesktopWidth;
}
if ((oActualPos.y2 < m_iDesktopHeight &&
oActualPos.y2 >= m_iDesktopHeight - iDesktopSnapAmount) ||
(oActualPos.y2 > m_iDesktopHeight &&
oActualPos.y2 <= m_iDesktopHeight + iDesktopSnapAmount))
{
oActualPos.y1 += m_iDesktopHeight - oActualPos.y2;
oActualPos.y2 = m_iDesktopHeight;
}
}
m_oMovePos = oScreenPos;
SetWindowPosition(oActualPos);
return;
}
if (m_bLButtonDown && !LButtonDown())
{
m_bLButtonDown = false;
m_pMouseDownControl = NULL;
}
GetWindowPosition(oRect);
oPos.x = oScreenPos.x - oRect.x1;
oPos.y = oScreenPos.y - oRect.y1;
if (m_pCaptureControl)
{
m_pCaptureControl->AcceptTransition(CT_MouseMove, &oPos);
return;
}
pControl = ControlFromPos(oPos);
if (pControl)
{
if (m_pMouseDownControl && m_pMouseInControl &&
m_pMouseDownControl != pControl)
{
m_pMouseInControl->AcceptTransition(CT_MouseLeave);
m_pMouseInControl = NULL;
}
else
if (m_pMouseDownControl && m_pMouseInControl == NULL &&
m_pMouseDownControl == pControl)
{
m_pMouseInControl = m_pMouseDownControl;
m_pMouseInControl->AcceptTransition(CT_MouseEnter);
m_pMouseInControl->AcceptTransition(CT_MouseLButtonDown);
}
else
if (!m_bLButtonDown)
{
if (m_pMouseInControl && m_pMouseInControl != pControl)
{
m_pMouseInControl->AcceptTransition(CT_MouseLeave);
m_pMouseInControl = pControl;
m_pMouseInControl->AcceptTransition(CT_MouseEnter);
if (m_bLButtonDown)
{
m_pMouseInControl->AcceptTransition(CT_MouseLButtonDown);
}
}
else
if (m_pMouseInControl == NULL)
{
m_pMouseInControl = pControl;
m_pMouseInControl->AcceptTransition(CT_MouseEnter);
if (m_bLButtonDown)
{
m_pMouseInControl->AcceptTransition(CT_MouseLButtonDown);
}
}
}
pControl->AcceptTransition(CT_MouseMove, &oPos);
return;
}
else
{
if (m_pMouseInControl)
{
m_pMouseInControl->AcceptTransition(CT_MouseLeave);
m_pMouseInControl = NULL;
}
}
return;
}
void Window::HandleMouseLButtonDown(Pos &oScreenPos)
{
Control *pControl;
Rect oRect;
Pos oPos;
if (m_bMindMeldInProgress)
return;
GetWindowPosition(oRect);
oPos.x = oScreenPos.x - oRect.x1;
oPos.y = oScreenPos.y - oRect.y1;
if (m_pCaptureControl)
{
m_pCaptureControl->AcceptTransition(CT_MouseLButtonDown, &oPos);
return;
}
pControl = ControlFromPos(oPos);
if (pControl)
{
m_bLButtonDown = true;
m_pMouseDownControl = pControl;
pControl->AcceptTransition(CT_MouseLButtonDown, &oPos);
return;
}
m_bWindowMove = true;
#ifndef HAVE_GTK
CaptureMouse(true);
#endif
GetWindowPosition(m_oMoveStart);
m_oMovePos = oScreenPos;
if (IsError(GetDesktopSize(m_iDesktopWidth, m_iDesktopHeight)))
m_iDesktopWidth = m_iDesktopHeight = 0;
return;
}
void Window::HandleMouseLButtonUp(Pos &oScreenPos)
{
Control *pControl;
Pos oPos;
Rect oRect;
if (m_bMindMeldInProgress)
return;
GetWindowPosition(oRect);
oPos.x = oScreenPos.x - oRect.x1;
oPos.y = oScreenPos.y - oRect.y1;
if (m_bWindowMove)
{
m_bWindowMove = false;
#ifndef HAVE_GTK
CaptureMouse(false);
#endif
return;
}
m_bLButtonDown = false;
m_pMouseDownControl = NULL;
if (m_pCaptureControl)
{
m_pCaptureControl->AcceptTransition(CT_MouseLButtonUp, &oPos);
return;
}
pControl = ControlFromPos(oPos);
if (pControl)
{
pControl->AcceptTransition(CT_MouseLButtonUp, &oPos);
return;
}
return;
}
// Do you have any idea how much I wanted to call
// this ElvisHasLeftTheBuilding()?
void Window::MouseHasLeftWindow(void)
{
if (m_bMindMeldInProgress)
return;
if (m_pMouseInControl)
{
m_pMouseInControl->AcceptTransition(CT_MouseLeave);
m_pMouseInControl = NULL;
return;
}
if (!m_pMouseInControl)
{
Pos oPos;
GetMousePos(oPos);
m_pMouseInControl = ControlFromPos(oPos);
if (m_pMouseInControl)
m_pMouseInControl->AcceptTransition(CT_MouseEnter);
}
}
void Window::TimerEvent(void)
{
vector<Control *>::iterator i;
if (m_bMindMeldInProgress)
return;
for(i = m_oControls.begin(); i != m_oControls.end(); i++)
{
if ((*i)->WantsTimingMessages())
(*i)->AcceptTransition(CT_Timer);
}
}
void Window::SetStayOnTop(bool bStay)
{
if (m_bMindMeldInProgress)
return;
m_bStayOnTop = bStay;
}
void Window::SetLiveInToolbar(bool bLive)
{
if (m_bMindMeldInProgress)
return;
m_bLiveInToolbar = bLive;
}
void Window::Keystroke(unsigned char cKey)
{
if (m_bMindMeldInProgress)
return;
m_pTheme->HandleKeystroke(cKey);
}
bool Window::MenuCommand(uint32 uCommand)
{
if (m_bMindMeldInProgress)
return true;
return m_pTheme->HandleMenuCommand(uCommand);
}
void Window::GetReloadWindowPos(Rect &oOldRect, int iNewWidth, int iNewHeight,
Rect &oNewRect)
{
int iSizeX, iSizeY;
oNewRect = oOldRect;
oNewRect.x2 = oNewRect.x1 + iNewWidth;
oNewRect.y2 = oNewRect.y1 + iNewHeight;
GetDesktopSize(iSizeX, iSizeY);
if (oNewRect.x2 > iSizeX)
{
oNewRect.x1 -= oNewRect.x2 - iSizeX;
oNewRect.x2 -= oNewRect.x2 - iSizeX;
}
if (oNewRect.y2 > iSizeY)
{
oNewRect.y1 -= oNewRect.y2 - iSizeY;
oNewRect.y2 -= oNewRect.y2 - iSizeY;
}
if (oNewRect.x1 < 0)
{
oNewRect.x2 -= oNewRect.x1;
oNewRect.x1 = 0;
}
if (oNewRect.y1 < 0)
{
oNewRect.y2 -= oNewRect.y1;
oNewRect.y1 = 0;
}
if (oOldRect.x2 == iSizeX)
{
oNewRect.x2 = iSizeX;
oNewRect.x1 = iSizeX - iNewWidth;
}
if (oOldRect.y2 == iSizeY)
{
oNewRect.y2 = iSizeY;
oNewRect.y1 = iSizeY - iNewHeight;
}
if (oOldRect.x1 == 0)
{
oNewRect.x1 = 0;
oNewRect.x2 = iNewWidth;
}
if (oOldRect.y2 == 0)
{
oNewRect.y1 = 0;
oNewRect.y2 = iNewHeight;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -