#include <gtk/gtkpaned.h>
#include <boost/algorithm/string.hpp>
+#include "pbd/basename.h"
#include "pbd/file_utils.h"
+#include "pbd/stacktrace.h"
#include <gtkmm2ext/utils.h>
#include "ardour/filesystem_paths.h"
+#include "ardour/search_paths.h"
#include "canvas/item.h"
#include "canvas/utils.h"
#include "public_editor.h"
#include "keyboard.h"
#include "utils.h"
-#include "i18n.h"
+#include "pbd/i18n.h"
#include "rgb_macros.h"
#include "gui_thread.h"
#include "ui_config.h"
#include "ardour_dialog.h"
+#include "ardour_ui.h"
using namespace std;
using namespace Gtk;
return Pango::FontDescription (pfd); /* make a copy */
}
+Gdk::Color
+ARDOUR_UI_UTILS::gdk_color_from_rgb (uint32_t rgb)
+{
+ Gdk::Color c;
+ set_color_from_rgb (c, rgb);
+ return c;
+}
+
+Gdk::Color
+ARDOUR_UI_UTILS::gdk_color_from_rgba (uint32_t rgba)
+{
+ Gdk::Color c;
+ set_color_from_rgb (c, rgba);
+ return c;
+}
+
void
ARDOUR_UI_UTILS::set_color_from_rgb (Gdk::Color& c, uint32_t rgb)
{
return RGBA_TO_UINT (r,g,b,a);
}
-
bool
ARDOUR_UI_UTILS::relay_key_press (GdkEventKey* ev, Gtk::Window* win)
{
GdkKeymap *keymap = gdk_keymap_get_for_display (display);
GdkKeymapKey *keymapkey = NULL;
gint n_keys;
-
+
if (!gdk_keymap_get_entries_for_keyval(keymap, keyval, &keymapkey, &n_keys)) return false;
if (n_keys !=1) { g_free(keymapkey); return false;}
Gtk::Window& main_window (ARDOUR_UI::instance()->main_window());
-
+
GdkEventKey ev;
ev.type = GDK_KEY_PRESS;
ev.window = main_window.get_window()->gobj();
return relay_key_press(&ev, &main_window);
}
-string
-ARDOUR_UI_UTILS::show_gdk_event_state (int state)
-{
- string s;
- if (state & GDK_SHIFT_MASK) {
- s += "+SHIFT";
- }
- if (state & GDK_LOCK_MASK) {
- s += "+LOCK";
- }
- if (state & GDK_CONTROL_MASK) {
- s += "+CONTROL";
- }
- if (state & GDK_MOD1_MASK) {
- s += "+MOD1";
- }
- if (state & GDK_MOD2_MASK) {
- s += "+MOD2";
- }
- if (state & GDK_MOD3_MASK) {
- s += "+MOD3";
- }
- if (state & GDK_MOD4_MASK) {
- s += "+MOD4";
- }
- if (state & GDK_MOD5_MASK) {
- s += "+MOD5";
- }
- if (state & GDK_BUTTON1_MASK) {
- s += "+BUTTON1";
- }
- if (state & GDK_BUTTON2_MASK) {
- s += "+BUTTON2";
- }
- if (state & GDK_BUTTON3_MASK) {
- s += "+BUTTON3";
- }
- if (state & GDK_BUTTON4_MASK) {
- s += "+BUTTON4";
- }
- if (state & GDK_BUTTON5_MASK) {
- s += "+BUTTON5";
- }
- if (state & GDK_SUPER_MASK) {
- s += "+SUPER";
- }
- if (state & GDK_HYPER_MASK) {
- s += "+HYPER";
- }
- if (state & GDK_META_MASK) {
- s += "+META";
- }
- if (state & GDK_RELEASE_MASK) {
- s += "+RELEASE";
- }
-
- return s;
-}
-
Glib::RefPtr<Gdk::Pixbuf>
ARDOUR_UI_UTILS::get_xpm (std::string name)
{
return xpm_map[name];
}
+void
+ARDOUR_UI_UTILS::get_color_themes (map<std::string,std::string>& themes)
+{
+ Searchpath spath(ARDOUR::theme_search_path());
+
+ for (vector<string>::iterator s = spath.begin(); s != spath.end(); ++s) {
+
+ vector<string> entries;
+
+ find_files_matching_pattern (entries, *s, string ("*") + UIConfiguration::color_file_suffix);
+
+ for (vector<string>::iterator e = entries.begin(); e != entries.end(); ++e) {
+
+ XMLTree tree;
+
+ tree.read ((*e).c_str());
+ XMLNode* root = tree.root();
+
+ if (!root || root->name() != X_("Ardour")) {
+ continue;
+ }
+
+ XMLProperty const* prop = root->property (X_("theme-name"));
+
+ if (!prop) {
+ continue;
+ }
+
+ themes.insert (make_pair (prop->value(), Glib::filename_to_utf8 (basename_nosuffix(*e))));
+ }
+ }
+}
+
vector<string>
ARDOUR_UI_UTILS::get_icon_sets ()
{
find_file (spath, name, data_file_path);
}
+ if (data_file_path.empty()) {
+ Searchpath rc (ARDOUR::ardour_data_search_path());
+ rc.add_subdirectory_to_paths ("resources");
+ find_file (rc, name, data_file_path);
+ }
+
if (is_image && data_file_path.empty()) {
if (!icon_set.empty() && icon_set != _("default")) {
return o;
}
-/** Replace < and > with < and > respectively to make < > display correctly in markup strings */
-string
-ARDOUR_UI_UTILS::escape_angled_brackets (string const & s)
-{
- string o = s;
- boost::replace_all (o, "<", "<");
- boost::replace_all (o, ">", ">");
- return o;
-}
-
Gdk::Color
ARDOUR_UI_UTILS::unique_random_color (list<Gdk::Color>& used_colors)
{
- Gdk::Color newcolor;
+ Gdk::Color newcolor;
while (1) {
return false;
}
}
+
+bool
+ARDOUR_UI_UTILS::running_from_source_tree ()
+{
+ gchar const *x = g_getenv ("ARDOUR_THEMES_PATH");
+ return x && (string (x).find ("gtk2_ardour") != string::npos);
+}