Changeset 4182


Ignore:
Timestamp:
2012-04-13 12:53:15 (2 years ago)
Author:
drobilla
Message:

Logarithmic slider support from Nick Lanham.

Location:
trunk/jalv
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/jalv/src/jalv_gtk2.c

    r4179 r4182  
    1818 
    1919#include <gtk/gtk.h> 
     20 
     21#include "lv2/lv2plug.in/ns/ext/port-props/port-props.h" 
    2022 
    2123#include "jalv_internal.h" 
     
    249251} 
    250252 
     253static gboolean 
     254log_slider_changed(GtkRange* range, gpointer data) 
     255{ 
     256    ((struct Port*)data)->control = expf(gtk_range_get_value(range)); 
     257    return FALSE; 
     258} 
     259 
    251260static void 
    252261combo_changed(GtkComboBox* box, gpointer data) 
     
    279288    return hval ? g_strdup(hval) : 
    280289        g_strdup_printf("%0.*f", gtk_scale_get_digits(scale), value); 
     290} 
     291 
     292static gchar* 
     293log_scale_format(GtkScale* scale, gdouble value, gpointer user_data) 
     294{ 
     295    return g_strdup_printf("%0.6g", exp(gtk_range_get_value(GTK_RANGE(scale)))); 
    281296} 
    282297 
     
    320335 
    321336static GtkWidget* 
     337make_log_slider(struct Port* port, GHashTable* points, 
     338                float min, float max, float deft) 
     339{ 
     340    float      lmin   = logf(min); 
     341    float      lmax   = logf(max); 
     342    float      ldft   = logf(deft); 
     343    GtkWidget* slider = gtk_hscale_new_with_range(lmin, lmax, 0.001); 
     344    gtk_scale_set_digits(GTK_SCALE(slider), 6); 
     345    gtk_range_set_value(GTK_RANGE(slider), ldft); 
     346    g_signal_connect(G_OBJECT(slider), 
     347                     "format-value", G_CALLBACK(log_scale_format), points); 
     348    g_signal_connect(G_OBJECT(slider), 
     349                     "value-changed", G_CALLBACK(log_slider_changed), port); 
     350 
     351    return slider; 
     352} 
     353 
     354static GtkWidget* 
    322355make_slider(struct Port* port, GHashTable* points, 
    323356            bool is_int, float min, float max, float deft) 
     
    355388    LilvNode*  lv2_toggled  = lilv_new_uri(jalv->world, LV2_CORE__toggled); 
    356389    LilvNode*  lv2_enum     = lilv_new_uri(jalv->world, LV2_CORE__enumeration); 
     390    LilvNode*  lv2_log      = lilv_new_uri(jalv->world, LV2_PORT_PROPS__logarithmic); 
    357391    LilvNode*  rdfs_comment = lilv_new_uri(jalv->world, LILV_NS_RDFS "comment"); 
    358392    GtkWidget* port_table   = gtk_table_new(jalv->num_ports, 2, false); 
     
    390424 
    391425        /* Make control */ 
    392         GtkWidget* control = NULL; 
     426        GtkWidget* control    = NULL; 
     427        bool       is_integer = lilv_port_has_property( 
     428            jalv->plugin, port, lv2_integer); 
    393429        if (lilv_port_has_property(jalv->plugin, port, lv2_toggled)) { 
    394430            control = make_toggle(&jalv->ports[i], defaults[i]); 
    395431        } else if (lilv_port_has_property(jalv->plugin, port, lv2_enum) 
    396                    || (lilv_port_has_property(jalv->plugin, port, lv2_integer) 
    397                        && points)) { 
     432                   || (is_integer && points && 
     433                       (g_hash_table_size(points) 
     434                        == (unsigned)(maxs[i] - mins[i] + 1)))) { 
    398435            control = make_combo(&jalv->ports[i], points, defaults[i]); 
     436        } else if (lilv_port_has_property(jalv->plugin, port, lv2_log)) { 
     437            control = make_log_slider(&jalv->ports[i], points, 
     438                                      mins[i], maxs[i], defaults[i]); 
    399439        } else { 
    400             control = make_slider( 
    401                 &jalv->ports[i], points, 
    402                 lilv_port_has_property(jalv->plugin, port, lv2_integer), 
    403                 mins[i], maxs[i], defaults[i]); 
     440            control = make_slider(&jalv->ports[i], points, is_integer, 
     441                                  mins[i], maxs[i], defaults[i]); 
    404442        } 
    405443        jalv->ports[i].widget = control; 
  • trunk/jalv/wscript

    r4175 r4182  
    3535    autowaf.display_header('Jalv Configuration') 
    3636 
    37     autowaf.check_pkg(conf, 'lv2', atleast_version='0.5.0', uselib_store='LV2') 
     37    autowaf.check_pkg(conf, 'lv2', atleast_version='0.6.0', uselib_store='LV2') 
    3838    autowaf.check_pkg(conf, 'lilv-0', uselib_store='LILV', 
    3939                      atleast_version='0.4.0', mandatory=True) 
     
    8989                  target       = 'jalv.gtk', 
    9090                  includes     = ['.', 'src'], 
    91                   lib          = ['pthread'], 
     91                  lib          = ['pthread', 'm'], 
    9292                  install_path = '${BINDIR}') 
    9393        autowaf.use_lib(bld, obj, libs + ' GTK2') 
Note: See TracChangeset for help on using the changeset viewer.