|
|
1.1.1.4 ! root 1: /* $Id: gtk-display.h,v 1.10 2009/08/28 01:29:47 fredette Exp $ */ 1.1 root 2: 3: /* host/gtk/gtk-display.h - header file for GTK display support: */ 4: 5: /* 6: * Copyright (c) 2003 Matt Fredette 7: * All rights reserved. 8: * 9: * Redistribution and use in source and binary forms, with or without 10: * modification, are permitted provided that the following conditions 11: * are met: 12: * 1. Redistributions of source code must retain the above copyright 13: * notice, this list of conditions and the following disclaimer. 14: * 2. Redistributions in binary form must reproduce the above copyright 15: * notice, this list of conditions and the following disclaimer in the 16: * documentation and/or other materials provided with the distribution. 17: * 3. All advertising materials mentioning features or use of this software 18: * must display the following acknowledgement: 19: * This product includes software developed by Matt Fredette. 20: * 4. The name of the author may not be used to endorse or promote products 21: * derived from this software without specific prior written permission. 22: * 23: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 24: * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 25: * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 26: * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 27: * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 28: * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 29: * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 30: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 31: * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 32: * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 33: * POSSIBILITY OF SUCH DAMAGE. 34: */ 35: 36: #ifndef _HOST_GTK_GTK_DISPLAY_H 37: #define _HOST_GTK_GTK_DISPLAY_H 38: 39: #include <tme/common.h> 1.1.1.4 ! root 40: _TME_RCSID("$Id: gtk-display.h,v 1.10 2009/08/28 01:29:47 fredette Exp $"); 1.1 root 41: 42: /* includes: */ 43: #include <tme/generic/fb.h> 44: #include <tme/generic/keyboard.h> 45: #include <tme/generic/mouse.h> 46: #include <tme/threads.h> 47: #include <tme/hash.h> 1.1.1.2 root 48: #ifndef G_ENABLE_DEBUG 49: #define G_ENABLE_DEBUG (0) 50: #endif /* !G_ENABLE_DEBUG */ 1.1 root 51: #include <gtk/gtk.h> 52: 53: /* macros: */ 54: 55: /* the callout flags: */ 56: #define TME_GTK_DISPLAY_CALLOUT_CHECK (0) 57: #define TME_GTK_DISPLAY_CALLOUT_RUNNING TME_BIT(0) 58: #define TME_GTK_DISPLAY_CALLOUTS_MASK (-2) 59: #define TME_GTK_DISPLAY_CALLOUT_KEYBOARD_CTRL TME_BIT(1) 60: #define TME_GTK_DISPLAY_CALLOUT_MOUSE_CTRL TME_BIT(2) 61: 62: /* types: */ 63: 64: struct tme_gtk_display; 65: 66: /* a screen: */ 67: struct tme_gtk_screen { 68: 69: /* the next screen: */ 70: struct tme_gtk_screen *tme_gtk_screen_next; 71: 72: /* a backpointer to the display: */ 73: struct tme_gtk_display *tme_gtk_screen_display; 74: 75: /* the framebuffer connection. unlike many other elements, this is 76: *our* side of the framebuffer connection, not the peer's side: */ 77: struct tme_fb_connection *tme_gtk_screen_fb; 78: 79: /* the current scaling. if this is < 0, the user has not forced a 80: given scaling yet: */ 81: int tme_gtk_screen_fb_scale; 82: 1.1.1.3 root 83: /* any colorset signature: */ 84: tme_uint32_t tme_gtk_screen_colorset; 85: 1.1 root 86: /* the top-level window: */ 87: GtkWidget *tme_gtk_screen_window; 88: 89: /* the outer vertical packing box: */ 90: GtkWidget *tme_gtk_screen_vbox0; 91: 92: /* various menu item widgets: */ 93: GtkWidget *tme_gtk_screen_scale_default; 94: GtkWidget *tme_gtk_screen_scale_half; 95: 96: /* the GtkEventBox, GdkImage and GtkImage for the framebuffer: */ 97: GtkWidget *tme_gtk_screen_event_box; 98: GdkImage *tme_gtk_screen_gdkimage; 99: GtkWidget *tme_gtk_screen_gtkimage; 100: 101: /* the translation function: */ 102: int (*tme_gtk_screen_fb_xlat) _TME_P((struct tme_fb_connection *, 103: struct tme_fb_connection *)); 104: 105: /* the mouse on label: */ 106: GtkWidget *tme_gtk_screen_mouse_label; 107: 108: /* the status bar, and the context ID: */ 109: GtkWidget *tme_gtk_screen_mouse_statusbar; 110: guint tme_gtk_screen_mouse_statusbar_cid; 111: 112: /* if GDK_VoidSymbol, mouse mode is off. otherwise, 113: mouse mode is on, and this is the keyval that will 114: turn mouse mode off: */ 115: guint tme_gtk_screen_mouse_keyval; 116: 117: /* when mouse mode is on, this is the previous events mask 118: for the framebuffer event box: */ 119: GdkEventMask tme_gtk_screen_mouse_events_old; 120: 121: /* when mouse mode is on, this is the warp center: */ 1.1.1.3 root 122: gint tme_gtk_screen_mouse_warp_x; 123: gint tme_gtk_screen_mouse_warp_y; 1.1 root 124: 125: /* when mouse mode is on, the last tme buttons state: */ 126: unsigned int tme_gtk_screen_mouse_buttons_last; 1.1.1.4 ! root 127: ! 128: /* if nonzero, the screen needs a full redraw: */ ! 129: int tme_gtk_screen_full_redraw; 1.1 root 130: }; 131: 132: /* a GTK bad keysym: */ 133: struct tme_gtk_keysym_bad { 134: 135: /* these are kept on a singly linked list: */ 136: struct tme_gtk_keysym_bad *tme_gtk_keysym_bad_next; 137: 138: /* the bad keysym string: */ 139: char *tme_gtk_keysym_bad_string; 140: 141: /* the flags and context used in the lookup: */ 142: unsigned int tme_keysym_bad_flags; 143: unsigned int tme_gtk_keysym_bad_context_length; 144: tme_uint8_t *tme_gtk_keysym_bad_context; 145: }; 146: 147: /* a display: */ 148: struct tme_gtk_display { 149: 150: /* backpointer to our element: */ 151: struct tme_element *tme_gtk_display_element; 152: 153: /* our mutex: */ 154: tme_mutex_t tme_gtk_display_mutex; 155: 156: /* our keyboard connection: */ 157: struct tme_keyboard_connection *tme_gtk_display_keyboard_connection; 158: 159: /* our keyboard buffer: */ 160: struct tme_keyboard_buffer *tme_gtk_display_keyboard_buffer; 161: 162: /* our keysyms hash: */ 163: tme_hash_t tme_gtk_display_keyboard_keysyms; 164: 165: /* the bad keysym records: */ 166: struct tme_gtk_keysym_bad *tme_gtk_display_keyboard_keysyms_bad; 167: 168: /* our keysym to keycode hash: */ 169: tme_hash_t tme_gtk_display_keyboard_keysym_to_keycode; 170: 1.1.1.3 root 171: /* the next keysym to allocate for an unknown keysym string: */ 172: guint tme_gtk_display_keyboard_keysym_alloc_next; 173: 1.1 root 174: /* our mouse connection: */ 175: struct tme_mouse_connection *tme_gtk_display_mouse_connection; 176: 177: /* our mouse buffer: */ 178: struct tme_mouse_buffer *tme_gtk_display_mouse_buffer; 179: 180: /* our mouse cursor: */ 181: GdkCursor *tme_gtk_display_mouse_cursor; 182: 183: /* our screens: */ 184: struct tme_gtk_screen *tme_gtk_display_screens; 185: 186: /* the callout flags: */ 187: unsigned int tme_gtk_display_callout_flags; 188: 189: /* the tooltips group: */ 190: GtkTooltips *tme_gtk_display_tooltips; 191: }; 192: 1.1.1.3 root 193: /* a menu item: */ 194: struct tme_gtk_display_menu_item { 195: 196: /* which menu item this is: */ 197: unsigned int tme_gtk_display_menu_item_which; 198: 199: /* where to save the menu item widget: */ 200: GtkWidget **tme_gtk_display_menu_item_widget; 201: 202: /* the string for the menu item label: */ 203: const char *tme_gtk_display_menu_item_string; 204: }; 205: 206: /* this generates menu items: */ 207: typedef GtkSignalFunc (*tme_gtk_display_menu_items_t) _TME_P((void *, struct tme_gtk_display_menu_item *)); 208: 1.1 root 209: /* prototypes: */ 210: struct tme_gtk_screen *_tme_gtk_screen_new _TME_P((struct tme_gtk_display *)); 211: int _tme_gtk_screen_connections_new _TME_P((struct tme_gtk_display *, 212: struct tme_connection **)); 213: void _tme_gtk_keyboard_new _TME_P((struct tme_gtk_display *)); 214: void _tme_gtk_keyboard_attach _TME_P((struct tme_gtk_screen *)); 215: int _tme_gtk_keyboard_connections_new _TME_P((struct tme_gtk_display *, 216: struct tme_connection **)); 217: void _tme_gtk_mouse_new _TME_P((struct tme_gtk_display *)); 218: void _tme_gtk_mouse_mode_off _TME_P((struct tme_gtk_screen *, guint32)); 219: void _tme_gtk_mouse_attach _TME_P((struct tme_gtk_screen *)); 220: int _tme_gtk_mouse_connections_new _TME_P((struct tme_gtk_display *, 221: struct tme_connection **)); 222: void _tme_gtk_screen_th_update _TME_P((struct tme_gtk_display *)); 223: void _tme_gtk_display_callout _TME_P((struct tme_gtk_display *, 224: int)); 225: gint _tme_gtk_display_enter_focus _TME_P((GtkWidget *, GdkEvent *, gpointer)); 1.1.1.3 root 226: GtkWidget *_tme_gtk_display_menu_radio _TME_P((void *, tme_gtk_display_menu_items_t)); 1.1 root 227: 228: #endif /* _HOST_GTK_GTK_DISPLAY_H */ 229:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.