1 50 51 package org.openlaszlo.iv.flash.api.shape; 52 53 import org.openlaszlo.iv.flash.util.*; 54 import org.openlaszlo.iv.flash.api.*; 55 import java.io.PrintStream ; 56 57 76 public final class StrightEdgeRecord extends FlashItem { 77 78 public static final int GENERAL_LINE = 0; 79 public static final int VERT_LINE = 1; 80 public static final int HORIZ_LINE = 2; 81 82 private int type; private int deltaX; private int deltaY; 86 public StrightEdgeRecord() {} 87 88 public int getType() { 89 return type; 90 } 91 92 public void setType( int type ) { 93 this.type = type; 94 } 95 96 public int getDeltaX() { 97 return deltaX; 98 } 99 100 public void setDeltaX( int deltaX ) { 101 this.deltaX = deltaX; 102 } 103 104 public int getDeltaY() { 105 return deltaY; 106 } 107 108 public void setDeltaY( int deltaY ) { 109 this.deltaY = deltaY; 110 } 111 112 119 public static StrightEdgeRecord newLine( int deltaX, int deltaY ) { 120 StrightEdgeRecord sr = new StrightEdgeRecord(); 121 sr.setType( GENERAL_LINE ); 122 sr.setDeltaX( deltaX ); 123 sr.setDeltaY( deltaY ); 124 return sr; 125 } 126 127 133 public static StrightEdgeRecord newHLine( int deltaX ) { 134 StrightEdgeRecord sr = new StrightEdgeRecord(); 135 sr.setType( HORIZ_LINE ); 136 sr.setDeltaX( deltaX ); 137 return sr; 138 } 139 140 146 public static StrightEdgeRecord newVLine( int deltaY ) { 147 StrightEdgeRecord sr = new StrightEdgeRecord(); 148 sr.setType( VERT_LINE ); 149 sr.setDeltaY( deltaY ); 150 return sr; 151 } 152 153 public void write( FlashOutput fob ) { 154 fob.writeBits(0x3, 2); 155 switch( type ) { 156 case GENERAL_LINE: { 157 int nBits = Util.getMinBitsS( Util.getMax(deltaX, deltaY) ); 158 if( nBits < 3 ) nBits = 3; 159 fob.writeBits(nBits-2, 4); 160 fob.writeBit(1); 161 fob.writeBits(deltaX, nBits); 162 fob.writeBits(deltaY, nBits); 163 break; 164 } 165 case VERT_LINE: { 166 int nBits = Util.getMinBitsS( deltaY ); 167 if( nBits < 3 ) nBits = 3; 168 fob.writeBits(nBits-2, 4); 169 fob.writeBit(0); 170 fob.writeBit(1); 171 fob.writeBits(deltaY, nBits); 172 break; 173 } 174 case HORIZ_LINE: { 175 int nBits = Util.getMinBitsS( deltaX ); 176 if( nBits < 3 ) nBits = 3; 177 fob.writeBits(nBits-2, 4); 178 fob.writeBit(0); 179 fob.writeBit(0); 180 fob.writeBits(deltaX, nBits); 181 break; 182 } 183 } 184 } 185 186 public void printContent( PrintStream out, String indent ) { 187 switch( type ) { 188 case GENERAL_LINE: 189 out.println( indent+" line ("+deltaX+","+deltaY+")" ); 190 break; 191 case VERT_LINE: 192 out.println( indent+" vline ("+deltaY+")" ); 193 break; 194 case HORIZ_LINE: 195 out.println( indent+" hline ("+deltaX+")" ); 196 break; 197 } 198 } 199 200 protected FlashItem copyInto( FlashItem item, ScriptCopier copier ) { 201 ((StrightEdgeRecord)item).type = type; 202 ((StrightEdgeRecord)item).deltaX = deltaX; 203 ((StrightEdgeRecord)item).deltaY = deltaY; 204 return item; 205 } 206 207 public FlashItem getCopy( ScriptCopier copier ) { 208 return copyInto( new StrightEdgeRecord(), copier ); 209 } 210 } 211 | Popular Tags |