
import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=759;bottom=311)
winform.add(
plus={cls="plus";left=8;top=8;right=752;bottom=304;bgcolor=15793151;edge=1;z=1}
)
/*}}*/
winform.show();
import godking.paint
var p = godking.paint.fromPlus(winform.plus,false/*自动刷新*/,false/*重绘背景*/);
p.textAntiAlias = true;
var dpi = p.dpi;
var rect = ::RECT(50*dpi,100*dpi,800*dpi,400*dpi);
var text = "我是文本 hello aardio 我有阴影";
var font = ::LOGFONT(name="黑体";h=40*dpi;color=0xFFFF0000;brush=null,bold=true);
var font1 = ::LOGFONT(name="黑体";h=40*dpi;color=0x55000000;brush=null,bold=true);
var drawtext = function(angle){
p.clear(/*颜色*/);
// 计算文字外边缘范围
var path = p.path(1/*0:交叉填充 1:全填充*/);
path.addText(rect.left /*x1*/,rect.top/*y1*/,rect.right/*x2*/,rect.bottom/*y2*/,text,font,0/*格式*/,0/*水平*/,0/*垂直*/);
var textBounds = path.getBounds();
path.delete();
//进行矩阵变形
var m = p.matrix();
//先横向偏移角度,让阴影文字倾斜。
m.shear_angle(angle, ,/*选项*/);
//再纵向压缩0.5倍,让阴影文字变扁。
m.scale(1, 0.5,/*选项*/);
//计算阴影文字写出位置(文字顶部的纵向偏移、横向偏移)
//此时取的 rect 和 textBounds 都是压缩后的值
var offsety = rect.y + textBounds.height;
var offsetx = offsety*math.tan(math.rad(angle));
//移动矩阵到合适位置
m.translate(-offsetx,offsety,/*选项*/);
p.setMatrix(m /*矩阵*/);
m.delete();
//写阴影文字
p.drawText( rect /*文本范围RECT*/,text,font1,0/*格式*/,0/*水平*/,0/*垂直*/,false/*截短*/);
//清除矩阵,写正常文字
p.setMatrix( /*矩阵*/);
p.drawText( rect /*文本范围RECT*/,text,font,0/*格式*/,0/*水平*/,0/*垂直*/,false/*截短*/);
}
var angle,inc = -60,1 ;
winform.setInterval(
function(){
angle += inc;
if math.abs(angle)==60 inc*=-1;
drawtext(angle)
p.plus.update( /*刷新区域RECT*/)
},10
)
win.loopMessage();