Ejemplo n.º 1
0
void YGNode::setPosition(
    const YGDirection direction,
    const float mainSize,
    const float crossSize,
    const float parentWidth) {
  /* Root nodes should be always layouted as LTR, so we don't return negative
   * values. */
  const YGDirection directionRespectingRoot =
      parent_ != nullptr ? direction : YGDirectionLTR;
  const YGFlexDirection mainAxis =
      YGResolveFlexDirection(style_.flexDirection, directionRespectingRoot);
  const YGFlexDirection crossAxis =
      YGFlexDirectionCross(mainAxis, directionRespectingRoot);

  const float relativePositionMain = relativePosition(mainAxis, mainSize);
  const float relativePositionCross = relativePosition(crossAxis, crossSize);

  setLayoutPosition(
      getLeadingMargin(mainAxis, parentWidth) + relativePositionMain,
      leading[mainAxis]);
  setLayoutPosition(
      getTrailingMargin(mainAxis, parentWidth) + relativePositionMain,
      trailing[mainAxis]);
  setLayoutPosition(
      getLeadingMargin(crossAxis, parentWidth) + relativePositionCross,
      leading[crossAxis]);
  setLayoutPosition(
      getTrailingMargin(crossAxis, parentWidth) + relativePositionCross,
      trailing[crossAxis]);
}
void MToolBarLayoutPolicy::updateAllLayoutPositions()
{
    if (!isActive())
        return;

    if (widgetCount() == 1) {
        setLayoutPosition(0, M::DefaultPosition);
    } else if (widgetCount() > 1) {
        bool leftToRight = layout()->layoutDirection() == Qt::LeftToRight;

        setLayoutPosition(0, leftToRight ? M::HorizontalLeftPosition : M::HorizontalRightPosition);
        setLayoutPosition(widgetCount()-1, leftToRight ? M::HorizontalRightPosition : M::HorizontalLeftPosition);

        for (int i = 1; i < widgetCount()-1; ++i) {
            setLayoutPosition(i, M::HorizontalCenterPosition);
        }
    }
}
void MToolBarLayoutPolicy::updateLayoutPositionDueToInsert(int widgetIndex)
{
    if (!isActive())
        return;

    if (widgetCount() <= 3)
        updateAllLayoutPositions();
    else {
        bool leftToRight = layout()->layoutDirection() == Qt::LeftToRight;

        if (widgetIndex == 0) { // Added to first position
            setLayoutPosition(0, leftToRight ? M::HorizontalLeftPosition : M::HorizontalRightPosition);
            setLayoutPosition(1, M::HorizontalCenterPosition);
        } else if (widgetIndex == widgetCount() - 1) { // Added to last position
            setLayoutPosition(widgetCount()-2, M::HorizontalCenterPosition);
            setLayoutPosition(widgetCount()-1, leftToRight ? M::HorizontalRightPosition : M::HorizontalLeftPosition);
        } else // Added to middle
            setLayoutPosition(widgetIndex, M::HorizontalCenterPosition);
    }
}
void MToolBarLayoutPolicy::updateLayoutPositionDueToRemove(int widgetIndex)
{
    if (!isActive())
        return;

    setLayoutPosition(widgetIndex, M::DefaultPosition);

    if (widgetCount()-1 > 0) {
        if (widgetCount()-1 == 1) {
            // Only one will be left
            setLayoutPosition((widgetIndex == 0) ? 1 : 0, M::DefaultPosition);
        } else {
            bool leftToRight = layout()->layoutDirection() == Qt::LeftToRight;

            if (widgetIndex == 0)
                // Second is the new number one
                setLayoutPosition(1, leftToRight ? M::HorizontalLeftPosition : M::HorizontalRightPosition);
            else if (widgetIndex == widgetCount()-1)
                // Second but last will be last
                setLayoutPosition(widgetCount()-2, leftToRight ? M::HorizontalRightPosition : M::HorizontalLeftPosition);
        }
    }
}