📄 cursor.cpp
字号:
int gc1 = 1;
int gc2 = 1;
flag1x = flag2x = flag1y = flag2y = 0;
// Depnding on cursor position ...
if ( !(m_nMQFlag & VERTICAL_LAYOUT) )
{
if (x >= CursorData.us1GCWidth)
{
x -= CursorData.us1GCWidth; // for panning
if (CursorData.usCursorOn == AT_00_BY_GC2)
{
CursorData.usCursorEnable = ENABLE_GC1_CURSOR;
gc2 = 0;
if (CursorData.usStatus == HOT_AT_GC2)
{
CursorData.usStatus = HOT_AT_GC1;
CursorData.usGC1VPL = CursorData.usGC1VPL2;
CursorData.usGC1VPR = CursorData.usGC1VPR2;
CursorData.usGC2VPL2 = CursorData.usGC2VPL;
CursorData.usGC2VPR2 = CursorData.usGC2VPR;
}
}
else
{
CursorData.usCursorEnable = ENABLE_GC2_CURSOR;
gc1 = 0;
if (CursorData.usStatus == HOT_AT_GC1)
{
CursorData.usStatus = HOT_AT_GC2;
CursorData.usGC2VPL = CursorData.usGC2VPL2;
CursorData.usGC2VPR = CursorData.usGC2VPR2;
CursorData.usGC1VPL2 = CursorData.usGC1VPL;
CursorData.usGC1VPR2 = CursorData.usGC1VPR;
}
}
}
else
if (x > CursorData.us1GCWidth - 64)
{
if (CursorData.usCursorOn == AT_00_BY_GC2)
{
flag1x = 1;
dx1 = CursorData.us1GCWidth - x;
gc1 = 0;
if (CursorData.usStatus == HOT_AT_GC1)
{
CursorData.usStatus = HOT_AT_GC2;
CursorData.usGC2VPL = CursorData.usGC2VPL2;
CursorData.usGC2VPR = CursorData.usGC2VPR2;
}
}
else
{
flag2x = 1;
dx2 = CursorData.us1GCWidth - x;
gc2 = 0;
if (CursorData.usStatus == HOT_AT_GC2)
{
CursorData.usStatus = HOT_AT_GC1;
CursorData.usGC1VPL = CursorData.usGC1VPL2;
CursorData.usGC1VPR = CursorData.usGC1VPR2;
}
}
CursorData.usCursorEnable = (ENABLE_GC1_CURSOR | ENABLE_GC2_CURSOR);
}
else
{
if (CursorData.usCursorOn == AT_00_BY_GC2)
{
CursorData.usCursorEnable = ENABLE_GC2_CURSOR;
gc1 = 0;
if (CursorData.usStatus == HOT_AT_GC1)
{
CursorData.usStatus = HOT_AT_GC2;
CursorData.usGC2VPL = CursorData.usGC2VPL2;
CursorData.usGC2VPR = CursorData.usGC2VPR2;
}
}
else
{
CursorData.usCursorEnable = ENABLE_GC1_CURSOR;
gc2 = 0;
if (CursorData.usStatus == HOT_AT_GC2)
{
CursorData.usStatus = HOT_AT_GC1;
CursorData.usGC1VPL = CursorData.usGC1VPL2;
CursorData.usGC1VPR = CursorData.usGC1VPR2;
}
}
}
}
else
{
// Check on Y
if (y >= CursorData.us1GCHeight)
{
y -= CursorData.us1GCHeight; // for panning
if (CursorData.usCursorOn == AT_00_BY_GC2)
{
CursorData.usCursorEnable = ENABLE_GC1_CURSOR;
gc2 = 0;
if (CursorData.usStatus == HOT_AT_GC2)
{
CursorData.usStatus = HOT_AT_GC1;
CursorData.usGC1VPT = CursorData.usGC1VPT2;
CursorData.usGC1VPB = CursorData.usGC1VPB2;
CursorData.usGC2VPT2 = CursorData.usGC2VPT;
CursorData.usGC2VPB2 = CursorData.usGC2VPB;
}
}
else
{
CursorData.usCursorEnable = ENABLE_GC2_CURSOR;
gc1 = 0;
if (CursorData.usStatus == HOT_AT_GC1)
{
CursorData.usStatus = HOT_AT_GC2;
CursorData.usGC2VPT = CursorData.usGC2VPT2;
CursorData.usGC2VPB = CursorData.usGC2VPB2;
CursorData.usGC1VPT2 = CursorData.usGC1VPT;
CursorData.usGC1VPB2 = CursorData.usGC1VPB;
}
}
}
else
if (y > CursorData.us1GCHeight - 64)
{
if (CursorData.usCursorOn == AT_00_BY_GC2)
{
flag1y = 1;
dy1 = CursorData.us1GCHeight - y;
gc1 = 0;
if (CursorData.usStatus == HOT_AT_GC1)
{
CursorData.usStatus = HOT_AT_GC2;
CursorData.usGC2VPT = CursorData.usGC2VPT2;
CursorData.usGC2VPB = CursorData.usGC2VPB2;
}
}
else
{
flag2y = 1;
dy2 = CursorData.us1GCHeight - y;
gc2 = 0;
if (CursorData.usStatus == HOT_AT_GC2)
{
CursorData.usStatus = HOT_AT_GC1;
CursorData.usGC1VPT = CursorData.usGC1VPT2;
CursorData.usGC1VPB = CursorData.usGC1VPB2;
}
}
CursorData.usCursorEnable = (ENABLE_GC1_CURSOR | ENABLE_GC2_CURSOR);
}
else
{
if (CursorData.usCursorOn == AT_00_BY_GC2)
{
CursorData.usCursorEnable = ENABLE_GC2_CURSOR;
gc1 = 0;
if (CursorData.usStatus == HOT_AT_GC1)
{
CursorData.usStatus = HOT_AT_GC2;
CursorData.usGC2VPT = CursorData.usGC2VPT2;
CursorData.usGC2VPB = CursorData.usGC2VPB2;
}
}
else
{
CursorData.usCursorEnable = ENABLE_GC1_CURSOR;
gc2 = 0;
if (CursorData.usStatus == HOT_AT_GC2)
{
CursorData.usStatus = HOT_AT_GC1;
CursorData.usGC1VPT = CursorData.usGC1VPT2;
CursorData.usGC1VPB = CursorData.usGC1VPB2;
}
}
}
}
// Adjust for both GCs
UpdateCursorVP(x,y,3);
if (!(CursorData.usCursorEnable & ENABLE_GC1_CURSOR))
{
ulTemp = gc1READ(GC1_CONTROL) & HC_DISABLE;
gc1REG(GC1_CONTROL, ulTemp);
}
else
if (!(CursorData.usCursorEnable & ENABLE_GC2_CURSOR))
{
ulTemp = gc2READ(GC2_CONTROL) & HC_DISABLE;
gc2REG(GC2_CONTROL, ulTemp);
}
else
if (x == -1)
{
// Disable both cursor anyhow
//
ulTemp = gc1READ(GC1_CONTROL) & HC_DISABLE;
gc1REG(GC1_CONTROL, ulTemp);
ulTemp = gc2READ(GC2_CONTROL) & HC_DISABLE;
gc2REG(GC2_CONTROL, ulTemp);
}
// Panning for GC1
ulGC1Delta = CursorData.usGC1VPT * m_ulScreenStride +
CursorData.usGC1VPL * m_nBytesPerPixel;
if (gc1)
gc1REG(IW1_START_ADDR, m_nIW1StartAddr + ulGC1Delta);
// Panning for GC2
ulGC2Delta = CursorData.usGC2VPT * m_ulScreenStride +
CursorData.usGC2VPL * m_nBytesPerPixel;
if (gc2)
gc2REG(IW2_START_ADDR, m_nIW2StartAddr + ulGC2Delta);
// Adjust cursor position
x1 = x - CursorData.usGC1VPL;
y1 = y - CursorData.usGC1VPT;
x2 = x - CursorData.usGC2VPL;
y2 = y - CursorData.usGC2VPT;
int newx1 = x1 - m_nXHot; // Hot spot is currently 32,32
int newy1 = y1 - m_nYHot;
if( newx1 < 0 )
{
dx1 = -newx1;
newx1 = 0;
}
if( newy1 < 0 )
{
dy1 = -newy1;
newy1 = 0;
}
// Set up cursor position and offset variables
//
#ifdef VC_OFFSET_BUG
if (dy1 == 63)
dy1--;
#endif
if (flag1x)
ulCurPos1 = (ULONG)newy1 << 16;
else
if (flag1y)
ulCurPos1 = newx1;
else
ulCurPos1 = ((ULONG)newy1 << 16) | newx1;
ulCurAddr1 = ((ULONG)dy1 << 24) | ((ULONG)dx1 << 16) | m_nCursorStart;
int newx2 = x2 - m_nXHot; // Hot spot is currently 32,32
int newy2 = y2 - m_nYHot;
if( newx2 < 0 )
{
dx2 = -newx2;
newx2 = 0;
}
if( newy2 < 0 )
{
dy2 = -newy2;
newy2 = 0;
}
// Set up cursor position and offset variables
//
#ifdef VC_OFFSET_BUG
if (dy2 == 63)
dy2--;
#endif
if (flag2x)
ulCurPos2 = (ULONG)newy2 << 16;
else
if (flag2y)
ulCurPos2 = newx2;
else
ulCurPos2 = ((ULONG)newy2 << 16) | newx2;
ulCurAddr2 = ((ULONG)dy2 << 24) | ((ULONG)dx2 << 16) | m_nCursorStart;
// Program cursor anyhow ...
gc1REG(HW_CURSOR1_POS, ulCurPos1);
gc1REG(HW_CURSOR1_ADDR, ulCurAddr1);
gc2REG(HW_CURSOR2_POS, ulCurPos2);
gc2REG(HW_CURSOR2_ADDR, ulCurAddr2);
#ifndef USB_MOUSE // USB mouse enabled through MouseEvent ...
if (x != -1)
{
// Enable cursor accordingly
//
if (CursorData.usCursorEnable & ENABLE_GC1_CURSOR)
{
ulTemp = gc1READ(GC1_CONTROL) | HC_ENABLE;
gc1REG(GC1_CONTROL, ulTemp);
}
if (CursorData.usCursorEnable & ENABLE_GC2_CURSOR)
{
ulTemp = gc2READ(GC2_CONTROL) | HC_ENABLE;
gc2REG(GC2_CONTROL, ulTemp);
}
}
#endif // USB_MOUSE
return S_OK;
}
#endif // SUPPORT_LARGE_DESKTOP
void MQGC::UpdateCursorVP(
int x,
int y,
int gcflag)
{
int Oft;
if (gcflag & 1)
{
if (x < CursorData.usGC1VPL && x != -1)
{
Oft = CursorData.usGC1VPL - x;
CursorData.usGC1VPL = x;
CursorData.usGC1VPR -= Oft;
}
else
if (x >= CursorData.usGC1VPR && x != -1)
{
Oft = x - CursorData.usGC1VPR;
CursorData.usGC1VPL += Oft;
CursorData.usGC1VPR = x;
}
if (y < CursorData.usGC1VPT)
{
Oft = CursorData.usGC1VPT - y;
CursorData.usGC1VPT = y;
CursorData.usGC1VPB -= Oft;
}
else
if (y >= CursorData.usGC1VPB)
{
Oft = y - CursorData.usGC1VPB;
CursorData.usGC1VPT += Oft;
CursorData.usGC1VPB = y;
}
}
if (gcflag & 2)
{
if (x < CursorData.usGC2VPL && x != -1)
{
Oft = CursorData.usGC2VPL - x;
CursorData.usGC2VPL = x;
CursorData.usGC2VPR -= Oft;
}
else
if (x >= CursorData.usGC2VPR && x != -1)
{
Oft = x - CursorData.usGC2VPR;
CursorData.usGC2VPL += Oft;
CursorData.usGC2VPR = x;
}
if (y < CursorData.usGC2VPT)
{
Oft = CursorData.usGC2VPT - y;
CursorData.usGC2VPT = y;
CursorData.usGC2VPB -= Oft;
}
else
if (y >= CursorData.usGC2VPB)
{
Oft = y - CursorData.usGC2VPB;
CursorData.usGC2VPT += Oft;
CursorData.usGC2VPB = y;
}
}
return;
}
void MQGC::SetCursorColors(void)
{
ULONG ulCursorColor;
ULONG ulBGCursorColor;
if (m_ulBPP >= 4)
{
if (m_nCursorColor > 15)
m_nCursorColor = 0;
ulCursorColor = *((ULONG *)&_rgbIdentity16[m_nCursorColor]);
}
else
if (m_ulBPP == 2)
{
if (m_nCursorColor > 3)
m_nCursorColor = 0;
ulCursorColor = *((ULONG *)&_rgbIdentity4[m_nCursorColor]);
}
else
{
if (m_nCursorColor > 1)
m_nCursorColor = 0;
ulCursorColor = *((ULONG *)&_rgbIdentity2[m_nCursorColor]);
}
if(ulCursorColor&0x00ffffff)
ulBGCursorColor = BG_WHITE;
else
ulBGCursorColor = BG_BLACK;
// Set the color for both GCs anyhow
//
gc1REG(HW_CURSOR1_FGCLR, ulCursorColor);
gc1REG(HW_CURSOR1_BGCLR, ulBGCursorColor);
gc2REG(HW_CURSOR2_FGCLR, ulCursorColor);
gc2REG(HW_CURSOR2_BGCLR, ulBGCursorColor);
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -