Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Leap:42.2:Update
audio-recorder
audio-recorder-gtk-3.16.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File audio-recorder-gtk-3.16.patch of Package audio-recorder
=== modified file 'ChangeLog' Index: Makefile.in =================================================================== --- Makefile.in.orig +++ Makefile.in @@ -237,7 +237,6 @@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ -DATADIRNAME = @DATADIRNAME@ DBUS_CFLAGS = @DBUS_CFLAGS@ DBUS_LIBS = @DBUS_LIBS@ DEFS = @DEFS@ Index: aclocal.m4 =================================================================== --- aclocal.m4.orig +++ aclocal.m4 @@ -238,31 +238,6 @@ fi # Substitute ALL_LINGUAS so we can use it in po/Makefile AC_SUBST(ALL_LINGUAS) -# Set DATADIRNAME correctly if it is not set yet -# (copied from glib-gettext.m4) -if test -z "$DATADIRNAME"; then - AC_LINK_IFELSE( - [AC_LANG_PROGRAM([[]], - [[extern int _nl_msg_cat_cntr; - return _nl_msg_cat_cntr]])], - [DATADIRNAME=share], - [case $host in - *-*-solaris*) - dnl On Solaris, if bind_textdomain_codeset is in libc, - dnl GNU format message catalog is always supported, - dnl since both are added to the libc all together. - dnl Hence, we'd like to go with DATADIRNAME=share - dnl in this case. - AC_CHECK_FUNC(bind_textdomain_codeset, - [DATADIRNAME=share], [DATADIRNAME=lib]) - ;; - *) - [DATADIRNAME=lib] - ;; - esac]) -fi -AC_SUBST(DATADIRNAME) - IT_PO_SUBDIR([po]) ]) Index: configure =================================================================== --- configure.orig +++ configure @@ -631,7 +631,6 @@ GSETTINGS_RULES GLIB_COMPILE_SCHEMAS gsettingsschemadir GSETTINGS_DISABLE_SCHEMAS_COMPILE -DATADIRNAME ALL_LINGUAS INTLTOOL_PERL GMSGFMT @@ -8056,44 +8055,6 @@ fi # Substitute ALL_LINGUAS so we can use it in po/Makefile -# Set DATADIRNAME correctly if it is not set yet -# (copied from glib-gettext.m4) -if test -z "$DATADIRNAME"; then - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -extern int _nl_msg_cat_cntr; - return _nl_msg_cat_cntr - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - DATADIRNAME=share -else - case $host in - *-*-solaris*) - ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" -if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : - DATADIRNAME=share -else - DATADIRNAME=lib -fi - - ;; - *) - DATADIRNAME=lib - ;; - esac -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi - - Index: data/Makefile.in =================================================================== --- data/Makefile.in.orig +++ data/Makefile.in @@ -157,7 +157,6 @@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ -DATADIRNAME = @DATADIRNAME@ DBUS_CFLAGS = @DBUS_CFLAGS@ DBUS_LIBS = @DBUS_LIBS@ DEFS = @DEFS@ Index: icons/Makefile.in =================================================================== --- icons/Makefile.in.orig +++ icons/Makefile.in @@ -185,7 +185,6 @@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ -DATADIRNAME = @DATADIRNAME@ DBUS_CFLAGS = @DBUS_CFLAGS@ DBUS_LIBS = @DBUS_LIBS@ DEFS = @DEFS@ Index: icons/hicolor/Makefile.in =================================================================== --- icons/hicolor/Makefile.in.orig +++ icons/hicolor/Makefile.in @@ -185,7 +185,6 @@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ -DATADIRNAME = @DATADIRNAME@ DBUS_CFLAGS = @DBUS_CFLAGS@ DBUS_LIBS = @DBUS_LIBS@ DEFS = @DEFS@ Index: icons/hicolor/scalable/Makefile.in =================================================================== --- icons/hicolor/scalable/Makefile.in.orig +++ icons/hicolor/scalable/Makefile.in @@ -185,7 +185,6 @@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ -DATADIRNAME = @DATADIRNAME@ DBUS_CFLAGS = @DBUS_CFLAGS@ DBUS_LIBS = @DBUS_LIBS@ DEFS = @DEFS@ Index: icons/hicolor/scalable/apps/Makefile.in =================================================================== --- icons/hicolor/scalable/apps/Makefile.in.orig +++ icons/hicolor/scalable/apps/Makefile.in @@ -155,7 +155,6 @@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ -DATADIRNAME = @DATADIRNAME@ DBUS_CFLAGS = @DBUS_CFLAGS@ DBUS_LIBS = @DBUS_LIBS@ DEFS = @DEFS@ Index: icons/hicolor/scalable/status/Makefile.in =================================================================== --- icons/hicolor/scalable/status/Makefile.in.orig +++ icons/hicolor/scalable/status/Makefile.in @@ -155,7 +155,6 @@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ -DATADIRNAME = @DATADIRNAME@ DBUS_CFLAGS = @DBUS_CFLAGS@ DBUS_LIBS = @DBUS_LIBS@ DEFS = @DEFS@ Index: pixmaps/Makefile.in =================================================================== --- pixmaps/Makefile.in.orig +++ pixmaps/Makefile.in @@ -157,7 +157,6 @@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ -DATADIRNAME = @DATADIRNAME@ DBUS_CFLAGS = @DBUS_CFLAGS@ DBUS_LIBS = @DBUS_LIBS@ DEFS = @DEFS@ Index: po/POTFILES.in =================================================================== --- po/POTFILES.in.orig +++ po/POTFILES.in @@ -24,8 +24,8 @@ src/gst-pipeline.c src/gst-pipeline.h src/gst-recorder.c src/gst-recorder.h -src/gtklevelbar.c -src/gtklevelbar.h +src/levelbar.c +src/levelbar.h src/help.c src/help.h src/log.c Index: src/Makefile.am =================================================================== --- src/Makefile.am.orig +++ src/Makefile.am @@ -43,7 +43,7 @@ audio_recorder_SOURCES = rec-window.h co utility.c utility.h \ settings.c settings-pipe.c settings.h \ about.c about.h \ - gtklevelbar.c gtklevelbar.h \ + levelbar.c levelbar.h \ main.c Index: src/Makefile.in =================================================================== --- src/Makefile.in.orig +++ src/Makefile.in @@ -98,7 +98,7 @@ am_audio_recorder_OBJECTS = systray-icon gst-devices.$(OBJEXT) rec-manager.$(OBJEXT) support.$(OBJEXT) \ timer.$(OBJEXT) timer-parser.$(OBJEXT) utility.$(OBJEXT) \ settings.$(OBJEXT) settings-pipe.$(OBJEXT) about.$(OBJEXT) \ - gtklevelbar.$(OBJEXT) main.$(OBJEXT) + levelbar.$(OBJEXT) main.$(OBJEXT) audio_recorder_OBJECTS = $(am_audio_recorder_OBJECTS) audio_recorder_LDADD = $(LDADD) AM_V_P = $(am__v_P_@AM_V@) @@ -175,7 +175,6 @@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ -DATADIRNAME = @DATADIRNAME@ DBUS_CFLAGS = @DBUS_CFLAGS@ DBUS_LIBS = @DBUS_LIBS@ DEFS = @DEFS@ @@ -329,7 +328,7 @@ audio_recorder_SOURCES = rec-window.h co utility.c utility.h \ settings.c settings-pipe.c settings.h \ about.c about.h \ - gtklevelbar.c gtklevelbar.h \ + levelbar.c levelbar.h \ main.c all: all-am @@ -431,8 +430,8 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gst-pipeline.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gst-recorder.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gst-vad.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gtklevelbar.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/help.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/levelbar.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/log.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/media-profiles.Po@am__quote@ Index: src/audio-sources.c =================================================================== --- src/audio-sources.c.orig +++ src/audio-sources.c @@ -687,7 +687,7 @@ void audio_source_fill_combo(GtkWidget * GdkPixbuf *pixbuf = NULL; if (item->type == MEDIA_PLAYER || item->type == COMM_PROGRAM) { - pixbuf = load_icon_pixbuf((gchar*)p); + pixbuf = load_icon_pixbuf((gchar*)p, 22); // Got icon?? if (!GDK_IS_PIXBUF(pixbuf)) { Index: src/dbus-mpris2.c =================================================================== --- src/dbus-mpris2.c.orig +++ src/dbus-mpris2.c @@ -3,10 +3,7 @@ * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 3 of the License (GPL3), or any later version. - * - * This library is distributed in the hope that it will be useful, + * License as published by the Free Software Foundation; either"OK * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU Library General Public License 3 for more details. @@ -573,6 +570,20 @@ GVariant *mpris2_get_player_value(gpoint return res; } +#if 0 +void debug_variant(const gchar *tag, GVariant *v) { + if (!v) { + g_print("%s is NULL.\n", tag); + return; + } + + gchar *sval = g_variant_print(v, TRUE); + const gchar *stype = g_variant_get_type_string(v); + g_print("%s has type:%s and value:%s\n", tag, stype, sval); + g_free(sval); +} +#endif + void mpris2_get_metadata(gpointer player_rec) { // Get track information (=metadata) and state for the given media player. // Ref: http://www.mpris.org/2.1/spec/Player_Node.html#Property:Metadata @@ -602,6 +613,8 @@ void mpris2_get_metadata(gpointer player // GVariant *result = mpris2_get_player_value(player, "PlaybackStatus"); + // DEBUG: debug_variant("PlaybackStatus", result); + if (!result) { // Cannot contact player (it has quit)? tr->status = PLAYER_STATUS_CLOSED; @@ -657,9 +670,14 @@ void mpris2_get_metadata(gpointer player // GVariant *dict = mpris2_get_player_value(player, "Metadata"); + // DEBUG: debug_variant("Metadata", dict); + if (!dict) { - // Cannot contact player (it has quit)? - tr->status = PLAYER_STATUS_CLOSED; + // Cannot get Metadata (should we consider this as on error?) + // 03.april.2015, commented out by MOma: Ambient Noise Player does not support "Metadata" yet. + + // tr->status = PLAYER_STATUS_CLOSED; + return; } Index: src/gtklevelbar.c =================================================================== --- src/gtklevelbar.c +++ /dev/null @@ -1,357 +0,0 @@ -/* - * Copyright (c) Linux community. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 3 of the License (GPL3), or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Library General Public License 3 for more details. - * - * You should have received a copy of the GNU Library General Public - * License 3 along with this program; if not, see /usr/share/common-licenses/GPL file - * or write to Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. -*/ -#include "gtklevelbar.h" -#include <math.h> // round() - -// A simple level bar widget. -// By Osmo Antero. -// -// Sample call: -// GtkWidget *lb = gtk_level_bar_new(); -// gtk_widget_show(lb); -// -// Set value [0.0, 1.0]. -// gtk_level_bar_set_fraction(GTK_LEVEL_BAR(lb), 0.8); -// -// Show %-value [0 - 100%] or plain value [0 - 1.0] on the level bar. See BAR_VALUE enum. -// gtk_level_bar_set_value_type(GTK_LEVEL_BAR(lb), VALUE_PRECENT); -// - -struct _GtkLevelBarPrivate { - gdouble fraction; - guint bar_height; - enum BAR_VALUE bar_value; - enum BAR_SHAPE bar_shape; -}; - -static void gtk_level_bar_get_preferred_width(GtkWidget *widget, gint *minimum, gint *natural); -static void gtk_level_bar_get_preferred_height (GtkWidget *widget,gint *minimum, gint *natural); - -static void gtk_level_bar_real_update(GtkLevelBar *progress); -static gboolean gtk_level_bar_draw(GtkWidget *widget, cairo_t *cr); - -static void gtk_level_bar_finalize(GObject *object); - -G_DEFINE_TYPE(GtkLevelBar, gtk_level_bar, GTK_TYPE_WIDGET); - -static void gtk_level_bar_class_init (GtkLevelBarClass *class) { - GObjectClass *gobject_class; - GtkWidgetClass *widget_class; - - gobject_class = G_OBJECT_CLASS (class); - widget_class = (GtkWidgetClass *)class; - - gobject_class->set_property = NULL; - gobject_class->get_property = NULL; - gobject_class->finalize = gtk_level_bar_finalize; - - widget_class->draw = gtk_level_bar_draw; - widget_class->get_preferred_width = gtk_level_bar_get_preferred_width; - widget_class->get_preferred_height = gtk_level_bar_get_preferred_height; - - g_type_class_add_private (class, sizeof (GtkLevelBarPrivate)); -} - -static void gtk_level_bar_init(GtkLevelBar *pbar) { - GtkLevelBarPrivate *priv; - - pbar->priv = G_TYPE_INSTANCE_GET_PRIVATE(pbar, GTK_TYPE_LEVEL_BAR, GtkLevelBarPrivate); - priv = pbar->priv; - - priv->fraction = 0.0; - priv->bar_height = 8; - priv->bar_value = VALUE_NONE; - priv->bar_shape = SHAPE_CIRCLE; // pulsing line with circle at end. - - gtk_widget_set_has_window(GTK_WIDGET (pbar), FALSE); -} - -GtkWidget *gtk_level_bar_new(void) { - GtkWidget *pbar; - pbar = g_object_new(GTK_TYPE_LEVEL_BAR, NULL); - return pbar; -} - -static void gtk_level_bar_real_update (GtkLevelBar *pbar) { - GtkWidget *widget; - - g_return_if_fail (GTK_IS_LEVEL_BAR (pbar)); - - GtkLevelBarPrivate __attribute__ ((unused)) *priv = pbar->priv; - - widget = GTK_WIDGET(pbar); - - gtk_widget_queue_draw(widget); -} - -static void gtk_level_bar_finalize (GObject *object) { - G_OBJECT_CLASS(gtk_level_bar_parent_class)->finalize (object); -} - -static void gtk_level_bar_get_preferred_width (GtkWidget *widget,gint *minimum, gint *natural) { - *minimum = 50; - *natural = 160; -} - -static void gtk_level_bar_get_preferred_height (GtkWidget *widget, gint *minimum, gint *natural) { - *minimum = 6; - *natural = 8; -} - -static gboolean gtk_level_bar_draw(GtkWidget *widget, cairo_t *cr) { - // Draw level bar and optional text - GtkLevelBar *pbar = GTK_LEVEL_BAR (widget); - GtkLevelBarPrivate *priv = pbar->priv; - GtkStyleContext *context; - int width, height; - - context = gtk_widget_get_style_context(widget); - - width = gtk_widget_get_allocated_width(widget); - height = gtk_widget_get_allocated_height(widget); - - // Bar thickness - gdouble bar_height = MIN(height , priv->bar_height); - - // Vertical pos - gdouble y = (height - bar_height)/2; - - // Pulse width - gdouble w = priv->fraction/(1.00/width); - - // Debug: - // LOG_DEBUG("width=%d height=%d bar_height=%2.1f y=%2.1f w=%2.1f fraction=%2.1f\n", width, height, bar_height, y, w, priv->fraction); - - gtk_style_context_save(context); - gtk_render_background(context, cr, 0, 0, width, height); - gtk_render_frame(context, cr, 0, 0, width, height); - - // Render level bar with current theme and color. - - // Progressbar style - gtk_style_context_add_class(context, GTK_STYLE_CLASS_PROGRESSBAR); - - if (priv->fraction > 0.001) { - - switch (priv->bar_shape) { - - case SHAPE_LINE: - // Render a single line - if (priv->bar_value == VALUE_NONE) { - // No value (text) shown. Draw a line on the middle. - gtk_render_line(context, cr, 0, y + (bar_height / 2), w, y + (bar_height / 2)); - - } else { - // Draw a line under text. - gtk_render_line(context, cr, 0, y + (bar_height ), w, y + (bar_height )); - } - - break; - - case SHAPE_LINE2: - // Render two horizontal lines + close the end. - gtk_render_line(context, cr, 0, y-1 , w, y-1); - gtk_render_line(context, cr, 0, y + (bar_height ), w, y + (bar_height )); - gtk_render_line(context, cr, w, y - 1, w, y + (bar_height )); - break; - - case SHAPE_CIRCLE: - // Draw a line on the middle + circle at the end. - gtk_render_line(context, cr, 0, y + (bar_height / 2), w, y + (bar_height / 2)); - gtk_render_option(context, cr, w, y, bar_height+1, bar_height+1); - break; - - default: - // case SHAPE_LEVELBAR: - - // EDIT: gtk_render_activity() does not work in GTK 3.14+ - // gtk_style_context_set_state(context, GTK_STATE_FLAG_ACTIVE); - // gtk_render_activity(context, cr, 0, y, w, bar_height); - - // Render a filled frame (this is a typical levelbar). - gtk_render_frame(context, cr, 0, y, w, bar_height); - break; - - } - } - - gtk_style_context_restore(context); - - cairo_select_font_face(cr, "Sans", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL); - cairo_set_font_size(cr, priv->bar_height); - - GdkRGBA color; - gtk_style_context_get_border_color(context, GTK_STATE_NORMAL, &color); - gdk_cairo_set_source_rgba(cr, &color); - color.alpha = 0.9; - - // Calculate total width of scale - cairo_text_extents_t extents; - cairo_text_extents(cr, "0.0", &extents); - gint total_w = 9 * (extents.x_advance + extents.width); - - // Debug: - // g_print("Bar width=%d total_w=%d bearing=%3.1f advance=%3.1f char.width=%3.1f\n", width, total_w, - // extents.x_bearing, extents.x_advance, extents.width); - - // Draw values - gboolean draw_all = (total_w - extents.width) < width; - - // Show normalized value [0 - 1.0]? - if (priv->bar_value == VALUE_0_1) { - // Value: 0.1 0.2 0.3 0.4...0.9 - - gint i = 0; - for (i=0; i < 10; i++) { - gchar *s = NULL; - - // Draw all or draw only each second value? - if (draw_all || (i % 2 == 0)) - s = g_strdup_printf("%2.1f", (gdouble)i/10.0); - - if (!s) continue; - - cairo_text_extents_t extents; - cairo_text_extents(cr, s, &extents); - - gdouble xx = (width/10) * i; - gdouble yy = (height/2)-(extents.height/2 + extents.y_bearing) + 0.2; - - cairo_move_to(cr, xx, yy); - cairo_show_text(cr, s); - - g_free(s); - } - - // Show percentage value? - } else if (priv->bar_value == VALUE_PERCENT) { - // Value: 10% . 20% . 30% . 40% . 50% ... 90% - gint i = 0; - for (i=0; i < 10; i++) { - gchar *s = NULL; - if (i % 2 == 0) - s = g_strdup_printf("%2.0f%%", (gdouble)i*10.0); - else - s = g_strdup_printf("%3s", "."); - - cairo_text_extents_t extents; - cairo_text_extents(cr, s, &extents); - - gdouble xx = (width/10) * i; - gdouble yy = (height/2)-(extents.height/2 + extents.y_bearing); - - cairo_move_to(cr, xx, yy); - cairo_show_text(cr, s); - - g_free(s); - } - } - -#if 0 - // Commented out by moma 30.sep.2012. - - // Set text - if (priv->text) { - cairo_select_font_face(cr, "Sans", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL); - - cairo_set_font_size(cr, 0.5*height); - cairo_text_extents_t extents; - cairo_text_extents(cr, priv->text, &extents); - - // Ref: http://cairographics.org/manual/cairo-cairo-scaled-font-t.html#cairo-text-extents-t - gdouble xx = width-(extents.width + extents.x_bearing)-2; - gdouble yy = height/2-(extents.height/2 + extents.y_bearing); - - GdkRGBA color; - gtk_style_context_get_border_color(context, GTK_STATE_NORMAL, &color); - gdk_cairo_set_source_rgba(cr, &color); - color.alpha = 0.9; - - cairo_move_to(cr, xx, yy); - cairo_show_text(cr, priv->text); - } -#endif - - return FALSE; -} - -void gtk_level_bar_set_fraction(GtkLevelBar *pbar, gdouble fraction) { - // Set fraction [0.0, 1.0] - GtkLevelBarPrivate* priv; - g_return_if_fail (GTK_IS_LEVEL_BAR (pbar)); - priv = pbar->priv; - - priv->fraction = CLAMP(fraction, 0.0, 1.0); - gtk_level_bar_real_update (pbar); -} - -gdouble gtk_level_bar_get_fraction(GtkLevelBar *pbar) { - // Get fraction - g_return_val_if_fail(GTK_IS_LEVEL_BAR (pbar), 0); - return pbar->priv->fraction; -} - -void gtk_level_bar_set_bar_height(GtkLevelBar *pbar, guint height) { - // Set bar height (thickness). Normally 8 pixels. - g_return_if_fail(GTK_IS_LEVEL_BAR (pbar)); - GtkLevelBarPrivate* priv = pbar->priv; - priv->bar_height = height; - // Redraw - gtk_level_bar_real_update(pbar); -} - -guint gtk_level_bar_get_bar_height(GtkLevelBar *pbar) { - // Get bar thickness - g_return_val_if_fail(GTK_IS_LEVEL_BAR(pbar), 0); - return pbar->priv->bar_height; -} - -void gtk_level_bar_set_value_type(GtkLevelBar *pbar, enum BAR_VALUE bar_value) { - // Set BAR_VALUE - g_return_if_fail(GTK_IS_LEVEL_BAR(pbar)); - GtkLevelBarPrivate* priv = pbar->priv; - priv->bar_value = bar_value; - // Redraw - gtk_level_bar_real_update(pbar); -} - -enum BAR_VALUE gtk_level_bar_get_scale(GtkLevelBar *pbar) { - // Get BAR_VALUE - g_return_val_if_fail(GTK_IS_LEVEL_BAR(pbar), VALUE_NONE); - GtkLevelBarPrivate* priv = pbar->priv; - return priv->bar_value; -} - -void gtk_level_bar_set_shape(GtkLevelBar *pbar, enum BAR_SHAPE bar_shape) { - // Set BAR_SHAPE - g_return_if_fail(GTK_IS_LEVEL_BAR(pbar)); - GtkLevelBarPrivate* priv = pbar->priv; - priv->bar_shape = bar_shape; - // Redraw - gtk_level_bar_real_update(pbar); -} - -enum BAR_SHAPE gtk_level_bar_get_shape(GtkLevelBar *pbar) { - // Get BAR_SHAPE - g_return_val_if_fail(GTK_IS_LEVEL_BAR(pbar), SHAPE_LEVELBAR); - GtkLevelBarPrivate* priv = pbar->priv; - return priv->bar_shape; -} - - Index: src/gtklevelbar.h =================================================================== --- src/gtklevelbar.h +++ /dev/null @@ -1,60 +0,0 @@ -#ifndef __GTK_LEVEL_BAR_H__ -#define __GTK_LEVEL_BAR_H__ - -// A simple level bar widget. - -#include <gtk/gtk.h> - -typedef enum BAR_VALUE {VALUE_NONE, VALUE_0_1/*0 - 1.0*/, VALUE_PERCENT/*0 - 100%*/} BAR_VALUE; -typedef enum BAR_SHAPE {SHAPE_LEVELBAR, SHAPE_LINE, SHAPE_LINE2, SHAPE_CIRCLE} BAR_SHAPE; - -G_BEGIN_DECLS - -#define GTK_TYPE_LEVEL_BAR (gtk_level_bar_get_type ()) -#define GTK_LEVEL_BAR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_LEVEL_BAR, GtkLevelBar)) -#define GTK_LEVEL_BAR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_LEVEL_BAR, GtkLevelBarClass)) -#define GTK_IS_LEVEL_BAR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_LEVEL_BAR)) -#define GTK_IS_LEVEL_BAR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_LEVEL_BAR)) -#define GTK_LEVEL_BAR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_LEVEL_BAR, GtkLevelBarClass)) - -typedef struct _GtkLevelBar GtkLevelBar; -typedef struct _GtkLevelBarPrivate GtkLevelBarPrivate; -typedef struct _GtkLevelBarClass GtkLevelBarClass; - -struct _GtkLevelBar { - GtkWidget parent; - - /*< private >*/ - GtkLevelBarPrivate *priv; -}; - -struct _GtkLevelBarClass { - GtkWidgetClass parent_class; - - /* Padding for future expansion */ - void (*_gtk_reserved1) (void); - void (*_gtk_reserved2) (void); - void (*_gtk_reserved3) (void); - void (*_gtk_reserved4) (void); -}; - -GType gtk_level_bar_get_type(void) G_GNUC_CONST; -GtkWidget* gtk_level_bar_new(void); - -void gtk_level_bar_set_bar_height(GtkLevelBar *pbar, guint height); -void gtk_level_bar_set_fraction(GtkLevelBar *pbar, gdouble fraction); - -guint gtk_level_bar_get_bar_height(GtkLevelBar *pbar); -gdouble gtk_level_bar_get_fraction(GtkLevelBar *pbar); - -void gtk_level_bar_set_value_type(GtkLevelBar *pbar, enum BAR_VALUE bar_value); -enum BAR_VALUE gtk_level_bar_get_value_type(GtkLevelBar *pbar); - -void gtk_level_bar_set_shape(GtkLevelBar *pbar, enum BAR_SHAPE bar_shape); -enum BAR_SHAPE gtk_level_bar_get_shape(GtkLevelBar *pbar); - -G_END_DECLS - -#endif - - Index: src/levelbar.c =================================================================== --- /dev/null +++ src/levelbar.c @@ -0,0 +1,357 @@ +/* + * Copyright (c) Linux community. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 3 of the License (GPL3), or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Library General Public License 3 for more details. + * + * You should have received a copy of the GNU Library General Public + * License 3 along with this program; if not, see /usr/share/common-licenses/GPL file + * or write to Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. +*/ +#include "levelbar.h" +#include <math.h> // round() + +// A simple level bar widget. +// By Osmo Antero. +// +// Sample call: +// GtkWidget *lb = level_bar_new(); +// gtk_widget_show(lb); +// +// Set value [0.0, 1.0]. +// level_bar_set_fraction(LEVEL_BAR(lb), 0.8); +// +// Show %-value [0 - 100%] or plain value [0 - 1.0] on the level bar. See BAR_VALUE enum. +// level_bar_set_value_type(LEVEL_BAR(lb), VALUE_PRECENT); +// + +struct _LevelBarPrivate { + gdouble fraction; + guint bar_height; + enum BAR_VALUE bar_value; + enum BAR_SHAPE bar_shape; +}; + +static void level_bar_get_preferred_width(GtkWidget *widget, gint *minimum, gint *natural); +static void level_bar_get_preferred_height (GtkWidget *widget,gint *minimum, gint *natural); + +static void level_bar_real_update(LevelBar *progress); +static gboolean level_bar_draw(GtkWidget *widget, cairo_t *cr); + +static void level_bar_finalize(GObject *object); + +G_DEFINE_TYPE(LevelBar, level_bar, GTK_TYPE_WIDGET); + +static void level_bar_class_init(LevelBarClass *class) { + GObjectClass *gobject_class; + GtkWidgetClass *widget_class; + + gobject_class = G_OBJECT_CLASS (class); + widget_class = (GtkWidgetClass *)class; + + gobject_class->set_property = NULL; + gobject_class->get_property = NULL; + gobject_class->finalize = level_bar_finalize; + + widget_class->draw = level_bar_draw; + widget_class->get_preferred_width = level_bar_get_preferred_width; + widget_class->get_preferred_height = level_bar_get_preferred_height; + + g_type_class_add_private(class, sizeof (LevelBarPrivate)); +} + +static void level_bar_init(LevelBar *pbar) { + LevelBarPrivate *priv; + + pbar->priv = G_TYPE_INSTANCE_GET_PRIVATE(pbar, TYPE_LEVEL_BAR, LevelBarPrivate); + priv = pbar->priv; + + priv->fraction = 0.0; + priv->bar_height = 8; + priv->bar_value = VALUE_NONE; + priv->bar_shape = SHAPE_CIRCLE; // pulsing line with circle at end. + + gtk_widget_set_has_window(GTK_WIDGET (pbar), FALSE); +} + +GtkWidget *level_bar_new(void) { + GtkWidget *pbar; + pbar = g_object_new(TYPE_LEVEL_BAR, NULL); + return pbar; +} + +static void level_bar_real_update (LevelBar *pbar) { + GtkWidget *widget; + + g_return_if_fail (IS_LEVEL_BAR (pbar)); + + LevelBarPrivate __attribute__ ((unused)) *priv = pbar->priv; + + widget = GTK_WIDGET(pbar); + + gtk_widget_queue_draw(widget); +} + +static void level_bar_finalize (GObject *object) { + G_OBJECT_CLASS(level_bar_parent_class)->finalize (object); +} + +static void level_bar_get_preferred_width (GtkWidget *widget,gint *minimum, gint *natural) { + *minimum = 50; + *natural = 160; +} + +static void level_bar_get_preferred_height (GtkWidget *widget, gint *minimum, gint *natural) { + *minimum = 6; + *natural = 8; +} + +static gboolean level_bar_draw(GtkWidget *widget, cairo_t *cr) { + // Draw level bar and optional text + LevelBar *pbar = LEVEL_BAR (widget); + LevelBarPrivate *priv = pbar->priv; + GtkStyleContext *context; + int width, height; + + context = gtk_widget_get_style_context(widget); + + width = gtk_widget_get_allocated_width(widget); + height = gtk_widget_get_allocated_height(widget); + + // Bar thickness + gdouble bar_height = MIN(height , priv->bar_height); + + // Vertical pos + gdouble y = (height - bar_height)/2; + + // Pulse width + gdouble w = priv->fraction/(1.00/width); + + // Debug: + // LOG_DEBUG("width=%d height=%d bar_height=%2.1f y=%2.1f w=%2.1f fraction=%2.1f\n", width, height, bar_height, y, w, priv->fraction); + + gtk_style_context_save(context); + gtk_render_background(context, cr, 0, 0, width, height); + gtk_render_frame(context, cr, 0, 0, width, height); + + // Render level bar with current theme and color. + + // Progressbar style + gtk_style_context_add_class(context, GTK_STYLE_CLASS_PROGRESSBAR); + + if (priv->fraction > 0.001) { + + switch (priv->bar_shape) { + + case SHAPE_LINE: + // Render a single line + if (priv->bar_value == VALUE_NONE) { + // No value (text) shown. Draw a line on the middle. + gtk_render_line(context, cr, 0, y + (bar_height / 2), w, y + (bar_height / 2)); + + } else { + // Draw a line under text. + gtk_render_line(context, cr, 0, y + (bar_height ), w, y + (bar_height )); + } + + break; + + case SHAPE_LINE2: + // Render two horizontal lines + close the end. + gtk_render_line(context, cr, 0, y-1 , w, y-1); + gtk_render_line(context, cr, 0, y + (bar_height ), w, y + (bar_height )); + gtk_render_line(context, cr, w, y - 1, w, y + (bar_height )); + break; + + case SHAPE_CIRCLE: + // Draw a line on the middle + circle at the end. + gtk_render_line(context, cr, 0, y + (bar_height / 2), w, y + (bar_height / 2)); + gtk_render_option(context, cr, w, y, bar_height+1, bar_height+1); + break; + + default: + // case SHAPE_LEVELBAR: + + // EDIT: gtk_render_activity() does not work in GTK 3.14+ + // gtk_style_context_set_state(context, GTK_STATE_FLAG_ACTIVE); + // gtk_render_activity(context, cr, 0, y, w, bar_height); + + // Render a filled frame (this is a typical levelbar). + gtk_render_frame(context, cr, 0, y, w, bar_height); + break; + + } + } + + gtk_style_context_restore(context); + + cairo_select_font_face(cr, "Sans", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL); + cairo_set_font_size(cr, priv->bar_height); + + GdkRGBA color; + gtk_style_context_get_border_color(context, GTK_STATE_NORMAL, &color); + gdk_cairo_set_source_rgba(cr, &color); + color.alpha = 0.9; + + // Calculate total width of scale + cairo_text_extents_t extents; + cairo_text_extents(cr, "0.0", &extents); + gint total_w = 9 * (extents.x_advance + extents.width); + + // Debug: + // g_print("Bar width=%d total_w=%d bearing=%3.1f advance=%3.1f char.width=%3.1f\n", width, total_w, + // extents.x_bearing, extents.x_advance, extents.width); + + // Draw values + gboolean draw_all = (total_w - extents.width) < width; + + // Show normalized value [0 - 1.0]? + if (priv->bar_value == VALUE_0_1) { + // Value: 0.1 0.2 0.3 0.4...0.9 + + gint i = 0; + for (i=0; i < 10; i++) { + gchar *s = NULL; + + // Draw all or draw only each second value? + if (draw_all || (i % 2 == 0)) + s = g_strdup_printf("%2.1f", (gdouble)i/10.0); + + if (!s) continue; + + cairo_text_extents_t extents; + cairo_text_extents(cr, s, &extents); + + gdouble xx = (width/10) * i; + gdouble yy = (height/2)-(extents.height/2 + extents.y_bearing) + 0.2; + + cairo_move_to(cr, xx, yy); + cairo_show_text(cr, s); + + g_free(s); + } + + // Show percentage value? + } else if (priv->bar_value == VALUE_PERCENT) { + // Value: 10% . 20% . 30% . 40% . 50% ... 90% + gint i = 0; + for (i=0; i < 10; i++) { + gchar *s = NULL; + if (i % 2 == 0) + s = g_strdup_printf("%2.0f%%", (gdouble)i*10.0); + else + s = g_strdup_printf("%3s", "."); + + cairo_text_extents_t extents; + cairo_text_extents(cr, s, &extents); + + gdouble xx = (width/10) * i; + gdouble yy = (height/2)-(extents.height/2 + extents.y_bearing); + + cairo_move_to(cr, xx, yy); + cairo_show_text(cr, s); + + g_free(s); + } + } + +#if 0 + // Commented out by moma 30.sep.2012. + + // Set text + if (priv->text) { + cairo_select_font_face(cr, "Sans", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL); + + cairo_set_font_size(cr, 0.5*height); + cairo_text_extents_t extents; + cairo_text_extents(cr, priv->text, &extents); + + // Ref: http://cairographics.org/manual/cairo-cairo-scaled-font-t.html#cairo-text-extents-t + gdouble xx = width-(extents.width + extents.x_bearing)-2; + gdouble yy = height/2-(extents.height/2 + extents.y_bearing); + + GdkRGBA color; + gtk_style_context_get_border_color(context, GTK_STATE_NORMAL, &color); + gdk_cairo_set_source_rgba(cr, &color); + color.alpha = 0.9; + + cairo_move_to(cr, xx, yy); + cairo_show_text(cr, priv->text); + } +#endif + + return FALSE; +} + +void level_bar_set_fraction(LevelBar *pbar, gdouble fraction) { + // Set fraction [0.0, 1.0] + LevelBarPrivate* priv; + g_return_if_fail (IS_LEVEL_BAR (pbar)); + priv = pbar->priv; + + priv->fraction = CLAMP(fraction, 0.0, 1.0); + level_bar_real_update (pbar); +} + +gdouble level_bar_get_fraction(LevelBar *pbar) { + // Get fraction + g_return_val_if_fail(IS_LEVEL_BAR (pbar), 0); + return pbar->priv->fraction; +} + +void level_bar_set_bar_height(LevelBar *pbar, guint height) { + // Set bar height (thickness). Normally 8 pixels. + g_return_if_fail(IS_LEVEL_BAR (pbar)); + LevelBarPrivate* priv = pbar->priv; + priv->bar_height = height; + // Redraw + level_bar_real_update(pbar); +} + +guint level_bar_get_bar_height(LevelBar *pbar) { + // Get bar thickness + g_return_val_if_fail(IS_LEVEL_BAR(pbar), 0); + return pbar->priv->bar_height; +} + +void level_bar_set_value_type(LevelBar *pbar, enum BAR_VALUE bar_value) { + // Set BAR_VALUE + g_return_if_fail(IS_LEVEL_BAR(pbar)); + LevelBarPrivate* priv = pbar->priv; + priv->bar_value = bar_value; + // Redraw + level_bar_real_update(pbar); +} + +enum BAR_VALUE level_bar_get_scale(LevelBar *pbar) { + // Get BAR_VALUE + g_return_val_if_fail(IS_LEVEL_BAR(pbar), VALUE_NONE); + LevelBarPrivate* priv = pbar->priv; + return priv->bar_value; +} + +void level_bar_set_shape(LevelBar *pbar, enum BAR_SHAPE bar_shape) { + // Set BAR_SHAPE + g_return_if_fail(IS_LEVEL_BAR(pbar)); + LevelBarPrivate* priv = pbar->priv; + priv->bar_shape = bar_shape; + // Redraw + level_bar_real_update(pbar); +} + +enum BAR_SHAPE level_bar_get_shape(LevelBar *pbar) { + // Get BAR_SHAPE + g_return_val_if_fail(IS_LEVEL_BAR(pbar), SHAPE_LEVELBAR); + LevelBarPrivate* priv = pbar->priv; + return priv->bar_shape; +} + + Index: src/levelbar.h =================================================================== --- /dev/null +++ src/levelbar.h @@ -0,0 +1,60 @@ +#ifndef __LEVEL_BAR_H__ +#define __LEVEL_BAR_H__ + +// A simple level bar widget. + +#include <gtk/gtk.h> + +typedef enum BAR_VALUE {VALUE_NONE, VALUE_0_1/*0 - 1.0*/, VALUE_PERCENT/*0 - 100%*/} BAR_VALUE; +typedef enum BAR_SHAPE {SHAPE_LEVELBAR, SHAPE_LINE, SHAPE_LINE2, SHAPE_CIRCLE} BAR_SHAPE; + +G_BEGIN_DECLS + +#define TYPE_LEVEL_BAR (level_bar_get_type ()) +#define LEVEL_BAR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_LEVEL_BAR, LevelBar)) +#define LEVEL_BAR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_LEVEL_BAR, LevelBarClass)) +#define IS_LEVEL_BAR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_LEVEL_BAR)) +#define IS_LEVEL_BAR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_LEVEL_BAR)) +#define LEVEL_BAR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_LEVEL_BAR, LevelBarClass)) + +typedef struct _LevelBar LevelBar; +typedef struct _LevelBarPrivate LevelBarPrivate; +typedef struct _LevelBarClass LevelBarClass; + +struct _LevelBar { + GtkWidget parent; + + /*< private >*/ + LevelBarPrivate *priv; +}; + +struct _LevelBarClass { + GtkWidgetClass parent_class; + + /* Padding for future expansion */ + void (*_gtk_reserved1) (void); + void (*_gtk_reserved2) (void); + void (*_gtk_reserved3) (void); + void (*_gtk_reserved4) (void); +}; + +GType level_bar_get_type(void) G_GNUC_CONST; +GtkWidget* level_bar_new(void); + +void level_bar_set_bar_height(LevelBar *pbar, guint height); +void level_bar_set_fraction(LevelBar *pbar, gdouble fraction); + +guint level_bar_get_bar_height(LevelBar *pbar); +gdouble level_bar_get_fraction(LevelBar *pbar); + +void level_bar_set_value_type(LevelBar *pbar, enum BAR_VALUE bar_value); +enum BAR_VALUE level_bar_get_value_type(LevelBar *pbar); + +void level_bar_set_shape(LevelBar *pbar, enum BAR_SHAPE bar_shape); +enum BAR_SHAPE level_bar_get_shape(LevelBar *pbar); + +G_END_DECLS + +#endif + + Index: src/main.c =================================================================== --- src/main.c.orig +++ src/main.c @@ -25,7 +25,7 @@ #include <gst/pbutils/pbutils.h> -#include "gtklevelbar.h" // Level bar widget +#include "levelbar.h" // Level bar widget #include "support.h" #include "audio-sources.h" #include "rec-window.h" @@ -274,13 +274,13 @@ void win_set_filename(gchar *filename) { } void win_update_level_bar(gdouble norm_rms, gdouble norm_peak) { - // Set pulse on gtklevelbar + // Set pulse on the levelbar - if (!GTK_IS_LEVEL_BAR(g_win.level_bar)) return; + if (!IS_LEVEL_BAR(g_win.level_bar)) return; // Show either RMS or peak-value on the levelbar. // Notice: This value has no GUI-setting. User must change it in the dconf-editor. - gtk_level_bar_set_fraction(GTK_LEVEL_BAR(g_win.level_bar), + level_bar_set_fraction(LEVEL_BAR(g_win.level_bar), (g_win.pulse_type == PULSE_RMS ? norm_rms : norm_peak)); } @@ -810,7 +810,7 @@ void win_show_settings_dialog() { void win_level_bar_clicked(GtkWidget *widget, GdkEvent *event, gpointer data) { // User clicked on the level bar. - // Set BAR_VALUE or BAR_SHAPE. See gtklevelbar.h.value + // Set BAR_VALUE or BAR_SHAPE. See levelbar.h. GdkEventButton *ev = (GdkEventButton*)event; if (ev->button == 1) { @@ -827,7 +827,7 @@ void win_level_bar_clicked(GtkWidget *wi } // Update GUI - gtk_level_bar_set_value_type(GTK_LEVEL_BAR(g_win.level_bar), bar_value); + level_bar_set_value_type(LEVEL_BAR(g_win.level_bar), bar_value); // Save in DConf conf_save_int_value("level-bar-value", bar_value); @@ -846,7 +846,7 @@ void win_level_bar_clicked(GtkWidget *wi } // Update GUI - gtk_level_bar_set_shape(GTK_LEVEL_BAR(g_win.level_bar), bar_shape); + level_bar_set_shape(LEVEL_BAR(g_win.level_bar), bar_shape); // Save in DConf conf_save_int_value("level-bar-shape", bar_shape); @@ -981,7 +981,7 @@ void win_create_window() { } } - // Gtklevelbar/pulsebar: Indicator for sound amplitude (a GtkLevelBar widget). + // Levelbar/pulsebar: Indicator for sound amplitude. // Put it in a GtkEventBox so we can catch click events. GtkWidget *event_box = gtk_event_box_new(); @@ -992,24 +992,24 @@ void win_create_window() { gtk_widget_set_events(event_box, GDK_BUTTON_PRESS_MASK); g_signal_connect(event_box, "button_press_event", G_CALLBACK(win_level_bar_clicked), NULL); - // Create GtkLevelBar widget and put it in the GtkEventBox - g_win.level_bar = gtk_level_bar_new(); + // Create a LevelBar widget and put it in the GtkEventBox + g_win.level_bar = level_bar_new(); gtk_widget_show(g_win.level_bar); gtk_container_add(GTK_CONTAINER(event_box), g_win.level_bar); - gtk_level_bar_set_fraction(GTK_LEVEL_BAR(g_win.level_bar), 0.0); + level_bar_set_fraction(LEVEL_BAR(g_win.level_bar), 0.0); // How to draw the level bar? // Get from DConf gint bar_shape = SHAPE_CIRCLE; conf_get_int_value("level-bar-shape", &bar_shape); - gtk_level_bar_set_shape(GTK_LEVEL_BAR(g_win.level_bar), bar_shape); + level_bar_set_shape(LEVEL_BAR(g_win.level_bar), bar_shape); // Notice: User can change this by RIGHT-clicking on the level-bar // Type of value on the level bar? // Get from DConf gint bar_value = VALUE_NONE; conf_get_int_value("level-bar-value", &bar_value); - gtk_level_bar_set_value_type(GTK_LEVEL_BAR(g_win.level_bar), bar_value); + level_bar_set_value_type(LEVEL_BAR(g_win.level_bar), bar_value); // Notice: User can change this by LEFT-clicking on the level-bar // Should we show RMS or peak-value on the levelbar? Index: src/rec-window.h =================================================================== --- src/rec-window.h.orig +++ src/rec-window.h @@ -5,12 +5,12 @@ #include <gtk/gtk.h> #include <gdk/gdk.h> -#include "gtklevelbar.h" +#include "levelbar.h" // Width of the settings window #define PREF_WINDOW_WIDTH 300 -// PULSE_TYPE: Type of pulse on the gtklevelbar. +// PULSE_TYPE: Type of pulse on the levelbar. // Notice: This cannot be changed from the GUI. // Use Gsettings/dconf-editor and find "level-bar-pulse-type" in apps -> audio-recorder. typedef enum PULSE_TYPE {PULSE_PEAK, PULSE_RMS} PULSE_TYPE; Index: src/settings.c =================================================================== --- src/settings.c.orig +++ src/settings.c @@ -354,7 +354,7 @@ static void player_view_fill() { case COMM_PROGRAM: descr = g_strdup(item->description); - pixbuf = load_icon_pixbuf(item->icon_name); + pixbuf = load_icon_pixbuf(item->icon_name, 22); // Translators: This is a label/help text in the [Additional settings] dialog help_text = g_strdup(_("Select both output device (speakers) and webcam/microphone.")); Index: src/systray-icon.c =================================================================== --- src/systray-icon.c.orig +++ src/systray-icon.c @@ -101,7 +101,7 @@ void systray_set_menu_items2(gboolean sh static void systray_popup_menu_cb(GtkWidget * widget, gpointer data) { gchar *cmd = (gchar*)data; - LOG_SYSTRAY("%s: systray_popup_menu_cb: %s\n", INSTALLED_INDICATOR_TYPE, cmd); + LOG_SYSTRAY("systray_popup_menu_cb: %s\n", cmd); if (!g_strcmp0(cmd, "start")) { rec_manager_flip_recording(); Index: src/utility.c =================================================================== --- src/utility.c.orig +++ src/utility.c @@ -923,7 +923,7 @@ LBL_1: return value; } -GdkPixbuf *load_icon_pixbuf(gchar *icon_name) { +GdkPixbuf *load_icon_pixbuf(gchar *icon_name, guint _size) { // Load icon pixbuf from current icon theme. GdkPixbuf *pixbuf = NULL; @@ -935,11 +935,11 @@ GdkPixbuf *load_icon_pixbuf(gchar *icon_ GtkIconTheme *theme = gtk_icon_theme_get_default(); // Load icon from its theme - pixbuf = gtk_icon_theme_load_icon(theme, icon_name, 22, 0, NULL); + pixbuf = gtk_icon_theme_load_icon(theme, icon_name, _size, 0, NULL); // Got it? if (GDK_IS_PIXBUF(pixbuf)) { - return pixbuf; + goto LBL_1; } // Executable name != icon_name. @@ -969,13 +969,22 @@ GdkPixbuf *load_icon_pixbuf(gchar *icon_ if (icon_n) { // Load icon - pixbuf = gtk_icon_theme_load_icon(theme, icon_n, 22, 0, NULL); + pixbuf = gtk_icon_theme_load_icon(theme, icon_n, _size, 0, NULL); } g_free(icon_n); g_free(desktop_file); g_object_unref(app_info); +LBL_1: + + // Some icons are large. Force to _size. + if (GDK_IS_PIXBUF(pixbuf)) { + GdkPixbuf *img = gdk_pixbuf_scale_simple(pixbuf, _size, _size, GDK_INTERP_HYPER); + g_object_unref(pixbuf); + pixbuf = img; + } + // Caller should g_object_unref() this value return pixbuf; } Index: src/utility.h =================================================================== --- src/utility.h.orig +++ src/utility.h @@ -74,7 +74,7 @@ void str_list_print(gchar *prefix, GList gboolean str_lists_equal(GList *l1, GList *l2); gchar *read_value_from_keyfile(gchar *key_file, gchar *group_name, gchar *key_name); -GdkPixbuf *load_icon_pixbuf(gchar *icon_name); +GdkPixbuf *load_icon_pixbuf(gchar *icon_name, guint _size); void kill_frozen_instances(gchar *program_path, GPid preserve_pid); void kill_program_by_name(gchar *app_name, GPid preserve_pid);
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor