X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fguicast%2Fbcwindowbase.h;h=5532ae49a5454803f0061c5527232e76a9460ab8;hb=7b05ad287956f8bd00836d9b5fb39f899a5fb641;hp=c2ed7abc270bd98f01d17fbf51a62f441e264eca;hpb=5a1b2bb96f2bd6b7ef4f8031763683726c02219d;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/guicast/bcwindowbase.h b/cinelerra-5.1/guicast/bcwindowbase.h index c2ed7abc..5532ae49 100644 --- a/cinelerra-5.1/guicast/bcwindowbase.h +++ b/cinelerra-5.1/guicast/bcwindowbase.h @@ -93,6 +93,7 @@ #endif #include #ifdef HAVE_GL +#define GL_GLEXT_PROTOTYPES #include #endif @@ -195,12 +196,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(); @@ -266,10 +269,10 @@ public: void add_keyboard_listener(int(BC_WindowBase::*handler)(BC_WindowBase *)); void del_keyboard_listener(int(BC_WindowBase::*handler)(BC_WindowBase *)); // Dimensions - virtual int get_w(); - virtual int get_h(); - virtual int get_x(); - virtual int get_y(); + virtual int get_w() { return w; } + virtual int get_h() { return h; } + virtual int get_x() { return x; } + virtual int get_y() { return y; } int get_root_w(int lock_display); int get_root_h(int lock_display); XineramaScreenInfo *get_xinerama_info(int screen); @@ -278,10 +281,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. @@ -389,8 +397,8 @@ public: BC_Pixmap *pixmap = 0, int is_utf8 = 0); void draw_xft_text(int x, int y, const wchar_t *text, int length, BC_Pixmap *pixmap); - void draw_wtext(int x, int y, const wchar_t *text, int length = -1, - BC_Pixmap *pixmap = 0, int *charpos = 0); + int draw_single_text(int draw, int font, + int x, int y, const wchar_t *text, int length = -1, BC_Pixmap *pixmap = 0); // truncate the text to a ... version that fits in the width, using the current_font void truncate_text(char *result, const char *text, int w); void draw_center_text(int x, int y, const char *text, int length = -1); @@ -450,6 +458,14 @@ 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); +// Grab button events + int grab_buttons(); + void ungrab_buttons(); + void grab_cursor(); + void ungrab_cursor(); // 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 @@ -498,7 +514,8 @@ public: int unset_repeat(int64_t duration); const char *get_tooltip(); int set_tooltip(const char *text); - int show_tooltip(int w = -1, int h = -1); + virtual int show_tooltip(const char *text, int x=-1, int y=-1, int w = -1, int h = -1); + int show_tooltip(int w=-1, int h=-1) { return show_tooltip(0, -1, -1, w, h); } int hide_tooltip(); int set_icon(VFrame *data); int load_defaults(BC_Hash *defaults); @@ -540,6 +557,7 @@ private: int create_private_colors(); int create_color(int color); int create_shared_colors(); + 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); @@ -555,7 +573,6 @@ private: int64_t get_color_bgr24(int color); XFontStruct* get_font_struct(int font); XftFont* get_xft_struct(int font); - int wcharpos(const wchar_t *text, XftFont *font, int length, int *charpos); Cursor get_cursor_struct(int cursor); XFontSet get_fontset(int font); XFontSet get_curr_fontset(void); @@ -566,7 +583,7 @@ private: int trigger_tooltip(); int untrigger_tooltip(); - void draw_tooltip(); + void draw_tooltip(const char *text=0); static XEvent *new_xevent(); // delete all repeater opjects for a close int unset_all_repeaters(); @@ -626,6 +643,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, *grab_active; // Pointer to the active menubar in the window. BC_MenuBar* active_menubar; // pointer to the active popup menu in the window @@ -711,7 +730,6 @@ private: // Popup window for tooltip BC_Popup *tooltip_popup; // If this subwindow has already shown a tooltip since the last EnterNotify - int tooltip_done; int options; int flash_enabled; @@ -815,6 +833,7 @@ private: Cursor downright_resize_cursor; Cursor hourglass_cursor; Cursor transparent_cursor; + Cursor grabbed_cursor; int xvideo_port_id; ArrayList resize_history;