首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >圆圈中间的泛文字

圆圈中间的泛文字
EN

Stack Overflow用户
提问于 2022-11-06 18:06:57
回答 1查看 25关注 0票数 0

我正在为gnome编写一个扩展/小部件,所以我想使用文本显示一些信息。实际上,我想使用pangoCairo将文本放在圆圈的中间,但我不知道如何使用pangoCairo来放置文本?

这是我画圆圈的代码,它有一个函数来设置圆圈的中间,但是文本没有显示在中间。

代码语言:javascript
复制
 draw_stuff(canvas, cr, width, height) {
    cr.setSourceRGBA(1,1,1,0.2); 
    cr.save ();
    cr.setOperator (Cairo.Operator.CLEAR);
    cr.paint ();        
    cr.restore ();      
    cr.setOperator (Cairo.Operator.OVER);       
    cr.scale (width, height);       
    cr.setLineCap (Cairo.LineCap.BUTT);                 
    //test      
    cr.setLineWidth (0.08);         
    cr.translate (0.5, 0.5);        
    cr.arc (0, 0, 0.4, 0, Math.PI * 2);         
    cr.stroke ();               
    cr.setSourceRGBA(1,1,1,0.8);        
    cr.rotate(-Math.PI/2);      
    cr.save();      
    cr.arc (0,0, 0.4, 0, this.currentR /100 * 2 * Math.PI);
    cr.stroke();                
    cr.setSourceRGBA(1,1,1,0.9);        
    cr.save();      
    cr.arc (0,0, 0.25, 0, 2 * Math.PI);         
    cr.fill();          
    cr.moveTo(0, 0);    
    cr.setSourceRGBA(0,0,0,0.9);    
    cr.save();  
    this.text_show(cr, "WoW");          
    cr.restore();               
    return true; }
    
    update() { this.currentR = 60;
    this._canvas.connect ("draw", this.draw_stuff.bind(this));
    this._canvas.invalidate();}
    
    text_show(cr, showtext, font = "DejaVuSerif Bold 16") {
    let pl = PangoCairo.create_layout(cr);
    pl.set_text(showtext, -1);
    pl.set_font_description(Pango.FontDescription.from_string(font));
    PangoCairo.update_layout(cr, pl);
    let [w, h] = pl.get_pixel_size();
    cr.relMoveTo(-w / 2, 0);
    PangoCairo.show_layout(cr, pl);
    cr.relMoveTo(w / 2, 0);}

我不知道这是怎么回事?

EN

回答 1

Stack Overflow用户

发布于 2022-11-07 15:52:05

代码语言:javascript
复制
    let [w, h] = pl.get_pixel_size();
    cr.relMoveTo(-w / 2, 0);

你把你的文字,大约1000像素的屏幕之外。get_pixel_size() 已记录在案 as:

pango_layout_get_size()返回由PANGO_SCALE缩放的宽度和高度。

PANGO_SCALE值1024

因此,您需要将上面的代码更改为

代码语言:javascript
复制
    let [w, h] = pl.get_pixel_size();
    cr.relMoveTo(-w / 2048, 0);

如果不是硬编码PANGO_SCALE的值,而是从Pango绑定中获得它,就会得到额外的分数。但是,我对gnome扩展还不太了解。这是Javascript中的代码吗?不知道。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74338460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档