1
0
mirror of https://github.com/blupi-games/planetblupi synced 2024-12-30 10:15:36 +01:00

WIP: continue layout for right2left reading (hebrew)

This commit is contained in:
Mathieu Schroeter 2019-02-05 21:30:40 +01:00
parent ad241f3807
commit 352fc7ba3b
2 changed files with 33 additions and 20 deletions

View File

@ -290,24 +290,43 @@ CButton::MouseOnButton (Point pos)
return Detect (pos);
}
bool
CButton::IsInMenu (const Point & pos)
{
Sint32 width = m_dim.x;
if (m_nbMenu > 1 && m_bMouseDown) // submenu expanded ?
width += 2 + (m_dim.x + (IsRightReading () ? 1 : -1)) * m_nbMenu;
if (IsRightReading () && m_nbMenu > 1 && m_bMouseDown)
{
if (pos.x > m_pos.x + m_dim.x || pos.x < m_pos.x - width + m_dim.x)
return false;
}
else
{
if (pos.x < m_pos.x || pos.x > m_pos.x + width)
return false;
}
if (pos.y < m_pos.y || pos.y > m_pos.y + m_dim.y)
return false;
return true;
}
// Retourne le tooltips pour un bouton, en fonction
// de la position de la souris.
const char *
CButton::GetToolTips (Point pos)
{
Sint32 width = m_dim.x;
Sint32 rank;
if (m_bHide || !m_bEnable)
return nullptr;
if (m_nbMenu > 1 && m_bMouseDown) // sous-menu déroulé ?
width += 2 + (m_dim.x - 1) * m_nbMenu;
if (
pos.x < m_pos.x || pos.x > m_pos.x + width || pos.y < m_pos.y ||
pos.y > m_pos.y + m_dim.y)
if (!this->IsInMenu (pos))
return nullptr;
rank = (pos.x - (m_pos.x + 2 + 1)) / (m_dim.x - 1);
@ -332,20 +351,10 @@ CButton::GetToolTips (Point pos)
bool
CButton::Detect (Point pos)
{
Sint32 width = m_dim.x;
if (m_bHide || !m_bEnable)
return false;
if (m_nbMenu > 1 && m_bMouseDown) // sous-menu déroulé ?
width += 2 + (m_dim.x - 1) * m_nbMenu;
if (
pos.x < m_pos.x || pos.x > m_pos.x + width || pos.y < m_pos.y ||
pos.y > m_pos.y + m_dim.y)
return false;
return true;
return this->IsInMenu (pos);
}
// Bouton de la souris pressé.
@ -395,9 +404,12 @@ CButton::MouseMove (Point pos)
if (
m_nbMenu > 1 && m_bMouseDown &&
pos.x > m_pos.x + m_dim.x + 2) // dans sous-menu ?
(IsRightReading () ? pos.x < m_pos.x
: pos.x > m_pos.x + m_dim.x + 2)) // in sub-menu ?
{
m_selMenu = (pos.x - (m_pos.x + m_dim.x + 2)) / (m_dim.x - 1);
m_selMenu = IsRightReading ()
? (m_pos.x - 2 - pos.x) / (m_dim.x + 1)
: (pos.x - (m_pos.x + m_dim.x + 2)) / (m_dim.x - 1);
if (m_selMenu >= m_nbMenu)
m_selMenu = m_nbMenu - 1;
}

View File

@ -58,6 +58,7 @@ public:
protected:
bool Detect (Point pos);
bool IsInMenu (const Point & pos);
bool MouseDown (Point pos);
bool MouseMove (Point pos);
bool MouseUp (Point pos);