Blog Archive

Saturday, July 10, 2010

Flash cs5'te Emebeded Font Problemi Nasıl Çözülür?

Üzerinde çalıştığım projede Flash CS5 kullanıyordum ve bir problemle karşılaştım. Bir kaç deneme yaptıktan sonra sorunu anladım. Aynı Font ailesinden iki fontu (Örneğin Arial Regular ve Arial Bold) embed ettiğimde. Bunlardan yanlızca bir tanesi Classical Text (nağmı diğer TextField) içinde çalışıyordu! TLF Text kütüphanesini kullanmak istemiyordum çünkü kütüphanesini RSL ile swc olarak dışarıya çıkarttığım halde swf'nin boyutunu 70 Kb etkiliyordu. Bu proje için pekte kabul edilebilir bir rakam değil. Ama buna rağmen sorunu çözemezsem kullanmaya razıydım.


Küçük bir test uygulaması oluşturup deneme yaptım.


ve bu Dinamic Classic Text içerisine ActionScript ile yazı yerleştirdim.

txtDeneme1.text="Deneme";
txtDeneme2.text="Deneme";


sonuç:

yani gerçekten bir problem var. Aynı aileden iki yazı tipi aynı anda embed edildiğinde yalnızca bir tanesi kullanılabiliyor. Bu problemi iki şekilde çözmeyi başardım. 1. Metod Dynamic Classical Text'lerden kalın olacak olanın render HTML özelliğini etkin hale getirdim ve actionScript'i şu şekilde değiştirdim:

txtDeneme1.text="Deneme";
txtDeneme2.htmlText="Deneme";
evet oldukça kötü bir yöntem olduğunun bende farkındayım ama çalıştı.


ikinci method ise daha kullanışlı. Doğrudan TextFormat üzerinden değişiklik yapmak:

import flash.text.TextFormat;
import flash.text.TextField;

txtDeneme1.text="Deneme";
txtDeneme2.text="Deneme";
var tf2:TextFormat = (txtDeneme2 as TextField).getTextFormat();
tf2.bold=true;
(txtDeneme2 as TextField).setTextFormat(tf2);
bu kodlarla çalışan uygulama ise şöyle:

ama bu method'da bu şekliyle kullanışlı değil tabiki. Bu yöntemi biraz daha geliştirmeye karar verdim embed ettiğim fontları Class olarak tanımladım:


sonrada TextFormat ayarlamalarını dinamik olarak yaptım:
import flash.text.TextFormat;
import flash.text.TextField;

Font.registerFont(embededArialBold);
Font.registerFont(embededArialRegular);

txtDeneme1.text="Deneme";
txtDeneme2.text="Deneme";

var arialBoldTextFormat:TextFormat= new TextFormat();
arialBoldTextFormat.font = "Arial";
arialBoldTextFormat.bold = true;
txtDeneme2.setTextFormat(arialBoldTextFormat);

var arialRegularTextFormat:TextFormat= new TextFormat();
arialRegularTextFormat.font = "Arial";
arialRegularTextFormat.bold = false;
txtDeneme2.setTextFormat(arialBoldTextFormat);
ve sorunu çözdüm. Ama bu bir bug ve bu kadar zahmette girmek yerine keşke sorunu Adobe çözseydi :(

No comments:

Post a Comment

Followers