Examples of RenderNode


Examples of org.pentaho.reporting.engine.classic.core.layout.model.RenderNode

      {
        needDeepDive = true;
      }
    }

    RenderNode child = parent.getFirstChild();
    while (child != null)
    {
      final int type = child.getNodeType();
      if (type == LayoutNodeTypes.TYPE_NODE_FINISHEDNODE)
      {
        child = child.getNext();
        continue;
      }

      if ((type & LayoutNodeTypes.MASK_BOX) != LayoutNodeTypes.MASK_BOX)
      {
        // this should never be an issue, as plain render-nodes are no added to boxes other than
        // canvas boxes made of bands or inline-boxes. Therefore we are guaranteed that we already
        // removed the parent of a render node.
        throw new IllegalStateException
            ("Assertation error: A rollback-process encountered a render-node it should not have encountered.");
      }

      final RenderBox box = (RenderBox) child;
      if (box.isAppliedSeen() == false)
      {
        // must be a new box. Go away, evil new box ...
        final RenderNode next = child.getNext();
        parent.removeGenerated(box);
        parent.resetCacheState(deepDirty);
        child = next;
        continue;
      }
View Full Code Here

Examples of org.pentaho.reporting.engine.classic.core.layout.model.RenderNode

    {
//      DebugLog.log("Canvas Processing ID is active. Wont delete");
      return;
    }

    final RenderNode first = box.getFirstChild();
    if (first == null)
    {
      return;
    }
    if (first.isFinished() == false)
    {
//      DebugLog.log("First child is active. Wont delete");
      return;
    }
    if ((first.getNodeType() & LayoutNodeTypes.MASK_BOX) == LayoutNodeTypes.MASK_BOX)
    {
      final RenderBox nextBox = (RenderBox) first;
      if (nextBox.isDeepFinished() == false)
      {
//        DebugLog.log("First child is not deep-finished. Wont delete");
        return;
      }
    }

    RenderNode last = first;
    while (true)
    {
      final RenderNode next = last.getNext();
      if (next == null)
      {
        break;
      }
      if ((next.getNodeType() & LayoutNodeTypes.MASK_BOX) == LayoutNodeTypes.MASK_BOX &&
          (next.getNodeType() & LayoutNodeTypes.MASK_BOX_INLINE) != LayoutNodeTypes.MASK_BOX_INLINE)
      {
        final RenderBox nextBox = (RenderBox) next;
        if (next.isFinished() == false && nextBox.isDeepFinished() == false)
        {
          break;
        }
      }
      if (next.isBreakAfter())
      {
        break;
      }
      last = next;
    }

    if (last == first &&
        (first.getNodeType() == LayoutNodeTypes.TYPE_NODE_FINISHEDNODE))
    {
      // In this case, we can skip the replace-action below ..
//      DebugLog.log("Already finish node");
      return;
    }

    // So lets get started. We remove all nodes between (and inclusive)
    // node and last.
    final long nodeY = first.getY();
    final long width = box.getContentAreaX2() - box.getContentAreaX1();
    final long lastY2 = last.getY() + last.getHeight();
    final long height = lastY2 - nodeY;

    // make sure that the finished-box inherits the margins ..
    final long marginsTop = first.getEffectiveMarginTop();
    final long marginsBottom = last.getEffectiveMarginBottom();
    final boolean breakAfter = last.isBreakAfter();
    final FinishedRenderNode replacement =
        new FinishedRenderNode(width, height, marginsTop, marginsBottom, breakAfter, lastSeenStateKey);

//    DebugLog.log("Removing childs of " + box + " as this box is finished.");
//    Log.debug (" (" + last.getInstanceId() + ") " +
//        (box.getLastChild() == last) + " " + (box.getFirstChild() == first));
    int counter = 0;
    RenderNode removeNode = first;
    while (removeNode != last)
    {
      final RenderNode next = removeNode.getNext();
      if (removeNode.isOpen())
      {
        throw new IllegalStateException("A node is still open. We should not have come that far.");
      }
      box.remove(removeNode);
View Full Code Here

Examples of org.pentaho.reporting.engine.classic.core.layout.model.RenderNode

    int contentIndex = start;
    InlineSequenceElement contentElement = null;
    for (int i = 0; i < endIndex; i++)
    {
      final InlineSequenceElement element = sequenceElements[i];
      final RenderNode node = nodes[i];
      usedWidth += element.getMaximumWidth(node);
      if (element instanceof StartSequenceElement ||
          element instanceof EndSequenceElement)
      {
        continue;
      }
      contentElement = element;
      contentIndex = i;
    }

    final long nextPosition = (getStartOfLine() + usedWidth);
    final long lastPageBreak = getPageBreak(getPagebreakCount() - 1);
    if (nextPosition > lastPageBreak)
    {
      // The contents we processed so far will not fit on the current line. That's dangerous.
      // We have to right align the content up to the element denoted with 'start'.

      // Ignore the retval, we know that it fits (or at least that it is correct some how ..)
      rightAlign(start, sequenceElements, nodes, elementPositions, elementDimensions);

      // we cross a pagebreak. Stop working on it - we bail out here.

      if (contentElement instanceof TextSequenceElement)
      {
        // the element may be splittable. Test, and if so, give a hint to the
        // outside world ..
        setSkipIndex(endIndex);
        setBreakableIndex(contentIndex);
        return (start);
      }

      // This is the first element and it still does not fit. How evil.
      if (start == 0)
      {
        if (contentElement instanceof InlineBoxSequenceElement)
        {
          final RenderNode node = nodes[contentIndex];
          if ((node.getNodeType() & LayoutNodeTypes.MASK_BOX) == LayoutNodeTypes.MASK_BOX)
          {
            // OK, limit the size of the box to the maximum line width and
            // revalidate it.
            final long contentPosition = elementPositions[contentIndex];
            final RenderBox box = (RenderBox) node;
            final long maxWidth = (getEndOfLine() - contentPosition);
            computeInlineBlock(box, contentPosition, maxWidth);

            elementDimensions[endIndex - 1] = node.getCachedWidth();
          }
        }
        setSkipIndex(endIndex);
      }
      return (start);
View Full Code Here

Examples of org.pentaho.reporting.engine.classic.core.layout.model.RenderNode

      // So we have only two cases to deal with: (1) The child is unchanged (2) the child is changed.

      if (breakState == null)
      {
        final ParagraphPoolBox paragraphPoolBox = paragraphBox.getPool();
        final RenderNode firstChild = paragraphPoolBox.getFirstChild();
        if (firstChild == null)
        {
          paragraphBox.setPoolSize(0);
          paragraphBox.setLineBoxAge(paragraphPoolBox.getChangeTracker());
          breakState = ParagraphLineBreakStep.LEAF_BREAK_STATE;
          return false;
        }
        if (firstChild == paragraphPoolBox.getLastChild())
        {
          if ((firstChild.getNodeType() & LayoutNodeTypes.MASK_BOX) != LayoutNodeTypes.MASK_BOX)
          {
            // Optimize away: A single text-element or other content in a linebox. No need to dive deeper.
            paragraphBox.setPoolSize(1);
            paragraphBox.setLineBoxAge(paragraphPoolBox.getChangeTracker());
            breakState = ParagraphLineBreakStep.LEAF_BREAK_STATE;
View Full Code Here

Examples of org.pentaho.reporting.engine.classic.core.layout.model.RenderNode

    int contentIndex = start;
    InlineSequenceElement contentElement = null;
    for (int i = 0; i < endIndex; i++)
    {
      final InlineSequenceElement element = sequenceElements[i];
      final RenderNode node = nodes[i];
      usedWidth += element.getMaximumWidth(node);
      if (i < start)
      {
        usedWidthToStart += element.getMaximumWidth(node);
      }
      if (element instanceof StartSequenceElement ||
          element instanceof EndSequenceElement)
      {
        continue;
      }
      contentElement = element;
      contentIndex = i;
    }

    final long nextPosition = (getStartOfLine() + usedWidth);
    final long lastPageBreak = getPageBreak(getPagebreakCount() - 1);
    if (nextPosition > lastPageBreak)
    {
      // The contents we processed so far will not fit on the current line. That's dangerous.
      // We have to center align the content up to the start position.
      performCenterAlignment(start, usedWidthToStart,
          sequenceElements, nodes, elementDimensions, elementPositions);

      // we cross a pagebreak. Stop working on it - we bail out here.

      if (contentElement instanceof TextSequenceElement)
      {
        // the element may be splittable. Test, and if so, give a hint to the
        // outside world ..
        setSkipIndex(endIndex);
        setBreakableIndex(contentIndex);
        return (start);
      }

      // This is the first element and it still does not fit. How evil.
      if (start == 0)
      {
        if (contentElement instanceof InlineBoxSequenceElement)
        {
          final RenderNode node = nodes[contentIndex];
          if ((node.getNodeType() & LayoutNodeTypes.MASK_BOX) == LayoutNodeTypes.MASK_BOX)
          {
            // OK, limit the size of the box to the maximum line width and
            // revalidate it.
            final long contentPosition = elementPositions[contentIndex];
            final RenderBox box = (RenderBox) node;
            final long maxWidth = (getEndOfLine() - contentPosition);
            computeInlineBlock(box, contentPosition, maxWidth);

            elementDimensions[endIndex - 1] = node.getCachedWidth();
          }
        }
        setSkipIndex(endIndex);
      }
      return (start);
View Full Code Here

Examples of org.pentaho.reporting.engine.classic.core.layout.model.RenderNode

    final long emptySpace = Math.max(0, (totalWidth - usedWidth));
    long position = startOfLine + emptySpace / 2;
    // first, make a very simple distribution of the text over all the space, and ignore the pagebreaks
    for (int i = 0; i < endIndex; i++)
    {
      final RenderNode node = nodes[i];
      final long elementWidth = sequenceElements[i].getMaximumWidth(node);
      elementDimensions[i] = elementWidth;
      elementPositions[i] = position;

      position += elementWidth;
View Full Code Here

Examples of org.pentaho.reporting.engine.classic.core.layout.model.RenderNode

  }


  private void apply(final BoxAlignContext box)
  {
    final RenderNode node = box.getNode();
    final long beforeEdge = box.getBeforeEdge();
    node.setCachedY(beforeEdge);
    node.setCachedHeight(box.getAfterEdge() - beforeEdge);

    if (box.isSimpleNode())
    {
      AlignContext child = box.getFirstChild();
      while (child != null)
      {
        if (child instanceof BoxAlignContext)
        {
          apply((BoxAlignContext) child);
        }
        else
        {
          final RenderNode childNode = child.getNode();
          final long childBeforeEdge = child.getBeforeEdge();
          childNode.setCachedY(childBeforeEdge);
          childNode.setCachedHeight(child.getAfterEdge() - childBeforeEdge);
        }
        child = child.getNext();
      }
    }
    else
    {
      AlignContext child = box.getFirstChild();
      while (child != null)
      {
        if (child instanceof BoxAlignContext)
        {
          apply((BoxAlignContext) child);
        }
        else if (child instanceof InlineBlockAlignContext)
        {
          // Luckily the layoutmodel does not yet specify inline-boxes. Need to be fixed in the flow-engine.
          // also shift all the childs.
          final long shift = child.getBeforeEdge() - sourcePosition;
          CacheBoxShifter.shiftBox(child.getNode(), shift);
        }
        else
        {
          final RenderNode childNode = child.getNode();
          final long childBeforeEdge = child.getBeforeEdge();
          childNode.setCachedY(childBeforeEdge);
          childNode.setCachedHeight(child.getAfterEdge() - childBeforeEdge);
        }

        child = child.getNext();
      }
    }
View Full Code Here

Examples of org.pentaho.reporting.engine.classic.core.layout.model.RenderNode

   * @param box
   * @return
   */
  protected boolean startBlockLevelBox(final RenderBox box)
  {
    RenderNode node = box.getFirstChild();
    while (node != null)
    {
      if (node.isIgnorableForRendering())
      {
        node = node.getNext();
        continue;
      }

      // Special treatment for lines, which have a height of zero.
      final long y = node.getY();
      final long height = node.getHeight();
      if (y == contentStart && height == 0)
      {
        node = node.getNext();
      }
      else if ((y + height) <= contentStart)
      {
        final RenderNode next = node.getNext();
        box.remove(node);
        node = next;
      }
      else if (y >= contentEnd)
      {
        final RenderNode next = node.getNext();
        box.remove(node);
        node = next;
      }
      else
      {
View Full Code Here

Examples of org.pentaho.reporting.engine.classic.core.layout.model.RenderNode

    return true;
  }

  protected boolean startCanvasLevelBox(final RenderBox box)
  {
    RenderNode node = box.getFirstChild();
    while (node != null)
    {
      if (node.isIgnorableForRendering())
      {
        node = node.getNext();
        continue;
      }
      // Special treatment for lines, which have a height of zero.
      final long y = node.getY();
      final long height = node.getHeight();
      if (y == contentStart && height == 0)
      {
        node = node.getNext();
      }
      else if ((y + height) <= contentStart)
      {
        final RenderNode next = node.getNext();
        box.remove(node);
        node = next;
      }
      else if (y >= contentEnd)
      {
        final RenderNode next = node.getNext();
        box.remove(node);
        node = next;
      }
      else
      {
View Full Code Here

Examples of org.pentaho.reporting.engine.classic.core.layout.model.RenderNode

    return true;
  }

  protected boolean startRowLevelBox(final RenderBox box)
  {
    RenderNode node = box.getFirstChild();
    while (node != null)
    {
      if (node.isIgnorableForRendering())
      {
        node = node.getNext();
        continue;
      }
      // Special treatment for lines, which have a height of zero.
      final long y = node.getY();
      final long height = node.getHeight();
      if (y == contentStart && height == 0)
      {
        node = node.getNext();
      }
      else if ((y + height) <= contentStart)
      {
        final RenderNode next = node.getNext();
        box.remove(node);
        node = next;
      }
      else if (y >= contentEnd)
      {
        final RenderNode next = node.getNext();
        box.remove(node);
        node = next;
      }
      else
      {
View Full Code Here
TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.