Kaydet (Commit) 17ea32a1 authored tarafından Ruslan Kabatsayev's avatar Ruslan Kabatsayev Kaydeden (comit) Michael Meeks

Make bottom tabbar items follow native theme

Change-Id: Ia1c4b4ece81655a91c6e489ee51291684e06c157
üst 1c222c5a
......@@ -1098,14 +1098,20 @@ public:
void drawOutputAreaBorder()
{
Size aOutputSize = mrParent.GetOutputSizePixel();
Rectangle aOutRect = mrParent.GetPageArea();
Rectangle borderRect(Point(aOutRect.Left(),-10),Size(aOutputSize.Width(),12));
if( mrParent.IsNativeControlSupported(CTRL_FRAME,PART_ENTIRE_CONTROL) &&
mrParent.DrawNativeControl(CTRL_FRAME,PART_ENTIRE_CONTROL,borderRect,
CTRL_STATE_ENABLED,ImplControlValue(FRAME_DRAW_IN),rtl::OUString()) )
return;
WinBits nWinStyle = mrParent.GetStyle();
// Bei Border oben und unten einen Strich extra malen
if ( (nWinStyle & WB_BORDER) || (nWinStyle & WB_TOPBORDER) )
{
Size aOutputSize = mrParent.GetOutputSizePixel();
Rectangle aOutRect = mrParent.GetPageArea();
// Bei 3D-Tabs wird auch der Border in 3D gemalt
if ( nWinStyle & WB_3DTAB )
{
......@@ -1198,6 +1204,27 @@ public:
void drawTab()
{
ControlState nState(CTRL_STATE_ENABLED);
if( mbSelected )
nState|=CTRL_STATE_SELECTED;
TabitemValue tiValue;
tiValue.mnPosition|=TABITEM_IS_AT_BOTTOM;
Rectangle tabRect(maRect);
tabRect.Left()+=5;
tabRect.Right()-=4;
tabRect.Bottom()+=1;
if( !mbSelected )
{
tabRect.Bottom()-=2;
tabRect.Top()+=2;
}
if( mrParent.IsNativeControlSupported(CTRL_TAB_ITEM,PART_ENTIRE_CONTROL) &&
mrParent.DrawNativeControl(CTRL_TAB_ITEM,PART_ENTIRE_CONTROL,tabRect,
nState,tiValue,rtl::OUString()) )
{
return;
}
mrParent.SetLineColor(mpStyleSettings->GetDarkShadowColor());
// Je nach Status die richtige FillInBrush setzen
......@@ -1421,10 +1448,13 @@ void TabBar::Paint( const Rectangle& )
aDrawer.drawText(aText);
if ( bCurrent )
{
if(!IsNativeControlSupported(CTRL_TAB_ITEM,PART_ENTIRE_CONTROL))
{
SetLineColor();
SetFillColor(aSelectColor);
aDrawer.drawOverTopBorder(mnWinStyle & WB_3DTAB);
}
return;
}
......
......@@ -366,16 +366,20 @@ class VCL_DLLPUBLIC SliderValue : public ImplControlValue
#define TABITEM_RIGHTALIGNED 0x002 // the tabitem is aligned with the right border of the TabControl
#define TABITEM_FIRST_IN_GROUP 0x004 // the tabitem is the first in group of tabitems
#define TABITEM_LAST_IN_GROUP 0x008 // the tabitem is the last in group of tabitems
/* This constant is independent from the ones above */
#define TABITEM_IS_AT_BOTTOM 0x001 // the tabitem at the bottom of the TabControl
class VCL_DLLPUBLIC TabitemValue : public ImplControlValue
{
public:
unsigned int mnAlignment;
unsigned int mnPosition;
inline TabitemValue()
: ImplControlValue( CTRL_TAB_ITEM, BUTTONVALUE_DONTKNOW, 0 )
{
mnAlignment = 0;
mnPosition = 0;
};
virtual ~TabitemValue();
virtual TabitemValue* clone() const;
......@@ -386,6 +390,7 @@ class VCL_DLLPUBLIC TabitemValue : public ImplControlValue
sal_Bool isNotAligned() const { return (mnAlignment & (TABITEM_LEFTALIGNED | TABITEM_RIGHTALIGNED)) == 0; }
sal_Bool isFirst() const { return (mnAlignment & TABITEM_FIRST_IN_GROUP) != 0; }
sal_Bool isLast() const { return (mnAlignment & TABITEM_LAST_IN_GROUP) != 0; }
sal_Bool isAtBottom() const { return (mnPosition & TABITEM_IS_AT_BOTTOM) != 0; }
};
/* SpinbuttonValue:
......
......@@ -2680,7 +2680,11 @@ sal_Bool GtkSalGraphics::NWPaintGTKTabItem( ControlType nType, ControlPart,
case CTRL_TAB_ITEM:
{
const TabitemValue* tiValue = static_cast<const TabitemValue *>(&aValue);
stateType = ( nState & CTRL_STATE_SELECTED ) ? GTK_STATE_NORMAL : GTK_STATE_ACTIVE;
GtkPositionType gapSide(GTK_POS_BOTTOM);
if(tiValue->isAtBottom())
gapSide=GTK_POS_TOP;
// First draw the background
gtk_paint_flat_box(gWidgetData[m_nXScreen].gNotebookWidget->style, pixmap,
......@@ -2696,7 +2700,7 @@ sal_Bool GtkSalGraphics::NWPaintGTKTabItem( ControlType nType, ControlPart,
gtk_paint_extension( gWidgetData[m_nXScreen].gNotebookWidget->style, pixmap, stateType, GTK_SHADOW_OUT, NULL, gWidgetData[m_nXScreen].gNotebookWidget,
(char *)"tab", (tabRect.Left() - pixmapRect.Left()), (tabRect.Top() - pixmapRect.Top()),
tabRect.GetWidth(), tabRect.GetHeight(), GTK_POS_BOTTOM );
tabRect.GetWidth(), tabRect.GetHeight(), gapSide);
g_object_steal_data(G_OBJECT(pixmap),tabPrelitDataName);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment