428
+ − 1 /*
+ − 2 Copyright (c) 1997 Douglas Keller
+ − 3
+ − 4 This file is part of XEmacs.
+ − 5
+ − 6 XEmacs is free software; you can redistribute it and/or modify it
+ − 7 under the terms of the GNU General Public License as published by the
+ − 8 Free Software Foundation; either version 2, or (at your option) any
+ − 9 later version.
+ − 10
+ − 11 XEmacs is distributed in the hope that it will be useful, but WITHOUT
+ − 12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ − 13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ − 14 for more details.
+ − 15
+ − 16 You should have received a copy of the GNU General Public License
+ − 17 along with XEmacs; see the file COPYING. If not, write to
+ − 18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ − 19 Boston, MA 02111-1307, USA. */
+ − 20
+ − 21 /* Synched up with: Not in FSF. */
+ − 22
+ − 23
+ − 24 #include <config.h>
+ − 25 #include "lisp.h"
+ − 26
872
+ − 27 #include "device-impl.h"
+ − 28 #include "console-x-impl.h"
428
+ − 29
+ − 30 #include "balloon_help.h"
+ − 31
440
+ − 32 /* #### start of hack */
428
+ − 33
+ − 34 static unsigned long
442
+ − 35 alloc_color (Display* dpy, const char* colorname, int light)
428
+ − 36 {
872
+ − 37 Colormap cmap = DEVICE_X_COLORMAP (XDEVICE (get_default_device (Qx)));
428
+ − 38 unsigned long pixel = 0;
+ − 39 XColor color;
+ − 40
+ − 41 if (XParseColor(dpy, cmap, colorname, &color) && XAllocColor(dpy, cmap, &color))
+ − 42 {
+ − 43 pixel = color.pixel;
+ − 44 }
+ − 45 else
+ − 46 {
+ − 47 if (light)
+ − 48 {
+ − 49 printf ("Warning: could not allocate color \"%s\", using \"white\"\n",
+ − 50 colorname);
+ − 51 pixel = alloc_color (dpy, "white", True);
+ − 52 }
+ − 53 else
+ − 54 {
+ − 55 printf ("Warning: could not allocate color \"%s\", using \"black\"\n",
+ − 56 colorname);
+ − 57 pixel = alloc_color (dpy, "black", True);
+ − 58 }
+ − 59 }
+ − 60 return pixel;
+ − 61 }
+ − 62
+ − 63 static XFontStruct *
442
+ − 64 open_font (Display* dpy, const char* font_name)
428
+ − 65 {
+ − 66 XFontStruct* fontStruct = NULL;
+ − 67
+ − 68 fontStruct = XLoadQueryFont (dpy, font_name ? font_name : "fixed");
+ − 69 if (fontStruct == NULL)
+ − 70 {
+ − 71 printf ("Warning: could not load font \"%s\", using \"fixed\".\n", font_name);
+ − 72 fontStruct = XLoadQueryFont (dpy, "fixed");
+ − 73 assert (fontStruct != NULL);
+ − 74 }
+ − 75 return fontStruct;
+ − 76 }
+ − 77
+ − 78 static void
+ − 79 init (void)
+ − 80 {
+ − 81 static int init_p = 0;
+ − 82
+ − 83 if (!init_p)
+ − 84 {
+ − 85 Pixel fg, bg, shine, shadow;
+ − 86 XFontStruct* font;
872
+ − 87 Display *dpy = DEVICE_X_DISPLAY (XDEVICE (get_default_device (Qx)));
428
+ − 88
+ − 89 fg = alloc_color (dpy, "grey60", 1);
+ − 90 bg = alloc_color (dpy, "black", 0);
+ − 91
+ − 92 shine = alloc_color (dpy, "grey80", 1);
+ − 93 shadow = alloc_color (dpy, "grey40", 0);
+ − 94
+ − 95 font = open_font (dpy, "-adobe-helvetica-medium-r-normal--12-*");
+ − 96
+ − 97 balloon_help_create (dpy, bg, fg, shine, shadow, font);
+ − 98 init_p = 1;
+ − 99 }
+ − 100 }
+ − 101
440
+ − 102 /* #### end of hack */
428
+ − 103
+ − 104 DEFUN ("show-balloon-help", Fshow_balloon_help, 1, 1, 0, /*
+ − 105 Show balloon help.
+ − 106 */
+ − 107 (string))
+ − 108 {
+ − 109 char *p;
+ − 110 CHECK_STRING (string);
+ − 111
+ − 112 p = (char *) XSTRING_DATA (string);
+ − 113
+ − 114 init ();
+ − 115
+ − 116 balloon_help_show (p);
+ − 117
+ − 118 return Qnil;
+ − 119 }
+ − 120
+ − 121 DEFUN ("hide-balloon-help", Fhide_balloon_help, 0, 0, 0, /*
+ − 122 Hide balloon help.
+ − 123 */
+ − 124 ())
+ − 125 {
+ − 126 init ();
+ − 127
+ − 128 balloon_help_hide ();
+ − 129
+ − 130 return Qnil;
+ − 131 }
+ − 132
+ − 133 DEFUN ("balloon-help-move-to-pointer", Fballoon_help_move_to_pointer, 0, 0, 0, /*
+ − 134 Move the balloon help to the place where the pointer currently resides.
+ − 135 */
+ − 136 ())
+ − 137 {
+ − 138 init ();
+ − 139
+ − 140 balloon_help_move_to_pointer ();
+ − 141
+ − 142 return Qnil;
+ − 143 }
+ − 144
+ − 145
+ − 146
+ − 147 /************************************************************************/
+ − 148 /* initialization */
+ − 149 /************************************************************************/
+ − 150
+ − 151 void
+ − 152 syms_of_balloon_x (void)
+ − 153 {
+ − 154 DEFSUBR (Fshow_balloon_help);
+ − 155 DEFSUBR (Fhide_balloon_help);
+ − 156 DEFSUBR (Fballoon_help_move_to_pointer);
+ − 157 }
+ − 158
+ − 159 void
+ − 160 vars_of_balloon_x (void)
+ − 161 {
+ − 162 Fprovide (intern ("c-balloon-help"));
+ − 163 }