2012-12-04 8 views
2

텍스트 필드에 사용자 글꼴을 적용하고 있는데 Openlaszlo 3.3에서는 제대로 작동하지만 새 버전 (5.0)에서는 글꼴이 적용되고 스타일도 적용되고 있지만 글자 사이의 공간이 더 많이 보입니다. 그러나 이것은 이전 버전에서는 일어나지 않습니다.OpenLaszlo 글꼴 렌더링이 포함 된 글꼴을 사용하는 경우 3.x 및 5.0에 대해 일관성이 없음

두 버전 모두에서 객체를 검사했는데 주목할만한 유일한 차이점은 행 높이라는 것입니다.

왜 이런 일이 발생하는지 알고 싶습니다. 그 공백을 제거하는 방법은 가능합니까?

3.3 스크린 샷

3.3 Client

5.0 스크린 샷

enter image description here

+0

OpenLaszlo 버전 모두에서 텍스트 필드의 스크린 샷을 첨부하고 사용중인 글꼴을 나열하십시오. 아마도 글꼴과 관련이 있으며 OpenLaszlo 또는 Flash PLayer와 관련이 없을 수 있습니다. 새로운 Text Layout Framework 기반 API를 사용하고 있습니까? –

+0

@Stevie : 스크린 샷으로 질문을 업데이트했습니다. 아니요, 어떤 프레임 워크도 사용하고 있지 않습니다. 이 텍스트를 검사 할 때 내 사용자 정의 글꼴 이름을 말하는 것이지만 여전히 눈에 띄는 차이가 있습니다. – karthick

답변

2
당신은 플래시가 내장 된 TTF 폰트를 다루는 방법 방법에 연결되어보고있는 효과

: 해당 글꼴을 사용하여 텍스트가 완전히 Flash Player에서 렌더링됩니다. 특히 Flash Player 8에서 9 로의 변경으로 인해 텍스트 렌더링에 대한 많은 개선이있었습니다 (포함 된 글꼴의 향상된 앤티 앨리어싱, 마지막으로 문자 수정 기능).

표시되는 렌더링 텍스트의 차이는 Flash Player 9 이상에서 더 나은 앤티 앨리어싱이 원인 일 가능성이 큽니다. OpenLaszlo SWF9 + 텍스트 및 inputtext 구성 요소는 기본값으로 flash.text.AntiAliasType.ADVANCED 설정을 사용합니다. - 나는 사람이 FP9에서 이전 스타일 렌더링을 할 거라고 생각하지 않습니다

폰트 렌더링이 가능한 고품질이어야한다 :

여기 당신이보고있는 효과를 언급 discussion in the OpenLaszlo dev mailing list입니다 . 이 버그를 해결할 다른 방법이 없습니다 ?

런타임에서 완전한 글꼴 렌더링 일관성을 얻지 못할 것입니다. 장치 글꼴을 사용할 때 이미 일관성이 없습니다. 각각 브라우저/플레이어/OS 변형이 다르며 Flash 대 DHTML도 입니다.

제가 알고있는 바로는 설정을 수정하기위한 공식 API가 없습니다. 이 속성을 수정하면 텍스트 렌더링에 어떤 영향을 주는지 테스트 할 수있는 작은 응용 프로그램을 만들었습니다. 상위 두 개의 텍스트 항목은 Flash Player의 기본 글꼴을 사용하므로 앤티 앨리어싱 설정은 렌더링에 영향을주지 않습니다. 다음 4 개의 텍스트 항목은 모두 내장 TTF 글꼴을 사용하며 antiAliasingType 설정에 따라 차이점을 볼 수 있습니다.

OpenLaszlo SWF9/10 text rendering with anti-aliasing set to normal or advanced

다음과 같은 글꼴을 다운로드, 응용 프로그램을 컴파일하고 응용 프로그램 폴더에 넣어하려면 :

http://svn.openlaszlo.org/openlaszlo/trunk/laszlo-explorer/fonts/ariosob.ttf
https://github.com/w0ng/googlefontdirectory/raw/master/fonts/Amaranth-Regular.ttf

<canvas height="600"> 

    <font name="amaranth" style="plain" src="Amaranth-Regular.ttf" /> 
    <font name="arioso" src="ariosob.ttf" /> 

    <class name="mytext" extends="text"> 
     <passthrough when="$as3"> 
      import flash.text.AntiAliasType; 
     </passthrough> 
     <attribute name="antialias" type="string" value="advanced" /> 
     <handler name="oninit"> 
      this.onantialias.sendEvent(); 
     </handler> 
     <handler name="onantialias"> 
      var t = this.getDisplayObject().textfield; 
      if (this.antialias == 'normal') { 
       t.antiAliasType = flash.text.AntiAliasType.NORMAL; 
      } else { 
       t.antiAliasType = flash.text.AntiAliasType.ADVANCED; 
      } 
     </handler> 
     <method name="toogleAntialias"> 
      if (this.antialias == 'normal') this.setAttribute('antialias', 'advanced'); 
      else this.setAttribute('antialias', 'normal'); 
     </method> 
    </class> 

    <view> 
     <simplelayout axis="y" spacing="10" /> 
     <view layout="axis:x; spacing:5"> 
      <text valign="middle">Anti-alias advanced</text> 
      <checkbox value="true" y="10" 
         onvalue="if (parent.t) parent.t.toogleAntialias()" /> 
      <view width="20" height="1" /> 
      <mytext name="t" 
        antialias="advanced" 
        fontsize="25">Default font (no embedded TTF)</mytext> 
     </view> 
     <view layout="axis:x; spacing:5"> 
      <text valign="middle">Anti-alias advanced</text> 
      <checkbox value="false" y="10" 
         onvalue="if (parent.t) parent.t.toogleAntialias()" /> 
      <view width="20" height="1" /> 
      <mytext name="t" 
        antialias="normal" 
        fontsize="25">Default font (no embedded TTF)</mytext> 
     </view> 

     <view layout="axis:x; spacing:5"> 
      <text valign="middle">Anti-alias advanced</text> 
      <checkbox value="true" y="10" 
         onvalue="if (parent.t) parent.t.toogleAntialias()" /> 
      <view width="20" height="1" /> 
      <mytext name="t" 
        antialias="advanced" 
        font="amaranth" fontsize="25">Amaranth Regular</mytext> 
     </view> 
     <view layout="axis:x; spacing:5"> 
      <text valign="middle">Anti-alias advanced</text> 
      <checkbox value="false" y="10" 
         onvalue="if (parent.t) parent.t.toogleAntialias()" /> 
      <view width="20" height="1" /> 
      <mytext name="t" 
        antialias="normal" 
        font="amaranth" fontsize="25">Amaranth Regular</mytext> 
     </view> 

     <view layout="axis:x; spacing:5"> 
      <text valign="middle">Anti-alias advanced</text> 
      <checkbox value="true" y="10" 
         onvalue="if (parent.t) parent.t.toogleAntialias()" /> 
      <view width="20" height="1" /> 
      <mytext name="t" 
        antialias="advanced" 
        font="arioso" fontsize="25">Amaranth Regular</mytext> 
     </view> 
     <view layout="axis:x; spacing:5"> 
      <text valign="middle">Anti-alias advanced</text> 
      <checkbox value="false" y="10" 
         onvalue="if (parent.t) parent.t.toogleAntialias()" /> 
      <view width="20" height="1" /> 
      <mytext name="t" 
        antialias="normal" 
        font="arioso" fontsize="25">Amaranth Regular</mytext> 
     </view> 
    </view> 

</canvas> 

결과는 모든 동작에서 일치하지 않을 수 있습니다 운영 체제가 텍스트 렌더링을 최적화하기 위해 다른 접근법을 사용할 것이기 때문입니다. 위의 스크린 샷은 Linux에서 촬영되었습니다.

+0

앤티 앨리어싱을 '보통'으로 설정하는 것이 의미가있는 상황이 있습니까? 최상의 렌더링 품질을 원하십니까? –

+0

고급 앤티 앨리어스를 비활성화하는 방법을 보여주는 코드 예제를 보내 주셔서 감사합니다. 글꼴 크기가 작 으면 해당 기능을 비활성화하는 것이 좋습니다. –

+0

@ raju-bitter : 답 해줘. 고맙다. – karthick