This file is part of GNU Emacs.
-GNU Emacs is free software; you can redistribute it and/or modify
+GNU Emacs is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
GNU Emacs is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
-along with GNU Emacs; see the file COPYING. If not, write to
-the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-Boston, MA 02110-1301, USA. */
+along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
/* Added by Kevin Gallo */
#include <imm.h>
#define FILE_NAME_TEXT_FIELD edt1
-#ifdef USE_FONT_BACKEND
#include "font.h"
-#endif
+#include "w32font.h"
void syms_of_w32fns ();
void globals_of_w32fns ();
extern int w32_console_toggle_lock_key P_ ((int, Lisp_Object));
extern void w32_menu_display_help P_ ((HWND, HMENU, UINT, UINT));
extern void w32_free_menu_strings P_ ((HWND));
+#if OLD_FONT
extern XCharStruct *w32_per_char_metric P_ ((XFontStruct *, wchar_t *, int));
+#endif
extern int quit_char;
static int menubar_in_use = 0;
/* From w32uniscribe.c */
-#ifdef USE_FONT_BACKEND
extern void syms_of_w32uniscribe ();
extern int uniscribe_available;
-#endif
/* Function prototypes for hourglass support. */
static void show_hourglass P_ ((struct frame *));
DEFUN ("w32-define-rgb-color", Fw32_define_rgb_color,
Sw32_define_rgb_color, 4, 4, 0,
- doc: /* Convert RGB numbers to a windows color reference and associate with NAME.
+ doc: /* Convert RGB numbers to a Windows color reference and associate with NAME.
This adds or updates a named color to `w32-color-map', making it
available for use. The original entry's RGB ref is returned, or nil
if the entry is new. */)
dummy_buf.w32msg.msg.hwnd = NULL;
dummy_buf.w32msg.msg.message = WM_NULL;
- /* This is the inital message loop which should only exit when the
+ /* This is the initial message loop which should only exit when the
application quits. */
w32_msg_pump (&dummy_buf);
return Qnil;
}
-#ifdef USE_FONT_BACKEND
static void
x_default_font_parameter (f, parms)
struct frame *f;
}
x_default_parameter (f, parms, Qfont, font, "font", "Font", RES_TYPE_STRING);
}
-#endif
DEFUN ("x-create-frame", Fx_create_frame, Sx_create_frame,
1, 1, 0,
f->resx = dpyinfo->resx;
f->resy = dpyinfo->resy;
-#ifdef USE_FONT_BACKEND
- if (enable_font_backend)
- {
- /* Perhaps, we must allow frame parameter, say `font-backend',
- to specify which font backends to use. */
- if (uniscribe_available)
- register_font_driver (&uniscribe_font_driver, f);
- register_font_driver (&w32font_driver, f);
-
- x_default_parameter (f, parameters, Qfont_backend, Qnil,
- "fontBackend", "FontBackend", RES_TYPE_STRING);
- }
-#endif /* USE_FONT_BACKEND */
+ if (uniscribe_available)
+ register_font_driver (&uniscribe_font_driver, f);
+ register_font_driver (&w32font_driver, f);
+ x_default_parameter (f, parameters, Qfont_backend, Qnil,
+ "fontBackend", "FontBackend", RES_TYPE_STRING);
/* Extract the window parameters from the supplied values
that are needed to determine window geometry. */
-#ifdef USE_FONT_BACKEND
- if (enable_font_backend)
- x_default_font_parameter (f, parameters);
- else
-#endif
- {
- Lisp_Object font;
-
- font = w32_get_arg (parameters, Qfont, "font", "Font", RES_TYPE_STRING);
-
- BLOCK_INPUT;
- /* First, try whatever font the caller has specified. */
- if (STRINGP (font))
- {
- tem = Fquery_fontset (font, Qnil);
- if (STRINGP (tem))
- font = x_new_fontset (f, tem);
- else
- font = x_new_font (f, SDATA (font));
- }
- /* Try out a font which we hope has bold and italic variations. */
- if (!STRINGP (font))
- font = x_new_font (f, "-*-Courier New-normal-r-*-*-*-100-*-*-c-*-iso8859-1");
- if (! STRINGP (font))
- font = x_new_font (f, "-*-Courier-normal-r-*-*-13-*-*-*-c-*-iso8859-1");
- /* If those didn't work, look for something which will at least work. */
- if (! STRINGP (font))
- font = x_new_font (f, "-*-Fixedsys-normal-r-*-*-12-*-*-*-c-*-iso8859-1");
- UNBLOCK_INPUT;
- if (! STRINGP (font))
- font = build_string ("Fixedsys");
-
- x_default_parameter (f, parameters, Qfont, font,
- "font", "Font", RES_TYPE_STRING);
- }
-
+ x_default_font_parameter (f, parameters);
x_default_parameter (f, parameters, Qborder_width, make_number (2),
"borderWidth", "BorderWidth", RES_TYPE_NUMBER);
/* This defaults to 2 in order to match xterm. We recognize either
}
\f
+#if OLD_FONT
+
/* Return the charset portion of a font name. */
char *
xlfd_charset_of_font (char * fontname)
{
if (font)
{
- if (font->per_char) xfree (font->per_char);
+ xfree (font->per_char);
if (font->bdf) w32_free_bdf_font (font->bdf);
if (font->hfont) DeleteObject (font->hfont);
xfree (font);
}
}
+#endif /* OLD_FONT */
/* The font conversion stuff between x and w32 */
{
if (!lpw) return (FW_DONTCARE);
- if (stricmp (lpw, "heavy") == 0) return FW_HEAVY;
- else if (stricmp (lpw, "extrabold") == 0) return FW_EXTRABOLD;
- else if (stricmp (lpw, "bold") == 0) return FW_BOLD;
- else if (stricmp (lpw, "demibold") == 0) return FW_SEMIBOLD;
- else if (stricmp (lpw, "semibold") == 0) return FW_SEMIBOLD;
- else if (stricmp (lpw, "medium") == 0) return FW_MEDIUM;
- else if (stricmp (lpw, "normal") == 0) return FW_NORMAL;
- else if (stricmp (lpw, "light") == 0) return FW_LIGHT;
- else if (stricmp (lpw, "extralight") == 0) return FW_EXTRALIGHT;
- else if (stricmp (lpw, "thin") == 0) return FW_THIN;
+ if (xstrcasecmp (lpw, "heavy") == 0) return FW_HEAVY;
+ else if (xstrcasecmp (lpw, "extrabold") == 0) return FW_EXTRABOLD;
+ else if (xstrcasecmp (lpw, "bold") == 0) return FW_BOLD;
+ else if (xstrcasecmp (lpw, "demibold") == 0) return FW_SEMIBOLD;
+ else if (xstrcasecmp (lpw, "semibold") == 0) return FW_SEMIBOLD;
+ else if (xstrcasecmp (lpw, "medium") == 0) return FW_MEDIUM;
+ else if (xstrcasecmp (lpw, "normal") == 0) return FW_NORMAL;
+ else if (xstrcasecmp (lpw, "light") == 0) return FW_LIGHT;
+ else if (xstrcasecmp (lpw, "extralight") == 0) return FW_EXTRALIGHT;
+ else if (xstrcasecmp (lpw, "thin") == 0) return FW_THIN;
else
return FW_DONTCARE;
}
if (NILP (this_entry))
{
/* At startup, we want iso8859-1 fonts to come up properly. */
- if (stricmp (charset, "iso8859-1") == 0)
+ if (xstrcasecmp (charset, "iso8859-1") == 0)
return ANSI_CHARSET;
else
return DEFAULT_CHARSET;
}
}
+#if OLD_FONT
+
/* Get the Windows codepage corresponding to the specified font. The
charset info in the font name is used to look up
w32-charset-to-codepage-alist. */
else
return CP_UNKNOWN;
}
-
+#endif /* OLD_FONT */
static BOOL
w32_to_x_font (lplogfont, lpxstr, len, specific_charset)
strcpy (height_dpi, "*");
}
-#if 0 /* Never put the width in the xfld. It fails on fonts with
+#if 0 /* Never put the width in the xlfd. It fails on fonts with
double-width characters. */
if (lplogfont->lfWidth)
sprintf (width_pixels, "%u", lplogfont->lfWidth * 10);
return (TRUE);
}
+#if OLD_FONT
+
/* Strip the pixel height and point height from the given xlfd, and
return the pixel height. If no pixel height is specified, calculate
one from the point height, or if that isn't defined either, return
for (i = 0; i < one_w32_display_info.n_fonts ;i++, pfi++)
{
- if (stricmp (pfi->name, fontname) == 0) return pfi;
+ if (xstrcasecmp (pfi->name, fontname) == 0) return pfi;
}
return NULL;
}
}
+#endif /* OLD_FONT */
+
/* directory-files from dired.c. */
Lisp_Object Fdirectory_files P_ ((Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object));
\f
+#if OLD_FONT
+
/* Find BDF files in a specified directory. (use GCPRO when calling,
as this calls lisp to get a directory listing). */
static Lisp_Object
}
return list;
}
+#endif /* OLD_FONT */
\f
DEFUN ("xw-color-defined-p", Fxw_color_defined_p, Sxw_color_defined_p, 1, 2, 0,
error ("Display still has frames on it");
BLOCK_INPUT;
+#if OLD_FONT
/* Free the fonts in the font table. */
for (i = 0; i < dpyinfo->n_fonts; i++)
if (dpyinfo->font_table[i].name)
xfree (dpyinfo->font_table[i].name);
w32_unload_font (dpyinfo, dpyinfo->font_table[i].font);
}
+#endif
x_destroy_all_bitmaps (dpyinfo);
x_delete_display (dpyinfo);
f->resx = dpyinfo->resx;
f->resy = dpyinfo->resy;
-#ifdef USE_FONT_BACKEND
- if (enable_font_backend)
- {
- /* Perhaps, we must allow frame parameter, say `font-backend',
- to specify which font backends to use. */
- register_font_driver (&w32font_driver, f);
+ /* Perhaps, we must allow frame parameter, say `font-backend',
+ to specify which font backends to use. */
+ register_font_driver (&w32font_driver, f);
- x_default_parameter (f, parms, Qfont_backend, Qnil,
- "fontBackend", "FontBackend", RES_TYPE_STRING);
- }
-#endif /* USE_FONT_BACKEND */
+ x_default_parameter (f, parms, Qfont_backend, Qnil,
+ "fontBackend", "FontBackend", RES_TYPE_STRING);
/* Extract the window parameters from the supplied values
that are needed to determine window geometry. */
-#ifdef USE_FONT_BACKEND
- if (enable_font_backend)
- x_default_font_parameter (f, parms);
- else
-#endif /* USE_FONT_BACKEND */
- {
- Lisp_Object font;
-
- font = w32_get_arg (parms, Qfont, "font", "Font", RES_TYPE_STRING);
-
- BLOCK_INPUT;
- /* First, try whatever font the caller has specified. */
- if (STRINGP (font))
- {
- tem = Fquery_fontset (font, Qnil);
- if (STRINGP (tem))
- font = x_new_fontset (f, tem);
- else
- font = x_new_font (f, SDATA (font));
- }
-
- /* Try out a font which we hope has bold and italic variations. */
- if (!STRINGP (font))
- font = x_new_font (f, "-*-Courier New-normal-r-*-*-*-100-*-*-c-*-iso8859-1");
- if (! STRINGP (font))
- font = x_new_font (f, "-*-Courier-normal-r-*-*-13-*-*-*-c-*-iso8859-1");
- /* If those didn't work, look for something which will at least work. */
- if (! STRINGP (font))
- font = x_new_font (f, "-*-Fixedsys-normal-r-*-*-12-*-*-*-c-*-iso8859-1");
- UNBLOCK_INPUT;
- if (! STRINGP (font))
- font = build_string ("Fixedsys");
-
- x_default_parameter (f, parms, Qfont, font,
- "font", "Font", RES_TYPE_STRING);
- }
+ x_default_font_parameter (f, parms);
x_default_parameter (f, parms, Qborder_width, make_number (2),
"borderWidth", "BorderWidth", RES_TYPE_NUMBER);
/* Initialize as much of the font details as we can from the current
default font. */
hdc = GetDC (FRAME_W32_WINDOW (f));
- oldobj = SelectObject (hdc, FRAME_FONT (f)->hfont);
+ oldobj = SelectObject (hdc, FONT_COMPAT (FRAME_FONT (f))->hfont);
GetTextFace (hdc, LF_FACESIZE, lf.lfFaceName);
if (GetTextMetrics (hdc, &tm))
{
return Qt;
}
+DEFUN ("w32-battery-status", Fw32_battery_status, Sw32_battery_status, 0, 0, 0,
+ doc: /* Get power status information from Windows system.
+
+The following %-sequences are provided:
+%L AC line status (verbose)
+%B Battery status (verbose)
+%b Battery status, empty means high, `-' means low,
+ `!' means critical, and `+' means charging
+%p Battery load percentage
+%s Remaining time (to charge or discharge) in seconds
+%m Remaining time (to charge or discharge) in minutes
+%h Remaining time (to charge or discharge) in hours
+%t Remaining time (to charge or discharge) in the form `h:min' */)
+ ()
+{
+ Lisp_Object status = Qnil;
+
+ SYSTEM_POWER_STATUS system_status;
+ if (GetSystemPowerStatus (&system_status))
+ {
+ Lisp_Object line_status, battery_status, battery_status_symbol;
+ Lisp_Object load_percentage, seconds, minutes, hours, remain;
+ Lisp_Object sequences[8];
+
+ long seconds_left = (long) system_status.BatteryLifeTime;
+
+ if (system_status.ACLineStatus == 0)
+ line_status = build_string ("off-line");
+ else if (system_status.ACLineStatus == 1)
+ line_status = build_string ("on-line");
+ else
+ line_status = build_string ("N/A");
+
+ if (system_status.BatteryFlag & 128)
+ {
+ battery_status = build_string ("N/A");
+ battery_status_symbol = build_string ("");
+ }
+ else if (system_status.BatteryFlag & 8)
+ {
+ battery_status = build_string ("charging");
+ battery_status_symbol = build_string ("+");
+ if (system_status.BatteryFullLifeTime != -1L)
+ seconds_left = system_status.BatteryFullLifeTime - seconds_left;
+ }
+ else if (system_status.BatteryFlag & 4)
+ {
+ battery_status = build_string ("critical");
+ battery_status_symbol = build_string ("!");
+ }
+ else if (system_status.BatteryFlag & 2)
+ {
+ battery_status = build_string ("low");
+ battery_status_symbol = build_string ("-");
+ }
+ else if (system_status.BatteryFlag & 1)
+ {
+ battery_status = build_string ("high");
+ battery_status_symbol = build_string ("");
+ }
+ else
+ {
+ battery_status = build_string ("medium");
+ battery_status_symbol = build_string ("");
+ }
+
+ if (system_status.BatteryLifePercent > 100)
+ load_percentage = build_string ("N/A");
+ else
+ {
+ char buffer[16];
+ _snprintf (buffer, 16, "%d", system_status.BatteryLifePercent);
+ load_percentage = build_string (buffer);
+ }
+
+ if (seconds_left < 0)
+ seconds = minutes = hours = remain = build_string ("N/A");
+ else
+ {
+ long m;
+ float h;
+ char buffer[16];
+ _snprintf (buffer, 16, "%ld", seconds_left);
+ seconds = build_string (buffer);
+
+ m = seconds_left / 60;
+ _snprintf (buffer, 16, "%ld", m);
+ minutes = build_string (buffer);
+
+ h = seconds_left / 3600.0;
+ _snprintf (buffer, 16, "%3.1f", h);
+ hours = build_string (buffer);
+
+ _snprintf (buffer, 16, "%ld:%02ld", m / 60, m % 60);
+ remain = build_string (buffer);
+ }
+ sequences[0] = Fcons (make_number ('L'), line_status);
+ sequences[1] = Fcons (make_number ('B'), battery_status);
+ sequences[2] = Fcons (make_number ('b'), battery_status_symbol);
+ sequences[3] = Fcons (make_number ('p'), load_percentage);
+ sequences[4] = Fcons (make_number ('s'), seconds);
+ sequences[5] = Fcons (make_number ('m'), minutes);
+ sequences[6] = Fcons (make_number ('h'), hours);
+ sequences[7] = Fcons (make_number ('t'), remain);
+
+ status = Flist (8, sequences);
+ }
+ return status;
+}
\f
DEFUN ("file-system-info", Ffile_system_info, Sfile_system_info, 1, 1, 0,
x_set_fringe_width,
0, /* x_set_wait_for_wm, */
x_set_fullscreen,
-#ifdef USE_FONT_BACKEND
- x_set_font_backend
-#endif
+ x_set_font_backend,
+ 0 /* x_set_alpha, */
};
void
defsubr (&Sw32_reconstruct_hot_key);
defsubr (&Sw32_toggle_lock_key);
defsubr (&Sw32_window_exists_p);
+#if OLD_FONT
defsubr (&Sw32_find_bdf_fonts);
+#endif
+ defsubr (&Sw32_battery_status);
defsubr (&Sfile_system_info);
defsubr (&Sdefault_printer_name);
+#if OLD_FONT
/* Setting callback functions for fontset handler. */
get_font_info_func = w32_get_font_info;
query_font_func = w32_query_font;
set_frame_fontset_func = x_set_font;
get_font_repertory_func = x_get_font_repertory;
+#endif
check_window_system_func = check_w32;
/* MessageBox does not work without this when linked to comctl32.dll 6.0. */
InitCommonControls ();
-#ifdef USE_FONT_BACKEND
syms_of_w32uniscribe ();
-#endif
}
#undef abort