Author: pulkomandy Date: 2009-12-23 12:07:17 +0100 (Wed, 23 Dec 2009) New Revision: 34754 Changeset: http://dev.haiku-os.org/changeset/34754/haiku Modified: haiku/trunk/src/add-ons/decorators/BeDecorator/BeDecorator.cpp haiku/trunk/src/add-ons/decorators/MacDecorator/MacDecorator.cpp Log: - BeDecorator synced to DefaultDecorator code (mostly style changes) and fixed for correct font rendering. - Mac Decorator still not working. Modified: haiku/trunk/src/add-ons/decorators/BeDecorator/BeDecorator.cpp =================================================================== --- haiku/trunk/src/add-ons/decorators/BeDecorator/BeDecorator.cpp 2009-12-22 22:50:39 UTC (rev 34753) +++ haiku/trunk/src/add-ons/decorators/BeDecorator/BeDecorator.cpp 2009-12-23 11:07:17 UTC (rev 34754) @@ -24,7 +24,6 @@ #include <Rect.h> #include <View.h> -#include <stdio.h> //#define DEBUG_DECORATOR #ifdef DEBUG_DECORATOR @@ -98,14 +97,15 @@ fFrameColors[4].SetColor(152, 152, 152); fFrameColors[5].SetColor(96, 96, 96); - // Set appropriate colors based on the current focus value. In this case, each decorator - // defaults to not having the focus. + // Set appropriate colors based on the current focus value. In this case, + // each decorator defaults to not having the focus. _SetFocus(); // Do initial decorator setup _DoLayout(); - // ToDo: if the decorator was created with a frame too small, it should resize itself! + // TODO: If the decorator was created with a frame too small, it should + // resize itself! STRACE(("BeDecorator:\n")); STRACE(("\tFrame (%.1f,%.1f,%.1f,%.1f)\n", @@ -144,8 +144,8 @@ void -BeDecorator::SetLook(DesktopSettings& settings, - window_look look, BRegion* updateRegion) +BeDecorator::SetLook(DesktopSettings& settings, window_look look, + BRegion* updateRegion) { // TODO: we could be much smarter about the update region @@ -155,6 +155,8 @@ GetFootprint(&extent); updateRegion->Include(&extent); } + + Decorator::SetLook(settings, look, updateRegion); ServerFont font; if (look == B_FLOATING_WINDOW_LOOK || look == kLeftTitledWindowLook) { @@ -166,10 +168,8 @@ font.SetFlags(B_FORCE_ANTIALIASING); font.SetSpacing(B_STRING_SPACING); - // TODO Make this work... - // SetFont(&font); + fDrawState.SetFont(font); - Decorator::SetLook(settings, look, updateRegion); _DoLayout(); if (updateRegion != NULL) { @@ -247,7 +247,7 @@ case B_MODAL_WINDOW_LOOK: case kLeftTitledWindowLook: realResizeRect.Set(fRightBorder.right - 22, fBottomBorder.top, - fRightBorder.right - 22, fBottomBorder.bottom - 1); + fRightBorder.right - 22, fBottomBorder.bottom - 1); // resize rect at old location dirty->Include(realResizeRect); realResizeRect.OffsetBy(pt); @@ -255,7 +255,7 @@ dirty->Include(realResizeRect); realResizeRect.Set(fRightBorder.left, fBottomBorder.bottom - 22, - fRightBorder.right - 1, fBottomBorder.bottom - 22); + fRightBorder.right - 1, fBottomBorder.bottom - 22); // resize rect at old location dirty->Include(realResizeRect); realResizeRect.OffsetBy(pt); @@ -269,11 +269,11 @@ fResizeRect.OffsetBy(pt); - fBorderRect.right += pt.x; - fBorderRect.bottom += pt.y; + fBorderRect.right += pt.x; + fBorderRect.bottom += pt.y; - fLeftBorder.bottom += pt.y; - fTopBorder.right += pt.x; + fLeftBorder.bottom += pt.y; + fTopBorder.right += pt.x; fRightBorder.OffsetBy(pt.x, 0.0); fRightBorder.bottom += pt.y; @@ -284,22 +284,22 @@ if (dirty) { if (pt.x > 0.0) { BRect t(fRightBorder.left - pt.x, fTopBorder.top, - fRightBorder.right, fTopBorder.bottom); + fRightBorder.right, fTopBorder.bottom); dirty->Include(t); t.Set(fRightBorder.left - pt.x, fBottomBorder.top, - fRightBorder.right, fBottomBorder.bottom); + fRightBorder.right, fBottomBorder.bottom); dirty->Include(t); dirty->Include(fRightBorder); } else if (pt.x < 0.0) { dirty->Include(BRect(fRightBorder.left, fTopBorder.top, - fRightBorder.right, fBottomBorder.bottom)); + fRightBorder.right, fBottomBorder.bottom)); } if (pt.y > 0.0) { BRect t(fLeftBorder.left, fLeftBorder.bottom - pt.y, - fLeftBorder.right, fLeftBorder.bottom); + fLeftBorder.right, fLeftBorder.bottom); dirty->Include(t); t.Set(fRightBorder.left, fRightBorder.bottom - pt.y, - fRightBorder.right, fRightBorder.bottom); + fRightBorder.right, fRightBorder.bottom); dirty->Include(t); dirty->Include(fBottomBorder); } else if (pt.y < 0.0) { @@ -337,7 +337,8 @@ if (fLook != kLeftTitledWindowLook && tabSize != fTabRect.Width()) { fTabRect.right = fTabRect.left + tabSize; - } else if (fLook == kLeftTitledWindowLook && tabSize != fTabRect.Height()) { + } else if (fLook == kLeftTitledWindowLook + && tabSize != fTabRect.Height()) { fTabRect.bottom = fTabRect.top + tabSize; } @@ -374,7 +375,8 @@ if (location < 0) location = 0; - float maxLocation = fRightBorder.right - fLeftBorder.left - fTabRect.Width(); + float maxLocation + = fRightBorder.right - fLeftBorder.left - fTabRect.Width(); if (location > maxLocation) location = maxLocation; @@ -433,40 +435,46 @@ // We need to draw a few things: the tab, the resize thumb, the borders, // and the buttons + fDrawingEngine->SetDrawState(&fDrawState); _DrawFrame(update); _DrawTab(update); } -// Draw + void BeDecorator::Draw() { // Easy way to draw everything - no worries about drawing only certain // things + fDrawingEngine->SetDrawState(&fDrawState); _DrawFrame(BRect(fTopBorder.LeftTop(), fBottomBorder.RightBottom())); _DrawTab(fTabRect); } -// GetSizeLimits + void BeDecorator::GetSizeLimits(int32* minWidth, int32* minHeight, - int32* maxWidth, int32* maxHeight) const + int32* maxWidth, int32* maxHeight) const { - if (fTabRect.IsValid()) - *minWidth = (int32)roundf(max_c(*minWidth, fMinTabSize - 2 * fBorderWidth)); - if (fResizeRect.IsValid()) - *minHeight = (int32)roundf(max_c(*minHeight, fResizeRect.Height() - fBorderWidth)); + if (fTabRect.IsValid()) { + *minWidth = (int32)roundf(max_c(*minWidth, + fMinTabSize - 2 * fBorderWidth)); + } + if (fResizeRect.IsValid()) { + *minHeight = (int32)roundf(max_c(*minHeight, + fResizeRect.Height() - fBorderWidth)); + } } -// GetFootprint + void -BeDecorator::GetFootprint(BRegion *region) +BeDecorator::GetFootprint(BRegion* region) { STRACE(("BeDecorator: Get Footprint\n")); // This function calculates the decorator's footprint in coordinates - // relative to the layer. This is most often used to set a WindowLayer + // relative to the view. This is most often used to set a Window // object's visible region. if (!region) return; @@ -476,9 +484,9 @@ if (fLook == B_NO_BORDER_WINDOW_LOOK) return; + region->Include(fTopBorder); region->Include(fLeftBorder); region->Include(fRightBorder); - region->Include(fTopBorder); region->Include(fBottomBorder); if (fLook == B_BORDERED_WINDOW_LOOK) @@ -489,7 +497,7 @@ if (fLook == B_DOCUMENT_WINDOW_LOOK) { // include the rectangular resize knob on the bottom right region->Include(BRect(fFrame.right - 13.0f, fFrame.bottom - 13.0f, - fFrame.right, fFrame.bottom)); + fFrame.right, fFrame.bottom)); } } @@ -499,19 +507,21 @@ { #ifdef DEBUG_DECORATOR printf("BeDecorator: Clicked\n"); - printf("\tPoint: (%.1f,%.1f)\n", pt.x,pt.y); + printf("\tPoint: (%.1f,%.1f)\n", pt.x, pt.y); printf("\tButtons: %ld, Modifiers: 0x%lx\n", buttons, modifiers); #endif // DEBUG_DECORATOR - // TODO: have a real double-click mechanism, ie. take user settings into account + // TODO: have a real double-click mechanism, ie. take user settings into + // account bigtime_t now = system_time(); if (buttons != 0) { fWasDoubleClick = now - fLastClicked < 200000; fLastClicked = now; } - // In checking for hit test stuff, we start with the smallest rectangles the user might - // be clicking on and gradually work our way out into larger rectangles. + // In checking for hit test stuff, we start with the smallest rectangles + // the user might be clicking on and gradually work our way out into larger + // rectangles. if (!(fFlags & B_NOT_CLOSABLE) && fCloseRect.Contains(pt)) return DEC_CLOSE; @@ -542,7 +552,7 @@ || fLook == B_MODAL_WINDOW_LOOK || fLook == kLeftTitledWindowLook)) { BRect temp(BPoint(fBottomBorder.right - 18, fBottomBorder.bottom - 18), - fBottomBorder.RightBottom()); + fBottomBorder.RightBottom()); if (temp.Contains(pt)) return DEC_RESIZE; } @@ -551,12 +561,13 @@ } if (clicked) { - // NOTE: On R5, windows are not moved to back if clicked inside the resize area - // with the second mouse button. So we check this after the check above - if (buttons == B_SECONDARY_MOUSE_BUTTON) + // NOTE: On R5, windows are not moved to back if clicked inside the + // resize area with the second mouse button. So we check this after + // the check above + if ((buttons & B_SECONDARY_MOUSE_BUTTON) != 0) return DEC_MOVETOBACK; - if (fWasDoubleClick) + if (fWasDoubleClick && !(fFlags & B_NOT_MINIMIZABLE)) return DEC_MINIMIZE; return DEC_DRAG; @@ -604,21 +615,23 @@ if (hasTab) { // distance from one item of the tab bar to another. // In this case the text and close/zoom rects - fTextOffset = (fLook == B_FLOATING_WINDOW_LOOK || fLook == kLeftTitledWindowLook) - ? 10 : 18; + fTextOffset = (fLook == B_FLOATING_WINDOW_LOOK + || fLook == kLeftTitledWindowLook) ? 10 : 18; font_height fontHeight; fDrawState.Font().GetHeight(fontHeight); if (fLook != kLeftTitledWindowLook) { fTabRect.Set(fFrame.left - fBorderWidth, - fFrame.top - fBorderWidth - ceilf(fontHeight.ascent + fontHeight.descent + 7.0), + fFrame.top - fBorderWidth + - ceilf(fontHeight.ascent + fontHeight.descent + 7.0), ((fFrame.right - fFrame.left) < 35.0 ? fFrame.left + 35.0 : fFrame.right) + fBorderWidth, fFrame.top - fBorderWidth); } else { - fTabRect.Set(fFrame.left - fBorderWidth - ceilf(fontHeight.ascent + fontHeight.descent + 5.0), - fFrame.top - fBorderWidth, fFrame.left - fBorderWidth, + fTabRect.Set(fFrame.left - fBorderWidth + - ceilf(fontHeight.ascent + fontHeight.descent + 5.0), + fFrame.top - fBorderWidth, fFrame.left - fBorderWidth, fFrame.bottom + fBorderWidth); } @@ -640,14 +653,15 @@ fMinTabSize += offset + size; // fMaxTabSize contains fMinWidth + the width required for the title - // TODO : check what escapement_delta is supposed to do - fMaxTabSize = fDrawingEngine ? ceilf(fDrawingEngine->StringWidth(Title(), strlen(Title())/*, - &fDrawState*/)) : 0.0; + fMaxTabSize = fDrawingEngine + ? ceilf(fDrawingEngine->StringWidth(Title(), strlen(Title()), + fDrawState.Font())) : 0.0; if (fMaxTabSize > 0.0) fMaxTabSize += fTextOffset; fMaxTabSize += fMinTabSize; - float tabSize = fLook != kLeftTitledWindowLook ? fFrame.Width() : fFrame.Height(); + float tabSize = fLook != kLeftTitledWindowLook + ? fFrame.Width() : fFrame.Height(); if (tabSize < fMinTabSize) tabSize = fMinTabSize; if (tabSize > fMaxTabSize) @@ -691,8 +705,14 @@ } // calculate resize rect - fResizeRect.Set(fBottomBorder.right - 18.0, fBottomBorder.bottom - 18.0, - fBottomBorder.right, fBottomBorder.bottom); + if (fBorderWidth > 1) { + fResizeRect.Set(fBottomBorder.right - 18.0, + fBottomBorder.bottom - 18.0, fBottomBorder.right, + fBottomBorder.bottom); + } else { + // no border or one pixel border (menus and such) + fResizeRect.Set(0, 0, -1, -1); + } if (hasTab) { // make sure fTabOffset is within limits and apply it to @@ -700,8 +720,10 @@ if (fTabOffset < 0) fTabOffset = 0; if (fTabLocation != 0.0 - && fTabOffset > (fRightBorder.right - fLeftBorder.left - fTabRect.Width())) - fTabOffset = uint32(fRightBorder.right - fLeftBorder.left - fTabRect.Width()); + && fTabOffset > (fRightBorder.right - fLeftBorder.left + - fTabRect.Width())) + fTabOffset = uint32(fRightBorder.right - fLeftBorder.left + - fTabRect.Width()); fTabRect.OffsetBy(fTabOffset, 0); // finally, layout the buttons and text within the tab rect @@ -709,7 +731,7 @@ } } -// _DrawFrame + void BeDecorator::_DrawFrame(BRect invalid) { @@ -736,38 +758,38 @@ if (invalid.Intersects(fTopBorder)) { for (int8 i = 0; i < 5; i++) { fDrawingEngine->StrokeLine(BPoint(r.left + i, r.top + i), - BPoint(r.right - i, r.top + i), - fFrameColors[i]); + BPoint(r.right - i, r.top + i), fFrameColors[i]); } if (fTabRect.IsValid()) { - // grey along the bottom of the tab (overwrites "white" from frame) - fDrawingEngine->StrokeLine(BPoint(fTabRect.left + 2, fTabRect.bottom + 1), - BPoint(fTabRect.right - 2, fTabRect.bottom + 1), - fFrameColors[2]); + // grey along the bottom of the tab + // (overwrites "white" from frame) + fDrawingEngine->StrokeLine( + BPoint(fTabRect.left + 2, fTabRect.bottom + 1), + BPoint(fTabRect.right - 2, fTabRect.bottom + 1), + fFrameColors[2]); } } // left if (invalid.Intersects(fLeftBorder.InsetByCopy(0, -fBorderWidth))) { for (int8 i = 0; i < 5; i++) { fDrawingEngine->StrokeLine(BPoint(r.left + i, r.top + i), - BPoint(r.left + i, r.bottom - i), - fFrameColors[i]); + BPoint(r.left + i, r.bottom - i), fFrameColors[i]); } } // bottom if (invalid.Intersects(fBottomBorder)) { for (int8 i = 0; i < 5; i++) { fDrawingEngine->StrokeLine(BPoint(r.left + i, r.bottom - i), - BPoint(r.right - i, r.bottom - i), - fFrameColors[(4 - i) == 4 ? 5 : (4 - i)]); + BPoint(r.right - i, r.bottom - i), + fFrameColors[(4 - i) == 4 ? 5 : (4 - i)]); } } // right if (invalid.Intersects(fRightBorder.InsetByCopy(0, -fBorderWidth))) { for (int8 i = 0; i < 5; i++) { fDrawingEngine->StrokeLine(BPoint(r.right - i, r.top + i), - BPoint(r.right - i, r.bottom - i), - fFrameColors[(4 - i) == 4 ? 5 : (4 - i)]); + BPoint(r.right - i, r.bottom - i), + fFrameColors[(4 - i) == 4 ? 5 : (4 - i)]); } } break; @@ -780,44 +802,46 @@ if (invalid.Intersects(fTopBorder)) { for (int8 i = 0; i < 3; i++) { fDrawingEngine->StrokeLine(BPoint(r.left + i, r.top + i), - BPoint(r.right - i, r.top + i), - fFrameColors[i * 2]); + BPoint(r.right - i, r.top + i), fFrameColors[i * 2]); } if (fTabRect.IsValid() && fLook != kLeftTitledWindowLook) { - // grey along the bottom of the tab (overwrites "white" from frame) - fDrawingEngine->StrokeLine(BPoint(fTabRect.left + 2, fTabRect.bottom + 1), - BPoint(fTabRect.right - 2, fTabRect.bottom + 1), - fFrameColors[2]); + // grey along the bottom of the tab + // (overwrites "white" from frame) + fDrawingEngine->StrokeLine( + BPoint(fTabRect.left + 2, fTabRect.bottom + 1), + BPoint(fTabRect.right - 2, fTabRect.bottom + 1), + fFrameColors[2]); } } // left if (invalid.Intersects(fLeftBorder.InsetByCopy(0, -fBorderWidth))) { for (int8 i = 0; i < 3; i++) { fDrawingEngine->StrokeLine(BPoint(r.left + i, r.top + i), - BPoint(r.left + i, r.bottom - i), - fFrameColors[i * 2]); + BPoint(r.left + i, r.bottom - i), fFrameColors[i * 2]); } if (fLook == kLeftTitledWindowLook && fTabRect.IsValid()) { - // grey along the right side of the tab (overwrites "white" from frame) - fDrawingEngine->StrokeLine(BPoint(fTabRect.right + 1, fTabRect.top + 2), - BPoint(fTabRect.right + 1, fTabRect.bottom - 2), - fFrameColors[2]); + // grey along the right side of the tab + // (overwrites "white" from frame) + fDrawingEngine->StrokeLine( + BPoint(fTabRect.right + 1, fTabRect.top + 2), + BPoint(fTabRect.right + 1, fTabRect.bottom - 2), + fFrameColors[2]); } } // bottom if (invalid.Intersects(fBottomBorder)) { for (int8 i = 0; i < 3; i++) { fDrawingEngine->StrokeLine(BPoint(r.left + i, r.bottom - i), - BPoint(r.right - i, r.bottom - i), - fFrameColors[(2 - i) == 2 ? 5 : (2 - i) * 2]); + BPoint(r.right - i, r.bottom - i), + fFrameColors[(2 - i) == 2 ? 5 : (2 - i) * 2]); } } // right if (invalid.Intersects(fRightBorder.InsetByCopy(0, -fBorderWidth))) { for (int8 i = 0; i < 3; i++) { fDrawingEngine->StrokeLine(BPoint(r.right - i, r.top + i), - BPoint(r.right - i, r.bottom - i), - fFrameColors[(2 - i) == 2 ? 5 : (2 - i) * 2]); + BPoint(r.right - i, r.bottom - i), + fFrameColors[(2 - i) == 2 ? 5 : (2 - i) * 2]); } } break; @@ -860,8 +884,8 @@ for (int8 i = 1; i <= 4; i++) { for (int8 j = 1; j <= i; j++) { - BPoint pt1(x - (3 * j) + 1, y - (3 * (5 - i)) + 1); - BPoint pt2(x - (3 * j) + 2, y - (3 * (5 - i)) + 2); + BPoint pt1(x - (3 * j) + 1, y - (3 * (5 - i)) + 1); + BPoint pt2(x - (3 * j) + 2, y - (3 * (5 - i)) + 2); fDrawingEngine->StrokePoint(pt1, fFrameColors[0]); fDrawingEngine->StrokePoint(pt2, fFrameColors[1]); } @@ -875,16 +899,18 @@ case kLeftTitledWindowLook: { if (!invalid.Intersects(BRect(fRightBorder.right - 22, - fBottomBorder.bottom - 22, fRightBorder.right - 1, - fBottomBorder.bottom - 1))) + fBottomBorder.bottom - 22, fRightBorder.right - 1, + fBottomBorder.bottom - 1))) break; - fDrawingEngine->StrokeLine(BPoint(fRightBorder.left, fBottomBorder.bottom - 22), - BPoint(fRightBorder.right - 1, fBottomBorder.bottom - 22), - fFrameColors[0]); - fDrawingEngine->StrokeLine(BPoint(fRightBorder.right - 22, fBottomBorder.top), - BPoint(fRightBorder.right - 22, fBottomBorder.bottom - 1), - fFrameColors[0]); + fDrawingEngine->StrokeLine( + BPoint(fRightBorder.left, fBottomBorder.bottom - 22), + BPoint(fRightBorder.right - 1, fBottomBorder.bottom - 22), + fFrameColors[0]); + fDrawingEngine->StrokeLine( + BPoint(fRightBorder.right - 22, fBottomBorder.top), + BPoint(fRightBorder.right - 22, fBottomBorder.bottom - 1), + fFrameColors[0]); break; } @@ -895,7 +921,7 @@ } } -// _DrawTab + void BeDecorator::_DrawTab(BRect invalid) { @@ -911,26 +937,34 @@ RGBColor tabColorShadow = RGBColor(tint_color(fTabColor.GetColor32(),B_DARKEN_2_TINT)); // outer frame - fDrawingEngine->StrokeLine(fTabRect.LeftTop(), fTabRect.LeftBottom(), fFrameColors[0]); - fDrawingEngine->StrokeLine(fTabRect.LeftTop(), fTabRect.RightTop(), fFrameColors[0]); - if (fLook != kLeftTitledWindowLook) - fDrawingEngine->StrokeLine(fTabRect.RightTop(),fTabRect.RightBottom(), fFrameColors[5]); - else - fDrawingEngine->StrokeLine(fTabRect.LeftBottom(),fTabRect.RightBottom(), fFrameColors[5]); + fDrawingEngine->StrokeLine(fTabRect.LeftTop(), fTabRect.LeftBottom(), + fFrameColors[0]); + fDrawingEngine->StrokeLine(fTabRect.LeftTop(), fTabRect.RightTop(), + fFrameColors[0]); + if (fLook != kLeftTitledWindowLook) { + fDrawingEngine->StrokeLine(fTabRect.RightTop(), fTabRect.RightBottom(), + fFrameColors[5]); + } else { + fDrawingEngine->StrokeLine(fTabRect.LeftBottom(), + fTabRect.RightBottom(), fFrameColors[5]); + } // bevel fDrawingEngine->StrokeLine(BPoint(fTabRect.left + 1, fTabRect.top + 1), - BPoint(fTabRect.left + 1, fTabRect.bottom - (fLook == kLeftTitledWindowLook ? 1 : 0)), + BPoint(fTabRect.left + 1, + fTabRect.bottom - (fLook == kLeftTitledWindowLook ? 1 : 0)), tabColorLight); fDrawingEngine->StrokeLine(BPoint(fTabRect.left + 1, fTabRect.top + 1), - BPoint(fTabRect.right - (fLook == kLeftTitledWindowLook ? 0 : 1), fTabRect.top + 1), + BPoint(fTabRect.right - (fLook == kLeftTitledWindowLook ? 0 : 1), + fTabRect.top + 1), tabColorLight); if (fLook != kLeftTitledWindowLook) { fDrawingEngine->StrokeLine(BPoint(fTabRect.right - 1, fTabRect.top + 2), BPoint(fTabRect.right - 1, fTabRect.bottom), tabColorShadow); } else { - fDrawingEngine->StrokeLine(BPoint(fTabRect.left + 2, fTabRect.bottom - 1), + fDrawingEngine->StrokeLine( + BPoint(fTabRect.left + 2, fTabRect.bottom - 1), BPoint(fTabRect.right, fTabRect.bottom - 1), tabColorShadow); } @@ -952,7 +986,7 @@ _DrawZoom(fZoomRect); } -// _DrawClose + void BeDecorator::_DrawClose(BRect r) { @@ -961,14 +995,16 @@ _DrawBlendedRect(r, GetClose()); } -// _DrawTitle + void BeDecorator::_DrawTitle(BRect r) { STRACE(("_DrawTitle(%f,%f,%f,%f)\n", r.left, r.top, r.right, r.bottom)); - fDrawState.SetHighColor(fTextColor); - fDrawState.SetLowColor(fTabColor); + fDrawingEngine->SetDrawingMode(B_OP_OVER); + fDrawingEngine->SetHighColor(fTextColor); + fDrawingEngine->SetLowColor(fTabColor); + fDrawingEngine->SetFont(fDrawState.Font()); // figure out position of text font_height fontHeight; @@ -978,19 +1014,24 @@ if (fLook != kLeftTitledWindowLook) { titlePos.x = fCloseRect.IsValid() ? fCloseRect.right + fTextOffset : fTabRect.left + fTextOffset; - titlePos.y = floorf(((fTabRect.top + 2.0) + fTabRect.bottom + fontHeight.ascent - + fontHeight.descent) / 2.0 - fontHeight.descent + 0.5); + titlePos.y = floorf(((fTabRect.top + 2.0) + fTabRect.bottom + + fontHeight.ascent + fontHeight.descent) / 2.0 + - fontHeight.descent + 0.5); } else { - titlePos.x = floorf(((fTabRect.left + 2.0) + fTabRect.right + fontHeight.ascent - + fontHeight.descent) / 2.0 - fontHeight.descent + 0.5); + titlePos.x = floorf(((fTabRect.left + 2.0) + fTabRect.right + + fontHeight.ascent + fontHeight.descent) / 2.0 + - fontHeight.descent + 0.5); titlePos.y = fZoomRect.IsValid() ? fZoomRect.top - fTextOffset : fTabRect.bottom - fTextOffset; } - fDrawingEngine->DrawString(fTruncatedTitle.String(), fTruncatedTitleLength, titlePos/*, &fDrawState*/); + fDrawingEngine->DrawString(fTruncatedTitle.String(), fTruncatedTitleLength, + titlePos); + + fDrawingEngine->SetDrawingMode(B_OP_COPY); } -// _DrawZoom + void BeDecorator::_DrawZoom(BRect r) { @@ -1009,14 +1050,15 @@ _DrawBlendedRect(zr, GetZoom()); } -// _SetFocus + void BeDecorator::_SetFocus() { // SetFocus() performs necessary duties for color swapping and // other things when a window is deactivated or activated. - if (IsFocus() || ((fLook == B_FLOATING_WINDOW_LOOK || fLook == kLeftTitledWindowLook) + if (IsFocus() + || ((fLook == B_FLOATING_WINDOW_LOOK || fLook == kLeftTitledWindowLook) && (fFlags & B_AVOID_FOCUS) != 0)) { fTabColor = UIColor(B_WINDOW_TAB_COLOR); fTextColor = UIColor(B_WINDOW_TEXT_COLOR); @@ -1044,7 +1086,7 @@ } } -// _SetColors + void BeDecorator::_SetColors() { @@ -1168,7 +1210,7 @@ } // calculate room for title - // ToDo: the +2 is there because the title often appeared + // TODO: the +2 is there because the title often appeared // truncated for no apparent reason - OTOH the title does // also not appear perfectly in the middle if (fLook != kLeftTitledWindowLook) Modified: haiku/trunk/src/add-ons/decorators/MacDecorator/MacDecorator.cpp =================================================================== --- haiku/trunk/src/add-ons/decorators/MacDecorator/MacDecorator.cpp 2009-12-22 22:50:39 UTC (rev 34753) +++ haiku/trunk/src/add-ons/decorators/MacDecorator/MacDecorator.cpp 2009-12-23 11:07:17 UTC (rev 34754) @@ -1,8 +1,6 @@ #include <Point.h> #include "DrawingEngine.h" #include <View.h> -//#include "LayerData.h" -//#include "ColorUtils.h" #include "MacDecorator.h" #include "RGBColor.h" #include "PatternHandler.h"