调整对象 Adjustments

GTK 有多种构件能够由用户通过鼠标或键盘进行调整,比如范围构件。还有一些构件,比如说 GtkText 和 GtkViewport,内部都有一些可调整的属性。

很明显,当用户调整范围构件的值时,应用程序需要对值的变化进行响应。一种办法就是当构件的调整值发生变化时,让每个构件引发自己的信号,将新值传递到信号处理函数中,或者让它在构件的内部数据结构中查找构件的值。但是,也许需要将这个调整值同时连接到几个构件上,使得调整一个值时,其它的构件都随之响应。最明显的示例就是将一个滚动条连接到一个视角构件(viewport)或者滚动的文本区(text area)上。如果每个构件都要有自己的设置或获取调整值的方法,程序员或许需要自己编写很复杂的信号处理函数,以便将这些不同构件之间的变化同步或相关联。

GTK 用一个调整对象(Adjustment object)解决了这个问题。调整对象不是构件,但是为构件提供了一种以抽象、灵活的方法来传递调整值信息。调整对象最明显的用处就是为范围构件(比如滚动条和比例构件)储存配置参数和值。然而,因为调整对象是从Object派生的,在其正常的数据结构之外,它还具有一些特殊的功能。最重要的是,它们能够引发信号,就像构件一样,这些信号不仅能够让程序对用户在可调整构件上的输入进行响应,还能在可调整构件之间透明地传播调整值。

在许多其它的构件中都能够看到调整对象的用处。比如进度条视角滚动窗口等。

创建一个调整对象

许多使用调整对象的构件都能够自动创建它,但是有些情况下,必须自己手工创建。用下面的函数创建调整对象:

GtkObject *gtk_adjustment_new( gdouble value,
                               gdouble lower,
                               gdouble upper,
                               gdouble step_increment,
                               gdouble page_increment,
                               gdouble page_size );

其中的value参数是要赋给调整对象的初始值,通常对应于一个可调整构件的最高或最低位置。lower参数指定调整对象能取的最低值,step_increment参数指定用户能小步增加的值,page_increment是用户能大步调整的值。page_size参数通常用于设置分栏构件(panning widget)的可视区域。upper参数用于表示分栏构件的子构件的最底部或最右边的坐标。因而,它一定总是value能取的最大值,因为这些构件的page_size通常是非零值(value能取的最大值一般是upper-page_size)。