텍스트 서식 지정Flash Player 10 이상, Adobe AIR 1.5 이상 TextBlock 객체는 텍스트 행을 만드는 팩토리입니다. TextBlock의 내용은 TextElement 객체를 통해 할당됩니다. ElementFormat 객체는 텍스트의 서식 지정을 처리합니다. ElementFormat 클래스는 기준선 정렬, 커닝, 자간, 텍스트 회전 및 글꼴 크기, 색상, 대/소문자 등의 속성을 정의합니다. 이 클래스에는 FontDescription도 포함되며 이에 대한 설명은 글꼴을 사용한 작업에 자세히 나와 있습니다. ElementFormat 객체 사용ElementFormat 객체의 생성자는 FontDescription을 비롯해 다양한 선택적 매개 변수를 모두 사용할 수 있습니다. 이러한 속성을 생성자 외부에서 설정할 수도 있습니다. 다음 예제에서는 단순 텍스트 행을 정의 및 표시하는 경우의 다양한 객체의 관계를 보여 줍니다. package { import flash.display.Sprite; import flash.text.*; public class ElementFormatExample extends Sprite { private var tb:TextBlock = new TextBlock(); private var te:TextElement; private var ef:ElementFormat; private var fd:FontDescription = new FontDescription(); private var str:String; private var tl:TextLine; public function ElementFormatExample() { fd.fontName = "Garamond"; ef = new ElementFormat(fd); ef.fontSize = 30; ef.color = 0xFF0000; str = "This is flash text"; te = new TextElement(str, ef); tb.content = te; tl = tb.createTextLine(null,600); addChild(tl); } } } 글꼴 색상 및 투명도(알파)color 속성(ElementFormat 객체)은 글꼴 색상을 설정합니다. 값은 해당 색상의 RGB 구성 요소를 나타내는 정수입니다(예: 빨강의 경우 0xFF0000, 녹색의 경우 0x00FF00). 기본값은 검정입니다(0x000000). alpha 속성은 요소(TextElement 및 GraphicElement 모두 해당)의 알파 투명도 값을 설정합니다. 값은 0(완전히 투명)과 1(완전히 불투명, 기본값) 사이의 값이 될 수 있습니다. alpha 값이 0인 요소는 보이지는 않지만 활성 상태입니다. 이 값에 상속된 알파 값이 곱해져 해당 요소가 더 투명해집니다. var ef:ElementFormat = new ElementFormat(); ef.alpha = 0.8; ef.color = 0x999999; 기준선 정렬 및 이동한 행에서 가장 큰 텍스트의 글꼴 및 크기에 따라 주요 기준선이 결정됩니다. TextBlock.baselineFontDescription 및 TextBlock.baselineFontSize를 설정하여 이러한 값을 재정의할 수 있습니다. 텍스트 내 여러 기준선 중 하나를 기준으로 주요 기준선을 정렬할 수 있습니다. 이러한 기준선에는 어센트 선과 디센트 선이나 표의 문자 위쪽, 가운데 또는 아래쪽이 포함됩니다.
ElementFormat 객체에서는 세 가지 속성이 기준선과 정렬 특성을 결정합니다. alignmentBaseline 속성은 TextElement 또는 GraphicElement의 기본 기준선을 설정합니다. 이 기준선은 요소의 “물리기” 선이며 모든 텍스트의 주요 기준선이 정렬되는 기준 위치입니다. dominantBaseline 속성은 요소의 다양한 기준선 중 사용할 기준선을 지정하며 이 기준선은 해당 행에 있는 요소의 세로 위치를 결정합니다. 기본값은 TextBaseline.ROMAN이지만 IDEOGRAPHIC_TOP 또는 IDEOGRAPHIC_BOTTOM 기준선이 주요 기준선이 되도록 설정할 수도 있습니다. baselineShift 속성은 설정된 픽셀 수만큼 y 축에서 기준선을 이동합니다. 회전하지 않은 보통 텍스트에서 양수 값을 설정하면 기준선이 아래로 이동하고, 음수 값을 설정하면 위로 이동합니다. 입력 체계 대/소문자TypographicCase 속성(ElementFormat)은 대문자, 소문자 또는 작은 대문자와 같은 텍스트 대/소문자를 지정합니다. var ef_Upper:ElementFormat = new ElementFormat(); ef_Upper.typographicCase = TypographicCase.UPPERCASE; var ef_SmallCaps:ElementFormat = new ElementFormat(); ef_SmallCaps.typographicCase = TypographicCase.SMALL_CAPS; 텍스트 회전텍스트 한 블록이나 텍스트의 한 세그먼트 내 글리프를 90도 단위로 회전할 수 있습니다. TextRotation 클래스는 다음과 같은 상수를 정의하여 텍스트 블록 및 글리프 회전을 설정합니다.
텍스트 블록의 텍스트 행을 회전하려면 TextBlock.lineRotation 속성을 설정한 후 TextBlock.createTextLine() 메서드를 호출하여 텍스트 행을 만듭니다. 한 텍스트 블록 또는 세그먼트 내에 있는 글리프를 회전하려면 ElementFormat.textRotation 속성을 원하는 글리프 회전 각도로 설정합니다. 글리프는 문자를 형성하는 모양 또는 여러 글리프로 구성되는 문자의 일부입니다. 예를 들어 "i"의 점, 문자 "a" 등이 글리프입니다. 글리프 회전은 행을 수직으로 회전하되 행 내에 있는 문자는 회전하지 않으려는 일부 아시아 언어에서 관련이 있습니다. 아시아 언어 텍스트를 회전하는 방법에 대한 자세한 내용은 동아시아 언어 텍스트 양쪽 정렬을 참조하십시오. 다음 예제에서는 아시아 언어 텍스트와 마찬가지로 텍스트 블록과 그 안의 글리프를 모두 회전합니다. 또한 예제에서는 일본어 글꼴을 사용합니다. package { import flash.display.Sprite; import flash.text.*; public class RotationExample extends Sprite { private var tb:TextBlock = new TextBlock(); private var te:TextElement; private var ef:ElementFormat; private var fd:FontDescription = new FontDescription(); private var str:String; private var tl:TextLine; public function RotationExample() { fd.fontName = "MS Mincho"; ef = new ElementFormat(fd); ef.textRotation = TextRotation.AUTO; str = "This is rotated Japanese text"; te = new TextElement(str, ef); tb.lineRotation = TextRotation.ROTATE_90; tb.content = te; tl = tb.createTextLine(null,600); addChild(tl); } } } ElementFormat 잠금 및 복제ElementFormat 객체가 ContentElement의 한 유형에 할당되면 해당 locked 속성이 true로 자동 설정됩니다. 잠긴 ElementFormat 객체를 수정하려고 하면 IllegalOperationError가 발생합니다. 따라서 이러한 객체를 완전히 정의한 후 TextElement 인스턴스에 할당하는 것이 가장 좋습니다. 기존 ElementFormat 인스턴스를 수정하려면 먼저 locked 속성을 확인합니다. 해당 속성이 true인 경우 clone() 메서드를 사용하여 객체의 잠금 해제된 복사본을 만듭니다. 이 잠금 해제된 객체의 속성은 변경할 수 있으며, 그런 다음 TextElement 인스턴스에 할당할 수 있습니다. 해당 객체에서 만든 모든 새 행에는 새 서식이 적용됩니다. 이 동일한 객체에서 이전 서식을 사용하여 만든 이전 행은 변경되지 않습니다. package { import flash.display.Sprite; import flash.text.*; public class ElementFormatCloneExample extends Sprite { private var tb:TextBlock = new TextBlock(); private var te:TextElement; private var ef1:ElementFormat; private var ef2:ElementFormat; private var fd:FontDescription = new FontDescription(); public function ElementFormatCloneExample() { fd.fontName = "Garamond"; ef1 = new ElementFormat(fd); ef1.fontSize = 24; var str:String = "This is flash text"; te = new TextElement(str, ef); tb.content = te; var tx1:TextLine = tb.createTextLine(null,600); addChild(tx1); ef2 = (ef1.locked) ? ef1.clone() : ef1; ef2.fontSize = 32; tb.content.elementFormat = ef2; var tx2:TextLine = tb.createTextLine(null,600); addChild(tx2); } } } |
|