X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Futils.cc;h=a8b46f1f57853496f91d028ce831208b2e5961ae;hb=b49e3982502f5e483422960dc11be967d7c790f4;hp=8b05eb7108a77cd56d13612058792e7685fe7304;hpb=f0fcda204444922fc0e1261929aa6fdb84412036;p=ardour.git diff --git a/gtk2_ardour/utils.cc b/gtk2_ardour/utils.cc index 8b05eb7108..a8b46f1f57 100644 --- a/gtk2_ardour/utils.cc +++ b/gtk2_ardour/utils.cc @@ -28,10 +28,10 @@ #include #include #include +#include #include #include #include -#include #include #include #include @@ -44,8 +44,8 @@ #include #include "ardour/rc_configuration.h" - #include "ardour/filesystem_paths.h" +#include "canvas/item.h" #include "ardour_ui.h" #include "debug.h" @@ -54,7 +54,6 @@ #include "utils.h" #include "i18n.h" #include "rgb_macros.h" -#include "canvas_impl.h" #include "gui_thread.h" using namespace std; @@ -65,6 +64,10 @@ using Gtkmm2ext::Keyboard; sigc::signal DPIReset; +#ifdef PLATFORM_WINDOWS +#define random() rand() +#endif + /** Add an element to a menu, settings its sensitivity. * @param m Menu to add to. @@ -201,18 +204,6 @@ xpm2rgba (const char** xpm, uint32_t& w, uint32_t& h) return (savergb); } -ArdourCanvas::Points* -get_canvas_points (string /*who*/, uint32_t npoints) -{ - // cerr << who << ": wants " << npoints << " canvas points" << endl; -#ifdef TRAP_EXCESSIVE_POINT_REQUESTS - if (npoints > (uint32_t) gdk_screen_width() + 4) { - abort (); - } -#endif - return new ArdourCanvas::Points (npoints); -} - Pango::FontDescription get_font_for_style (string widgetname) { @@ -348,12 +339,6 @@ rgba_p_from_style (string style, float *r, float *g, float *b, string attr, int return true; } -bool -canvas_item_visible (ArdourCanvas::Item* item) -{ - return (item->gobj()->object.flags & GNOME_CANVAS_ITEM_VISIBLE) ? true : false; -} - void set_color (Gdk::Color& c, int rgb) { @@ -363,8 +348,14 @@ set_color (Gdk::Color& c, int rgb) bool relay_key_press (GdkEventKey* ev, Gtk::Window* win) { + PublicEditor& ed (PublicEditor::instance()); + if (!key_press_focus_accelerator_handler (*win, ev)) { - return PublicEditor::instance().on_key_press_event(ev); + if (&ed == 0) { + /* early key press in pre-main-window-dialogs, no editor yet */ + return false; + } + return ed.on_key_press_event(ev); } else { return true; } @@ -395,7 +386,7 @@ emulate_key_event (Gtk::Widget* w, unsigned int keyval) ev.state = 0; ev.keyval = keyval; ev.length = 0; - ev.string = (const gchar*) ""; + ev.string = const_cast (""); ev.hardware_keycode = keymapkey[0].keycode; ev.group = keymapkey[0].group; g_free(keymapkey); @@ -581,7 +572,7 @@ get_xpm (std::string name) { if (!xpm_map[name]) { - SearchPath spath(ARDOUR::ardour_data_search_path()); + Searchpath spath(ARDOUR::ardour_data_search_path()); spath.add_subdirectory_to_paths("pixmaps"); @@ -607,7 +598,7 @@ get_icon_path (const char* cname) string name = cname; name += X_(".png"); - SearchPath spath(ARDOUR::ardour_data_search_path()); + Searchpath spath(ARDOUR::ardour_data_search_path()); spath.add_subdirectory_to_paths("icons"); @@ -754,7 +745,9 @@ set_pango_fontsize () /* FT2 rendering - used by GnomeCanvas, sigh */ +#ifndef PLATFORM_WINDOWS pango_ft2_font_map_set_resolution ((PangoFT2FontMap*) pango_ft2_font_map_new(), val/1024, val/1024); +#endif /* Cairo rendering, in case there is any */ @@ -822,15 +815,15 @@ unique_random_color (list& used_colors) while (1) { - /* avoid neon/glowing tones by limiting them to the - "inner section" (paler) of a color wheel/circle. - */ + double h, s, v; - const int32_t max_saturation = 48000; // 65535 would open up the whole color wheel + h = fmod (random(), 360.0); + s = (random() % 65535) / 65535.0; + v = (random() % 65535) / 65535.0; - newcolor.set_red (random() % max_saturation); - newcolor.set_blue (random() % max_saturation); - newcolor.set_green (random() % max_saturation); + s = min (0.5, s); /* not too saturated */ + v = max (0.9, v); /* not too bright */ + newcolor.set_hsv (h, s, v); if (used_colors.size() == 0) { used_colors.push_back (newcolor); @@ -846,6 +839,7 @@ unique_random_color (list& used_colors) gdelta = newcolor.get_green() - c.get_green(); if (sqrt (rdelta*rdelta + bdelta*bdelta + gdelta*gdelta) > 25.0) { + /* different enough */ used_colors.push_back (newcolor); return newcolor; } @@ -854,3 +848,15 @@ unique_random_color (list& used_colors) /* XXX need throttle here to make sure we don't spin for ever */ } } + +string +rate_as_string (float r) +{ + char buf[32]; + if (fmod (r, 1000.0f)) { + snprintf (buf, sizeof (buf), "%.1f kHz", r/1000.0); + } else { + snprintf (buf, sizeof (buf), "%.0f kHz", r/1000.0); + } + return buf; +}