自动调整GtkScrolledWindow中的GtkTextView大小

时间:2011-12-12 23:38:42

标签: c gtk gtk2

我使用gschem,这是一个用于编辑电子原理图的免费软件工具。最近,我们使用包含GtkScrolledWindowGtkTextView时遇到了问题。

上下文

最新版本的Ubuntu使用覆盖滚动条,这意味着GtkScrolledWindows不再设置最小高度,为传统滚动条提供足够的空间(实际上,它们的最小高度为0)。同样,没有显示文本的GtkTextView请求高度为0.这意味着gschem中的一个可滚动的GtkTextViews显示为高度为一个像素,这显然无法使用。

Screenshot showing broken

在上面显示的屏幕截图右侧的对话框中,注意"值之间的不可见小部件:"标签和"添加"按钮。

有几个用户已独立报告此问题 - 另请参阅bug report

问题

显然,我们可以通过以下方式解决这个问题:

g_object_set (textview, "height-request", 100, NULL);

然而,这是非常不优雅的,并且对于以像素设置非常大的字体大小的用户(例如有视力问题的用户或使用高DPI屏幕的用户)将会中断。

因此,理想情况下,我们希望将GtkTextView的最小大小设置为相对于默认字体大小,例如告诉它"显示至少三行文字"。

任何人都可以提出一个明智/优雅的做法吗?

4 个答案:

答案 0 :(得分:2)

只需在应用程序中禁用ubuntu覆盖滚动条:

putenv("LIBOVERLAY_SCROLLBAR=0");

不理想,但在找到更持久的解决方案之前,这是非常好的。或者等到Ubuntu禁用覆盖滚动条...

答案 1 :(得分:0)

我会添加代码来挖掘当前/默认样式信息,用它来计算字体基线高度,然后根据它计算一些粗略的大小分配,如你所提到的那样大约三行。

答案 2 :(得分:0)

是否必须是textview?如果您可以使用事件框,那么您可以从中创建一个cairo表面,使用pango渲染文本,然后使用pango_layout_get_size()来获取文本高度。

答案 3 :(得分:0)

  
    

同样,没有要显示文本的GtkTextView请求高度为0.

  

可能你可以用里面的一些文字创建GtkTextView。像几个空格一样,并在创建后设置空值。