inspector: add slider to control slowdown factor

This commit is contained in:
Matt Watson 2016-03-14 03:38:55 -07:00
parent f2979323bf
commit 46b120b35e
2 changed files with 115 additions and 0 deletions

View File

@ -31,12 +31,16 @@
#include "gtkwindow.h"
#include "gtkcssproviderprivate.h"
#include <math.h>
#ifdef GDK_WINDOWING_X11
#include "x11/gdkx.h"
#endif
#include "gdk/gdk-private.h"
#define EPSILON 1e-10
struct _GtkInspectorVisualPrivate
{
GtkWidget *visual_box;
@ -51,6 +55,8 @@ struct _GtkInspectorVisualPrivate
GtkWidget *animation_switch;
GtkWidget *font_scale_scale;
GtkAdjustment *scale_adjustment;
GtkAdjustment *slowdown_adjustment;
GtkWidget *slowdown_entry;
GtkAdjustment *cursor_size_adjustment;
GtkAdjustment *font_scale_adjustment;
@ -561,6 +567,62 @@ init_animation (GtkInspectorVisual *vis)
G_BINDING_BIDIRECTIONAL|G_BINDING_SYNC_CREATE);
}
static void
update_slowdown (GtkInspectorVisual *vis,
gdouble slowdown,
gboolean update_adjustment,
gboolean update_entry)
{
_gtk_set_slowdown (slowdown);
if (update_adjustment)
gtk_adjustment_set_value (vis->priv->slowdown_adjustment,
log2 (slowdown));
if (update_entry)
{
gchar *str = g_strdup_printf ("%0.*f", 2, slowdown);
gtk_entry_set_text (GTK_ENTRY (vis->priv->slowdown_entry), str);
g_free (str);
}
}
static void
slowdown_adjustment_changed (GtkAdjustment *adjustment,
GtkInspectorVisual *vis)
{
gdouble value = gtk_adjustment_get_value (adjustment);
gdouble previous = CLAMP (log2 (_gtk_get_slowdown ()),
gtk_adjustment_get_lower (adjustment),
gtk_adjustment_get_upper (adjustment));
if (fabs (value - previous) > EPSILON)
update_slowdown (vis, exp2 (value), FALSE, TRUE);
}
static void
slowdown_entry_activated (GtkEntry *entry,
GtkInspectorVisual *vis)
{
gdouble slowdown;
gchar *err = NULL;
slowdown = g_strtod (gtk_entry_get_text (entry), &err);
if (err != NULL)
update_slowdown (vis, slowdown, TRUE, FALSE);
}
static void
init_slowdown (GtkInspectorVisual *vis)
{
update_slowdown (vis, _gtk_get_slowdown (), TRUE, TRUE);
g_signal_connect (vis->priv->slowdown_adjustment, "value-changed",
G_CALLBACK (slowdown_adjustment_changed), vis);
g_signal_connect (vis->priv->slowdown_entry, "activate",
G_CALLBACK (slowdown_entry_activated), vis);
}
static void
update_touchscreen (GtkSwitch *sw)
{
@ -743,6 +805,7 @@ gtk_inspector_visual_init (GtkInspectorVisual *vis)
init_rendering_mode (vis);
init_updates (vis);
init_animation (vis);
init_slowdown (vis);
init_touchscreen (vis);
init_gl (vis);
}
@ -786,6 +849,8 @@ gtk_inspector_visual_class_init (GtkInspectorVisualClass *klass)
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, hidpi_spin);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, scale_adjustment);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, animation_switch);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, slowdown_adjustment);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, slowdown_entry);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, touchscreen_switch);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, visual_box);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, debug_box);

View File

@ -12,6 +12,12 @@
<property name="step-increment">0.01</property>
<property name="page-increment">0.01</property>
</object>
<object class="GtkAdjustment" id="slowdown_adjustment">
<property name="lower">-3</property>
<property name="upper">3</property>
<property name="step-increment">1</property>
<property name="page-increment">1</property>
</object>
<object class="GtkAdjustment" id="cursor_size_adjustment">
<property name="lower">24</property>
<property name="upper">64</property>
@ -382,6 +388,50 @@
</child>
</object>
</child>
<child>
<object class="GtkListBoxRow">
<property name="visible">True</property>
<property name="activatable">False</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="orientation">horizontal</property>
<property name="margin">10</property>
<property name="spacing">20</property>
<child>
<object class="GtkLabel" id="slowdown_label">
<property name="visible">True</property>
<property name="label" translatable="yes">Slowdown</property>
<property name="halign">start</property>
<property name="valign">baseline</property>
<property name="xalign">0.0</property>
</object>
</child>
<child>
<object class="GtkScale" id="slowdown_scale">
<property name="visible">1</property>
<property name="can_focus">1</property>
<property name="adjustment">slowdown_adjustment</property>
<property name="valign">baseline</property>
<property name="draw_value">0</property>
</object>
<packing>
<property name="expand">True</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="slowdown_entry">
<property name="visible">True</property>
<property name="halign">end</property>
<property name="valign">baseline</property>
<property name="width-chars">4</property>
<property name="input-purpose">number</property>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
</child>
</object>