rendered paste bodydiff --git a/paint.c b/paint.c
index 7ca3bbb..d2b25bf 100644
--- a/paint.c
+++ b/paint.c
@@ -55,15 +55,20 @@ void groupPaintThumb(GroupSelection *group, GroupTabBarSlot *slot, const CompTra
sAttrib.opacity = sAttrib.opacity * targetOpacity / 0xffff;
- if (w->mapNum) {
+ if (w->mapNum)
+ {
+ int width, height;
+
+ width = w->width + w->output.left + w->output.right;
+ height = w->height + w->output.top + w->output.bottom;
- if (WIN_WIDTH(w) > tw)
- sAttrib.xScale = (float) tw / WIN_WIDTH(w);
+ if (width > tw)
+ sAttrib.xScale = (float) tw / width;
else
sAttrib.xScale = 1.0f;
- if (WIN_HEIGHT(w) > th)
- sAttrib.yScale = (float) tw / WIN_HEIGHT(w);
+ if (height > th)
+ sAttrib.yScale = (float) tw / height;
else
sAttrib.yScale = 1.0f;
@@ -82,8 +87,14 @@ void groupPaintThumb(GroupSelection *group, GroupTabBarSlot *slot, const CompTra
int vx, vy;
groupGetDrawOffsetForSlot(slot, &vx, &vy);
- sAttrib.xTranslate = slot->region->extents.x1 - w->attrib.x + vx;
- sAttrib.yTranslate = slot->region->extents.y1 - w->attrib.y + vy;
+ sAttrib.xTranslate = slot->region->extents.x1 +
+ ((slot->region->extents.x2 - slot->region->extents.x1) / 2) -
+ (sAttrib.xScale * width / 2) +
+ (w->output.left * sAttrib.xScale) -
+ w->attrib.x + vx;
+ sAttrib.yTranslate = slot->region->extents.y1 +
+ (w->output.top * sAttrib.yScale) -
+ w->attrib.y + vy;
FragmentAttrib fragment;
CompTransform wTransform = *transform;
@@ -123,8 +134,8 @@ void groupRenderTopTabHighlight(GroupSelection *group)
bar = group->tabBar;
- int width = group->topTab->region->extents.x2 - group->topTab->region->extents.x1 + 10;
- int height = group->topTab->region->extents.y2 - group->topTab->region->extents.y1 + 10;
+ int width = group->topTab->region->extents.x2 - group->topTab->region->extents.x1;
+ int height = group->topTab->region->extents.y2 - group->topTab->region->extents.y1;
bar->selectionLayer = groupRebuildCairoLayer(group->screen, bar->selectionLayer, width, height);
if (!bar->selectionLayer)
@@ -677,10 +688,10 @@ void groupPaintTabBar(GroupSelection * group, const WindowPaintAttrib *wAttrib,
h_scale = 1.0f;
w_scale = 1.0f;
- box.extents.x1 = group->topTab->region->extents.x1 - 5;
- box.extents.x2 = group->topTab->region->extents.x2 + 5;
- box.extents.y1 = group->topTab->region->extents.y1 - 5;
- box.extents.y2 = group->topTab->region->extents.y2 + 5;
+ box.extents.x1 = group->topTab->region->extents.x1;
+ box.extents.x2 = group->topTab->region->extents.x2;
+ box.extents.y1 = group->topTab->region->extents.y1;
+ box.extents.y2 = group->topTab->region->extents.y2;
} else
layer = NULL;
break;
diff --git a/tab.c b/tab.c
index f30a500..c7fb9cd 100644
--- a/tab.c
+++ b/tab.c
@@ -2063,49 +2063,36 @@ void groupRecalcTabBarPos(GroupSelection *group, int middleX, int minX1, int max
bar->leftMsSinceLastMove = 0;
}
-#define SIZE_AND_DAMAGE_REGION(s,reg) \
- reg.extents.x1 -= 5; \
- reg.extents.x2 += 5; \
- reg.extents.y1 -= 5; \
- reg.extents.y2 += 5; \
- damageScreenRegion (s, ®);
-
void
groupDamageTabBarRegion (GroupSelection *group)
{
-/* FIXME: the commented code normally should be used, but the currently
- damaged region is too small if slots are outside the tab bar */
-#if 0
REGION reg;
reg.rects = ®.extents;
reg.numRects = 1;
- reg.extents = group->tabBar->region->extents;
- SIZE_AND_DAMAGE_REGION (group->screen, reg)
-
- if (group->tabBar->slots)
- {
- reg.extents = group->tabBar->slots->region->extents;
- SIZE_AND_DAMAGE_REGION (group->screen, reg)
- }
-
- if (group->tabBar->revSlots &&
- (group->tabBar->revSlots != group->tabBar->slots))
- {
- reg.extents = group->tabBar->slots->region->extents;
- SIZE_AND_DAMAGE_REGION (group->screen, reg)
- }
-#else
- if (HAS_TOP_WIN (group))
- addWindowDamage (TOP_TAB (group));
- else if (HAS_PREV_TOP_WIN (group))
- addWindowDamage (PREV_TOP_TAB (group));
-#endif
+ /* we use 15 pixels as damage buffer here, as there is a 10 pixel wide
+ border around the selected slot which also needs to be damaged
+ properly - however the best way would be if slot->region was
+ sized including the border */
+#define DAMAGE_BUFFER 20
+
+ reg.extents.x1 = MIN (group->tabBar->region->extents.x1,
+ group->tabBar->slots->region->extents.x1) -
+ DAMAGE_BUFFER;
+ reg.extents.y1 = MIN (group->tabBar->region->extents.y1,
+ group->tabBar->slots->region->extents.y1) -
+ DAMAGE_BUFFER;
+ reg.extents.x2 = MAX (group->tabBar->region->extents.x2,
+ group->tabBar->revSlots->region->extents.x2) +
+ DAMAGE_BUFFER;
+ reg.extents.y2 = MAX (group->tabBar->region->extents.y2,
+ group->tabBar->revSlots->region->extents.y2) +
+ DAMAGE_BUFFER;
+
+ damageScreenRegion (group->screen, ®);
}
-#undef SIZE_AND_DAMAGE_REGION
-
void
groupMoveTabBarRegion (GroupSelection *group, int dx, int dy, Bool syncIPW)
{