> 1; segC = (mappings[char] & 0x04) >> 2; segD = (mappings[char] & 0x08) >> 3; segE = (mappings[char] & 0x10) >> 4; segF = (mappings[char] & 0x20) >> 5; segG = (mappings[char] & 0x40) >> 6; segH = (mappings[char] & 0x80) >> 7; segI = (mappings[char] & 0x100) >> 8; segJ = (mappings[char] & 0x200) >> 9; segK = (mappings[char] & 0x400) >> 10; segL = (mappings[char] & 0x800) >> 11; segM = (mappings[char] & 0x1000) >> 12; segA1 = ((mappings[char] & 0x2000) >> 13) || segA; segA2 = ((mappings[char] & 0x4000) >> 14) || segA; segD1 = ((mappings[char] & 0x8000) >> 15) || segD; segD2 = ((mappings[char] & 0x10000) >> 16) || segD; segG1 = ((mappings[char] & 0x20000) >> 17) || segG; segG2 = ((mappings[char] & 0x40000) >> 18) || segG; segDP = (mappings[char] & 0x80000) >> 19; segP1 = (mappings[char] & 0x100000) >> 20; segP2 = (mappings[char] & 0x200000) >> 21; invalidateDisplayList(); } } override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void { graphics.clear(); //the dots if(segP1 || segP2 || alwaysDrawDots) { drawDot(unscaledWidth/2 + thickness,unscaledHeight/4,thickness/2,segP1); drawDot(unscaledWidth/2 + thickness,(unscaledHeight * 3)/4,thickness/2,segP2); } if(segDP || alwaysDrawDots) drawDot(unscaledWidth/2 + thickness,unscaledHeight - (thickness * 3)/2,thickness/2,segDP); //the segments for the 7seg if(displayType != DISPLAY_16_SEG) drawSegment(thickness/2 + gap,0,unscaledWidth - thickness - (2 * gap),thickness,segA,true,false); drawSegment(width - thickness,thickness/2 + gap,thickness,(unscaledHeight - thickness - 4*gap) / 2,segB); drawSegment(width - thickness,unscaledHeight/2 + gap,thickness,(unscaledHeight - thickness - 4*gap) / 2,segC); if(displayType != DISPLAY_16_SEG) drawSegment(thickness/2 + gap,unscaledHeight - thickness,unscaledWidth - thickness - (2 * gap),thickness,segD,true,false); drawSegment(0,unscaledHeight/2 + gap,thickness,(unscaledHeight - thickness - 4*gap) / 2,segE); drawSegment(0,thickness/2 + gap,thickness,(unscaledHeight - thickness - 4*gap) / 2,segF); if(displayType == DISPLAY_7_SEG) drawSegment(thickness/2 + gap,unscaledHeight / 2 - thickness/2,unscaledWidth - thickness - (2 * gap),thickness,segG,true,false); if(displayType == DISPLAY_14_SEG || displayType == DISPLAY_16_SEG) { //the diagonals //top left drawSegment(thickness + gap,thickness + gap,(unscaledWidth - (thickness*3))/2 - (2 * gap),(unscaledHeight - (thickness*3)) /2 - (gap * 2),segH,false,false); //top right drawSegment(unscaledWidth/2 + thickness/2 + gap,thickness + gap,(unscaledWidth - (thickness*3))/2 - (2 * gap),(unscaledHeight - (thickness*3)) /2 - (gap * 2),segJ,false,true); //bottom right drawSegment(unscaledWidth/2 + thickness/2 + gap,unscaledHeight/2 + thickness/2 + gap,(unscaledWidth - (thickness*3))/2 - (2 * gap),(unscaledHeight - (thickness*3)) /2 - (gap * 2),segK,false,false); //bottom left drawSegment(thickness + gap,unscaledHeight/2 + thickness/2 + gap,(unscaledWidth - (thickness*3))/2 - (2 * gap),(unscaledHeight - (thickness*3)) /2 - (gap * 2),segM,false,true); //the 2 central vertical segments drawSegment(unscaledWidth/2 - thickness/2,thickness/2 + gap,thickness,(unscaledHeight/2) - thickness/2 - 2*gap,segI,true,true,(displayType == DISPLAY_16_SEG),true); drawSegment(unscaledWidth/2 - thickness/2,unscaledHeight/2 + gap,thickness,(unscaledHeight/2) - thickness/2 - 2*gap,segL,true,true,true,(displayType == DISPLAY_16_SEG)); //the 2 horiz segments across the center, in place of segG in 16seg display drawSegment(thickness/2 + gap,unscaledHeight / 2 - thickness/2,unscaledWidth/2 - thickness/2 - (2 * gap),thickness,segG || segG1,true,false); drawSegment(unscaledWidth/2 + gap,unscaledHeight / 2 - thickness/2,unscaledWidth/2 - thickness/2 - (2 * gap),thickness,segG || segG2,true,false); } if(displayType == DISPLAY_16_SEG) { //the 2 horiz segments at the top in place of segA in 16seg display drawSegment(thickness/2 + gap,0,unscaledWidth/2 - thickness/2 - (2 * gap),thickness,segA || segA1,true,false); drawSegment(unscaledWidth/2 + gap,0,unscaledWidth/2 - thickness/2 - (2 * gap),thickness,segA || segA2,true,false); //the 2 horiz segments at the bottom in place of segD in 16seg display drawSegment(thickness/2 + gap,unscaledHeight - thickness,unscaledWidth/2 - thickness/2 - (2 * gap),thickness,segD || segD1,true,false); drawSegment(unscaledWidth/2 + gap,unscaledHeight - thickness,unscaledWidth/2 - thickness/2 - (2 * gap),thickness,segD || segD2,true,false); } } private function drawDot(x:Number,y:Number,radius:Number,on:Boolean):void { graphics.beginFill(on?onColor:offColor,1); graphics.drawCircle(x,y,radius); } private function drawSegment(x:Number,y:Number,width:Number,height:Number,on:Boolean, straight:Boolean = true, type:Boolean = true, begintip:Boolean = true, endtip:Boolean = true):void { graphics.beginFill(on?onColor:offColor,1); var tipw:Number; if(straight) { if(type) //vertical { tipw = Math.tan(Math.PI/4) * (width / 2); graphics.moveTo(x + 0,y + tipw); graphics.lineTo(x + width/2,y + (begintip?0:tipw)); graphics.lineTo(x + width,y + tipw); graphics.lineTo(x + width,y + height - tipw); graphics.lineTo(x + width/2,y + height - (endtip?0:tipw)); graphics.lineTo(x + 0,y + height - tipw); graphics.lineTo(x + 0,y + tipw); } else //horizontal { tipw = Math.tan(Math.PI/4) * (height / 2); graphics.moveTo(x + tipw, y + 0); graphics.lineTo(x + width - tipw,y + 0); graphics.lineTo(x + width - (endtip?0:tipw),y + height/2); graphics.lineTo(x + width - tipw,y + height); graphics.lineTo(x + tipw, y + height); graphics.lineTo(x + (begintip?0:tipw),y + height/2); graphics.moveTo(x + tipw, y + 0); } } else { var angle:Number = Math.abs(Math.atan2(height,width)); var tipHorizEdge:Number = Math.sin(angle) * thickness; var tipVertEdge:Number = Math.cos(angle) + thickness; if(type) //diagonal bl to tr { graphics.moveTo(x + 0,y + height); graphics.lineTo(x + 0, y + height - tipVertEdge); graphics.lineTo(x + width - tipHorizEdge,y + 0); graphics.lineTo(x + width,y + 0); graphics.lineTo(x + width, y + tipVertEdge); graphics.lineTo(x + tipHorizEdge,y + height); graphics.lineTo(x + 0,y + height); } else //diagonal tl to br { graphics.moveTo(x + 0,y + 0); graphics.lineTo(x + tipHorizEdge,y + 0); graphics.lineTo(x + width,y + height - tipVertEdge); graphics.lineTo(x + width,y + height); graphics.lineTo(x + width - tipHorizEdge,y + height); graphics.lineTo(x + 0,y + tipVertEdge); graphics.lineTo(x + 0,y + 0); } } } ]]>