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
55d052d2
Kaydet (Commit)
55d052d2
authored
May 22, 2015
tarafından
Michael Meeks
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
tdf#91366 - invalidate only individual menu items to render highlight.
Change-Id: I0dd741829dd315ed86e3fcf79b7fb4da349d0ac8
üst
15b6db45
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
53 additions
and
12 deletions
+53
-12
menufloatingwindow.cxx
vcl/source/window/menufloatingwindow.cxx
+50
-11
menufloatingwindow.hxx
vcl/source/window/menufloatingwindow.hxx
+3
-1
No files found.
vcl/source/window/menufloatingwindow.cxx
Dosyayı görüntüle @
55d052d2
...
@@ -80,7 +80,7 @@ void MenuFloatingWindow::doShutdown()
...
@@ -80,7 +80,7 @@ void MenuFloatingWindow::doShutdown()
{
{
MenuFloatingWindow
*
pPWin
=
static_cast
<
MenuFloatingWindow
*>
(
pMenu
->
pStartedFrom
->
ImplGetWindow
());
MenuFloatingWindow
*
pPWin
=
static_cast
<
MenuFloatingWindow
*>
(
pMenu
->
pStartedFrom
->
ImplGetWindow
());
if
(
pPWin
)
if
(
pPWin
)
pPWin
->
Invalidate
();
//pPWin->HighlightItem( i, false
);
pPWin
->
Invalidate
Item
(
i
);
}
}
}
}
...
@@ -136,6 +136,7 @@ void MenuFloatingWindow::ApplySettings(vcl::RenderContext& rRenderContext)
...
@@ -136,6 +136,7 @@ void MenuFloatingWindow::ApplySettings(vcl::RenderContext& rRenderContext)
rRenderContext
.
SetLineColor
();
rRenderContext
.
SetLineColor
();
}
}
/// Get a negative pixel offset for an offset menu
long
MenuFloatingWindow
::
ImplGetStartY
()
const
long
MenuFloatingWindow
::
ImplGetStartY
()
const
{
{
long
nY
=
0
;
long
nY
=
0
;
...
@@ -183,14 +184,13 @@ void MenuFloatingWindow::ImplHighlightItem( const MouseEvent& rMEvt, bool bMBDow
...
@@ -183,14 +184,13 @@ void MenuFloatingWindow::ImplHighlightItem( const MouseEvent& rMEvt, bool bMBDow
if
(
!
pMenu
)
if
(
!
pMenu
)
return
;
return
;
long
nY
=
nScrollerHeight
+
ImplGetSVData
()
->
maNWFData
.
mnMenuFormatBorderY
;
long
nY
=
GetInitialItemY
()
;
long
nMouseY
=
rMEvt
.
GetPosPixel
().
Y
();
long
nMouseY
=
rMEvt
.
GetPosPixel
().
Y
();
Size
aOutSz
=
GetOutputSizePixel
();
Size
aOutSz
=
GetOutputSizePixel
();
if
(
(
nMouseY
>=
nY
)
&&
(
nMouseY
<
(
aOutSz
.
Height
()
-
nY
)
)
)
if
(
(
nMouseY
>=
nY
)
&&
(
nMouseY
<
(
aOutSz
.
Height
()
-
nY
)
)
)
{
{
bool
bHighlighted
=
false
;
bool
bHighlighted
=
false
;
size_t
nCount
=
pMenu
->
pItemList
->
size
();
size_t
nCount
=
pMenu
->
pItemList
->
size
();
nY
+=
ImplGetStartY
();
// ggf. gescrollt.
for
(
size_t
n
=
0
;
!
bHighlighted
&&
(
n
<
nCount
);
n
++
)
for
(
size_t
n
=
0
;
!
bHighlighted
&&
(
n
<
nCount
);
n
++
)
{
{
if
(
pMenu
->
ImplIsVisible
(
n
)
)
if
(
pMenu
->
ImplIsVisible
(
n
)
)
...
@@ -681,7 +681,7 @@ void MenuFloatingWindow::ChangeHighlightItem( sal_uInt16 n, bool bStartPopupTime
...
@@ -681,7 +681,7 @@ void MenuFloatingWindow::ChangeHighlightItem( sal_uInt16 n, bool bStartPopupTime
if
(
nHighlightedItem
!=
ITEMPOS_INVALID
)
if
(
nHighlightedItem
!=
ITEMPOS_INVALID
)
{
{
Invalidate
();
//HighlightItem( nHighlightedItem, false
);
Invalidate
Item
(
nHighlightedItem
);
pMenu
->
ImplCallEventListeners
(
VCLEVENT_MENU_DEHIGHLIGHT
,
nHighlightedItem
);
pMenu
->
ImplCallEventListeners
(
VCLEVENT_MENU_DEHIGHLIGHT
,
nHighlightedItem
);
}
}
...
@@ -704,12 +704,12 @@ void MenuFloatingWindow::ChangeHighlightItem( sal_uInt16 n, bool bStartPopupTime
...
@@ -704,12 +704,12 @@ void MenuFloatingWindow::ChangeHighlightItem( sal_uInt16 n, bool bStartPopupTime
MenuFloatingWindow
*
pPWin
=
static_cast
<
MenuFloatingWindow
*>
(
pMenu
->
pStartedFrom
->
ImplGetWindow
());
MenuFloatingWindow
*
pPWin
=
static_cast
<
MenuFloatingWindow
*>
(
pMenu
->
pStartedFrom
->
ImplGetWindow
());
if
(
pPWin
&&
pPWin
->
nHighlightedItem
!=
i
)
if
(
pPWin
&&
pPWin
->
nHighlightedItem
!=
i
)
{
{
pPWin
->
Invalidate
();
//HighlightItem( i, true
);
pPWin
->
Invalidate
Item
(
i
);
pPWin
->
nHighlightedItem
=
i
;
pPWin
->
nHighlightedItem
=
i
;
}
}
}
}
}
}
Invalidate
();
//HighlightItem( nHighlightedItem, true
);
Invalidate
Item
(
nHighlightedItem
);
pMenu
->
ImplCallHighlight
(
nHighlightedItem
);
pMenu
->
ImplCallHighlight
(
nHighlightedItem
);
}
}
else
else
...
@@ -728,15 +728,49 @@ void MenuFloatingWindow::ChangeHighlightItem( sal_uInt16 n, bool bStartPopupTime
...
@@ -728,15 +728,49 @@ void MenuFloatingWindow::ChangeHighlightItem( sal_uInt16 n, bool bStartPopupTime
}
}
}
}
void
MenuFloatingWindow
::
HighlightItem
(
vcl
::
RenderContext
&
rRenderContext
,
sal_uInt16
nPos
,
bool
bHighlight
)
/// Calculate the initial vertical pixel offset of the first item.
/// May be negative for scrolled windows.
long
MenuFloatingWindow
::
GetInitialItemY
(
long
*
pStartY
)
const
{
long
nStartY
=
ImplGetStartY
();
if
(
pStartY
)
*
pStartY
=
nStartY
;
return
nScrollerHeight
+
nStartY
+
ImplGetSVData
()
->
maNWFData
.
mnMenuFormatBorderY
;
}
/// Emit an Invalidate just for this item's area
void
MenuFloatingWindow
::
InvalidateItem
(
sal_uInt16
nPos
)
{
if
(
!
pMenu
)
return
;
long
nY
=
GetInitialItemY
();
size_t
nCount
=
pMenu
->
pItemList
->
size
();
for
(
size_t
n
=
0
;
n
<
nCount
;
n
++
)
{
MenuItemData
*
pData
=
pMenu
->
pItemList
->
GetDataFromPos
(
n
);
long
nHeight
=
pData
->
aSz
.
Height
();
if
(
n
==
nPos
)
{
Size
aWidth
(
GetSizePixel
()
);
Rectangle
aRect
(
Point
(
0
,
nY
),
Size
(
aWidth
.
Width
(),
nHeight
));
Invalidate
(
aRect
);
}
nY
+=
nHeight
;
}
}
void
MenuFloatingWindow
::
RenderHighlightItem
(
vcl
::
RenderContext
&
rRenderContext
,
sal_uInt16
nPos
,
bool
bHighlight
)
{
{
if
(
!
pMenu
)
if
(
!
pMenu
)
return
;
return
;
Size
aSz
=
rRenderContext
.
GetOutputSizePixel
();
Size
aSz
=
rRenderContext
.
GetOutputSizePixel
();
long
nStartY
=
ImplGetStartY
();
long
nY
=
nScrollerHeight
+
nStartY
+
ImplGetSVData
()
->
maNWFData
.
mnMenuFormatBorderY
;
long
nX
=
0
;
long
nX
=
0
;
long
nStartY
;
long
nY
=
GetInitialItemY
(
&
nStartY
);
if
(
pMenu
->
pLogo
)
if
(
pMenu
->
pLogo
)
nX
=
pMenu
->
pLogo
->
aBitmap
.
GetSizePixel
().
Width
();
nX
=
pMenu
->
pLogo
->
aBitmap
.
GetSizePixel
().
Width
();
...
@@ -1097,11 +1131,14 @@ void MenuFloatingWindow::KeyInput( const KeyEvent& rKEvent )
...
@@ -1097,11 +1131,14 @@ void MenuFloatingWindow::KeyInput( const KeyEvent& rKEvent )
}
}
}
}
void
MenuFloatingWindow
::
Paint
(
vcl
::
RenderContext
&
rRenderContext
,
const
Rectangle
&
)
void
MenuFloatingWindow
::
Paint
(
vcl
::
RenderContext
&
rRenderContext
,
const
Rectangle
&
rPaintRect
)
{
{
if
(
!
pMenu
)
if
(
!
pMenu
)
return
;
return
;
rRenderContext
.
Push
(
PushFlags
::
CLIPREGION
);
rRenderContext
.
SetClipRegion
(
vcl
::
Region
(
rPaintRect
));
if
(
rRenderContext
.
IsNativeControlSupported
(
CTRL_MENU_POPUP
,
PART_ENTIRE_CONTROL
))
if
(
rRenderContext
.
IsNativeControlSupported
(
CTRL_MENU_POPUP
,
PART_ENTIRE_CONTROL
))
{
{
rRenderContext
.
SetClipRegion
();
rRenderContext
.
SetClipRegion
();
...
@@ -1122,7 +1159,9 @@ void MenuFloatingWindow::Paint(vcl::RenderContext& rRenderContext, const Rectang
...
@@ -1122,7 +1159,9 @@ void MenuFloatingWindow::Paint(vcl::RenderContext& rRenderContext, const Rectang
rRenderContext
.
SetFillColor
(
rRenderContext
.
GetSettings
().
GetStyleSettings
().
GetMenuColor
());
rRenderContext
.
SetFillColor
(
rRenderContext
.
GetSettings
().
GetStyleSettings
().
GetMenuColor
());
pMenu
->
ImplPaint
(
rRenderContext
,
nScrollerHeight
,
ImplGetStartY
());
pMenu
->
ImplPaint
(
rRenderContext
,
nScrollerHeight
,
ImplGetStartY
());
if
(
nHighlightedItem
!=
ITEMPOS_INVALID
)
if
(
nHighlightedItem
!=
ITEMPOS_INVALID
)
HighlightItem
(
rRenderContext
,
nHighlightedItem
,
true
);
RenderHighlightItem
(
rRenderContext
,
nHighlightedItem
,
true
);
rRenderContext
.
Pop
();
}
}
void
MenuFloatingWindow
::
ImplDrawScroller
(
vcl
::
RenderContext
&
rRenderContext
,
bool
bUp
)
void
MenuFloatingWindow
::
ImplDrawScroller
(
vcl
::
RenderContext
&
rRenderContext
,
bool
bUp
)
...
...
vcl/source/window/menufloatingwindow.hxx
Dosyayı görüntüle @
55d052d2
...
@@ -78,6 +78,9 @@ protected:
...
@@ -78,6 +78,9 @@ protected:
void
ImplHighlightItem
(
const
MouseEvent
&
rMEvt
,
bool
bMBDown
);
void
ImplHighlightItem
(
const
MouseEvent
&
rMEvt
,
bool
bMBDown
);
long
ImplGetStartY
()
const
;
long
ImplGetStartY
()
const
;
Rectangle
ImplGetItemRect
(
sal_uInt16
nPos
);
Rectangle
ImplGetItemRect
(
sal_uInt16
nPos
);
void
RenderHighlightItem
(
vcl
::
RenderContext
&
rRenderContext
,
sal_uInt16
nPos
,
bool
bHighlight
);
long
GetInitialItemY
(
long
*
pOptStartY
=
NULL
)
const
;
void
InvalidateItem
(
sal_uInt16
nPos
);
public
:
public
:
MenuFloatingWindow
(
Menu
*
pMenu
,
vcl
::
Window
*
pParent
,
WinBits
nStyle
);
MenuFloatingWindow
(
Menu
*
pMenu
,
vcl
::
Window
*
pParent
,
WinBits
nStyle
);
...
@@ -112,7 +115,6 @@ public:
...
@@ -112,7 +115,6 @@ public:
PopupMenu
*
GetActivePopup
()
const
{
return
pActivePopup
;
}
PopupMenu
*
GetActivePopup
()
const
{
return
pActivePopup
;
}
void
KillActivePopup
(
PopupMenu
*
pThisOnly
=
NULL
);
void
KillActivePopup
(
PopupMenu
*
pThisOnly
=
NULL
);
void
HighlightItem
(
vcl
::
RenderContext
&
rRenderContext
,
sal_uInt16
nPos
,
bool
bHighlight
);
void
ChangeHighlightItem
(
sal_uInt16
n
,
bool
bStartPopupTimer
);
void
ChangeHighlightItem
(
sal_uInt16
n
,
bool
bStartPopupTimer
);
sal_uInt16
GetHighlightedItem
()
const
{
return
nHighlightedItem
;
}
sal_uInt16
GetHighlightedItem
()
const
{
return
nHighlightedItem
;
}
...
...
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