diff --git a/mozilla/cmd/winfe/navbar.cpp b/mozilla/cmd/winfe/navbar.cpp index 334686bba2f..c3757252130 100644 --- a/mozilla/cmd/winfe/navbar.cpp +++ b/mozilla/cmd/winfe/navbar.cpp @@ -42,19 +42,20 @@ BEGIN_MESSAGE_MAP(CNavTitleBar, CWnd) ON_WM_LBUTTONUP ( ) ON_WM_MOUSEMOVE() ON_WM_PAINT() + ON_WM_TIMER() //}}AFX_MSG_MAP END_MESSAGE_MAP() CNavTitleBar::CNavTitleBar() -:m_bHasFocus(FALSE) +:m_bHasFocus(FALSE), m_bDrawCloseFrame(FALSE), m_bDrawModeFrame(FALSE) { m_pBackgroundImage = NULL; m_View = NULL; + m_hFocusTimer = 0; } CNavTitleBar::~CNavTitleBar() { -// delete m_pMenuButton; } void CNavTitleBar::OnPaint( ) @@ -242,7 +243,7 @@ void CNavTitleBar::OnPaint( ) cachedModeRect.top = 0; cachedModeRect.left = 0; cachedModeRect.bottom = NAVBAR_CONTROLSTRIP_HEIGHT; - cachedModeRect.right = modeRect.right; + cachedModeRect.right = modeRect.right + 3; // Now compute the close box rect. CString closeText("close"); @@ -262,22 +263,40 @@ void CNavTitleBar::OnPaint( ) closeRect.top = modeRect.top; closeRect.bottom = modeRect.bottom; + CRect arrowRect; + arrowRect.top = 0; + arrowRect.left = closeRect.left - 12; + arrowRect.right = arrowRect.left + 12; + arrowRect.bottom = NAVBAR_CONTROLSTRIP_HEIGHT; + + DrawArrow(dc.m_hDC, m_ControlStripForegroundColor, LEFT_ARROW, arrowRect, TRUE); + // Cache the rect cachedCloseRect.top = 0; - cachedCloseRect.left = 0; + cachedCloseRect.left = arrowRect.left; cachedCloseRect.bottom = NAVBAR_CONTROLSTRIP_HEIGHT; - cachedCloseRect.right = closeRect.right; + cachedCloseRect.right = closeRect.right + 3; // Draw the text dc.SetTextColor(m_ControlStripForegroundColor); dc.DrawText((LPCSTR)closeText, -1, &closeRect, nFormat); dc.DrawText((LPCSTR)modeText, -1, &modeRect, nFormat); + // See if we're supposed to draw a framing rect. + + CBrush controlBrush(m_ControlStripForegroundColor); + if (m_bDrawCloseFrame) + { + dc.FrameRect(cachedCloseRect, &controlBrush); + } + if (m_bDrawModeFrame) + { + dc.FrameRect(cachedModeRect, &controlBrush); + } + dc.SetTextColor(oldColor); dc.SetBkMode(nOldBkMode); - ::SelectObject(dc.m_hDC, hOldFont); - - + ::SelectObject(dc.m_hDC, hOldFont); } int CNavTitleBar::OnCreate(LPCREATESTRUCT lpCreateStruct) @@ -330,6 +349,28 @@ void CNavTitleBar::OnMouseMove(UINT nFlags, CPoint point) } else { + BOOL oldCloseFrame = m_bDrawCloseFrame; + BOOL oldModeFrame = m_bDrawModeFrame; + + m_bDrawCloseFrame = FALSE; + m_bDrawModeFrame = FALSE; + + if (cachedCloseRect.PtInRect(point)) + { + m_bDrawCloseFrame = TRUE; + m_hFocusTimer = SetTimer(IDT_STRIPFOCUS, STRIPFOCUS_DELAY_MS, NULL); + } + else if (cachedModeRect.PtInRect(point)) + { + m_bDrawModeFrame = TRUE; + m_hFocusTimer = SetTimer(IDT_STRIPFOCUS, STRIPFOCUS_DELAY_MS, NULL); + } + + if (oldCloseFrame != m_bDrawCloseFrame) + InvalidateRect(cachedCloseRect); + + if (oldModeFrame != m_bDrawModeFrame) + InvalidateRect(cachedModeRect); } } @@ -351,3 +392,31 @@ void CNavTitleBar::SetHTView(HT_View view) m_View = view; Invalidate(); } + +void CNavTitleBar::OnTimer(UINT nIDEvent) +{ + if (nIDEvent == IDT_STRIPFOCUS) + { + POINT point; + + KillTimer(IDT_STRIPFOCUS); + m_hFocusTimer = 0; + + GetCursorPos(&point); + + CRect rcClient; + GetWindowRect(&rcClient); + + if (!rcClient.PtInRect(point)) + { + m_bDrawCloseFrame = FALSE; + m_bDrawModeFrame = FALSE; + Invalidate(); + UpdateWindow(); + } + else + m_hFocusTimer = SetTimer(IDT_STRIPFOCUS, STRIPFOCUS_DELAY_MS, NULL); + } + + CWnd::OnTimer(nIDEvent); +} diff --git a/mozilla/cmd/winfe/navbar.h b/mozilla/cmd/winfe/navbar.h index 24fc4f061c5..895f7273f38 100644 --- a/mozilla/cmd/winfe/navbar.h +++ b/mozilla/cmd/winfe/navbar.h @@ -48,6 +48,10 @@ class CNavTitleBar : public CWnd, public CCustomImageObject CRect cachedCloseRect; CRect cachedModeRect; + BOOL m_bDrawCloseFrame; + BOOL m_bDrawModeFrame; + + UINT m_hFocusTimer; public: CNavTitleBar(); @@ -68,9 +72,14 @@ public: afx_msg void OnLButtonUp (UINT nFlags, CPoint point ); afx_msg void OnMouseMove (UINT nFlags, CPoint point ); afx_msg void OnSize( UINT nType, int cx, int cy ); + afx_msg void OnTimer(UINT nIDEvent); + //}}AFX_MSG DECLARE_MESSAGE_MAP() }; +#define IDT_STRIPFOCUS 30000 +#define STRIPFOCUS_DELAY_MS 10 + #endif // NAVBAR_H diff --git a/mozilla/cmd/winfe/rdfacc.h b/mozilla/cmd/winfe/rdfacc.h index 40ca4790065..1c571c9b01e 100644 --- a/mozilla/cmd/winfe/rdfacc.h +++ b/mozilla/cmd/winfe/rdfacc.h @@ -204,4 +204,13 @@ void Compute3DColors(COLORREF rgbColor, COLORREF &rgbLight, COLORREF &rgbDark); // use against a custom background. void ResolveToPaletteColor(COLORREF& color, HPALETTE hPal); + +void DrawArrow(HDC hDC, COLORREF arrowColor, int type, CRect rect, BOOL enabled); + // Can be used to draw 4-pixel (1,3,5,7) arrowheads in any direction. + +const int LEFT_ARROW = 0; +const int RIGHT_ARROW = 1; +const int DOWN_ARROW = 2; +const int UP_ARROW = 3; + #endif // RDFACC_H \ No newline at end of file diff --git a/mozilla/cmd/winfe/rdfliner.cpp b/mozilla/cmd/winfe/rdfliner.cpp index c196d5194b5..694444ef27a 100644 --- a/mozilla/cmd/winfe/rdfliner.cpp +++ b/mozilla/cmd/winfe/rdfliner.cpp @@ -1616,6 +1616,7 @@ void CRDFOutliner::OnMouseMove(UINT nFlags, CPoint point) SelectItem( m_iSelection, OUTLINER_LBUTTONUP, nFlags ); } } + if (m_iTipState != TIP_SHOWING) m_iTipState = TIP_WAITING; HandleMouseMove( point ); @@ -2086,6 +2087,67 @@ GetSystem3DColors(COLORREF rgbBackground, COLORREF& rgbLightColor, COLORREF& rgb #define COLOR_DARK_THRESHOLD 51 #define COLOR_LIGHT_THRESHOLD 204 +void DrawArrow(HDC hDC, COLORREF arrowColor, int type, CRect rect, BOOL enabled) +{ + HPEN hArrowPen = ::CreatePen(PS_SOLID, 1, arrowColor); + HPEN hOldPen = (HPEN)::SelectObject(hDC, hArrowPen); + + int size = (type == UP_ARROW || type == DOWN_ARROW) ? rect.Width() : rect.Height(); + int endPoint = (type == UP_ARROW || type == DOWN_ARROW) ? rect.left : rect.top; + + if (type == UP_ARROW) + { + for (int j = 0; j < 4; j++) + { + int yPos = rect.top + (rect.Height()/2) - 2 + j; + int x1 = rect.left + (rect.Width()/2) - j; + int x2 = x1 + 2*j; + ::MoveToEx(hDC, x1, yPos,NULL); + ::LineTo(hDC, x2+1, yPos); + } + + } + else if (type == DOWN_ARROW) + { + // Draw a down arrow. + for (int j = 0; j < 4; j++) + { + int yPos = rect.top + (rect.Height()/2) + 1 - j; + int x1 = rect.left + (rect.Width()/2) - j; + int x2 = x1 + 2*j; + ::MoveToEx(hDC,x1,yPos,NULL); + ::LineTo(hDC,x2+1,yPos); + } + } + else if (type == LEFT_ARROW) + { + for (int j = 0; j < 4; j++) + { + int xPos = rect.left + (rect.Width()/2) - 2 + j; + int y1 = rect.top + (rect.Height()/2) - j; + int y2 = y1 + 2*j; + ::MoveToEx(hDC,xPos,y1,NULL); + ::LineTo(hDC,xPos,y2+1); + } + + } + else if (type == RIGHT_ARROW) + { + // Draw a down arrow. + for (int j = 0; j < 4; j++) + { + int xPos = rect.left + (rect.Width()/2) + 1 - j; + int y1 = rect.top + (rect.Height()/2) - j; + int y2 = y1 + 2*j; + ::MoveToEx(hDC,xPos,y1,NULL); + ::LineTo(hDC,xPos,y2+1); + } + } + + ::SelectObject(hDC, hOldPen); + VERIFY(::DeleteObject(hArrowPen)); +} + void Compute3DColors(COLORREF rgbColor, COLORREF &rgbLight, COLORREF &rgbDark) { unsigned uRed, uGreen, uBlue; diff --git a/mozilla/cmd/winfe/statbar.cpp b/mozilla/cmd/winfe/statbar.cpp index fb92c227e83..d6533a0d639 100755 --- a/mozilla/cmd/winfe/statbar.cpp +++ b/mozilla/cmd/winfe/statbar.cpp @@ -428,8 +428,8 @@ void CNetscapeStatusBar::SetupMode() // WHS -- I'm assuming we'll always have these, probably not good in the long term // - - + SetPaneInfo( CommandToIndex( ID_SEPARATOR ), ID_SEPARATOR, SBPS_STRETCH, 0 ); + idx = CommandToIndex(IDS_TRANSFER_STATUS); if(idx > -1) { SetPaneInfo( idx, IDS_TRANSFER_STATUS, SBPS_NORMAL, 90 );