Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
core
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
LibreOffice
core
Commits
a6b9d9a1
Kaydet (Commit)
a6b9d9a1
authored
May 06, 2015
tarafından
Tomaž Vajngerl
Kaydeden (comit)
Jan Holesovsky
May 07, 2015
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
refactor "TabControl" to use RenderContext
Change-Id: Iac6703bb9cf42e18c658b560a10baa6af6fa1df3
üst
d8a53d46
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
96 additions
and
89 deletions
+96
-89
tabctrl.hxx
include/vcl/tabctrl.hxx
+4
-2
tabctrl.cxx
vcl/source/control/tabctrl.cxx
+92
-87
No files found.
include/vcl/tabctrl.hxx
Dosyayı görüntüle @
a6b9d9a1
...
...
@@ -61,8 +61,10 @@ private:
SAL_DLLPRIVATE
bool
ImplPosCurTabPage
();
SAL_DLLPRIVATE
void
ImplActivateTabPage
(
bool
bNext
);
SAL_DLLPRIVATE
void
ImplShowFocus
();
SAL_DLLPRIVATE
void
ImplDrawItem
(
ImplTabItem
*
pItem
,
const
Rectangle
&
rCurRect
,
bool
bLayout
=
false
,
bool
bFirstInGroup
=
false
,
bool
bLastInGroup
=
false
,
bool
bIsCurrentItem
=
false
);
SAL_DLLPRIVATE
void
ImplPaint
(
const
Rectangle
&
rRect
,
bool
bLayout
=
false
);
SAL_DLLPRIVATE
void
ImplDrawItem
(
vcl
::
RenderContext
&
rRenderContext
,
ImplTabItem
*
pItem
,
const
Rectangle
&
rCurRect
,
bool
bLayout
=
false
,
bool
bFirstInGroup
=
false
,
bool
bLastInGroup
=
false
,
bool
bIsCurrentItem
=
false
);
SAL_DLLPRIVATE
void
ImplPaint
(
vcl
::
RenderContext
&
rRenderContext
,
const
Rectangle
&
rRect
,
bool
bLayout
=
false
);
SAL_DLLPRIVATE
void
ImplFreeLayoutData
();
SAL_DLLPRIVATE
bool
ImplHandleKeyEvent
(
const
KeyEvent
&
rKeyEvent
);
...
...
vcl/source/control/tabctrl.cxx
Dosyayı görüntüle @
a6b9d9a1
...
...
@@ -763,7 +763,8 @@ void TabControl::ImplShowFocus()
ShowFocus
(
aRect
);
}
void
TabControl
::
ImplDrawItem
(
ImplTabItem
*
pItem
,
const
Rectangle
&
rCurRect
,
bool
bLayout
,
bool
bFirstInGroup
,
bool
bLastInGroup
,
bool
/* bIsCurrentItem */
)
void
TabControl
::
ImplDrawItem
(
vcl
::
RenderContext
&
/*rRenderContext*/
,
ImplTabItem
*
pItem
,
const
Rectangle
&
rCurRect
,
bool
bLayout
,
bool
bFirstInGroup
,
bool
bLastInGroup
,
bool
/* bIsCurrentItem */
)
{
if
(
pItem
->
maRect
.
IsEmpty
()
)
return
;
...
...
@@ -1062,26 +1063,26 @@ void TabControl::KeyInput( const KeyEvent& rKEvt )
Control
::
KeyInput
(
rKEvt
);
}
void
TabControl
::
Paint
(
vcl
::
RenderContext
&
/*rRenderContext*/
,
const
Rectangle
&
rRect
)
void
TabControl
::
Paint
(
vcl
::
RenderContext
&
rRenderContext
,
const
Rectangle
&
rRect
)
{
if
(
!
(
GetStyle
()
&
WB_NOBORDER
)
)
ImplPaint
(
rRect
,
false
);
if
(
!
(
GetStyle
()
&
WB_NOBORDER
)
)
ImplPaint
(
rRenderContext
,
rRect
,
false
);
}
void
TabControl
::
ImplPaint
(
const
Rectangle
&
rRect
,
bool
bLayout
)
void
TabControl
::
ImplPaint
(
vcl
::
RenderContext
&
rRenderContext
,
const
Rectangle
&
rRect
,
bool
bLayout
)
{
if
(
!
bLayout
)
if
(
!
bLayout
)
HideFocus
();
// reformat if needed
Rectangle
aRect
=
ImplGetTabRect
(
TAB_PAGERECT
);
Rectangle
aRect
=
ImplGetTabRect
(
TAB_PAGERECT
);
// find current item
ImplTabItem
*
pCurItem
=
NULL
;
for
(
std
::
vector
<
ImplTabItem
>::
iterator
it
=
mpTabCtrlData
->
maItemList
.
begin
();
for
(
std
::
vector
<
ImplTabItem
>::
iterator
it
=
mpTabCtrlData
->
maItemList
.
begin
();
it
!=
mpTabCtrlData
->
maItemList
.
end
();
++
it
)
{
if
(
it
->
mnId
==
mnCurPageId
)
if
(
it
->
mnId
==
mnCurPageId
)
{
pCurItem
=
&
(
*
it
);
break
;
...
...
@@ -1089,8 +1090,8 @@ void TabControl::ImplPaint( const Rectangle& rRect, bool bLayout )
}
// Draw the TabPage border
const
StyleSettings
&
rStyleSettings
=
GetSettings
().
GetStyleSettings
();
Rectangle
aCurRect
;
const
StyleSettings
&
rStyleSettings
=
rRenderContext
.
GetSettings
().
GetStyleSettings
();
Rectangle
aCurRect
;
aRect
.
Left
()
-=
TAB_OFFSET
;
aRect
.
Top
()
-=
TAB_OFFSET
;
aRect
.
Right
()
+=
TAB_OFFSET
;
...
...
@@ -1102,123 +1103,121 @@ void TabControl::ImplPaint( const Rectangle& rRect, bool bLayout )
// standalone (eg impress)
bool
bNoTabPage
=
false
;
TabPage
*
pCurPage
=
pCurItem
?
pCurItem
->
mpTabPage
.
get
()
:
NULL
;
if
(
!
pCurPage
||
!
pCurPage
->
IsVisible
()
)
if
(
!
pCurPage
||
!
pCurPage
->
IsVisible
()
)
{
bNoTabPage
=
true
;
aRect
.
Left
()
-=
10
;
aRect
.
Right
()
+=
10
;
aRect
.
Left
()
-=
10
;
aRect
.
Right
()
+=
10
;
}
if
(
!
bLayout
&&
IsNativeControlSupported
(
CTRL_TAB_PANE
,
PART_ENTIRE_CONTROL
))
if
(
!
bLayout
&&
rRenderContext
.
IsNativeControlSupported
(
CTRL_TAB_PANE
,
PART_ENTIRE_CONTROL
))
{
const
ImplControlValue
aControlValue
;
ControlState
nState
=
ControlState
::
ENABLED
;
if
(
!
IsEnabled
()
)
if
(
!
IsEnabled
()
)
nState
&=
~
ControlState
::
ENABLED
;
if
(
HasFocus
()
)
if
(
HasFocus
()
)
nState
|=
ControlState
::
FOCUSED
;
vcl
::
Region
aClipRgn
(
GetActiveClipRegion
()
);
aClipRgn
.
Intersect
(
aRect
);
if
(
!
rRect
.
IsEmpty
()
)
aClipRgn
.
Intersect
(
rRect
);
vcl
::
Region
aClipRgn
(
rRenderContext
.
GetActiveClipRegion
()
);
aClipRgn
.
Intersect
(
aRect
);
if
(
!
rRect
.
IsEmpty
()
)
aClipRgn
.
Intersect
(
rRect
);
if
(
!
aClipRgn
.
IsEmpty
()
)
if
(
!
aClipRgn
.
IsEmpty
()
)
{
DrawNativeControl
(
CTRL_TAB_PANE
,
PART_ENTIRE_CONTROL
,
aRect
,
nState
,
aControlValue
,
OUString
());
rRenderContext
.
DrawNativeControl
(
CTRL_TAB_PANE
,
PART_ENTIRE_CONTROL
,
aRect
,
nState
,
aControlValue
,
OUString
());
}
if
(
IsNativeControlSupported
(
CTRL_TAB_HEADER
,
PART_ENTIRE_CONTROL
))
if
(
rRenderContext
.
IsNativeControlSupported
(
CTRL_TAB_HEADER
,
PART_ENTIRE_CONTROL
))
{
Rectangle
aHeaderRect
(
aRect
.
Left
(),
0
,
aRect
.
Right
(),
aRect
.
Top
());
aClipRgn
=
GetActiveClipRegion
();
aClipRgn
.
Intersect
(
aHeaderRect
);
if
(
!
rRect
.
IsEmpty
()
)
aClipRgn
.
Intersect
(
rRect
);
aClipRgn
=
rRenderContext
.
GetActiveClipRegion
();
aClipRgn
.
Intersect
(
aHeaderRect
);
if
(
!
rRect
.
IsEmpty
()
)
aClipRgn
.
Intersect
(
rRect
);
if
(
!
aClipRgn
.
IsEmpty
()
)
if
(
!
aClipRgn
.
IsEmpty
()
)
{
DrawNativeControl
(
CTRL_TAB_HEADER
,
PART_ENTIRE_CONTROL
,
aHeaderRect
,
nState
,
aControlValue
,
OUString
());
rRenderContext
.
DrawNativeControl
(
CTRL_TAB_HEADER
,
PART_ENTIRE_CONTROL
,
aHeaderRect
,
nState
,
aControlValue
,
OUString
());
}
}
}
else
{
long
nTopOff
=
1
;
if
(
!
(
rStyleSettings
.
GetOptions
()
&
STYLE_OPTION_MONO
)
)
SetLineColor
(
rStyleSettings
.
GetLightColor
()
);
if
(
!
(
rStyleSettings
.
GetOptions
()
&
STYLE_OPTION_MONO
)
)
rRenderContext
.
SetLineColor
(
rStyleSettings
.
GetLightColor
()
);
else
SetLineColor
(
Color
(
COL_BLACK
)
);
if
(
pCurItem
&&
!
pCurItem
->
maRect
.
IsEmpty
()
)
rRenderContext
.
SetLineColor
(
Color
(
COL_BLACK
)
);
if
(
pCurItem
&&
!
pCurItem
->
maRect
.
IsEmpty
()
)
{
aCurRect
=
pCurItem
->
maRect
;
if
(
!
bLayout
)
DrawLine
(
aRect
.
TopLeft
(),
Point
(
aCurRect
.
Left
()
-
2
,
aRect
.
Top
()
)
);
if
(
aCurRect
.
Right
()
+
1
<
aRect
.
Right
()
)
if
(
!
bLayout
)
rRenderContext
.
DrawLine
(
aRect
.
TopLeft
(),
Point
(
aCurRect
.
Left
()
-
2
,
aRect
.
Top
())
);
if
(
aCurRect
.
Right
()
+
1
<
aRect
.
Right
()
)
{
if
(
!
bLayout
)
DrawLine
(
Point
(
aCurRect
.
Right
(),
aRect
.
Top
()
),
aRect
.
TopRight
()
);
if
(
!
bLayout
)
rRenderContext
.
DrawLine
(
Point
(
aCurRect
.
Right
(),
aRect
.
Top
()),
aRect
.
TopRight
()
);
}
else
{
nTopOff
=
0
;
}
}
else
if
(
!
bLayout
)
DrawLine
(
aRect
.
TopLeft
(),
aRect
.
TopRight
()
);
if
(
!
bLayout
)
rRenderContext
.
DrawLine
(
aRect
.
TopLeft
(),
aRect
.
TopRight
()
);
if
(
!
bLayout
)
if
(
!
bLayout
)
{
DrawLine
(
aRect
.
TopLeft
(),
aRect
.
BottomLeft
()
);
rRenderContext
.
DrawLine
(
aRect
.
TopLeft
(),
aRect
.
BottomLeft
()
);
if
(
!
(
rStyleSettings
.
GetOptions
()
&
STYLE_OPTION_MONO
)
)
if
(
!
(
rStyleSettings
.
GetOptions
()
&
STYLE_OPTION_MONO
)
)
{
// if we have not tab page the bottom line of the tab page
// directly touches the tab items, so choose a color that fits seamlessly
if
(
bNoTabPage
)
SetLineColor
(
rStyleSettings
.
GetDialogColor
()
);
if
(
bNoTabPage
)
rRenderContext
.
SetLineColor
(
rStyleSettings
.
GetDialogColor
()
);
else
SetLineColor
(
rStyleSettings
.
GetShadowColor
()
);
DrawLine
(
Point
(
1
,
aRect
.
Bottom
()
-
1
),
Point
(
aRect
.
Right
()
-
1
,
aRect
.
Bottom
()
-
1
)
);
DrawLine
(
Point
(
aRect
.
Right
()
-
1
,
aRect
.
Top
()
+
nTopOff
),
Point
(
aRect
.
Right
()
-
1
,
aRect
.
Bottom
()
-
1
)
);
if
(
bNoTabPage
)
SetLineColor
(
rStyleSettings
.
GetDialogColor
()
);
rRenderContext
.
SetLineColor
(
rStyleSettings
.
GetShadowColor
());
rRenderContext
.
DrawLine
(
Point
(
1
,
aRect
.
Bottom
()
-
1
),
Point
(
aRect
.
Right
()
-
1
,
aRect
.
Bottom
()
-
1
));
rRenderContext
.
DrawLine
(
Point
(
aRect
.
Right
()
-
1
,
aRect
.
Top
()
+
nTopOff
),
Point
(
aRect
.
Right
()
-
1
,
aRect
.
Bottom
()
-
1
));
if
(
bNoTabPage
)
rRenderContext
.
SetLineColor
(
rStyleSettings
.
GetDialogColor
());
else
SetLineColor
(
rStyleSettings
.
GetDarkShadowColor
()
);
DrawLine
(
Point
(
0
,
aRect
.
Bottom
()
),
Point
(
aRect
.
Right
(),
aRect
.
Bottom
()
)
);
DrawLine
(
Point
(
aRect
.
Right
(),
aRect
.
Top
()
+
nTopOff
),
Point
(
aRect
.
Right
(),
aRect
.
Bottom
()
)
);
rRenderContext
.
SetLineColor
(
rStyleSettings
.
GetDarkShadowColor
());
rRenderContext
.
DrawLine
(
Point
(
0
,
aRect
.
Bottom
()),
Point
(
aRect
.
Right
(),
aRect
.
Bottom
()));
rRenderContext
.
DrawLine
(
Point
(
aRect
.
Right
(),
aRect
.
Top
()
+
nTopOff
),
Point
(
aRect
.
Right
(),
aRect
.
Bottom
()));
}
else
{
DrawLine
(
aRect
.
TopRight
(),
aRect
.
BottomRight
()
);
DrawLine
(
aRect
.
BottomLeft
(),
aRect
.
BottomRight
()
);
rRenderContext
.
DrawLine
(
aRect
.
TopRight
(),
aRect
.
BottomRight
()
);
rRenderContext
.
DrawLine
(
aRect
.
BottomLeft
(),
aRect
.
BottomRight
()
);
}
}
}
if
(
!
mpTabCtrlData
->
maItemList
.
empty
()
&&
mpTabCtrlData
->
mpListBox
==
nullptr
)
if
(
!
mpTabCtrlData
->
maItemList
.
empty
()
&&
mpTabCtrlData
->
mpListBox
==
nullptr
)
{
// Some native toolkits (GTK+) draw tabs right-to-left, with an
// overlap between adjacent tabs
bool
bDrawTabsRTL
=
IsNativeControlSupported
(
CTRL_TAB_ITEM
,
PART_TABS_DRAW_RTL
);
ImplTabItem
*
pFirstTab
=
NULL
;
ImplTabItem
*
pLastTab
=
NULL
;
bool
bDrawTabsRTL
=
rRenderContext
.
IsNativeControlSupported
(
CTRL_TAB_ITEM
,
PART_TABS_DRAW_RTL
);
ImplTabItem
*
pFirstTab
=
NULL
;
ImplTabItem
*
pLastTab
=
NULL
;
size_t
idx
;
// Event though there is a tab overlap with GTK+, the first tab is not
// overlapped on the left side. Other tookits ignore this option.
if
(
bDrawTabsRTL
)
if
(
bDrawTabsRTL
)
{
pFirstTab
=
&
mpTabCtrlData
->
maItemList
.
front
();
pLastTab
=
&
mpTabCtrlData
->
maItemList
.
back
();
idx
=
mpTabCtrlData
->
maItemList
.
size
()
-
1
;
idx
=
mpTabCtrlData
->
maItemList
.
size
()
-
1
;
}
else
{
...
...
@@ -1227,40 +1226,46 @@ void TabControl::ImplPaint( const Rectangle& rRect, bool bLayout )
idx
=
0
;
}
while
(
idx
<
mpTabCtrlData
->
maItemList
.
size
()
)
while
(
idx
<
mpTabCtrlData
->
maItemList
.
size
()
)
{
ImplTabItem
*
pItem
=
&
mpTabCtrlData
->
maItemList
[
idx
];
if
(
pItem
!=
pCurItem
)
if
(
pItem
!=
pCurItem
)
{
vcl
::
Region
aClipRgn
(
GetActiveClipRegion
()
);
aClipRgn
.
Intersect
(
pItem
->
maRect
);
if
(
!
rRect
.
IsEmpty
()
)
aClipRgn
.
Intersect
(
rRect
);
if
(
bLayout
||
!
aClipRgn
.
IsEmpty
()
)
ImplDrawItem
(
pItem
,
aCurRect
,
bLayout
,
(
pItem
==
pFirstTab
),
(
pItem
==
pLastTab
),
false
);
vcl
::
Region
aClipRgn
(
rRenderContext
.
GetActiveClipRegion
());
aClipRgn
.
Intersect
(
pItem
->
maRect
);
if
(
!
rRect
.
IsEmpty
())
aClipRgn
.
Intersect
(
rRect
);
if
(
bLayout
||
!
aClipRgn
.
IsEmpty
())
{
ImplDrawItem
(
rRenderContext
,
pItem
,
aCurRect
,
bLayout
,
pItem
==
pFirstTab
,
pItem
==
pLastTab
,
false
);
}
}
if
(
bDrawTabsRTL
)
if
(
bDrawTabsRTL
)
idx
--
;
else
idx
++
;
}
if
(
pCurItem
)
if
(
pCurItem
)
{
vcl
::
Region
aClipRgn
(
GetActiveClipRegion
()
);
aClipRgn
.
Intersect
(
pCurItem
->
maRect
);
if
(
!
rRect
.
IsEmpty
()
)
aClipRgn
.
Intersect
(
rRect
);
if
(
bLayout
||
!
aClipRgn
.
IsEmpty
()
)
ImplDrawItem
(
pCurItem
,
aCurRect
,
bLayout
,
(
pCurItem
==
pFirstTab
),
(
pCurItem
==
pLastTab
),
true
);
vcl
::
Region
aClipRgn
(
rRenderContext
.
GetActiveClipRegion
());
aClipRgn
.
Intersect
(
pCurItem
->
maRect
);
if
(
!
rRect
.
IsEmpty
())
aClipRgn
.
Intersect
(
rRect
);
if
(
bLayout
||
!
aClipRgn
.
IsEmpty
())
{
ImplDrawItem
(
rRenderContext
,
pCurItem
,
aCurRect
,
bLayout
,
pCurItem
==
pFirstTab
,
pCurItem
==
pLastTab
,
true
);
}
}
}
if
(
!
bLayout
&&
HasFocus
()
)
if
(
!
bLayout
&&
HasFocus
()
)
ImplShowFocus
();
if
(
!
bLayout
)
if
(
!
bLayout
)
mbSmallInvalidate
=
true
;
}
...
...
@@ -2106,7 +2111,7 @@ void TabControl::FillLayoutData() const
{
mpTabCtrlData
->
maLayoutLineToPageId
.
clear
();
mpTabCtrlData
->
maLayoutPageIdToLine
.
clear
();
const_cast
<
TabControl
*>
(
this
)
->
I
mplPaint
(
Rectangle
(),
true
);
const_cast
<
TabControl
*>
(
this
)
->
I
nvalidate
(
);
}
Rectangle
TabControl
::
GetTabBounds
(
sal_uInt16
nPageId
)
const
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment