home *** CD-ROM | disk | FTP | other *** search
/ CD/PC Actual Thematic 7: Programming / CDAT7.iso / demos / VisualAge for Java 2.0 Entry / setup / data1.cab / ide-e / IDE / cache / ZNH1CU (.txt) < prev    next >
Encoding:
Java Class File  |  1998-09-16  |  3.6 KB  |  129 lines

  1. package com.sun.java.swing;
  2.  
  3. import java.io.Serializable;
  4.  
  5. public class SizeRequirements implements Serializable {
  6.    public int minimum;
  7.    public int preferred;
  8.    public int maximum;
  9.    public float alignment;
  10.  
  11.    public SizeRequirements() {
  12.       this.minimum = 0;
  13.       this.preferred = 0;
  14.       this.maximum = 0;
  15.       this.alignment = 0.5F;
  16.    }
  17.  
  18.    public SizeRequirements(int min, int pref, int max, float a) {
  19.       this.minimum = min;
  20.       this.preferred = pref;
  21.       this.maximum = max;
  22.       this.alignment = a > 1.0F ? 1.0F : (a < 0.0F ? 0.0F : a);
  23.    }
  24.  
  25.    public static void calculateAlignedPositions(int allocated, SizeRequirements total, SizeRequirements[] children, int[] offsets, int[] spans) {
  26.       int totalAscent = (int)((float)allocated * total.alignment);
  27.       int totalDescent = allocated - totalAscent;
  28.  
  29.       for(int i = 0; i < children.length; ++i) {
  30.          SizeRequirements req = children[i];
  31.          int maxAscent = (int)((float)req.maximum * req.alignment);
  32.          int maxDescent = req.maximum - maxAscent;
  33.          int ascent = Math.min(totalAscent, maxAscent);
  34.          int descent = Math.min(totalDescent, maxDescent);
  35.          offsets[i] = totalAscent - ascent;
  36.          spans[i] = (int)Math.min((long)ascent + (long)descent, 2147483647L);
  37.       }
  38.  
  39.    }
  40.  
  41.    public static void calculateTiledPositions(int allocated, SizeRequirements total, SizeRequirements[] children, int[] offsets, int[] spans) {
  42.       if (allocated > total.preferred) {
  43.          expandedTile(allocated, total, children, offsets, spans);
  44.       } else {
  45.          compressedTile(allocated, total, children, offsets, spans);
  46.       }
  47.  
  48.    }
  49.  
  50.    private static void compressedTile(int allocated, SizeRequirements total, SizeRequirements[] request, int[] offsets, int[] spans) {
  51.       int totalPlay = Math.min(total.preferred - allocated, total.preferred - total.minimum);
  52.       float factor = total.preferred - total.minimum == 0 ? 0.0F : (float)totalPlay / (float)(total.preferred - total.minimum);
  53.       int totalOffset = 0;
  54.  
  55.       for(int i = 0; i < spans.length; ++i) {
  56.          offsets[i] = totalOffset;
  57.          SizeRequirements req = request[i];
  58.          int play = (int)(factor * (float)(req.preferred - req.minimum));
  59.          spans[i] = req.preferred - play;
  60.          totalOffset = (int)Math.min((long)totalOffset + (long)spans[i], 2147483647L);
  61.       }
  62.  
  63.    }
  64.  
  65.    private static void expandedTile(int allocated, SizeRequirements total, SizeRequirements[] request, int[] offsets, int[] spans) {
  66.       int totalPlay = Math.min(allocated - total.preferred, total.maximum - total.preferred);
  67.       float factor = total.maximum - total.preferred == 0 ? 0.0F : (float)totalPlay / (float)(total.maximum - total.preferred);
  68.       int totalOffset = 0;
  69.  
  70.       for(int i = 0; i < spans.length; ++i) {
  71.          offsets[i] = totalOffset;
  72.          SizeRequirements req = request[i];
  73.          int play = (int)(factor * (float)(req.maximum - req.preferred));
  74.          spans[i] = (int)Math.min((long)req.preferred + (long)play, 2147483647L);
  75.          totalOffset = (int)Math.min((long)totalOffset + (long)spans[i], 2147483647L);
  76.       }
  77.  
  78.    }
  79.  
  80.    public static SizeRequirements getAlignedSizeRequirements(SizeRequirements[] children) {
  81.       SizeRequirements totalAscent = new SizeRequirements();
  82.       SizeRequirements totalDescent = new SizeRequirements();
  83.  
  84.       for(int i = 0; i < children.length; ++i) {
  85.          SizeRequirements req = children[i];
  86.          int ascent = (int)(req.alignment * (float)req.minimum);
  87.          int descent = req.minimum - ascent;
  88.          totalAscent.minimum = Math.max(ascent, totalAscent.minimum);
  89.          totalDescent.minimum = Math.max(descent, totalDescent.minimum);
  90.          ascent = (int)(req.alignment * (float)req.preferred);
  91.          descent = req.preferred - ascent;
  92.          totalAscent.preferred = Math.max(ascent, totalAscent.preferred);
  93.          totalDescent.preferred = Math.max(descent, totalDescent.preferred);
  94.          ascent = (int)(req.alignment * (float)req.maximum);
  95.          descent = req.maximum - ascent;
  96.          totalAscent.maximum = Math.max(ascent, totalAscent.maximum);
  97.          totalDescent.maximum = Math.max(descent, totalDescent.maximum);
  98.       }
  99.  
  100.       int min = (int)Math.min((long)totalAscent.minimum + (long)totalDescent.minimum, 2147483647L);
  101.       int pref = (int)Math.min((long)totalAscent.preferred + (long)totalDescent.preferred, 2147483647L);
  102.       int max = (int)Math.min((long)totalAscent.maximum + (long)totalDescent.maximum, 2147483647L);
  103.       float alignment = 0.0F;
  104.       if (min > 0) {
  105.          alignment = (float)totalAscent.minimum / (float)min;
  106.          alignment = alignment > 1.0F ? 1.0F : (alignment < 0.0F ? 0.0F : alignment);
  107.       }
  108.  
  109.       return new SizeRequirements(min, pref, max, alignment);
  110.    }
  111.  
  112.    public static SizeRequirements getTiledSizeRequirements(SizeRequirements[] children) {
  113.       SizeRequirements total = new SizeRequirements();
  114.  
  115.       for(int i = 0; i < children.length; ++i) {
  116.          SizeRequirements req = children[i];
  117.          total.minimum = (int)Math.min((long)total.minimum + (long)req.minimum, 2147483647L);
  118.          total.preferred = (int)Math.min((long)total.preferred + (long)req.preferred, 2147483647L);
  119.          total.maximum = (int)Math.min((long)total.maximum + (long)req.maximum, 2147483647L);
  120.       }
  121.  
  122.       return total;
  123.    }
  124.  
  125.    public String toString() {
  126.       return "[" + this.minimum + "," + this.preferred + "," + this.maximum + "]@" + this.alignment;
  127.    }
  128. }
  129.