switch move/swap tracks, add mv trk shortcut, update msg
[goodguy/cinelerra.git] / cinelerra-5.1 / guicast / bcwindowbase.h
index 7e36cd67131e341a69715b2b7cb856db12c0102e..e4eb8ba4c812354305d27a2fea44b078b93a94dd 100644 (file)
 //typedef void* GLXContext;
 #endif
 
+typedef uint32_t wchr_t;
+
+static inline size_t wstrlen(const wchr_t *s)
+{
+       size_t len = 0;
+       while( s[len] ) ++len;
+       return len;
+}
+
+static inline wchr_t *wstrncpy(wchr_t *dest, const wchr_t *src, size_t n)
+{
+       for( wchr_t *dp=dest; n>0 && (*dp++=*src++); --n );
+       return dest;
+}
+
+
 class BC_ResizeCall
 {
 public:
@@ -200,7 +216,9 @@ public:
        virtual int selection_clear_event() { return 0; }
 // Only if opengl is enabled
        virtual int expose_event() { return 0; };
+       virtual int handle_ungrab() { return 0; };
        virtual int grab_event(XEvent *event) { return 0; };
+
        virtual void create_objects() { return; };
 
        static void init_resources(float scale);
@@ -313,7 +331,7 @@ public:
        int get_buttonpress();
        int get_has_focus();
        int get_dragging();
-       wchar_t* get_wkeystring(int *length = 0);
+       wchr_t* get_wkeystring(int *length = 0);
        int get_keypress();
        int get_keysym() { return keysym; }
 #ifdef X_HAVE_UTF8_STRING
@@ -341,7 +359,7 @@ public:
        int get_text_descent(int font);
        int get_text_height(int font, const char *text = 0);
        int get_text_width(int font, const char *text, int length = -1);
-       int get_text_width(int font, const wchar_t *text, int length = -1);
+       int get_text_width(int font, const wchr_t *text, int length = -1);
 // truncate the text with ... & return a new string
        char *get_truncated_text(int font, const char *text, int max_w);
        BC_Clipboard* get_clipboard();
@@ -405,12 +423,14 @@ public:
        void draw_text_line(int x, int y, const char *text, int len, BC_Pixmap *pixmap = 0);
        void draw_xft_text(int x, int y, const char *text, int len,
                BC_Pixmap *pixmap = 0, int is_utf8 = 0);
-       void draw_xft_text(int x, int y, const wchar_t *text,
+       void draw_xft_text(int x, int y, const wchr_t *text,
                int length, BC_Pixmap *pixmap);
        int draw_single_text(int draw, int font,
-               int x, int y, const wchar_t *text, int length = -1, BC_Pixmap *pixmap = 0);
+               int x, int y, const wchr_t *text, int length = -1, BC_Pixmap *pixmap = 0);
        void draw_center_text(int x, int y, const char *text, int length = -1);
+       void draw_pix(int x, int y, BC_Pixmap *pixmap = 0);
        void draw_line(int x1, int y1, int x2, int y2, BC_Pixmap *pixmap = 0);
+       void draw_bline(int x1, int y1, int x2, int y2, BC_Pixmap *pixmap = 0);
        void draw_polygon(ArrayList<int> *x, ArrayList<int> *y, BC_Pixmap *pixmap = 0);
        void fill_polygon(ArrayList<int> *x, ArrayList<int> *y, BC_Pixmap *pixmap = 0);
        void draw_rectangle(int x, int y, int w, int h);
@@ -574,7 +594,7 @@ private:
        Cursor create_grab_cursor();
 // Get width of a single line.  Used by get_text_width
        int get_single_text_width(int font, const char *text, int length);
-       int get_single_text_width(int font, const wchar_t *text, int length);
+       int get_single_text_width(int font, const wchr_t *text, int length);
        int allocate_color_table();
        int init_gc();
        int init_fonts();
@@ -724,7 +744,7 @@ private:
 // Last key pressed
        int key_pressed;
        int wkey_string_length;
-       wchar_t wkey_string[4];
+       wchr_t wkey_string[4];
 #ifdef X_HAVE_UTF8_STRING
        char* key_pressed_utf8;
 #endif
@@ -897,11 +917,9 @@ private:
 #else
        Condition *completion_lock;
 #endif
-
-
+       Mutex *grab_lock;
        int dump_windows();
 
-
        BC_WindowEvents *event_thread;
        int is_deleting;
 // Hide cursor when video is enabled