summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--alf/alfnotebook.cpp55
1 files changed, 36 insertions, 19 deletions
diff --git a/alf/alfnotebook.cpp b/alf/alfnotebook.cpp
index f6ae937..96e188f 100644
--- a/alf/alfnotebook.cpp
+++ b/alf/alfnotebook.cpp
@@ -354,11 +354,16 @@ ALF_Notebook_AppendPage(ALFNotebookPriv *priv, const TCHAR *title)
return page;
}
+static BOOL
+ALF_Notebook_DoRectsIntersect(const RECT *rc1, const RECT *rc2)
+{
+ return rc1->left < rc2->right && rc2->left < rc1->right
+ && rc1->top < rc2->bottom && rc2->top < rc1->bottom;
+}
+
static void
ALF_Notebook_SwitcherPaint(ALFNotebookPriv *priv, HDC dc, RECT *rcDraw)
{
- (void)rcDraw; // TODO: restrict some of our drawing to the invalidation rect
-
ALF_Notebook_ValidateTabRects(priv);
HFONT oldfont = SelectFont(dc, priv->font);
@@ -373,23 +378,29 @@ ALF_Notebook_SwitcherPaint(ALFNotebookPriv *priv, HDC dc, RECT *rcDraw)
COLORREF clrBtnText = GetSysColor(COLOR_BTNTEXT);
if (!priv->selectedPage || priv->pages.next != &priv->selectedPage->list) {
- RECT rcLeftTop = { 0,
- ALF_Notebook_SwitcherHeight(priv) - 1,
- 2,
- ALF_Notebook_SwitcherHeight(priv) };
- DrawEdge(dc, &rcLeftTop, EDGE_RAISED, BF_SOFT|BF_TOPLEFT);
-
- RECT rcLeftSpace = { 0,
- 0,
- rcLeftTop.right,
- rcLeftTop.top };
- FillRect(dc, &rcLeftSpace, hbrBtnFace);
+ RECT rcLeftTopClip = { 0, 0, 2, rcClient.bottom - rcClient.top };
+ if (ALF_Notebook_DoRectsIntersect(&rcLeftTopClip, rcDraw)) {
+ RECT rcLeftTop = { 0,
+ rcClient.bottom - rcClient.top - 1,
+ 2,
+ rcClient.bottom - rcClient.top };
+ DrawEdge(dc, &rcLeftTop, EDGE_RAISED, BF_SOFT|BF_TOPLEFT);
+
+ RECT rcLeftSpace = { 0,
+ 0,
+ rcLeftTop.right,
+ rcLeftTop.top };
+ FillRect(dc, &rcLeftSpace, hbrBtnFace);
+ }
}
ALF_FOR_LIST(ALFNotebookPage, list, &priv->pages, p) {
RECT r = p->calculatedTabRect;
if (p != priv->selectedPage) {
+ if (!ALF_Notebook_DoRectsIntersect(&r, rcDraw))
+ continue; // FIXME! correct clip rect calculation when next to active tab
+
RECT rBottom = { r.left + 2,
r.bottom - 1,
r.right - 2,
@@ -444,6 +455,9 @@ ALF_Notebook_SwitcherPaint(ALFNotebookPriv *priv, HDC dc, RECT *rcDraw)
} else {
InflateRect(&r, 2, 0);
+ if (!ALF_Notebook_DoRectsIntersect(&r, rcDraw))
+ continue;
+
RECT rLeft = { r.left,
r.top + 2,
r.left + 2,
@@ -505,19 +519,22 @@ ALF_Notebook_SwitcherPaint(ALFNotebookPriv *priv, HDC dc, RECT *rcDraw)
}
}
- RECT rcRightTop = { priv->totalSwitcherWidth, ALF_Notebook_SwitcherHeight(priv) - 1,
- rcClient.right-rcClient.left, ALF_Notebook_SwitcherHeight(priv) };
+ RECT rcRightTop = { priv->totalSwitcherWidth, rcClient.bottom - rcClient.top - 1,
+ rcClient.right-rcClient.left, rcClient.bottom - rcClient.top };
if (!priv->selectedPage || priv->pages.prev != &priv->selectedPage->list) {
rcRightTop.left -= 2;
}
if (rcRightTop.left < rcRightTop.right) {
- DrawEdge(dc, &rcRightTop, EDGE_RAISED, BF_SOFT|BF_TOPRIGHT);
+ RECT rcRightTopClip = { rcRightTop.left, 0, rcClient.right-rcClient.left, rcClient.bottom-rcClient.top };
+ if (ALF_Notebook_DoRectsIntersect(&rcRightTopClip, rcDraw)) {
+ DrawEdge(dc, &rcRightTop, EDGE_RAISED, BF_SOFT|BF_TOPRIGHT);
- RECT rcRightSpace = { rcRightTop.left, 0,
- rcRightTop.right, rcRightTop.top };
- FillRect(dc, &rcRightSpace, GetSysColorBrush(COLOR_BTNFACE));
+ RECT rcRightSpace = { rcRightTop.left, 0,
+ rcRightTop.right, rcRightTop.top };
+ FillRect(dc, &rcRightSpace, GetSysColorBrush(COLOR_BTNFACE));
+ }
}
SelectFont(dc, oldfont);