X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fguicast%2Fbcwindowbase.h;h=82e6d57cea0516b210b822b13c62d56e809c3206;hb=b55798fc64eee00c6fab3b4763e791befb7275f9;hp=cd4ba72905945122329dcc07d585253e4af1cd6b;hpb=974869b43e0d7ad356f6fee8549c1e4f14213330;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/guicast/bcwindowbase.h b/cinelerra-5.1/guicast/bcwindowbase.h index cd4ba729..82e6d57c 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 @@ -128,7 +129,7 @@ public: class BC_WindowBase : public trace_info { public: - BC_WindowBase(int opts=0); + BC_WindowBase(); virtual ~BC_WindowBase(); friend class BC_Bar; @@ -193,6 +194,7 @@ public: virtual int drag_motion_event() { return 0; }; virtual int drag_stop_event() { return 0; }; virtual int uses_text() { return 0; }; + virtual int selection_clear_event() { return 0; } // Only if opengl is enabled virtual int expose_event() { return 0; }; virtual int grab_event(XEvent *event) { return 0; }; @@ -268,10 +270,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); @@ -280,13 +282,13 @@ public: int get_screen_x(int lock_display, int screen); int get_screen_y(int lock_display, int screen); // Get current position - void get_abs_cursor_xy(int &abs_x, int &abs_y, int lock_window=0); + void get_abs_cursor(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); + void get_pop_cursor(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); + void get_relative_cursor(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); @@ -396,8 +398,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); @@ -448,9 +450,8 @@ public: void set_background(VFrame *bitmap); // Change the window title. void put_title(const char *text); - void set_title(const char *text); + void set_title(const char *text, int utf8=1); const char *get_title(); - void set_utf8title(const char *text); // Change the window title. The title is translated internally. void start_video(); void stop_video(); @@ -460,6 +461,12 @@ public: // Reroute toplevel events int grab(BC_WindowBase *window); int ungrab(BC_WindowBase *window); + int grab_event_count(); +// 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 @@ -508,7 +515,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); @@ -521,6 +529,9 @@ public: void restore_vm(); #endif + Atom to_clipboard(const char *data, long len, int clipboard_num); + long from_clipboard(char *data, long maxlen, int clipboard_num); + long clipboard_len(int clipboard_num); int test_keypress; char keys_return[KEYPRESSLEN]; @@ -550,6 +561,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); @@ -565,7 +577,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); @@ -576,7 +587,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(); @@ -589,6 +600,8 @@ private: void put_event(XEvent *event); // remove events queued for win void dequeue_events(Window win); +// clear selection + int do_selection_clear(Atom selection); // Recursive event dispatchers int dispatch_resize_event(int w, int h); @@ -609,6 +622,7 @@ private: int dispatch_drag_motion(); int dispatch_drag_stop(); int dispatch_expose_event(); + int dispatch_selection_clear(); // Get the port ID for a color model or return -1 for failure int grab_port_id(int color_model); @@ -637,7 +651,7 @@ private: // Type of window defined above int window_type; // keypress/pointer active grab - BC_WindowBase* 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 @@ -661,6 +675,8 @@ private: int video_on; // Event handler completion int done, done_set, window_running; +// Enter/Leave notify state + int cursor_entered; // Return value of event handler int return_value; // Motion event compression @@ -723,25 +739,21 @@ 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; // Font sets - XFontSet smallfontset, mediumfontset, largefontset, bigfontset, curr_fontset; - + XFontSet smallfontset, mediumfontset, largefontset, bigfontset, clockfontset; + XFontSet curr_fontset; // Fonts int current_font; - XFontStruct *smallfont, *mediumfont, *largefont, *bigfont; - + XFontStruct *smallfont, *mediumfont, *largefont, *bigfont, *clockfont; // Must be void so users don't need to include the wrong libpng version. - void *smallfont_xft, *mediumfont_xft, *largefont_xft, *bigfont_xft; - + void *smallfont_xft, *mediumfont_xft, *largefont_xft, *bigfont_xft, *clockfont_xft; + void *bold_smallfont_xft, *bold_mediumfont_xft, *bold_largefont_xft; int line_width; int line_dashes; - void *bold_largefont_xft, *bold_mediumfont_xft, *bold_smallfont_xft; int64_t current_color; // Coordinate of drag start int drag_x, drag_y; @@ -758,6 +770,8 @@ private: Window rootwin; // windows previous events happened in Window event_win, drag_win; +// selection clear + Atom event_selection; Visual *vis; Colormap cmap; // Name of display @@ -827,6 +841,7 @@ private: Cursor downright_resize_cursor; Cursor hourglass_cursor; Cursor transparent_cursor; + Cursor grabbed_cursor; int xvideo_port_id; ArrayList resize_history;