unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* face-font-rescale-alist
@ 2003-04-01 12:36 Kenichi Handa
  2003-04-02  9:18 ` face-font-rescale-alist Richard Stallman
  0 siblings, 1 reply; 4+ messages in thread
From: Kenichi Handa @ 2003-04-01 12:36 UTC (permalink / raw)
  Cc: emacs-indian

I'd like to install the attached patch for HEAD.  It
provides the variable face-font-rescale-alist to tell Emacs
to choose a font of different size.

This is necessary especially for a TrueType font which has
wrong or incompatible (with the other X fonts) size
information.  For instance, for Indian scripts, we are
currently using CDAC fonts, but they are too small compared
with the ASCII fonts opened by the same size.

What do people think about this feature?

To Indian script users:

Could you please try this patch and use this setting?
   (setq face-font-rescale-alist '(("-cdac$" . 1.3)))
How is the ballance of the font sizes?

---
Ken'ichi HANDA
handa@m17n.org

*** xfaces.c.~1.271.~	Mon Feb 24 11:15:33 2003
--- xfaces.c	Tue Apr  1 21:08:32 2003
***************
*** 373,378 ****
--- 373,382 ----
  
  Lisp_Object Vface_ignored_fonts;
  
+ /* Alist of font name patterns vs the rescaling factor.  */
+ 
+ Lisp_Object Vface_font_rescale_alist;
+ 
  /* Maximum number of fonts to consider in font_list.  If not an
     integer > 0, DEFAULT_FONT_LIST_LIMIT is used instead.  */
  
***************
*** 1940,1945 ****
--- 1944,1954 ----
       split_font_name for which these are.  */
    int numeric[XLFD_LAST];
  
+   /* If the original name matches one of Vface_font_rescale_alist,
+      the value is the corresponding rescale ratio.  Otherwise, the
+      value is 1.0.  */
+   double rescale_ratio;
+ 
    /* Lower value mean higher priority.  */
    int registry_priority;
  };
***************
*** 2270,2275 ****
--- 2279,2302 ----
  }
  
  
+ /* Return a resizing ratio of a font of NAME.  */
+ 
+ static double
+ font_rescale_ratio (char *name)
+ {
+   Lisp_Object tail, elt;  
+ 
+   for (tail = Vface_font_rescale_alist; CONSP (tail); tail = XCDR (tail))
+     {
+       elt = XCAR (tail);
+       if (STRINGP (XCAR (elt)) && FLOATP (XCDR (elt))
+ 	  && fast_c_string_match_ignore_case (XCAR (elt), name) >= 0)
+ 	return XFLOAT_DATA (XCDR (elt));
+     }
+   return 1.0;
+ }
+ 
+ 
  /* Split XLFD font name FONT->name destructively into NUL-terminated,
     lower-case fields in FONT->fields.  NUMERIC_P non-zero means
     compute numeric values for fields XLFD_POINT_SIZE, XLFD_SWIDTH,
***************
*** 2286,2291 ****
--- 2313,2323 ----
  {
    int i = 0;
    int success_p;
+   double rescale_ratio;
+ 
+   if (numeric_p)
+     /* This must be done before splitting the font name.  */
+     rescale_ratio = font_rescale_ratio (font->name);
  
    if (*font->name == '-')
      {
***************
*** 2345,2350 ****
--- 2377,2383 ----
        font->numeric[XLFD_WEIGHT] = xlfd_numeric_weight (font);
        font->numeric[XLFD_SWIDTH] = xlfd_numeric_swidth (font);
        font->numeric[XLFD_AVGWIDTH] = atoi (font->fields[XLFD_AVGWIDTH]);
+       font->rescale_ratio = rescale_ratio;
      }
  
    /* Initialize it to zero.  It will be overridden by font_list while
***************
*** 5992,6003 ****
  
        if (compare_pt_p || xlfd_idx != XLFD_POINT_SIZE)
  	{
! 	  int delta1 = abs (values[i] - font1->numeric[xlfd_idx]);
! 	  int delta2 = abs (values[i] - font2->numeric[xlfd_idx]);
  
- 	  if (xlfd_idx == XLFD_POINT_SIZE
- 	      && abs (delta1 - delta2) < FONT_POINT_SIZE_QUANTUM)
- 	    continue;
  	  if (delta1 > delta2)
  	    return 0;
  	  else if (delta1 < delta2)
--- 6025,6047 ----
  
        if (compare_pt_p || xlfd_idx != XLFD_POINT_SIZE)
  	{
! 	  int delta1, delta2;
! 
! 	  if (xlfd_idx == XLFD_POINT_SIZE)
! 	    {
! 	      delta1 = abs (values[i] - (font1->numeric[xlfd_idx]
! 					 / font1->rescale_ratio));
! 	      delta2 = abs (values[i] - (font2->numeric[xlfd_idx]
! 					 / font2->rescale_ratio));
! 	      if (abs (delta1 - delta2) < FONT_POINT_SIZE_QUANTUM)
! 		continue;
! 	    }
! 	  else
! 	    {
! 	      delta1 = abs (values[i] - font1->numeric[xlfd_idx]);
! 	      delta2 = abs (values[i] - font2->numeric[xlfd_idx]);
! 	    }
  
  	  if (delta1 > delta2)
  	    return 0;
  	  else if (delta1 < delta2)
***************
*** 6080,6090 ****
--- 6124,6140 ----
        pt = specified_pt;
        pixel_value = resy / (PT_PER_INCH * 10.0) * pt;
      }
+   /* We may need a font of the different size.  */
+   pixel_value *= font->rescale_ratio;
  
+   /* We should keep POINT_SIZE 0.  Otherwise, X server can't open a
+      font of the specified PIXEL_SIZE.  */
+ #if 0
    /* Set point size of the font.  */
    sprintf (point_size, "%d", (int) pt);
    font->fields[XLFD_POINT_SIZE] = point_size;
    font->numeric[XLFD_POINT_SIZE] = pt;
+ #endif
  
    /* Set pixel size.  */
    sprintf (pixel_size, "%d", pixel_value);
***************
*** 7675,7680 ****
--- 7725,7739 ----
  Each element is a regular expression that matches names of fonts to
  ignore.  */);
    Vface_ignored_fonts = Qnil;
+ 
+ 
+   DEFVAR_LISP ("face-font-rescale-alist", &Vface_font_rescale_alist,
+ 	       doc: /* Alist of fonts vs the rescaling factors.
+ Each element is a cons (FONT-NAME-PATTERN . RESCALE-RATIO), where
+ FONT-NAME-PATTERN is a regular expression matching a font name, and
+ RESCALE-RATIO is a floating point number to specify how much larger
+ \(or smaller) font we should use.  For instance, if a face requests
+ a font of 10 point, we actually use a font of 10 * RESCALE-RATIO points.  */);
  
  #ifdef HAVE_WINDOW_SYSTEM
    defsubr (&Sbitmap_spec_p);

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: face-font-rescale-alist
  2003-04-01 12:36 face-font-rescale-alist Kenichi Handa
@ 2003-04-02  9:18 ` Richard Stallman
  2003-04-09  7:31   ` face-font-rescale-alist Kenichi Handa
  0 siblings, 1 reply; 4+ messages in thread
From: Richard Stallman @ 2003-04-02  9:18 UTC (permalink / raw)
  Cc: emacs-devel

It seems like a reasonable idea to me.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: face-font-rescale-alist
  2003-04-02  9:18 ` face-font-rescale-alist Richard Stallman
@ 2003-04-09  7:31   ` Kenichi Handa
  2003-04-13  9:25     ` problem in installing tamil fonts Prashant Baronia
  0 siblings, 1 reply; 4+ messages in thread
From: Kenichi Handa @ 2003-04-09  7:31 UTC (permalink / raw)
  Cc: emacs-devel

In article <E190eNy-0001oG-00@fencepost.gnu.org>, Richard Stallman <rms@gnu.org> writes:

> It seems like a reasonable idea to me.

As there's no objection, I've just installed it.

---
Ken'ichi HANDA
handa@m17n.org

^ permalink raw reply	[flat|nested] 4+ messages in thread

* problem in installing tamil fonts
  2003-04-09  7:31   ` face-font-rescale-alist Kenichi Handa
@ 2003-04-13  9:25     ` Prashant Baronia
  0 siblings, 0 replies; 4+ messages in thread
From: Prashant Baronia @ 2003-04-13  9:25 UTC (permalink / raw)
  Cc: emacs-devel

we have installed the recently given tamil,malayalam and kannada(CDAC
pune) fonts
in emacs (by converting the ttf fonts to bdf ) and then installing it in
/usr/local/share/emacs/fonts directory where already devanagri fonts were
available9which are working properly) . My problem is that emacs is not
detecting these fonts can ne
one help me and give me the detailed procedure what to do  so that we can
use emacs
with tamil ,malyalam and kannada.
Thanking you all,
                  Yours Sincerely ,
                                  Prashant Baronia

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2003-04-13  9:25 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-04-01 12:36 face-font-rescale-alist Kenichi Handa
2003-04-02  9:18 ` face-font-rescale-alist Richard Stallman
2003-04-09  7:31   ` face-font-rescale-alist Kenichi Handa
2003-04-13  9:25     ` problem in installing tamil fonts Prashant Baronia

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).