X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;ds=sidebyside;f=cinelerra-5.1%2Fguicast%2Fbcwindowbase.h;h=cd4ba72905945122329dcc07d585253e4af1cd6b;hb=331564c0ebb30688da917fc1c89058e12771e348;hp=af271e49bf82103c6391ecfafe376eae8c140419;hpb=30bdb85eb33a8ee7ba675038a86c6be59c43d7bd;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/guicast/bcwindowbase.h b/cinelerra-5.1/guicast/bcwindowbase.h index af271e49..cd4ba729 100644 --- a/cinelerra-5.1/guicast/bcwindowbase.h +++ b/cinelerra-5.1/guicast/bcwindowbase.h @@ -22,12 +22,6 @@ #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 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;