⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sizerequirements.java

📁 gcc的组建
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
   * @param offsets will hold the offset values for each component   * @param spans will hold the span values for each component   * @param forward whether the components should be placed in the forward   *     direction (left-right or top-bottom) or reverse direction   *     (right-left or bottom-top)   */  public static void calculateTiledPositions(int allocated,                                             SizeRequirements total,                                             SizeRequirements[] children,                                             int[] offsets, int[] spans,                                             boolean forward)  {    int span = 0;    if (forward)      {        int offset = 0;        for (int i = 0; i < children.length; i++)          {            offsets[i] = offset;            spans[i] = children[i].preferred;            span += spans[i];            offset += children[i].preferred;          }      }    else      {        int offset = allocated;        for (int i = 0; i < children.length; i++)          {            offset -= children[i].preferred;            offsets[i] = offset;            span += spans[i];            spans[i] = children[i].preferred;          }      }    // Adjust spans so that we exactly fill the allocated region. If    if (span > allocated)      adjustSmaller(allocated, children, spans, span);    else if (span < allocated)      adjustGreater(allocated, children, spans, span);    // Adjust offsets.    if (forward)      {        int offset = 0;        for (int i = 0; i < children.length; i++)          {            offsets[i] = offset;            offset += spans[i];          }      }    else      {        int offset = allocated;        for (int i = 0; i < children.length; i++)          {            offset -= spans[i];            offsets[i] = offset;          }      }  }  private static void adjustSmaller(int allocated, SizeRequirements[] children,                                    int[] spans, int span)  {    // Sum up (prefSize - minSize) over all children    int sumDelta = 0;    for (int i = 0; i < children.length; i++)      sumDelta += children[i].preferred - children[i].minimum;    // If we have sumDelta == 0, then all components have prefSize == maxSize    // and we can't do anything about it.    if (sumDelta == 0)      return;    // Adjust all sizes according to their preferred and minimum sizes.    for (int i = 0; i < children.length; i++)      {        double factor = ((double) (children[i].preferred - children[i].minimum))                        / ((double) sumDelta);        // In case we have a sumDelta of 0, the factor should also be 0.        if (Double.isNaN(factor))          factor = 0;        spans[i] -= factor * (span - allocated);      }  }  private static void adjustGreater(int allocated, SizeRequirements[] children,                                    int[] spans, int span)  {    // Sum up (maxSize - prefSize) over all children    long sumDelta = 0;    for (int i = 0; i < children.length; i++)      {        sumDelta += children[i].maximum - children[i].preferred;      }    // If we have sumDelta == 0, then all components have prefSize == maxSize    // and we can't do anything about it.    if (sumDelta == 0)      return;    // Adjust all sizes according to their preferred and minimum sizes.    for (int i = 0; i < children.length; i++)      {        double factor = ((double) (children[i].maximum - children[i].preferred))                        / ((double) sumDelta);        spans[i] += factor * (allocated - span);      }  }  /**   * Calculate the offsets and spans of the components, when they should   * be placed end-to-end.   *   * You must specify the amount of allocated space in   * <code>allocated</code>, the total size requirements of the set of   * components in <code>total</code> (this can be calculated using   * {@link #getTiledSizeRequirements} and the size requirements of the   * components in <code>children</code>.   *   * The calculated offset and span values for each component are then   * stored in the arrays <code>offsets</code> and <code>spans</code>.   *   * The components are tiled in the forward direction, beginning with   * an offset of 0.   *    * @param allocated the amount of allocated space   * @param total the total size requirements of the components   * @param children the size requirement of each component   * @param offsets will hold the offset values for each component   * @param spans will hold the span values for each component   */  public static void calculateAlignedPositions(int allocated,                                               SizeRequirements total,                                               SizeRequirements[] children,                                               int[] offsets, int[] spans)  {    calculateAlignedPositions(allocated, total, children, offsets, spans,                              true);  }  /**   * Calculate the offsets and spans of the components, when they should   * be placed end-to-end.   *   * You must specify the amount of allocated space in   * <code>allocated</code>, the total size requirements of the set of   * components in <code>total</code> (this can be calculated using   * {@link #getTiledSizeRequirements} and the size requirements of the   * components in <code>children</code>.   *   * The calculated offset and span values for each component are then   * stored in the arrays <code>offsets</code> and <code>spans</code>.   *   * Depending on the value of <code>forward</code> the components are   * placed in the forward direction (left-right or top-bottom), where   * the offsets begin with 0, or in the reverse direction   * (right-left or bottom-top).   *   * @param allocated the amount of allocated space   * @param total the total size requirements of the components   * @param children the size requirement of each component   * @param spans will hold the span values for each component   * @param forward whether the components should be placed in the forward   *     direction (left-right or top-bottom) or reverse direction   *     (right-left or bottom-top)   */  public static void calculateAlignedPositions(int allocated,                                               SizeRequirements total,                                               SizeRequirements[] children,                                               int[] offset, int[] spans,                                               boolean forward)  {    // First we compute the position of the baseline.    float baseline = allocated * total.alignment;    // Now we can layout the components along the baseline.    for (int i = 0; i < children.length; i++)      {        float align = children[i].alignment;        // Try to fit the component into the available space.        int[] spanAndOffset = new int[2];        if (align < .5F || baseline == 0)          adjustFromRight(children[i], baseline, allocated, spanAndOffset);        else          adjustFromLeft(children[i], baseline, allocated, spanAndOffset);        spans[i] = spanAndOffset[0];        offset[i] = spanAndOffset[1];      }  }  /**   * Adjusts the span and offset of a component for the aligned layout.   *   * @param reqs   * @param baseline   * @param allocated   * @param spanAndOffset   */  private static void adjustFromRight(SizeRequirements reqs, float baseline,                                      int allocated, int[] spanAndOffset)  {    float right = allocated - baseline;    // If the resulting span exceeds the maximum of the component, then adjust    // accordingly.    float maxRight = ((float) reqs.maximum) * (1.F - reqs.alignment);    if (right / (1.F - reqs.alignment) > reqs.maximum)      right = maxRight;    // If we have not enough space on the left side, then adjust accordingly.    if (right / (1.F - reqs.alignment) * reqs.alignment > allocated - baseline)      right = ((float) (allocated - baseline))             / reqs.alignment * (1.F - reqs.alignment);    spanAndOffset[0] = (int) (right / (1.F - reqs.alignment));    spanAndOffset[1] = (int) (baseline - spanAndOffset[0] * reqs.alignment);  }  /**   * Adjusts the span and offset of a component for the aligned layout.   *   * @param reqs   * @param baseline   * @param allocated   * @param spanAndOffset   */  private static void adjustFromLeft(SizeRequirements reqs, float baseline,                                     int allocated, int[] spanAndOffset)  {    float left = baseline;    // If the resulting span exceeds the maximum of the component, then adjust    // accordingly.    float maxLeft = ((float) reqs.maximum) * reqs.alignment;    if (left / reqs.alignment > reqs.maximum)      left = maxLeft;    // If we have not enough space on the right side, then adjust accordingly.    if (left / reqs.alignment * (1.F - reqs.alignment) > allocated - baseline)      left = ((float) (allocated - baseline))             / (1.F - reqs.alignment) * reqs.alignment;    spanAndOffset[0] = (int) (left / reqs.alignment);    spanAndOffset[1] = (int) (baseline - spanAndOffset[0] * reqs.alignment);  }  /**   * Returns an array of new preferred sizes for the children based on   * <code>delta</code>. <code>delta</code> specifies a change in the   * allocated space. The sizes of the children will be shortened or   * lengthened to accomodate the new allocation.   *   * @param delta the change of the size of the total allocation for   *     the components   * @param children the size requirements of each component   *   * @return the new preferred sizes for each component   */  public static int[] adjustSizes(int delta, SizeRequirements[] children)  {    return null; // TODO  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -