add browse bg btn in titler, prevent a few badwin signals, titler text popup upgrades
[goodguy/history.git] / cinelerra-5.1 / guicast / bcwindowbase.h
index af271e49bf82103c6391ecfafe376eae8c140419..cd4ba72905945122329dcc07d585253e4af1cd6b 100644 (file)
 #ifndef BCWINDOWBASE_H
 #define BCWINDOWBASE_H
 
-#if defined(HAVE_CONFIG_H)
-#include "config.h"
-#endif
-
-//#define HAVE_LIBXXF86VM
-
 // Window types
 #define MAIN_WINDOW 0
 #define SUB_WINDOW 1
@@ -71,6 +65,7 @@
 #include "bctimer.inc"
 #include "bctitle.inc"
 #include "bctoggle.inc"
+#include "bctrace.inc"
 #include "bctumble.inc"
 #include "bcwindow.inc"
 #include "bcwindowbase.inc"
@@ -130,7 +125,7 @@ public:
 
 
 // Windows, subwindows, popupwindows inherit from this
-class BC_WindowBase
+class BC_WindowBase : public trace_info
 {
 public:
        BC_WindowBase(int opts=0);
@@ -200,12 +195,14 @@ public:
        virtual int uses_text() { return 0; };
 // Only if opengl is enabled
        virtual int expose_event() { return 0; };
+       virtual int grab_event(XEvent *event) { return 0; };
        virtual void create_objects() { return; };
 
        int get_window_type() { return window_type; }
 // Wait until event loop is running
        void init_wait();
        int is_running() { return window_running; }
+       int is_hidden() { return hidden; }
 // Check if a hardware accelerated colormodel is available and reserve it
        int accel_available(int color_model, int lock_it);
        void get_input_context();
@@ -283,10 +280,15 @@ public:
        int get_screen_x(int lock_display, int screen);
        int get_screen_y(int lock_display, int screen);
 // Get current position
-       int get_abs_cursor_x(int lock_window);
-       int get_abs_cursor_y(int lock_window);
-       int get_relative_cursor_x();
-       int get_relative_cursor_y();
+       void get_abs_cursor_xy(int &abs_x, int &abs_y, int lock_window=0);
+       int get_abs_cursor_x(int lock_window=0);
+       int get_abs_cursor_y(int lock_window=0);
+       void get_pop_cursor_xy(int &px, int &py, int lock_window=0);
+       int get_pop_cursor_x(int lock_window=0);
+       int get_pop_cursor_y(int lock_window=0);
+       void get_relative_cursor_xy(int &x, int &y, int lock_window=0);
+       int get_relative_cursor_x(int lock_window=0);
+       int get_relative_cursor_y(int lock_window=0);
        void get_root_coordinates(int x, int y, int *abs_x, int *abs_y);
        void get_win_coordinates(int abs_x, int abs_y, int *x, int *y);
 // Return 1 if cursor is over an unobscured part of this window.
@@ -455,6 +457,9 @@ public:
        int get_id();
        void set_done(int return_value);
        void close(int return_value);
+// Reroute toplevel events
+       int grab(BC_WindowBase *window);
+       int ungrab(BC_WindowBase *window);
 // Get a bitmap to draw on the window with
        BC_Bitmap* new_bitmap(int w, int h, int color_model = -1);
 // Draw a bitmap on the window
@@ -483,6 +488,7 @@ public:
        void slide_right(int distance);
        void slide_up(int distance);
        void slide_down(int distance);
+       void flicker(int n=3, int ms=66);
 
        int cycle_textboxes(int amount);
 
@@ -571,7 +577,7 @@ private:
        int trigger_tooltip();
        int untrigger_tooltip();
        void draw_tooltip();
-       int arm_repeat(int64_t duration);
+       static XEvent *new_xevent();
 // delete all repeater opjects for a close
        int unset_all_repeaters();
 
@@ -581,9 +587,12 @@ private:
        int get_event_count();
 // Put event in common events.
        void put_event(XEvent *event);
+// remove events queued for win
+       void dequeue_events(Window win);
 
 // Recursive event dispatchers
        int dispatch_resize_event(int w, int h);
+       int dispatch_flash();
        int dispatch_focus_in();
        int dispatch_focus_out();
        int dispatch_motion_event();
@@ -602,11 +611,13 @@ private:
        int dispatch_expose_event();
 
 // Get the port ID for a color model or return -1 for failure
-       int grab_port_id(BC_WindowBase *window, int color_model);
+       int grab_port_id(int color_model);
 
        int find_next_textbox(BC_WindowBase **first_textbox, BC_WindowBase **next_textbox, int &result);
        int find_prev_textbox(BC_WindowBase **last_textbox, BC_WindowBase **prev_textbox, int &result);
 
+       void xft_draw_string(XftColor *xft_color, XftFont *xft_font, int x, int y,
+               const FcChar32 *fc, int len, BC_Pixmap *pixmap=0);
 
        void translate_coordinates(Window src_w, Window dest_w,
                int src_x, int src_y, int *dest_x_return, int *dest_y_return);
@@ -625,6 +636,8 @@ private:
        int light1, light2, medium, dark1, dark2, bg_color;
 // Type of window defined above
        int window_type;
+// keypress/pointer active grab
+       BC_WindowBase* active_grab;
 // Pointer to the active menubar in the window.
        BC_MenuBar* active_menubar;
 // pointer to the active popup menu in the window
@@ -697,6 +710,7 @@ private:
 #ifndef SINGLE_THREAD
 // Array of repeaters for multiple repeating objects.
        ArrayList<BC_Repeater*> repeaters;
+       int arm_repeat(int64_t duration);
 #endif
 // Text for tooltip if one exists
        const char *tooltip_text;
@@ -711,7 +725,7 @@ private:
 // If this subwindow has already shown a tooltip since the last EnterNotify
        int tooltip_done;
        int options;
-
+       int flash_enabled;
 
 
 // Font sets
@@ -785,6 +799,7 @@ private:
 // Depth given by the X Server
        int default_depth;
        Atom DelWinXAtom;
+       Atom DestroyAtom;
        Atom ProtoXAtom;
        Atom RepeaterXAtom;
        Atom SetDoneXAtom;