制作可变比例

时间:2016-12-29 17:46:25

标签: c user-interface gtk

我正在构建一个模拟任意区域中的物理现象(特别是电荷)的程序(为了更有意义,它应该在picometre范围内的某处,但是,仍然,想法是让用户使用开启的绘图区域进行缩放,以提供足够的缩放功能,使用这些值进行游戏,例如尝试查看电荷相互影响的公里数。)

从用户的角度来看,应该有一种舒适的方式来改变比例,包括大小值,所以对我来说最合乎逻辑的是创建一个gtk_scale,其调整值随着用户越接近任一边缘。现在,我必须承认我不是这里最有经验的程序员,恰恰相反,所以我为我可能做的任何愚蠢而道歉,但不应该使用以下代码吗?

gboolean scale_change(GtkWidget *w, gpointer p)
{
    pdata *data = (pdata *) p;

    //A struct with all the program data.

    double temp;
    data->scale = gtk_range_get_value(GTK_RANGE(data->vis_scale));

    //data->scale is the value used to later scale cairo.

    temp = log10(data->scale);
    if (temp - floor(temp + 0.5) < DBL_EPSILON)

    //Check if the value is a power of ten, to change the scale

    {
        data->sadj = gtk_adjustment_new( data->scale, 0.1*data->scale, 10.0*data->scale,
                                         data->scale, 1, (data->scale) * 
                                         max(gtk_widget_get_allocated_height(data->drawarea),
                                         gtk_widget_get_allocated_width(data->drawarea)));

        gtk_range_set_adjustment(GTK_SCALE(data->vis_scale), data->sadj);
        gtk_scale_set_digits(GTK_SCALE(data->vis_scale), (int) temp);
    }
    return TRUE;
}

但是,既然不是,有没有更好的方法来做到这一点,或者我的想法是完全不可能的,或者至少是非常不切实际的?

1 个答案:

答案 0 :(得分:0)

您可以使用GtkSpinButton并更改其a.end()。没有那么麻烦就会产生同样的效果......