view src/x-list-font.c @ 19713:043ccce224fb

(SIF_*): Win95 macros defined for NT. (struct tagSCROLLINFO): Win95 struct defined for NT. (vertical_scroll_bar_min_handle, vertical_scroll_bar_top_border, vertical_scroll_bar_bottom_border, last_scroll_bar_drag_pos, Vw32_gab_focus_on_raise, Vw32_capslock_is_shiftlock): New variables. (w32_frame_up_to_date): Block input. (do_line_dance): Use DC while erasing, release at end. (show_mouse_face): Use column and endcolumn calculated at start of loop. (my_create_scrollbar, my_show_window, my_set_window_pos, my_set_focus) [! ATTACH_THREADS]: Send message to window instead of invoking Windows procedure. (x_scroll_bar_create, x_scroll_bar_move, x_scroll_bar_handle_click, x_scroll_bar_report_motion): Use SCROLLINFO for proportional handle. (x_scroll_bar_set_handle): Create proportional sized scroll handle. (w32_set_vertical_scroll_bar): Size handle according to how much is showing in window. (x_scroll_bar_set_report_motion): Use top_range, calculated above. (x_scroll_bar_clear): Hide scroll bar until ready to repaint. (show_scroll_bars): Pass in frame to my_show_window. (w32_read_socket): Distinguish between invisible and obscured frames when handling PAINT messages. Fixup off-by-one calculation for PAINT and SIZE. Pass in new parameter to w32_kbd_mods_to_emacs. Handle WM_DISPLAYCHANGE, WINDOWPOSCHANGED, ACTIVATE, SHOWWINDOW, INITMENU, and ACTIVATEAPP messages. Explicitly check for visibile and obscured frames, and to see if any event should cause a redisplay. (x_display_bar_cursor): Don't check whether frame is updating here. (x_display_cursor): Check it here instead. (x_set_offset) [HAVE_NTGUI]: Don't add border widths. Set NOACTIVATE when setting window position. (x_set_window_size): Fixup off-by-one calculation when setting window position. Mark frame garbaged earlier. Clear mouse highlighting state. (x_focus_on_frame): Set focus by making frame the foreground window. (x_raise_frame): Support frames to be raised without grabbing focus. (x_lower_frame): Set NOACTIVATE flag when setting window position. (x_make_frame_visible, x_make_frame_invisible): Pass in frame to my_show_window. to my_show_window. (x_iconify_frame): Send a MINIMIZE message to the window. (x_wm_set_size_hint): Set font width, line height, border, and scroll bar indexes instead of X and Y unit indexes. (w32_initialize): Set input mode. Use w32_msg_worker instead of windows_msg_worker. Dynamically link proportional scroll bar functions and intialize proportional scroll bar variables. (syms_of_w32term): DEFVAR new variables. (construct_mouse_wheel): New function. Constructs an input event from a WM_MOUSEWHEEL message. (w32_read_socket): Handle WM_MOUSEWHEEL. (w32_read_socket): Pass in new parameter to key_event. Let key_event determine whether key is dead. For MOVE, use x_real_positions to map to client coords. (x_set_mouse_pixel_position): Offset to use client area as origin.
author Geoff Voelker <voelker@cs.washington.edu>
date Wed, 03 Sep 1997 01:07:37 +0000
parents f21dd94faebc
children 6303fc8c3e7c
line wrap: on
line source

DEFUN ("x-list-fonts", Fx_list_fonts, Sx_list_fonts, 1, 5, 0,
  "Return a list of the names of available fonts matching PATTERN.\n\
If optional arguments FACE and FRAME are specified, return only fonts\n\
the same size as FACE on FRAME.\n\
PATTERN is a string, perhaps with wildcard characters;\n\
  the * character matches any substring, and\n\
  the ? character matches any single character.\n\
  PATTERN is case-insensitive.\n\
FACE is a face name--a symbol.\n\
\n\
The return value is a list of strings, suitable as arguments to\n\
set-face-font.\n\
\n\
Fonts Emacs can't use (i.e. proportional fonts) may or may not be excluded\n\
even if they match PATTERN and FACE.\n\
The optional fourth argument MAXIMUM sets a limit on how many\n\
fonts to match.  The first MAXIMUM fonts are reported.\n\
The optional fifth argument WIDTH, if specified, is a number of columns\n\
occupied by a character of a font.  In that case, return only fonts\n\
the WIDTH times as wide as FACE on FRAME.")
  (pattern, face, frame, maximum, width)
    Lisp_Object pattern, face, frame, maximum, width;
{
  FRAME_PTR f;
  int size, cols;
  int maxnames;

  check_x ();
  CHECK_STRING (pattern, 0);
  if (!NILP (face))
    CHECK_SYMBOL (face, 1);

  if (NILP (maximum))
    maxnames = 2000;
  else
    {
      CHECK_NATNUM (maximum, 0);
      maxnames = XINT (maximum);
    }

  if (!NILP (width))
    CHECK_NUMBER (width, 4);

  /* We can't simply call check_x_frame because this function may be
     called before any frame is created.  */
  if (NILP (frame))
    f = selected_frame;
  else
    {
      CHECK_LIVE_FRAME (frame, 0);
      f = XFRAME (frame);
    }
  if (! FRAME_X_P (f))
    {
      /* Perhaps we have not yet created any frame.  */
      f = NULL;
      face = Qnil;
    }

  /* Determine the width standard for comparison with the fonts we find.  */

  if (NILP (face))
    size = 0;
  else
    {
      int face_id;

      face_id = face_name_id_number (f, face);

      if (face_id < 0 || face_id >= FRAME_N_PARAM_FACES (f)
	  || FRAME_PARAM_FACES (f) [face_id] == 0
	  || FRAME_PARAM_FACES (f) [face_id]->font == (XFontStruct *) (~0))
	size = f->output_data.x->font->max_bounds.width;
      else
	size = FRAME_PARAM_FACES (f) [face_id]->font->max_bounds.width;

      if (!NILP (width))
	  size *= XINT (width);
    }

  {
    Lisp_Object args[2];

    args[0] = x_list_fonts (f, pattern, size, maxnames);
    if (f == NULL)
      /* We don't have to check fontsets.  */
      return args[0];
    args[1] = list_fontsets (f, pattern, size);
    return Fnconc (2, args);
  }
}