static void gtk_scale_button_accessible_notify_gtk (GObject *obj, GParamSpec *pspec) { GtkScaleButton *scale_button; GtkScaleButtonAccessible *accessible; scale_button = GTK_SCALE_BUTTON (obj); accessible = GTK_SCALE_BUTTON_ACCESSIBLE (gtk_widget_get_accessible (GTK_WIDGET (scale_button))); if (strcmp (pspec->name, "adjustment") == 0) { GtkAdjustment* adjustment; adjustment = gtk_scale_button_get_adjustment (scale_button); g_signal_connect (adjustment, "value-changed", G_CALLBACK (gtk_scale_button_accessible_value_changed), accessible); } else { GTK_WIDGET_ACCESSIBLE_CLASS (gtk_scale_button_accessible_parent_class)->notify_gtk (obj, pspec); } }
static void gtk_scale_button_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { GtkScaleButton *button = GTK_SCALE_BUTTON (object); GtkScaleButtonPrivate *priv = button->priv; switch (prop_id) { case PROP_ORIENTATION: g_value_set_enum (value, priv->orientation); break; case PROP_VALUE: g_value_set_double (value, gtk_scale_button_get_value (button)); break; case PROP_SIZE: g_value_set_enum (value, priv->size); break; case PROP_ADJUSTMENT: g_value_set_object (value, gtk_scale_button_get_adjustment (button)); break; case PROP_ICONS: g_value_set_boxed (value, priv->icon_list); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } }
static gboolean gtk_scale_button_accessible_set_current_value (AtkValue *obj, const GValue *value) { GtkWidget *widget; GtkAdjustment *adjustment; widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); adjustment = gtk_scale_button_get_adjustment (GTK_SCALE_BUTTON (widget)); if (adjustment == NULL) return FALSE; gtk_adjustment_set_value (adjustment, g_value_get_double (value)); return TRUE; }
static void gtk_scale_button_accessible_get_minimum_increment (AtkValue *obj, GValue *value) { GtkWidget *widget; GtkAdjustment *adjustment; widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); adjustment = gtk_scale_button_get_adjustment (GTK_SCALE_BUTTON (widget)); if (adjustment == NULL) return; memset (value, 0, sizeof (GValue)); g_value_init (value, G_TYPE_DOUBLE); g_value_set_double (value, gtk_adjustment_get_minimum_increment (adjustment)); }
static gboolean cb_query_tooltip (GtkWidget *button, gint x, gint y, gboolean keyboard_mode, GtkTooltip *tooltip, gpointer user_data) { GtkScaleButton *scale_button = GTK_SCALE_BUTTON (button); GtkAdjustment *adjustment; gdouble val; char *str; AtkImage *image; image = ATK_IMAGE (gtk_widget_get_accessible (button)); adjustment = gtk_scale_button_get_adjustment (scale_button); val = gtk_scale_button_get_value (scale_button); if (val < (gtk_adjustment_get_lower (adjustment) + EPSILON)) { str = g_strdup (_("Muted")); } else if (val >= (gtk_adjustment_get_upper (adjustment) - EPSILON)) { str = g_strdup (_("Full Volume")); } else { int percent; percent = (int) (100. * val / (gtk_adjustment_get_upper (adjustment) - gtk_adjustment_get_lower (adjustment)) + .5); /* Translators: this is the percentage of the current volume, * as used in the tooltip, eg. "49 %". * Translate the "%d" to "%Id" if you want to use localised digits, * or otherwise translate the "%d" to "%d". */ str = g_strdup_printf (C_("volume percentage", "%d %%"), percent); } gtk_tooltip_set_text (tooltip, str); atk_image_set_image_description (image, str); g_free (str); return TRUE; }
static void gtk_scale_button_accessible_initialize (AtkObject *obj, gpointer data) { GtkAdjustment *adjustment; ATK_OBJECT_CLASS (gtk_scale_button_accessible_parent_class)->initialize (obj, data); adjustment = gtk_scale_button_get_adjustment (GTK_SCALE_BUTTON (data)); if (adjustment) g_signal_connect (adjustment, "value-changed", G_CALLBACK (gtk_scale_button_accessible_value_changed), obj); obj->role = ATK_ROLE_SLIDER; }
static void gail_scale_button_get_minimum_increment (AtkValue *obj, GValue *value) { GtkWidget *gtk_widget; GtkAdjustment *adj; g_return_if_fail (GAIL_IS_SCALE_BUTTON (obj)); gtk_widget = GTK_ACCESSIBLE (obj)->widget; if (gtk_widget == NULL) return; adj = gtk_scale_button_get_adjustment (GTK_SCALE_BUTTON (gtk_widget)); if (adj != NULL) g_value_set_double (g_value_init (value, G_TYPE_DOUBLE), adj->step_increment); }
static gboolean on_scale_button_query_tooltip (GtkWidget *button, gint x, gint y, gboolean keyboard_mode, GtkTooltip *tooltip, gpointer user_data) { GtkScaleButton *scale_button = GTK_SCALE_BUTTON (button); GtkAdjustment *adjustment; gdouble val; gchar *str; AtkImage *image; image = ATK_IMAGE (gtk_widget_get_accessible (button)); adjustment = gtk_scale_button_get_adjustment (scale_button); val = gtk_scale_button_get_value (scale_button); if (val < (gtk_adjustment_get_lower (adjustment) + EPSILON)) { str = g_strdup (_("Muted")); } else if (val >= (gtk_adjustment_get_upper (adjustment) - EPSILON)) { str = g_strdup (_("Full Volume")); } else { gint percent; percent = (gint) (100. * val / (gtk_adjustment_get_upper (adjustment) - gtk_adjustment_get_lower (adjustment)) + .5); str = g_strdup_printf (C_("volume percentage", "%d %%"), percent); } gtk_tooltip_set_text (tooltip, str); atk_image_set_image_description (image, str); g_free (str); return TRUE; }
G_MODULE_EXPORT void audio_codec_changed_cb(GtkWidget *widget, signal_user_data_t *ud) { static gint prev_acodec = 0; gint acodec_code; GValue *asettings, *gval; g_debug("audio_codec_changed_cb ()"); gval = ghb_widget_value(widget); acodec_code = ghb_lookup_combo_int("AudioEncoder", gval); ghb_value_free(gval); if (block_updates) { prev_acodec = acodec_code; ghb_grey_combo_options (ud); ghb_check_dependency(ud, widget, NULL); return; } asettings = get_selected_asettings(ud); if (ghb_audio_is_passthru (prev_acodec) && !ghb_audio_is_passthru (acodec_code)) { // Transition from passthru to not, put some audio settings back to // pref settings gint titleindex; gint track; gint br, sr, mix_code; if (asettings != NULL) { br = ghb_settings_get_int(asettings, "AudioBitrate"); sr = ghb_settings_combo_int(asettings, "AudioSamplerate"); mix_code = ghb_settings_combo_int(asettings, "AudioMixdown"); } else { br = 160; sr = 0; mix_code = 0; } titleindex = ghb_settings_combo_int(ud->settings, "title"); track = ghb_settings_combo_int(ud->settings, "AudioTrack"); if (sr) { sr = ghb_find_closest_audio_samplerate(sr); } ghb_ui_update(ud, "AudioSamplerate", ghb_int64_value(sr)); hb_audio_config_t *aconfig; aconfig = ghb_get_scan_audio_info(titleindex, track); if (sr == 0) { sr = aconfig ? aconfig->in.samplerate : 48000; } mix_code = ghb_get_best_mix( aconfig, acodec_code, mix_code); br = hb_audio_bitrate_get_best(acodec_code, br, sr, mix_code); ghb_ui_update(ud, "AudioBitrate", ghb_int64_value(br)); ghb_ui_update(ud, "AudioMixdown", ghb_int64_value(mix_code)); } ghb_adjust_audio_rate_combos(ud); ghb_grey_combo_options (ud); ghb_check_dependency(ud, widget, NULL); prev_acodec = acodec_code; if (asettings != NULL) { ghb_widget_to_setting(asettings, widget); ghb_settings_set_value(asettings, "AudioEncoderActual", ghb_settings_get_value(ud->settings, "AudioEncoderActual")); ghb_audio_list_refresh_selected(ud); } ghb_live_reset(ud); float low, high, gran, defval; int dir; hb_audio_quality_get_limits(acodec_code, &low, &high, &gran, &dir); defval = hb_audio_quality_get_default(acodec_code); GtkScaleButton *sb; GtkAdjustment *adj; sb = GTK_SCALE_BUTTON(GHB_WIDGET(ud->builder, "AudioTrackQuality")); adj = gtk_scale_button_get_adjustment(sb); if (dir) { // Quality values are inverted defval = high - defval + low; } gtk_adjustment_configure (adj, defval, low, high, gran, gran * 10, 0); }