我正在构建一个模拟任意区域中的物理现象(特别是电荷)的程序(为了更有意义,它应该在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;
}
但是,既然不是,有没有更好的方法来做到这一点,或者我的想法是完全不可能的,或者至少是非常不切实际的?
答案 0 :(得分:0)
您可以使用GtkSpinButton并更改其a.end()
。没有那么麻烦就会产生同样的效果......