Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
videolan
vlc
Commits
465f11bc
Commit
465f11bc
authored
Apr 01, 2013
by
Erwan Tulou
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
skins2: fix text control misfunctioning when changing skin
and simplify the code a bit for better readability
parent
6d714365
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
63 additions
and
77 deletions
+63
-77
modules/gui/skins2/controls/ctrl_text.cpp
modules/gui/skins2/controls/ctrl_text.cpp
+58
-75
modules/gui/skins2/controls/ctrl_text.hpp
modules/gui/skins2/controls/ctrl_text.hpp
+5
-2
No files found.
modules/gui/skins2/controls/ctrl_text.cpp
View file @
465f11bc
...
@@ -6,6 +6,7 @@
...
@@ -6,6 +6,7 @@
*
*
* Authors: Cyril Deguet <asmax@via.ecp.fr>
* Authors: Cyril Deguet <asmax@via.ecp.fr>
* Olivier Teulière <ipkiss@via.ecp.fr>
* Olivier Teulière <ipkiss@via.ecp.fr>
* Erwan Tulou <erwan10 At videolan Dot org<
*
*
* This program is free software; you can redistribute it and/or modify
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* it under the terms of the GNU General Public License as published by
...
@@ -96,8 +97,8 @@ CtrlText::CtrlText( intf_thread_t *pIntf, VarText &rVariable,
...
@@ -96,8 +97,8 @@ CtrlText::CtrlText( intf_thread_t *pIntf, VarText &rVariable,
// Observe the variable
// Observe the variable
m_rVariable
.
addObserver
(
this
);
m_rVariable
.
addObserver
(
this
);
//
Set the text
//
initialize pictures
displayText
(
m_rVariable
.
get
()
);
setPictures
(
m_rVariable
.
get
()
);
}
}
...
@@ -218,7 +219,8 @@ void CtrlText::onUpdate( Subject<VarText> &rVariable, void* arg )
...
@@ -218,7 +219,8 @@ void CtrlText::onUpdate( Subject<VarText> &rVariable, void* arg )
(
void
)
rVariable
;
(
void
)
arg
;
(
void
)
rVariable
;
(
void
)
arg
;
if
(
isVisible
()
)
if
(
isVisible
()
)
{
{
displayText
(
m_rVariable
.
get
()
);
setPictures
(
m_rVariable
.
get
()
);
updateContext
();
notifyLayout
(
getPosition
()
->
getWidth
(),
getPosition
()
->
getHeight
()
);
notifyLayout
(
getPosition
()
->
getWidth
(),
getPosition
()
->
getHeight
()
);
}
}
}
}
...
@@ -232,60 +234,56 @@ void CtrlText::onUpdate( Subject<VarBool> &rVariable, void *arg )
...
@@ -232,60 +234,56 @@ void CtrlText::onUpdate( Subject<VarBool> &rVariable, void *arg )
{
{
if
(
isVisible
()
)
if
(
isVisible
()
)
{
{
displayText
(
m_rVariable
.
get
()
);
setPictures
(
m_rVariable
.
get
()
);
updateContext
();
notifyLayout
(
getPosition
()
->
getWidth
(),
getPosition
()
->
getHeight
()
);
notifyLayout
(
getPosition
()
->
getWidth
(),
getPosition
()
->
getHeight
()
);
}
}
else
{
notifyLayout
();
}
}
}
}
}
void
CtrlText
::
displayText
(
const
UString
&
rText
)
void
CtrlText
::
setPictures
(
const
UString
&
rText
)
{
{
//
Create
the images ('normal' and 'double') from the text
//
reset
the images ('normal' and 'double') from the text
// 'Normal' image
// 'Normal' image
delete
m_pImg
;
delete
m_pImg
;
m_pImg
=
m_rFont
.
drawString
(
rText
,
m_color
);
m_pImg
=
m_rFont
.
drawString
(
rText
,
m_color
);
if
(
!
m_pImg
)
if
(
!
m_pImg
)
{
return
;
return
;
}
// 'Double' image
// 'Double' image
const
UString
doubleStringWithSep
=
rText
+
SEPARATOR_STRING
+
rText
;
const
UString
doubleStringWithSep
=
rText
+
SEPARATOR_STRING
+
rText
;
delete
m_pImgDouble
;
delete
m_pImgDouble
;
m_pImgDouble
=
m_rFont
.
drawString
(
doubleStringWithSep
,
m_color
);
m_pImgDouble
=
m_rFont
.
drawString
(
doubleStringWithSep
,
m_color
);
}
// Update the current image used, as if the control size had changed
onPositionChange
();
if
(
m_alignment
==
kRight
&&
getPosition
()
&&
void
CtrlText
::
updateContext
()
getPosition
()
->
getWidth
()
<
m_pImg
->
getWidth
()
)
{
{
if
(
!
m_pImg
||
!
getPosition
()
)
m_xPos
=
getPosition
()
->
getWidth
()
-
m_pImg
->
getWidth
();
return
;
}
else
if
(
m_alignment
==
kCenter
&&
getPosition
()
&&
if
(
m_pImg
->
getWidth
()
<
getPosition
()
->
getWidth
()
)
getPosition
()
->
getWidth
()
<
m_pImg
->
getWidth
()
)
{
{
m_xPos
=
(
getPosition
()
->
getWidth
()
-
m_pImg
->
getWidth
())
/
2
;
m_pCurrImg
=
m_pImg
;
// When the control becomes wide enough for the text to display,
// make sure to stop any scrolling effect
m_pTimer
->
stop
();
m_xPos
=
0
;
}
}
else
else
{
{
m_
xPos
=
0
;
m_
pCurrImg
=
m_pImgDouble
;
}
}
if
(
getPosition
()
)
// If the control is in the moving state,
{
// automatically start or stop the timer accordingly
// If the control was in the moving state, check if the scrolling is
// still necessary
const
string
&
rState
=
m_fsm
.
getState
();
const
string
&
rState
=
m_fsm
.
getState
();
if
(
rState
==
"moving"
||
rState
==
"outMoving"
)
if
(
rState
==
"moving"
||
rState
==
"outMoving"
)
{
{
if
(
m_pImg
&&
m_pImg
->
getWidth
()
>=
getPosition
()
->
getWidth
()
)
if
(
m_pCurrImg
==
m_pImgDouble
)
{
{
m_pCurrImg
=
m_pImgDouble
;
m_pTimer
->
start
(
MOVING_TEXT_DELAY
,
false
);
m_pTimer
->
start
(
MOVING_TEXT_DELAY
,
false
);
}
}
else
else
...
@@ -293,40 +291,34 @@ void CtrlText::displayText( const UString &rText )
...
@@ -293,40 +291,34 @@ void CtrlText::displayText( const UString &rText )
m_pTimer
->
stop
();
m_pTimer
->
stop
();
}
}
}
}
}
}
void
CtrlText
::
onPositionChange
()
// compute alignment
{
if
(
m_alignment
==
kRight
&&
if
(
m_pImg
&&
getPosition
()
)
getPosition
()
->
getWidth
()
<
m_pImg
->
getWidth
()
)
{
if
(
m_pImg
->
getWidth
()
<
getPosition
()
->
getWidth
()
)
{
{
m_pCurrImg
=
m_pImg
;
m_xPos
=
getPosition
()
->
getWidth
()
-
m_pImg
->
getWidth
();
// When the control becomes wide enough for the text to display,
// make sure to stop any scrolling effect
m_pTimer
->
stop
();
m_xPos
=
0
;
}
}
else
else
if
(
m_alignment
==
kCenter
&&
getPosition
()
->
getWidth
()
<
m_pImg
->
getWidth
()
)
{
{
m_pCurrImg
=
m_pImgDouble
;
m_xPos
=
(
getPosition
()
->
getWidth
()
-
m_pImg
->
getWidth
())
/
2
;
}
}
}
else
else
{
{
// m_pImg is a better default value than m_pImgDouble, but anyway we
m_xPos
=
0
;
// don't care because the control is never drawn without position :)
m_pCurrImg
=
m_pImg
;
}
}
}
}
void
CtrlText
::
onPositionChange
()
{
updateContext
();
}
void
CtrlText
::
onResize
()
void
CtrlText
::
onResize
()
{
{
onPositionChange
();
updateContext
();
}
}
...
@@ -349,13 +341,9 @@ void CtrlText::CmdManualMoving::execute()
...
@@ -349,13 +341,9 @@ void CtrlText::CmdManualMoving::execute()
// Start the automatic movement, but only if the text is wider than the
// Start the automatic movement, but only if the text is wider than the
// control and if the control can scroll (either in manual or automatic
// control and if the control can scroll (either in manual or automatic
// mode)
// mode)
if
(
m_pParent
->
m_pImg
&&
if
(
m_pParent
->
m_p
Curr
Img
&&
m_pParent
->
m_p
Img
->
getWidth
()
>=
m_pParent
->
getPosition
()
->
getWidth
()
)
m_pParent
->
m_p
CurrImg
==
m_pParent
->
m_pImgDouble
)
{
{
// The current image may have been set incorrectly in displayText(), so
// set the correct value
m_pParent
->
m_pCurrImg
=
m_pParent
->
m_pImgDouble
;
m_pParent
->
m_pTimer
->
start
(
MOVING_TEXT_DELAY
,
false
);
m_pParent
->
m_pTimer
->
start
(
MOVING_TEXT_DELAY
,
false
);
}
}
}
}
...
@@ -371,14 +359,10 @@ void CtrlText::CmdMove::execute()
...
@@ -371,14 +359,10 @@ void CtrlText::CmdMove::execute()
{
{
EvtMouse
*
pEvtMouse
=
(
EvtMouse
*
)
m_pParent
->
m_pEvt
;
EvtMouse
*
pEvtMouse
=
(
EvtMouse
*
)
m_pParent
->
m_pEvt
;
//
Do nothing if the text fits i
n the control
//
Move text only when it is larger tha
n the control
if
(
m_pParent
->
m_pImg
&&
if
(
m_pParent
->
m_p
Curr
Img
&&
m_pParent
->
m_p
Img
->
getWidth
()
>=
m_pParent
->
getPosition
()
->
getWidth
()
)
m_pParent
->
m_p
CurrImg
==
m_pParent
->
m_pImgDouble
)
{
{
// The current image may have been set incorrectly in displayText(), so
// we set the correct value
m_pParent
->
m_pCurrImg
=
m_pParent
->
m_pImgDouble
;
// Compute the new position of the left side, and make sure it is
// Compute the new position of the left side, and make sure it is
// in the correct range
// in the correct range
m_pParent
->
m_xPos
=
(
pEvtMouse
->
getXPos
()
-
m_pParent
->
m_xOffset
);
m_pParent
->
m_xPos
=
(
pEvtMouse
->
getXPos
()
-
m_pParent
->
m_xOffset
);
...
@@ -402,13 +386,12 @@ void CtrlText::CmdUpdateText::execute()
...
@@ -402,13 +386,12 @@ void CtrlText::CmdUpdateText::execute()
void
CtrlText
::
adjust
(
int
&
position
)
void
CtrlText
::
adjust
(
int
&
position
)
{
{
if
(
!
m_pImg
||
!
m_pImgDouble
)
return
;
// {m_pImgDouble->getWidth() - m_pImg->getWidth()} is the period of the
// {m_pImgDouble->getWidth() - m_pImg->getWidth()} is the period of the
// bitmap; remember that the string used to generate m_pImgDouble is of the
// bitmap; remember that the string used to generate m_pImgDouble is of the
// form: "foo foo", the number of spaces being a parameter
// form: "foo foo", the number of spaces being a parameter
if
(
!
m_pImg
)
{
return
;
}
position
%=
m_pImgDouble
->
getWidth
()
-
m_pImg
->
getWidth
();
position
%=
m_pImgDouble
->
getWidth
()
-
m_pImg
->
getWidth
();
if
(
position
>
0
)
if
(
position
>
0
)
{
{
...
...
modules/gui/skins2/controls/ctrl_text.hpp
View file @
465f11bc
...
@@ -129,8 +129,11 @@ private:
...
@@ -129,8 +129,11 @@ private:
/// Method called when visibility is updated
/// Method called when visibility is updated
virtual
void
onUpdate
(
Subject
<
VarBool
>
&
rVariable
,
void
*
);
virtual
void
onUpdate
(
Subject
<
VarBool
>
&
rVariable
,
void
*
);
/// Display the text on the control
/// Intialize the set of pictures
void
displayText
(
const
UString
&
rText
);
void
setPictures
(
const
UString
&
rText
);
/// Update object according to current context
void
updateContext
();
/// Helper function to set the position in the correct interval
/// Helper function to set the position in the correct interval
void
adjust
(
int
&
position
);
void
adjust
(
int
&
position
);
...
...
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