From 3964866aa078f628e0014f5cb4f2bb669ab67117 Mon Sep 17 00:00:00 2001 From: brummer10 Date: Sat, 13 Apr 2024 04:48:54 +0200 Subject: [PATCH] Fix some issues with clang --- trunk/libgxw/gxw/GxKnob.cpp | 544 +++++++++--------- trunk/src/LV2/DSP/gx_resampler.h | 3 +- trunk/src/LV2/faust-generated/gxechocat.cc | 2 +- trunk/src/LV2/gx_aclipper.lv2/wscript | 9 +- trunk/src/LV2/wscript | 9 +- trunk/src/NAM/wscript | 3 +- trunk/src/RTNeural/wscript | 3 +- .../gx_head/engine/gx_internal_plugins.cpp | 6 +- trunk/src/gx_head/gui/machine.cpp | 8 + trunk/waftools/cpu_optimization.py | 30 +- trunk/wscript | 24 +- 11 files changed, 341 insertions(+), 300 deletions(-) diff --git a/trunk/libgxw/gxw/GxKnob.cpp b/trunk/libgxw/gxw/GxKnob.cpp index 1c32ecda3..b9b559dd0 100644 --- a/trunk/libgxw/gxw/GxKnob.cpp +++ b/trunk/libgxw/gxw/GxKnob.cpp @@ -35,7 +35,7 @@ struct _GxKnobPrivate { - gint last_quadrant; + gint last_quadrant; }; static gboolean gx_knob_pointer_motion(GtkWidget *widget, GdkEventMotion *event); @@ -54,107 +54,107 @@ G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(GxKnob, gx_knob, GX_TYPE_REGLER) static void gx_knob_class_init(GxKnobClass *klass) { - GtkWidgetClass *widget_class = (GtkWidgetClass*) klass; - widget_class->motion_notify_event = gx_knob_pointer_motion; - widget_class->enter_notify_event = gx_knob_enter_in; - widget_class->leave_notify_event = gx_knob_leave_out; - widget_class->draw = gx_knob_draw; - widget_class->get_preferred_width = gx_knob_get_preferred_width; - widget_class->get_preferred_height = gx_knob_get_preferred_height; - widget_class->button_press_event = gx_knob_button_press; - - gtk_widget_class_set_css_name(widget_class, "gx-knob"); - - gtk_widget_class_install_style_property( - widget_class, - g_param_spec_int("arc-inset",P_("inset of arch"), - P_("Inset of the arc around the knob"), - 0, 100, 2, GParamFlags(G_PARAM_READABLE|G_PARAM_STATIC_STRINGS))); - + GtkWidgetClass *widget_class = (GtkWidgetClass*) klass; + widget_class->motion_notify_event = gx_knob_pointer_motion; + widget_class->enter_notify_event = gx_knob_enter_in; + widget_class->leave_notify_event = gx_knob_leave_out; + widget_class->draw = gx_knob_draw; + widget_class->get_preferred_width = gx_knob_get_preferred_width; + widget_class->get_preferred_height = gx_knob_get_preferred_height; + widget_class->button_press_event = gx_knob_button_press; + + gtk_widget_class_set_css_name(widget_class, "gx-knob"); + + gtk_widget_class_install_style_property( + widget_class, + g_param_spec_int("arc-inset",P_("inset of arch"), + P_("Inset of the arc around the knob"), + 0, 100, 2, GParamFlags(G_PARAM_READABLE|G_PARAM_STATIC_STRINGS))); + gtk_widget_class_install_style_property( - widget_class, - g_param_spec_int("framecount", - P_("Framecount"), - P_("Number of frames in the animation specified by the gtkrc"), - -1, 250, 0, - GParamFlags(G_PARAM_READABLE|G_PARAM_STATIC_STRINGS))); + widget_class, + g_param_spec_int("framecount", + P_("Framecount"), + P_("Number of frames in the animation specified by the gtkrc"), + -1, 250, 0, + GParamFlags(G_PARAM_READABLE|G_PARAM_STATIC_STRINGS))); gtk_widget_class_install_style_property( - widget_class, - g_param_spec_int("x-center", - P_("X-Center"), - P_("Horizontal position of the center, -1 for auto."), - -1, 250, -1, - GParamFlags(G_PARAM_READABLE|G_PARAM_STATIC_STRINGS))); + widget_class, + g_param_spec_int("x-center", + P_("X-Center"), + P_("Horizontal position of the center, -1 for auto."), + -1, 250, -1, + GParamFlags(G_PARAM_READABLE|G_PARAM_STATIC_STRINGS))); gtk_widget_class_install_style_property( - widget_class, - g_param_spec_int("y-center", - P_("Y-Center"), - P_("Vertical position of the center, -1 for auto."), - -1, 250, -1, - GParamFlags(G_PARAM_READABLE|G_PARAM_STATIC_STRINGS))); + widget_class, + g_param_spec_int("y-center", + P_("Y-Center"), + P_("Vertical position of the center, -1 for auto."), + -1, 250, -1, + GParamFlags(G_PARAM_READABLE|G_PARAM_STATIC_STRINGS))); gtk_widget_class_install_style_property( - widget_class, - g_param_spec_int("ring-radius", - P_("Ring-Radius"), - P_("Radius of the outer edge of the ring, -1 for max possible."), + widget_class, + g_param_spec_int("ring-radius", + P_("Ring-Radius"), + P_("Radius of the outer edge of the ring, -1 for max possible."), -1, 250, -1, - GParamFlags(G_PARAM_READABLE|G_PARAM_STATIC_STRINGS))); + GParamFlags(G_PARAM_READABLE|G_PARAM_STATIC_STRINGS))); gtk_widget_class_install_style_property( - widget_class, - g_param_spec_int("ring-width", - P_("Ring-Width"), - P_("Width of the outer ring"), - 0, 250, 2, - GParamFlags(G_PARAM_READABLE|G_PARAM_STATIC_STRINGS))); + widget_class, + g_param_spec_int("ring-width", + P_("Ring-Width"), + P_("Width of the outer ring"), + 0, 250, 2, + GParamFlags(G_PARAM_READABLE|G_PARAM_STATIC_STRINGS))); gtk_widget_class_install_style_property( - widget_class, - g_param_spec_int("ring-led-size", - P_("Ring-LED-Size"), - P_("Length of one LED in the ring, 0 for seamless ring."), - 0, 250, 3, - GParamFlags(G_PARAM_READABLE|G_PARAM_STATIC_STRINGS))); + widget_class, + g_param_spec_int("ring-led-size", + P_("Ring-LED-Size"), + P_("Length of one LED in the ring, 0 for seamless ring."), + 0, 250, 3, + GParamFlags(G_PARAM_READABLE|G_PARAM_STATIC_STRINGS))); gtk_widget_class_install_style_property( - widget_class, - g_param_spec_int("ring-led-distance", - P_("Ring-LED-Distance"), - P_("Distance between two LED in the ring"), - 0, 250, 2, - GParamFlags(G_PARAM_READABLE|G_PARAM_STATIC_STRINGS))); + widget_class, + g_param_spec_int("ring-led-distance", + P_("Ring-LED-Distance"), + P_("Distance between two LED in the ring"), + 0, 250, 2, + GParamFlags(G_PARAM_READABLE|G_PARAM_STATIC_STRINGS))); gtk_widget_class_install_style_property( - widget_class, - g_param_spec_int("indicator-radius", - P_("Indicator-Radius"), - P_("Radius of the outer edge of the indicator, -1 for half max."), - -1, 250, -1, - GParamFlags(G_PARAM_READABLE|G_PARAM_STATIC_STRINGS))); + widget_class, + g_param_spec_int("indicator-radius", + P_("Indicator-Radius"), + P_("Radius of the outer edge of the indicator, -1 for half max."), + -1, 250, -1, + GParamFlags(G_PARAM_READABLE|G_PARAM_STATIC_STRINGS))); gtk_widget_class_install_style_property( - widget_class, - g_param_spec_int("indicator-width", - P_("Indicator-Width"), - P_("Width of the indicator"), - 0, 250, 2, - GParamFlags(G_PARAM_READABLE|G_PARAM_STATIC_STRINGS))); + widget_class, + g_param_spec_int("indicator-width", + P_("Indicator-Width"), + P_("Width of the indicator"), + 0, 250, 2, + GParamFlags(G_PARAM_READABLE|G_PARAM_STATIC_STRINGS))); gtk_widget_class_install_style_property( - widget_class, - g_param_spec_int("indicator-length", - P_("Indicator-Length"), - P_("Length of the indicator"), - 0, 250, 5, - GParamFlags(G_PARAM_READABLE|G_PARAM_STATIC_STRINGS))); + widget_class, + g_param_spec_int("indicator-length", + P_("Indicator-Length"), + P_("Length of the indicator"), + 0, 250, 5, + GParamFlags(G_PARAM_READABLE|G_PARAM_STATIC_STRINGS))); } static void gx_knob_init(GxKnob *knob) { - knob->priv = (GxKnobPrivate*)gx_knob_get_instance_private(knob); + knob->priv = (GxKnobPrivate*)gx_knob_get_instance_private(knob); } static const double scale_zero = 40 * (M_PI/180); // defines "dead zone" for knobs void _gx_knob_draw_shtuff(GtkWidget *widget, cairo_t *cr, GdkRectangle *image_rect, gdouble knobstate) { - // add a value Indicator around the knob + // add a value Indicator around the knob gint x0 = 0; //image_rect->x; gint y0 = 0; //image_rect->y; @@ -186,8 +186,8 @@ void _gx_knob_draw_shtuff(GtkWidget *widget, cairo_t *cr, GdkRectangle *image_re ind_radius = minrad / 2; // precalcs - double angle = scale_zero + knobstate * 2 * (M_PI - scale_zero); - double add_angle = 90 * (M_PI / 180.); + double angle = scale_zero + knobstate * 2 * (M_PI - scale_zero); + double add_angle = 90 * (M_PI / 180.); double x1 = sin(angle) * -ind_radius; double y1 = cos(angle) * ind_radius; @@ -195,7 +195,7 @@ void _gx_knob_draw_shtuff(GtkWidget *widget, cairo_t *cr, GdkRectangle *image_re double y2 = cos(angle) * (ind_radius - ind_length); // dashed ring - if (ring_led_size) { + if (ring_led_size) { double dashes[] = {double(ring_led_size), double(ring_led_distance)}; cairo_set_dash(cr, dashes, sizeof(dashes)/sizeof(dashes[0]), 0); } @@ -261,242 +261,242 @@ void _gx_knob_draw_shtuff(GtkWidget *widget, cairo_t *cr, GdkRectangle *image_re void _gx_knob_expose(GtkWidget *widget, cairo_t *cr, GdkRectangle *image_rect, gdouble knobstate, GdkPixbuf *knob_image, gint framecount, int has_focus) { - if (framecount > 1) { + if (framecount > 1) { int findex; - framecount--; // zero based index - findex = (int)(framecount * knobstate); - gdk_cairo_set_source_pixbuf(cr, knob_image, image_rect->x - (image_rect->width * findex), image_rect->y); - cairo_rectangle(cr, image_rect->x, image_rect->y, image_rect->width, image_rect->height); - cairo_fill(cr); - } - else { - if (gtk_widget_has_focus(widget)) { - gtk_render_focus(gtk_widget_get_style_context(widget), cr, - image_rect->x, image_rect->y, image_rect->width, image_rect->height); - } - cairo_surface_t *surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, + framecount--; // zero based index + findex = (int)(framecount * knobstate); + gdk_cairo_set_source_pixbuf(cr, knob_image, image_rect->x - (image_rect->width * findex), image_rect->y); + cairo_rectangle(cr, image_rect->x, image_rect->y, image_rect->width, image_rect->height); + cairo_fill(cr); + } + else { + if (gtk_widget_has_focus(widget)) { + gtk_render_focus(gtk_widget_get_style_context(widget), cr, + image_rect->x, image_rect->y, image_rect->width, image_rect->height); + } + cairo_surface_t *surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, image_rect->width, image_rect->height); cairo_t *cr_s = cairo_create(surface); - gdk_cairo_set_source_pixbuf(cr_s, knob_image, 0, 0); - cairo_rectangle(cr_s, 0, 0, image_rect->width, image_rect->height); - cairo_fill(cr_s); + gdk_cairo_set_source_pixbuf(cr_s, knob_image, 0, 0); + cairo_rectangle(cr_s, 0, 0, image_rect->width, image_rect->height); + cairo_fill(cr_s); // shtuff - _gx_knob_draw_shtuff(widget, cr_s, image_rect, knobstate); - cairo_set_source_surface(cr, surface, image_rect->x, image_rect->y); + _gx_knob_draw_shtuff(widget, cr_s, image_rect, knobstate); + cairo_set_source_surface(cr, surface, image_rect->x, image_rect->y); cairo_paint(cr); cairo_surface_destroy (surface); - cairo_destroy(cr_s); - } + cairo_destroy(cr_s); + } - + } static void get_image_dimensions(GtkWidget *widget, GdkPixbuf *pb, - GdkRectangle *rect, gint *frame_count) + GdkRectangle *rect, gint *frame_count) { - gtk_widget_style_get(widget, "framecount", frame_count, NULL); - - rect->width = gdk_pixbuf_get_width(pb); - rect->height = gdk_pixbuf_get_height(pb); - - if (*frame_count >1) { - rect->width = (rect->width / *frame_count); - } - if (*frame_count == 0) {// rc directs to assume square frames - *frame_count = rect->width / rect->height; - if (rect->width > (2*rect->height)) { - rect->width = rect->height; - } - } + gtk_widget_style_get(widget, "framecount", frame_count, NULL); + + rect->width = gdk_pixbuf_get_width(pb); + rect->height = gdk_pixbuf_get_height(pb); + + if (*frame_count >1) { + rect->width = (rect->width / *frame_count); + } + if (*frame_count == 0) {// rc directs to assume square frames + *frame_count = rect->width / rect->height; + if (rect->width > (2*rect->height)) { + rect->width = rect->height; + } + } } gboolean _gx_knob_pointer_event(GtkWidget *widget, gdouble x, gdouble y, const gchar *icon, gboolean drag, int state, int button, GdkEventButton *event) { - int fcount; - bool finemode = ((state & (GDK_CONTROL_MASK|GDK_SHIFT_MASK)) != 0); - GdkRectangle image_rect, value_rect; - - GxKnob *knob = GX_KNOB(widget); - GdkPixbuf *pb = gtk_icon_theme_load_icon(gtk_icon_theme_get_default(), - icon, -1, - GTK_ICON_LOOKUP_GENERIC_FALLBACK, nullptr); - GxKnobPrivate *priv = knob->priv; - - get_image_dimensions (widget, pb, &image_rect, &fcount); - - g_clear_object(&pb); - _gx_regler_get_positions(GX_REGLER(widget), &image_rect, &value_rect, false); - if (!drag) { - if (_gx_regler_check_display_popup(GX_REGLER(widget), &image_rect, &value_rect, event)) { - return FALSE; - } - } - static double last_y = 2e20; - GtkAdjustment *adj = gtk_range_get_adjustment(GTK_RANGE(widget)); - gdouble lower = gtk_adjustment_get_lower(adj); - gdouble upper = gtk_adjustment_get_upper(adj); - double radius = min(image_rect.width, image_rect.height) / 2; - double posx = radius - x + image_rect.x; // x axis right -> left - double posy = radius - y + image_rect.y; // y axis top -> bottom - double value; - if (!drag) { - if (event && event->type == GDK_2BUTTON_PRESS) { - last_y = 2e20; - } else { - last_y = posy; - return TRUE; - } - } - if (last_y < 1e20) { // in drag started in linear mode - const double scaling = 0.005; - double scal = (finemode ? scaling*0.1 : scaling); - value = (posy - last_y) * scal; - last_y = posy; - gdouble adj_value = gtk_adjustment_get_value(adj); - gtk_range_set_value(GTK_RANGE(widget), adj_value + value * (upper - lower)); - return TRUE; - } - - double angle = atan2(-posx, posy) + M_PI; // clockwise, zero at 6 o'clock, 0 .. 2*M_PI - if (drag) { - // block "forbidden zone" and direct moves between quadrant 1 and 4 - int quadrant = 1 + (int)(angle/M_PI_2); - if (priv->last_quadrant == 1 && (quadrant == 3 || quadrant == 4)) { - angle = scale_zero; - } else if (priv->last_quadrant == 4 && (quadrant == 1 || quadrant == 2)) { - angle = 2*M_PI - scale_zero; - } else { - if (angle < scale_zero) { - angle = scale_zero; - } else if (angle > 2*M_PI - scale_zero) { - angle = 2*M_PI - scale_zero; - } - priv->last_quadrant = quadrant; - } - } else { - if (angle < scale_zero) { - angle = scale_zero; - } else if (angle > 2*M_PI - scale_zero) { - angle = 2*M_PI - scale_zero; - } - priv->last_quadrant = 0; - } - angle = (angle - scale_zero) / (2 * (M_PI-scale_zero)); // normalize to 0..1 - gtk_range_set_value(GTK_RANGE(widget), lower + angle * (upper - lower)); - return TRUE; + int fcount; + bool finemode = ((state & (GDK_CONTROL_MASK|GDK_SHIFT_MASK)) != 0); + GdkRectangle image_rect, value_rect; + + GxKnob *knob = GX_KNOB(widget); + GdkPixbuf *pb = gtk_icon_theme_load_icon(gtk_icon_theme_get_default(), + icon, -1, + GTK_ICON_LOOKUP_GENERIC_FALLBACK, nullptr); + GxKnobPrivate *priv = knob->priv; + + get_image_dimensions (widget, pb, &image_rect, &fcount); + + g_clear_object(&pb); + _gx_regler_get_positions(GX_REGLER(widget), &image_rect, &value_rect, false); + if (!drag) { + if (_gx_regler_check_display_popup(GX_REGLER(widget), &image_rect, &value_rect, event)) { + return FALSE; + } + } + static double last_y = 2e20; + GtkAdjustment *adj = gtk_range_get_adjustment(GTK_RANGE(widget)); + gdouble lower = gtk_adjustment_get_lower(adj); + gdouble upper = gtk_adjustment_get_upper(adj); + double radius = min(image_rect.width, image_rect.height) / 2; + double posx = radius - x + image_rect.x; // x axis right -> left + double posy = radius - y + image_rect.y; // y axis top -> bottom + double value; + if (!drag) { + if (event && event->type == GDK_2BUTTON_PRESS) { + last_y = 2e20; + } else { + last_y = posy; + return TRUE; + } + } + if (last_y < 1e20) { // in drag started in linear mode + const double scaling = 0.005; + double scal = (finemode ? scaling*0.1 : scaling); + value = (posy - last_y) * scal; + last_y = posy; + gdouble adj_value = gtk_adjustment_get_value(adj); + gtk_range_set_value(GTK_RANGE(widget), adj_value + value * (upper - lower)); + return TRUE; + } + + double angle = atan2(-posx, posy) + M_PI; // clockwise, zero at 6 o'clock, 0 .. 2*M_PI + if (drag) { + // block "forbidden zone" and direct moves between quadrant 1 and 4 + int quadrant = 1 + (int)(angle/M_PI_2); + if (priv->last_quadrant == 1 && (quadrant == 3 || quadrant == 4)) { + angle = scale_zero; + } else if (priv->last_quadrant == 4 && (quadrant == 1 || quadrant == 2)) { + angle = 2*M_PI - scale_zero; + } else { + if (angle < scale_zero) { + angle = scale_zero; + } else if (angle > 2*M_PI - scale_zero) { + angle = 2*M_PI - scale_zero; + } + priv->last_quadrant = quadrant; + } + } else { + if (angle < scale_zero) { + angle = scale_zero; + } else if (angle > 2*M_PI - scale_zero) { + angle = 2*M_PI - scale_zero; + } + priv->last_quadrant = 0; + } + angle = (angle - scale_zero) / (2 * (M_PI-scale_zero)); // normalize to 0..1 + gtk_range_set_value(GTK_RANGE(widget), lower + angle * (upper - lower)); + return TRUE; } static gboolean gx_knob_pointer_motion(GtkWidget *widget, GdkEventMotion *event) { - g_assert(GX_IS_KNOB(widget)); - if (!gtk_widget_has_grab(widget)) { - return FALSE; - } - gdk_event_request_motions (event); - _gx_knob_pointer_event(widget, event->x, event->y, get_stock_id(widget), TRUE, event->state, 0, NULL); - return FALSE; + g_assert(GX_IS_KNOB(widget)); + if (!gtk_widget_has_grab(widget)) { + return FALSE; + } + gdk_event_request_motions (event); + _gx_knob_pointer_event(widget, event->x, event->y, get_stock_id(widget), TRUE, event->state, 0, NULL); + return FALSE; } static gboolean gx_knob_enter_in (GtkWidget *widget, GdkEventCrossing *event) { - g_assert(GX_IS_KNOB(widget)); - if (gtk_widget_has_grab(widget) || gtk_widget_has_focus(widget)== TRUE) { - return TRUE; - } - gint fcount; - gtk_widget_style_get(widget, "framecount", &fcount, NULL); - if (fcount == -1) { - gtk_widget_queue_draw(widget); - } - return TRUE; + g_assert(GX_IS_KNOB(widget)); + if (gtk_widget_has_grab(widget) || gtk_widget_has_focus(widget)== TRUE) { + return TRUE; + } + gint fcount; + gtk_widget_style_get(widget, "framecount", &fcount, NULL); + if (fcount == -1) { + gtk_widget_queue_draw(widget); + } + return TRUE; } static gboolean gx_knob_leave_out (GtkWidget *widget, GdkEventCrossing *event) { - g_assert(GX_IS_KNOB(widget)); - if (gtk_widget_has_grab(widget) || gtk_widget_has_focus(widget)== TRUE) { - return TRUE; - } - gint fcount; - gtk_widget_style_get(widget, "framecount", &fcount, NULL); - if (fcount == -1) { - gtk_widget_queue_draw(widget); - } - return TRUE; + g_assert(GX_IS_KNOB(widget)); + if (gtk_widget_has_grab(widget) || gtk_widget_has_focus(widget)== TRUE) { + return TRUE; + } + gint fcount; + gtk_widget_style_get(widget, "framecount", &fcount, NULL); + if (fcount == -1) { + gtk_widget_queue_draw(widget); + } + return TRUE; } static void gx_knob_get_preferred_width(GtkWidget *widget, gint *min_width, gint *natural_width) { - gint width, height; - gx_knob_size_request(widget, &width, &height); - - if (min_width) { - *min_width = width; - } - if (natural_width) { - *natural_width = width; - } + gint width, height; + gx_knob_size_request(widget, &width, &height); + + if (min_width) { + *min_width = width; + } + if (natural_width) { + *natural_width = width; + } } static void gx_knob_get_preferred_height(GtkWidget *widget, gint *min_height, gint *natural_height) { - gint width, height; - gx_knob_size_request(widget, &width, &height); - - if (min_height) { - *min_height = height; - } - if (natural_height) { - *natural_height = height; - } + gint width, height; + gx_knob_size_request(widget, &width, &height); + + if (min_height) { + *min_height = height; + } + if (natural_height) { + *natural_height = height; + } } static void gx_knob_size_request (GtkWidget *widget, gint *width, gint *height) { - g_assert(GX_IS_KNOB(widget)); - GdkPixbuf *pb = gtk_icon_theme_load_icon(gtk_icon_theme_get_default(), - get_stock_id(widget), -1, - GTK_ICON_LOOKUP_GENERIC_FALLBACK, nullptr); - if (GDK_IS_PIXBUF (pb)) { - gint fcount; - GdkRectangle rect; - get_image_dimensions (widget, pb, &rect, &fcount); - *width = rect.width; - *height = rect.height; - _gx_regler_calc_size_request(GX_REGLER(widget), width, height, TRUE); - g_clear_object(&pb); - } + g_assert(GX_IS_KNOB(widget)); + GdkPixbuf *pb = gtk_icon_theme_load_icon(gtk_icon_theme_get_default(), + get_stock_id(widget), -1, + GTK_ICON_LOOKUP_GENERIC_FALLBACK, nullptr); + if (GDK_IS_PIXBUF (pb)) { + gint fcount; + GdkRectangle rect; + get_image_dimensions (widget, pb, &rect, &fcount); + *width = rect.width; + *height = rect.height; + _gx_regler_calc_size_request(GX_REGLER(widget), width, height, TRUE); + g_clear_object(&pb); + } } static gboolean gx_knob_draw(GtkWidget *widget, cairo_t *cr) { - g_assert(GX_IS_KNOB(widget)); - GdkRectangle image_rect, value_rect; - GdkPixbuf *pb = gtk_icon_theme_load_icon(gtk_icon_theme_get_default(), - get_stock_id(widget), -1, - GTK_ICON_LOOKUP_GENERIC_FALLBACK, nullptr); - if (GDK_IS_PIXBUF (pb)) { - gint fcount; - get_image_dimensions (widget, pb, &image_rect, &fcount); - gdouble knobstate = _gx_regler_get_step_pos(GX_REGLER(widget), 1); - _gx_regler_get_positions(GX_REGLER(widget), &image_rect, &value_rect, false); - _gx_knob_expose(widget, cr, &image_rect, knobstate, pb, fcount, gtk_widget_has_focus(widget)); - _gx_regler_display_value(GX_REGLER(widget), cr, &value_rect); - g_clear_object(&pb); - } - return FALSE; + g_assert(GX_IS_KNOB(widget)); + GdkRectangle image_rect, value_rect; + GdkPixbuf *pb = gtk_icon_theme_load_icon(gtk_icon_theme_get_default(), + get_stock_id(widget), -1, + GTK_ICON_LOOKUP_GENERIC_FALLBACK, nullptr); + if (GDK_IS_PIXBUF (pb)) { + gint fcount; + get_image_dimensions (widget, pb, &image_rect, &fcount); + gdouble knobstate = _gx_regler_get_step_pos(GX_REGLER(widget), 1); + _gx_regler_get_positions(GX_REGLER(widget), &image_rect, &value_rect, false); + _gx_knob_expose(widget, cr, &image_rect, knobstate, pb, fcount, gtk_widget_has_focus(widget)); + _gx_regler_display_value(GX_REGLER(widget), cr, &value_rect); + g_clear_object(&pb); + } + return FALSE; } static gboolean gx_knob_button_press (GtkWidget *widget, GdkEventButton *event) { - g_assert(GX_IS_KNOB(widget)); - if (event->button != 1 && event->button != 3) { - return FALSE; - } - gtk_widget_grab_focus(widget); - if (_gx_knob_pointer_event(widget, event->x, event->y, get_stock_id(widget), FALSE, event->state, event->button, event)) { - gtk_grab_add(widget); - } - return FALSE; + g_assert(GX_IS_KNOB(widget)); + if (event->button != 1 && event->button != 3) { + return FALSE; + } + gtk_widget_grab_focus(widget); + if (_gx_knob_pointer_event(widget, event->x, event->y, get_stock_id(widget), FALSE, event->state, event->button, event)) { + gtk_grab_add(widget); + } + return FALSE; } diff --git a/trunk/src/LV2/DSP/gx_resampler.h b/trunk/src/LV2/DSP/gx_resampler.h index 2021797e7..33d003160 100644 --- a/trunk/src/LV2/DSP/gx_resampler.h +++ b/trunk/src/LV2/DSP/gx_resampler.h @@ -39,13 +39,12 @@ class FixedRateResampler { private: Resampler r_up, r_down; int inputRate, outputRate; - int last_in_count; public: int setup(int _inputRate, int _outputRate); int up(int count, float *input, float *output); void down(float *input, float *output); int max_out_count(int in_count) { - return static_cast(ceil((in_count*static_cast(outputRate))/inputRate)); } + return static_cast(ceil((in_count*static_cast(outputRate))/inputRate)); } }; class SimpleResampler diff --git a/trunk/src/LV2/faust-generated/gxechocat.cc b/trunk/src/LV2/faust-generated/gxechocat.cc index dfd97d767..84e345e5a 100644 --- a/trunk/src/LV2/faust-generated/gxechocat.cc +++ b/trunk/src/LV2/faust-generated/gxechocat.cc @@ -746,7 +746,7 @@ void always_inline Dsp::compute(int count, FAUSTFLOAT *input0, FAUSTFLOAT *outpu double fTemp61 = fVec14[(IOTA0 - iTemp15) & 1048575]; double fTemp62 = fVec14[(IOTA0 - iTemp19) & 1048575]; double fTemp63 = fVec14[(IOTA0 - iTemp23) & 1048575]; - double fTemp64 = fSlow8 * (fTemp63 - fRec28[0] * (fTemp63 - fVec14[(IOTA0 - iTemp22) & 1048575])) + fSlow6 * (fTemp62 + fRec24[0] * (fVec14[(IOTA0 - iTemp18) & 1048575] - fTemp62)) + fSlow4 * (fTemp61 - fRec20[0] * (fTemp61 - fVec14[(IOTA0 - iTemp14) & 1048575])); + double fTemp64 = fSlow8 * (fTemp63 - fRec28[0] * (fTemp63 - fVec14[(IOTA0 - iTemp22) & 1048575])) + fSlow6 * (fTemp62 - fRec24[0] * (fTemp62 - fVec14[(IOTA0 - iTemp18) & 1048575])) + fSlow4 * (fTemp61 - fRec20[0] * (fTemp61 - fVec14[(IOTA0 - iTemp14) & 1048575])); fVec15[0] = fTemp64; fRec67[0] = -(fConst100 * (fConst99 * fRec67[1] - fConst97 * (fTemp64 + fVec15[1]))); fRec66[0] = fRec67[0] + 0.995 * fRec66[1] - fRec67[1]; diff --git a/trunk/src/LV2/gx_aclipper.lv2/wscript b/trunk/src/LV2/gx_aclipper.lv2/wscript index 3ae33310f..a3998fa88 100644 --- a/trunk/src/LV2/gx_aclipper.lv2/wscript +++ b/trunk/src/LV2/gx_aclipper.lv2/wscript @@ -7,17 +7,22 @@ def configure(conf): def build(bld): lv2_base = 'gx_aclipper' + if any('clang' not in s for s in bld.env["CXX"]): + gccflags = ['-Wl,-z,noexecstack','-Wl,-z,relro,-z,now','-Wl,--exclude-libs,ALL'] + else: + gccflags = [] + bld.lv2( lv2_base = lv2_base, source = ['gx_aclipper.cpp'], includes = ['../faust','./', '../DSP'], - cxxflags=['-fvisibility=hidden','-Wl,-z,noexecstack','-Wl,-z,relro,-z,now','-Wl,--exclude-libs,ALL'], + cxxflags=['-fvisibility=hidden'] + gccflags, use = ['LV2CORE','GX_RESAMPLER'], ) bld.lv2_gui( lv2_base = lv2_base, source = ' gx_aclipper_ui.cpp', includes = ['../xputty/header','../xputty/header/widgets','../xputty/resources','../xputty/lv2_plugin'], - cxxflags=['-fvisibility=hidden','-Wl,-z,noexecstack','-Wl,-z,relro,-z,now','-Wl,--exclude-libs,ALL'], + cxxflags=['-fvisibility=hidden'] + gccflags, use = ['xcairo','X11', 'CAIRO','LV2CORE'], ) diff --git a/trunk/src/LV2/wscript b/trunk/src/LV2/wscript index ec0c5030a..4c1a24c69 100644 --- a/trunk/src/LV2/wscript +++ b/trunk/src/LV2/wscript @@ -113,6 +113,11 @@ def build(bld): if not bld.env.LV2: return + if any('clang' not in s for s in bld.env["CXX"]): + gccflags = ['-Wl,--exclude-libs,ALL'] + else: + gccflags = [] + bld.recurse('faust') bld.recurse('xputty/resources') bld.add_group() @@ -121,12 +126,12 @@ def build(bld): bld.objects(name='GX_CONVOLVER', source='DSP/gx_convolver.cc', includes='DSP', - cxxflags=['-fvisibility=hidden','-fPIC','-Wl,--exclude-libs,ALL'], + cxxflags=['-fvisibility=hidden','-fPIC'] + gccflags, use=['ZITA_CONVOLVER','GX_RESAMPLER'], ) bld.objects(name='GX_RESAMPLER', source='DSP/gx_resampler.cc', - cxxflags=['-fvisibility=hidden','-fPIC','-Wl,--exclude-libs,ALL'], + cxxflags=['-fvisibility=hidden','-fPIC'] + gccflags, use=['ZITA_RESAMPLER'], ) diff --git a/trunk/src/NAM/wscript b/trunk/src/NAM/wscript index c8918426e..d82c6fc94 100644 --- a/trunk/src/NAM/wscript +++ b/trunk/src/NAM/wscript @@ -32,7 +32,8 @@ def build(bld): cxx_flags = ["-std=c++17", "-Wno-sign-compare", "-Ofast"] if not bld.env['LTO']: - cxx_flags.append ("-fno-fat-lto-objects") + if any('clang' not in s for s in bld.env["CXX"]): + cxx_flags.append ("-fno-fat-lto-objects") bld.stlib( name = 'libnam', diff --git a/trunk/src/RTNeural/wscript b/trunk/src/RTNeural/wscript index 68e8a58db..95b8bf3e0 100644 --- a/trunk/src/RTNeural/wscript +++ b/trunk/src/RTNeural/wscript @@ -34,7 +34,8 @@ def build(bld): ] if not bld.env['LTO']: - cxx_flags.append ("-fno-fat-lto-objects") + if any('clang' not in s for s in bld.env["CXX"]): + cxx_flags.append ("-fno-fat-lto-objects") bld.stlib( name = 'librtneural', diff --git a/trunk/src/gx_head/engine/gx_internal_plugins.cpp b/trunk/src/gx_head/engine/gx_internal_plugins.cpp index 8dd9c8b2b..7b1a19777 100644 --- a/trunk/src/gx_head/engine/gx_internal_plugins.cpp +++ b/trunk/src/gx_head/engine/gx_internal_plugins.cpp @@ -2128,7 +2128,7 @@ void NeuralAmpMulti::compute(int count, float *input0, float *output0) } if (need_bresample == 1) { ReCountb = smpb.up(count, bufb, bufb1); - } else if (need_aresample == 2) { + } else if (need_bresample == 2) { smpb.down(bufb, bufb1); } else { memcpy(bufb1, bufb, ReCountb * sizeof(float)); @@ -2236,7 +2236,7 @@ void NeuralAmpMulti::load_nam_bfile() { if (modelb) { if (modelb->HasLoudness()) loudnessb = modelb->GetLoudness(); - mbSampleRate = static_cast(modela->GetExpectedSampleRate()); + mbSampleRate = static_cast(modelb->GetExpectedSampleRate()); //model->SetLoudness(-15.0); if (mbSampleRate <= 0) mbSampleRate = 48000; if (mbSampleRate > fSampleRate) { @@ -2646,7 +2646,7 @@ void RtNeuralMulti::compute(int count, float *input0, float *output0) } if (need_bresample == 1) { ReCountb = smpb.up(count, bufb, bufb1); - } else if (need_aresample == 2) { + } else if (need_bresample == 2) { smpb.down(bufb, bufb1); } else { memcpy(bufb1, bufb, ReCountb * sizeof(float)); diff --git a/trunk/src/gx_head/gui/machine.cpp b/trunk/src/gx_head/gui/machine.cpp index 6b2c6dbae..be216ff26 100644 --- a/trunk/src/gx_head/gui/machine.cpp +++ b/trunk/src/gx_head/gui/machine.cpp @@ -66,10 +66,14 @@ void lock_rt_memory() { { __rt_text__start, __rt_text__end - __rt_text__start }, { __rt_data__start, __rt_data__end - __rt_data__start }, }; +#ifndef NDEBUG long int total_size = 0; +#endif set_memory_allocation(); for (unsigned int i = 0; i < sizeof(regions)/sizeof(regions[0]); i++) { +#ifndef NDEBUG total_size +=regions[i].len; +#endif if (mlock(regions[i].start, regions[i].len) != 0) { gx_print_error( "system init", @@ -95,9 +99,13 @@ void unlock_rt_memory() { { __rt_text__start, __rt_text__end - __rt_text__start }, { __rt_data__start, __rt_data__end - __rt_data__start }, }; +#ifndef NDEBUG long int total_size = 0; +#endif for (unsigned int i = 0; i < sizeof(regions)/sizeof(regions[0]); i++) { +#ifndef NDEBUG total_size +=regions[i].len; +#endif if (munlock(regions[i].start, regions[i].len) != 0) { gx_print_error( "system init", diff --git a/trunk/waftools/cpu_optimization.py b/trunk/waftools/cpu_optimization.py index ae455ad53..ec1cf8bad 100644 --- a/trunk/waftools/cpu_optimization.py +++ b/trunk/waftools/cpu_optimization.py @@ -1,4 +1,5 @@ import os +import re def options(opt): comp = opt.get_option_group("Configuration options") @@ -60,7 +61,15 @@ def check_cloop(conf): } """ msg = "Checking for libcloog-ppl0" - conf.check_cxx(msg = msg, fragment=code, cxxflags=[ '-O3', '-ftree-loop-linear'], define_name="NOOPT") + conf.check_cxx(msg = msg, fragment=code, cxxflags=[ '-O3', '-ftree-loop-linear'], define_name="NOOPT", mandatory=0) + +def check_v3 (conf): + if conf.env['IS_LINUX']: + s = conf.cmd_and_log('/usr/lib64/ld-linux-x86-64.so.2'+' --help | grep x86-64-v3', quiet=True) + if "x86-64-v3" in s: + return True + return False + def append_optimization_flags(conf, cxxflags): cpu_model = None @@ -84,7 +93,9 @@ def append_optimization_flags(conf, cxxflags): return None model = cpu_model.split() arch = os.uname()[4] - if "AMD" in model and "x86_64" in arch: + if check_v3(conf): + cxxflags.append ("-march=x86-64-v3") + elif "AMD" in model and "x86_64" in arch: cxxflags.append ("-march=k8") elif "AMD" in model and "Sempron(tm)" in model: cxxflags.append ("-march=native") @@ -140,13 +151,15 @@ def append_optimization_flags(conf, cxxflags): if not conf.options.debug: cxxflags.append ("-fomit-frame-pointer") - cxxflags.append ("-ftree-loop-linear") + if conf.env['NOOPT']: + cxxflags.append ("-ftree-loop-linear") #cxxflags.append ("-ffinite-math-only") cxxflags.append ("-fno-math-errno") cxxflags.append ("-fno-signed-zeros") #cxxflags.append ("-ffast-math") # quicker but doesn't seem to work (difference in sound output) #cxxflags.append ("-malign-double") - cxxflags.append ("-fstrength-reduce") + if any('clang' not in s for s in conf.env["CXX"]): + cxxflags.append ("-fstrength-reduce") cxxflags.append ("-pipe") return cpu_model @@ -164,13 +177,14 @@ def configure(conf): cpu_model = None if opt.optimization: check_cloop(conf) - if conf.env['NOOPT']: - conf.env['OPT'] = False - cpu_model = append_optimization_flags(conf, cxxflags) + #if conf.env['NOOPT']: + conf.env['OPT'] = False + cpu_model = append_optimization_flags(conf, cxxflags) if any(x.startswith('-flto') for x in cxxflags): conf.env['LTO'] = True - cxxflags.append ("-ffat-lto-objects") + if any('clang' not in s for s in conf.env["CXX"]): + cxxflags.append ("-ffat-lto-objects") cxxflags.append ("-std=c++17") # cxxflags.append ("-Ofast") diff --git a/trunk/wscript b/trunk/wscript index f870287b0..de2f12095 100644 --- a/trunk/wscript +++ b/trunk/wscript @@ -25,8 +25,8 @@ Options.OptionsContext.gxload = \ Build.BuildContext.gxload = \ lambda ctx, tool: ctx.load(tool, tooldir='waftools') -check_in_faust_version = '2.69.3' # this Faust should be used for checked in generated files -other_faust_versions = ['2.37.3', '2.33.1', '2.30.5','2.40.0', '2.54.9', '2.60.3','2.68.1'] # other Faust versions known to work +check_in_faust_version = '2.70.3' # this Faust should be used for checked in generated files +other_faust_versions = ['2.37.3', '2.33.1', '2.30.5','2.40.0', '2.54.9', '2.60.3','2.68.1','2.69.3'] # other Faust versions known to work g_maxlen = 40 # maximum width of message for 2-column display @@ -301,12 +301,15 @@ def configure(conf): conf.env['LINKFLAGS'] = conf.env['LDFLAGS'] # os specific: common settings - conf.env['OS_LV2_CXXFLAGS'] = ['-fvisibility=hidden','-Wl,--exclude-libs,ALL'] + conf.env['OS_LV2_CXXFLAGS'] = ['-fvisibility=hidden'] + if any('clang' not in s for s in conf.env["CXX"]): + conf.env.append_value('OS_LV2_CXXFLAGS',['-Wl,--exclude-libs,ALL']) conf.env['OS_SNDFILE_CFGFLAGS'] = ['--cflags','--libs','sndfile >= 1.0.17'] conf.env['OS_CAIRO_CFGFLAGS'] = '--cflags --libs' conf.env['OS_RESOURCES_LDFLAGS'] = '-z noexecstack' if conf.env['OS'] != 'win32': - conf.env.append_value('OS_LV2_CXXFLAGS', ['-Wl,-z,relro,-z,now']) + if any('clang' not in s for s in conf.env["CXX"]): + conf.env.append_value('OS_LV2_CXXFLAGS', ['-Wl,-z,relro,-z,now']) else: # MSWin changes conf.env.prepend_value('OS_SNDFILE_CFGFLAGS', ['--static']) @@ -443,7 +446,7 @@ def configure(conf): if conf.cpu_model: display_msg("CPU version" , "%s" % conf.cpu_model, "CYAN") if not conf.env['NOOPT'] and opt.optimization: - display_msg("package libcloog-ppl0 not found", "optimization is disabled", "RED") + display_msg("package libcloog-ppl0 not found", "loop optimization is disabled", "RED") display_msg("C++ flags", " ".join(conf.env['CXXFLAGS']), 'CYAN') display_msg("Link flags", " ".join(conf.env['LINKFLAGS']), 'CYAN') display_msg("Compiler %s version" %conf.env["CXX"], "%s" % ".".join(conf.env["CC_VERSION"]), "CYAN") @@ -549,19 +552,24 @@ def build(bld): if bld.env['INTLTOOL']: bld(name='i18n', features='intltool_po', appname=APPNAME, podir='po') + if any('clang' not in s for s in bld.env["CXX"]): + gccflags = ['-Wl,--exclude-libs,ALL'] + else: + gccflags = [] + if bld.env['HAVE_CONVOLVER_FFMPEG']: bld.objects(name='ZITA_CONVOLVER', source = 'src/zita-convolver-ffmpeg/zita-convolver.cc', includes = 'src/headers', export_includes = 'src/zita-convolver-ffmpeg', use = ['LIBAVCODEC','LIBAVUTIL'], - cxxflags = bld.env.CXXFLAGS_cxxshlib + ['-fvisibility=hidden','-Wl,--exclude-libs,ALL'], + cxxflags = bld.env.CXXFLAGS_cxxshlib + ['-fvisibility=hidden'] + gccflags, ) elif not bld.env['HAVE_ZITA_CONVOLVER']: bld.objects(name='ZITA_CONVOLVER', source='src/zita-convolver/zita-convolver.cc', export_includes = 'src/zita-convolver', - cxxflags = bld.env.CXXFLAGS_cxxshlib + ['-fvisibility=hidden','-Wl,--exclude-libs,ALL'], + cxxflags = bld.env.CXXFLAGS_cxxshlib + ['-fvisibility=hidden'] + gccflags, use = ['FFTW3','PTHREAD'], ) if not bld.env['HAVE_ZITA_RESAMPLER']: @@ -573,7 +581,7 @@ def build(bld): includes = 'src/zita-resampler-1.1.0', export_includes = 'src/zita-resampler-1.1.0', use=['PTHREAD'], - cxxflags = bld.env.CXXFLAGS_cxxshlib + ['-fvisibility=hidden','-Wl,--exclude-libs,ALL'], + cxxflags = bld.env.CXXFLAGS_cxxshlib + ['-fvisibility=hidden'] + gccflags, ) # process subfolders from here bld.recurse('libgxw/gxw')