所以我又面临另一个关于我的扩展的问题。我想计算一个通知的行数,基于它的宽度和高度。
对于上下文,我正在设计一个扩展,在通知列表中添加一个按钮通知。这应该是完全展开通知。通知有一个布局管理器,这与消息托盘中的通知相同。因为我想完全扩展消息,所以我需要一种方法来计算行数。以下是我尝试过的方法,也是最有效的方法:
let nLines = (this._expandedLabel.clutter_text.get_width()) / (this.bodyLabel.clutter_text.get_width());
this._bodyStack.layout_manager._expandLines = nLines;
this._bodyStack.layout_manager.expansion = 1;
this.get_parent().set_height(this.get_height() + fix);
this.get_parent().layout_manager.layout_changed();
现在,这个几乎工作,有一个小的偏移与行数。将nLines四舍五入不足以得到正确的行数。
我尝试了另一种解决方案,包括创建Pango。布局对象,然后尝试计算行数:
let pangoLayout = this._expandedLabel.clutter_text.create_pango_layout(this._bodyText);
pangoLayout.set_height(this._bodyStack.get_height());
pangoLayout.set_width(this._bodyStack.get_width());
log("Line Count: " + pangoLayout.get_line_count());
在本例中,行数表示单词数而不是行数。我在Pango中找不到函数。可以帮助我从文字中创建线条的布局。有人有什么想法或者能帮我找到一个不同的方法吗?
我可能还应该提到我尝试过换行,但这只会使行数增加得高得离谱。
编辑:忘了说这些都发生在扩展函数中,由Message类定义。
好了。我没有注意到Pango使用的是Pango单位,而不是像素。因此,为了获得Pango单位大小,像素必须乘以Pango.SCALE
常数。