mirror of https://github.com/GNOME/gimp.git
app: allow multiple variables as input to dashboard group-meter LED
When defining a dashboard group, allow specifying multiple variables as input to the group meter's LED. The LED is active when any of the specified variables evaluates to TRUE, and its color is the combination of the active variable colors. Remove the swap-busy variable, and use swap-reading and swap-writing as inputs to the swap group's LED instead, so that the LED's color indicates whether the swap is currently being read- from, written-to, or both.
This commit is contained in:
parent
b3de0bb7a5
commit
716510cb83
|
@ -103,8 +103,6 @@ typedef enum
|
|||
VARIABLE_SWAP_WRITTEN,
|
||||
VARIABLE_SWAP_WRITING,
|
||||
|
||||
VARIABLE_SWAP_BUSY,
|
||||
|
||||
#ifdef HAVE_CPU_GROUP
|
||||
/* cpu */
|
||||
VARIABLE_CPU_USAGE,
|
||||
|
@ -199,7 +197,7 @@ struct _GroupInfo
|
|||
gboolean default_expanded;
|
||||
gboolean has_meter;
|
||||
Variable meter_limit;
|
||||
Variable meter_led;
|
||||
const Variable *meter_led;
|
||||
const FieldInfo *fields;
|
||||
};
|
||||
|
||||
|
@ -311,13 +309,6 @@ static void gimp_dashboard_sample_gegl_config (GimpDashboard
|
|||
Variable variable);
|
||||
static void gimp_dashboard_sample_gegl_stats (GimpDashboard *dashboard,
|
||||
Variable variable);
|
||||
static void gimp_dashboard_sample_variable_or (GimpDashboard *dashboard,
|
||||
Variable variable);
|
||||
#if 0
|
||||
/* avoid "defined but not used" warning. un-#if 0 when needed */
|
||||
static void gimp_dashboard_sample_variable_and (GimpDashboard *dashboard,
|
||||
Variable variable);
|
||||
#endif
|
||||
static void gimp_dashboard_sample_variable_changed (GimpDashboard *dashboard,
|
||||
Variable variable);
|
||||
static void gimp_dashboard_sample_swap_limit (GimpDashboard *dashboard,
|
||||
|
@ -485,6 +476,7 @@ static const VariableInfo variables[] =
|
|||
.title = NC_("dashboard-variable", "Reading"),
|
||||
.description = N_("Whether data is being read from the swap"),
|
||||
.type = VARIABLE_TYPE_BOOLEAN,
|
||||
.color = {0.2, 0.4, 1.0, 1.0},
|
||||
.sample_func = gimp_dashboard_sample_variable_changed,
|
||||
.data = GINT_TO_POINTER (VARIABLE_SWAP_READ)
|
||||
},
|
||||
|
@ -507,26 +499,11 @@ static const VariableInfo variables[] =
|
|||
.title = NC_("dashboard-variable", "Writing"),
|
||||
.description = N_("Whether data is being written to the swap"),
|
||||
.type = VARIABLE_TYPE_BOOLEAN,
|
||||
.color = {0.8, 0.3, 0.2, 1.0},
|
||||
.sample_func = gimp_dashboard_sample_variable_changed,
|
||||
.data = GINT_TO_POINTER (VARIABLE_SWAP_WRITTEN)
|
||||
},
|
||||
|
||||
[VARIABLE_SWAP_BUSY] =
|
||||
{ .name = "swap-busy",
|
||||
.title = NC_("dashboard-variable", "Busy"),
|
||||
.description = N_("Whether data is transferred to or from the swap"),
|
||||
.type = VARIABLE_TYPE_BOOLEAN,
|
||||
.color = {0.8, 0.4, 0.4, 1.0},
|
||||
.sample_func = gimp_dashboard_sample_variable_or,
|
||||
.data = (const Variable[])
|
||||
{
|
||||
VARIABLE_SWAP_READING,
|
||||
VARIABLE_SWAP_WRITING,
|
||||
|
||||
VARIABLE_NONE
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
#ifdef HAVE_CPU_GROUP
|
||||
/* cpu variables */
|
||||
|
@ -651,7 +628,13 @@ static const GroupInfo groups[] =
|
|||
.default_expanded = TRUE,
|
||||
.has_meter = TRUE,
|
||||
.meter_limit = VARIABLE_SWAP_LIMIT,
|
||||
.meter_led = VARIABLE_SWAP_BUSY,
|
||||
.meter_led = (const Variable[])
|
||||
{
|
||||
VARIABLE_SWAP_READING,
|
||||
VARIABLE_SWAP_WRITING,
|
||||
|
||||
VARIABLE_NONE
|
||||
},
|
||||
.fields = (const FieldInfo[])
|
||||
{
|
||||
{ .variable = VARIABLE_SWAP_OCCUPIED,
|
||||
|
@ -696,7 +679,12 @@ static const GroupInfo groups[] =
|
|||
.default_active = TRUE,
|
||||
.default_expanded = FALSE,
|
||||
.has_meter = TRUE,
|
||||
.meter_led = VARIABLE_CPU_ACTIVE,
|
||||
.meter_led = (const Variable[])
|
||||
{
|
||||
VARIABLE_CPU_ACTIVE,
|
||||
|
||||
VARIABLE_NONE
|
||||
},
|
||||
.fields = (const FieldInfo[])
|
||||
{
|
||||
{ .variable = VARIABLE_CPU_USAGE,
|
||||
|
@ -1023,12 +1011,6 @@ gimp_dashboard_init (GimpDashboard *dashboard)
|
|||
gtk_box_pack_start (GTK_BOX (vbox2), meter, FALSE, FALSE, 0);
|
||||
gtk_widget_show (meter);
|
||||
|
||||
if (group_info->meter_led)
|
||||
{
|
||||
gimp_meter_set_led_color (GIMP_METER (meter),
|
||||
&variables[group_info->meter_led].color);
|
||||
}
|
||||
|
||||
for (field = 0; field < group_data->n_fields; field++)
|
||||
{
|
||||
const FieldInfo *field_info = &group_info->fields[field];
|
||||
|
@ -1677,22 +1659,7 @@ gimp_dashboard_update (GimpDashboard *dashboard)
|
|||
g_mutex_lock (&priv->mutex);
|
||||
|
||||
for (group = FIRST_GROUP; group < N_GROUPS; group++)
|
||||
{
|
||||
const GroupInfo *group_info = &groups[group];
|
||||
GroupData *group_data = &priv->groups[group];
|
||||
|
||||
if (group_info->has_meter && group_info->meter_led)
|
||||
{
|
||||
gboolean active;
|
||||
|
||||
active = gimp_dashboard_variable_to_boolean (dashboard,
|
||||
group_info->meter_led);
|
||||
|
||||
gimp_meter_set_led_active (group_data->meter, active);
|
||||
}
|
||||
|
||||
gimp_dashboard_update_group_values (dashboard, group);
|
||||
}
|
||||
gimp_dashboard_update_group_values (dashboard, group);
|
||||
|
||||
priv->update_idle_id = 0;
|
||||
|
||||
|
@ -1760,66 +1727,6 @@ gimp_dashboard_sample_gegl_stats (GimpDashboard *dashboard,
|
|||
gimp_dashboard_sample_object (dashboard, G_OBJECT (gegl_stats ()), variable);
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_dashboard_sample_variable_or (GimpDashboard *dashboard,
|
||||
Variable variable)
|
||||
{
|
||||
GimpDashboardPrivate *priv = dashboard->priv;
|
||||
const VariableInfo *variable_info = &variables[variable];
|
||||
VariableData *variable_data = &priv->variables[variable];
|
||||
const Variable *var;
|
||||
|
||||
variable_data->available = TRUE;
|
||||
variable_data->value.boolean = FALSE;
|
||||
|
||||
for (var = variable_info->data; *var; var++)
|
||||
{
|
||||
const VariableData *var_data = &priv->variables[*var];
|
||||
|
||||
if (! var_data->available)
|
||||
{
|
||||
variable_data->available = FALSE;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
variable_data->value.boolean |= var_data->value.boolean;
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
|
||||
/* avoid "defined but not used" warning. un-#if 0 when needed */
|
||||
|
||||
static void
|
||||
gimp_dashboard_sample_variable_and (GimpDashboard *dashboard,
|
||||
Variable variable)
|
||||
{
|
||||
GimpDashboardPrivate *priv = dashboard->priv;
|
||||
const VariableInfo *variable_info = &variables[variable];
|
||||
VariableData *variable_data = &priv->variables[variable];
|
||||
const Variable *var;
|
||||
|
||||
variable_data->available = TRUE;
|
||||
variable_data->value.boolean = TRUE;
|
||||
|
||||
for (var = variable_info->data; *var; var++)
|
||||
{
|
||||
const VariableData *var_data = &priv->variables[*var];
|
||||
|
||||
if (! var_data->available)
|
||||
{
|
||||
variable_data->available = FALSE;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
variable_data->value.boolean &= var_data->value.boolean;
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* 0 */
|
||||
|
||||
static void
|
||||
gimp_dashboard_sample_variable_changed (GimpDashboard *dashboard,
|
||||
Variable variable)
|
||||
|
@ -2623,10 +2530,28 @@ gimp_dashboard_update_group_values (GimpDashboard *dashboard,
|
|||
|
||||
if (group_info->meter_led)
|
||||
{
|
||||
gimp_meter_set_led_active (
|
||||
group_data->meter,
|
||||
gimp_dashboard_variable_to_boolean (dashboard,
|
||||
group_info->meter_led));
|
||||
GimpRGB color = {0.0, 0.0, 0.0, 1.0};
|
||||
gboolean active = FALSE;
|
||||
const Variable *var;
|
||||
|
||||
for (var = group_info->meter_led; *var; var++)
|
||||
{
|
||||
if (gimp_dashboard_variable_to_boolean (dashboard, *var))
|
||||
{
|
||||
const VariableInfo *variable_info = &variables[*var];
|
||||
|
||||
color.r = MAX (color.r, variable_info->color.r);
|
||||
color.g = MAX (color.g, variable_info->color.g);
|
||||
color.b = MAX (color.b, variable_info->color.b);
|
||||
|
||||
active = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
if (active)
|
||||
gimp_meter_set_led_color (group_data->meter, &color);
|
||||
|
||||
gimp_meter_set_led_active (group_data->meter, active);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1308,7 +1308,8 @@ gimp_meter_set_led_color (GimpMeter *meter,
|
|||
{
|
||||
meter->priv->led_color = *color;
|
||||
|
||||
gtk_widget_queue_draw (GTK_WIDGET (meter));
|
||||
if (meter->priv->led_active)
|
||||
gtk_widget_queue_draw (GTK_WIDGET (meter));
|
||||
|
||||
g_object_notify (G_OBJECT (meter), "led-color");
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue