本文整理汇总了C++中MythRect类的典型用法代码示例。如果您正苦于以下问题:C++ MythRect类的具体用法?C++ MythRect怎么用?C++ MythRect使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了MythRect类的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: CalculateArea
void MythRect::CalculateArea(const MythRect & parentArea)
{
QRect area = parentArea.toQRect();
if ((m_parentArea == area && !m_needsUpdate) || !parentArea.isValid())
return;
m_parentArea = area;
int w = width();
int h = height();
int X = x();
int Y = y();
if (m_percentX > 0.0)
X = (int) (m_percentX * (float)m_parentArea.width()) + m_offsetX;
if (m_percentY > 0.0)
Y = (int) (m_percentY * (float)m_parentArea.height()) + m_offsetY;
if (m_percentWidth > 0.0)
w = (int) (m_percentWidth * (float)(m_parentArea.width() - X))
+ m_offsetWidth;
else if (m_offsetWidth != 0)
w = m_parentArea.width() - X + m_offsetWidth;
if (m_percentHeight > 0.0)
h = (int) (m_percentHeight * (float)(m_parentArea.height() - Y))
+ m_offsetHeight;
else if (m_offsetHeight != 0)
h = m_parentArea.height() - Y + m_offsetHeight;
QRect::setRect(X,Y,w,h);
m_needsUpdate = false;
}
示例2: PositionWindow
void OSD::PositionWindow(MythScreenType *window)
{
if (!window)
return;
MythRect rect = window->GetArea();
rect.translate(m_Rect.left(), m_Rect.top());
window->SetArea(rect);
}
示例3: MythRect
MythRect XMLParseBase::parseRect(const QString &text, bool normalize)
{
MythRect retval;
QStringList values = text.split(',', QString::SkipEmptyParts);
if (values.size() == 4)
retval = MythRect(values[0], values[1], values[2], values[3]);
if (normalize)
retval.NormRect();
return retval;
}
示例4: Show
void MythUIScrollBar::CalculatePosition(void)
{
if (m_maximum > 0)
Show();
else
{
Hide();
return;
}
MythUIType *slider = GetChild("slider");
if (!slider)
{
LOG(VB_GENERAL, LOG_ERR, "Slider element doesn't exist");
return;
}
float percentage = (float)m_sliderPosition / m_maximum;
float relativeSize = (float)m_pageStep / (m_maximum + m_pageStep);
MythRect newSliderArea = slider->GetArea();
MythRect fillArea = GetArea();
QPoint endPos(newSliderArea.left(), newSliderArea.top());
if (m_layout == LayoutHorizontal)
{
int width = qMax((int)(fillArea.width() * relativeSize + 0.5),
m_sliderArea.width());
newSliderArea.setWidth(width);
endPos.setX((int)((fillArea.width() - width) * percentage + 0.5));
}
else
{
int height = qMax((int)(fillArea.height() * relativeSize + 0.5),
m_sliderArea.height());
newSliderArea.setHeight(height);
endPos.setY((int)((fillArea.height() - height) * percentage + 0.5));
}
slider->SetArea(newSliderArea);
slider->SetPosition(endPos);
if (m_hideDelay > 0)
{
if (m_timerId)
killTimer(m_timerId);
m_timerId = startTimer(m_hideDelay);
AdjustAlpha(1, 10, 0, 255);
}
}
示例5: parseRect
/**
* \copydoc MythUIType::ParseElement()
*/
bool MythScreenType::ParseElement(
const QString &filename, QDomElement &element, bool showWarnings)
{
if (element.tagName() == "area")
{
MythRect rect = parseRect(element, false);
MythRect rectN = parseRect(element);
QRect screenArea = GetMythMainWindow()->GetUIScreenRect();
if (rect.x() == -1)
rectN.moveLeft((screenArea.width() - rectN.width()) / 2);
if (rect.y() == -1)
rectN.moveTop((screenArea.height() - rectN.height()) / 2);
SetArea(rectN);
if (m_Area.width() < screenArea.width() ||
m_Area.height() < screenArea.height())
{
m_FullScreen = false;
}
else
{
m_FullScreen = true;
}
}
else
{
return MythUIType::ParseElement(filename, element, showWarnings);
}
return true;
}
示例6: AddObject
bool MythUIStateType::AddObject(StateType type, MythUIType *object)
{
if (m_ObjectsByState.contains((int)type) || !object)
return false;
object->SetVisible(false);
m_ObjectsByState[(int)type] = object;
MythRect objectArea = object->GetArea();
objectArea.CalculateArea(m_ParentArea);
ExpandArea(objectArea);
return true;
}
示例7: LOG
void MythUITextEdit::SetInitialStates()
{
if (m_initialized)
return;
m_initialized = true;
m_Text = dynamic_cast<MythUIText *>(GetChild("text"));
m_cursorImage = dynamic_cast<MythUIImage *>(GetChild("cursor"));
m_backgroundState =
dynamic_cast<MythUIStateType *>(GetChild("background"));
if (!m_Text)
LOG(VB_GENERAL, LOG_ERR, LOC + "Missing text element.");
if (!m_cursorImage)
LOG(VB_GENERAL, LOG_ERR, LOC + "Missing cursor element.");
if (!m_backgroundState)
LOG(VB_GENERAL, LOG_WARNING, LOC + "Missing background element.");
if (!m_Text || !m_cursorImage)
{
m_Text = NULL;
m_cursorImage = NULL;
m_backgroundState = NULL;
return;
}
if (m_backgroundState && !m_backgroundState->DisplayState("active"))
LOG(VB_GENERAL, LOG_ERR, LOC + "active state doesn't exist");
m_Text->SetCutDown(Qt::ElideNone);
QFontMetrics fm(m_Text->GetFontProperties()->face());
int height = fm.height();
if (height > 0)
{
MythRect imageArea = m_cursorImage->GetFullArea();
int width = int(((float)height / (float)imageArea.height())
* (float)imageArea.width());
if (width <= 0)
width = 1;
m_cursorImage->ForceSize(QSize(width, height));
}
}
示例8: ExpandArea
void MythUIType::ExpandArea(const MythRect &rect)
{
QSize childSize = rect.size();
QSize size = m_Area.size();
if (childSize == size)
return;
SetSize(size.expandedTo(childSize));
SetRedraw();
}
示例9: CalculatePoint
void MythPoint::CalculatePoint(const MythRect & parentArea)
{
QRect area = parentArea.toQRect();
if ((m_parentArea == area && !m_needsUpdate) || !parentArea.isValid())
return;
m_parentArea = area;
int X = x();
int Y = y();
if (m_percentX > 0.0)
X = (int) (m_percentX * (float)m_parentArea.width()) + m_offsetX;
if (m_percentY > 0.0)
Y = (int) (m_percentY * (float)m_parentArea.height()) + m_offsetY;
QPoint::setX(X);
QPoint::setY(Y);
m_needsUpdate = false;
valid = true;
}
示例10: SetMinArea
/**
* Set the minimum area based on the given size
*/
void MythUIType::SetMinArea(const MythRect &rect)
{
// If a minsize is not set, don't use MinArea
if (!m_Initiator || !m_MinSize.isValid())
return;
QRect bounded(rect);
bool vanish = (m_Vanish && rect.isNull());
if (vanish)
{
bounded.moveLeft(0);
bounded.moveTop(0);
}
else
{
QPoint center = bounded.center();
if (bounded.isNull())
bounded.setSize(GetMinSize());
else
bounded.setSize(bounded.size().expandedTo(GetMinSize()));
bounded.moveCenter(center);
if (bounded.x() + bounded.width() > m_Area.x() + m_Area.width())
bounded.moveRight(m_Area.x() + m_Area.width());
if (bounded.y() + bounded.height() > m_Area.y() + m_Area.height())
bounded.moveBottom(m_Area.x() + m_Area.height());
if (bounded.x() < m_Area.x())
{
bounded.moveLeft(m_Area.x());
if (bounded.width() > m_Area.width())
bounded.setWidth(m_Area.width());
}
if (bounded.y() < m_Area.y())
{
bounded.moveTop(m_Area.y());
if (bounded.height() > m_Area.height())
bounded.setHeight(m_Area.height());
}
}
m_MinArea = bounded;
m_Vanished = vanish;
if (m_Parent)
m_Parent->SetMinAreaParent(m_MinArea, m_Area, this);
}
示例11: BuildFocusList
bool MythUIVirtualKeyboard::Create()
{
if (!LoadWindowFromXML("keyboard/keyboard.xml", "keyboard", this))
return false;
BuildFocusList();
loadKeyDefinitions(gCoreContext->GetLanguageAndVariant());
updateKeys(true);
int screenWidth, screenHeight;
float xmult, ymult;
GetMythUI()->GetScreenSettings(screenWidth, xmult, screenHeight, ymult);
MythRect editArea = m_parentEdit->GetArea();
MythRect area = GetArea();
MythPoint newPos;
//FIXME this assumes the edit is a direct child of the parent screen
MythUIType *parentScreen = NULL;
parentScreen = dynamic_cast<MythUIType *>(m_parentEdit->parent());
if (parentScreen)
{
editArea.moveTopLeft(QPoint(editArea.x() + parentScreen->GetArea().x(),
editArea.y() + parentScreen->GetArea().y()));
}
switch (m_preferredPos)
{
case VK_POSABOVEEDIT:
if (editArea.y() - area.height() - 5 > 0)
{
newPos = QPoint(editArea.x() + editArea.width() / 2 - area.width() / 2,
editArea.y() - area.height() - 5);
}
else
{
newPos = QPoint(editArea.x() + editArea.width() / 2 - area.width() / 2,
editArea.y() + editArea.height() + 5);
}
break;
case VK_POSTOPDIALOG:
newPos = QPoint(screenWidth / 2 - area.width() / 2, 5);
break;
case VK_POSBOTTOMDIALOG:
newPos = QPoint(screenWidth / 2 - area.width() / 2, screenHeight - 5 - area.height());
break;
case VK_POSCENTERDIALOG:
newPos = QPoint(screenWidth / 2 - area.width() / 2, screenHeight / 2 - area.height() / 2);
break;
default:
// VK_POSBELOWEDIT
if (editArea.y() + editArea.height() + area.height() + 5 < screenHeight)
{
newPos = QPoint(editArea.x() + editArea.width() / 2 - area.width() / 2,
editArea.y() + editArea.height() + 5);
}
else
{
newPos = QPoint(editArea.x() + editArea.width() / 2 - area.width() / 2,
editArea.y() - area.height() - 5);
}
break;
}
// make sure the popup doesn't go off screen
if (newPos.x() < 5)
newPos.setX(5);
if (newPos.x() + area.width() + 5 > screenWidth)
newPos.setX(screenWidth - area.width() - 5);
if (newPos.y() < 5)
newPos.setY(5);
if (newPos.y() + area.height() + 5 > screenHeight)
newPos.setY(screenHeight - area.height() - 5);
SetPosition(newPos);
return true;
}
示例12: SetMinAreaParent
/**
* Adjust the size of sibling objects within the button.
*/
void MythUIType::SetMinAreaParent(MythRect actual_area, MythRect allowed_area,
const MythUIType *calling_child)
{
int delta_x = 0, delta_y = 0;
MythRect area;
// If a minsize is not set, don't use MinArea
if (!m_MinSize.isValid())
return;
m_MinArea.setWidth(0);
if (m_Area.width() < m_NormalSize.width())
m_Area.setWidth(m_NormalSize.width());
if (m_Area.height() < m_NormalSize.height())
m_Area.setHeight(m_NormalSize.height());
if (calling_child->m_Vanished)
{
actual_area.moveLeft(0);
actual_area.moveTop(0);
allowed_area.moveLeft(0);
allowed_area.moveTop(0);
}
actual_area.translate(m_Area.topLeft());
allowed_area.translate(m_Area.topLeft());
QList<MythUIType *>::iterator it;
for (it = m_ChildrenList.begin(); it != m_ChildrenList.end(); ++it)
{
if (*it == calling_child || !(*it)->m_Initiator)
continue;
// Find union of area(s)
area = (*it)->GetArea();
area.translate(m_Area.topLeft());
actual_area = actual_area.united(area);
area = (*it)->m_Area;
area.translate(m_Area.topLeft());
allowed_area = allowed_area.united(area);
}
// Make sure it is not larger than the area allowed
actual_area = actual_area.intersected(m_Area);
allowed_area = allowed_area.intersected(m_Area);
if (m_Vanish && actual_area.size().isNull())
{
m_Vanished = true;
}
else
{
if (calling_child->m_Vanished)
{
delta_x = (actual_area.x() + actual_area.width()) -
(m_Area.x() + m_Area.width());
delta_y = (actual_area.y() + actual_area.height()) -
(m_Area.y() + m_Area.height());
}
else
{
delta_x = (actual_area.x() + actual_area.width()) -
(allowed_area.x() + allowed_area.width());
delta_y = (actual_area.y() + actual_area.height()) -
(allowed_area.y() + allowed_area.height());
}
m_Vanished = false;
}
for (it = m_ChildrenList.begin(); it != m_ChildrenList.end(); ++it)
{
if (*it == calling_child)
continue;
if (!(*it)->m_Initiator)
{
if (m_Vanished)
(*it)->VanishSibling();
else
(*it)->AdjustMinArea(delta_x, delta_y);
}
area = (*it)->GetArea();
area.translate(m_Area.topLeft());
actual_area = actual_area.united(area);
}
QSize bound(actual_area.width(), actual_area.height());
if (m_Vanished)
{
m_MinArea.moveLeft(0);
//.........这里部分代码省略.........