Simplify rxvt_temp_buf usage.
[dana/urxvt.git] / src / rxvtfont.C
index 62d5203..a4dd1d6 100644 (file)
@@ -81,8 +81,8 @@ const struct rxvt_fallback_font {
 #if ENCODING_JP || ENCODING_JP_EXT
 # if XFT
   // prefer xft for complex scripts
-  { CS_JIS0208_1990_0, "xft:Kochi Gothic:antialias=false"          },
   { CS_JIS0208_1990_0, "xft:Sazanami Mincho:antialias=false"       },
+  { CS_JIS0208_1990_0, "xft:Kochi Gothic:antialias=false"          },
   { CS_JIS0208_1990_0, "xft:Mincho:antialias=false"                },
   { CS_JIS0208_1990_0, "xft::lang=ja:antialias=false"              },
 # endif
@@ -218,13 +218,13 @@ rxvt_font::rxvt_font ()
 }
 
 void
-rxvt_font::set_name (char *name)
+rxvt_font::set_name (char *name_)
 {
-  if (this->name == name)
+  if (name == name_)
     return;
 
-  if (this->name) free (this->name); // let the compiler optimize
-  this->name = name;
+  if (name) free (name); // let the compiler optimize
+  name = name_;
 }
 
 void
@@ -794,14 +794,23 @@ rxvt_font_x11::load (const rxvt_fontprop &prop, bool force_prop)
   char *registry = get_property (f, term->xa [XA_CHARSET_REGISTRY], 0);
   char *encoding = get_property (f, term->xa [XA_CHARSET_ENCODING], 0);
 
+  cs = CS_UNKNOWN;
+
   if (registry && encoding)
     {
       char charset[64];
       snprintf (charset, 64, "%s-%s", registry, encoding);
 
       cs = codeset_from_name (charset);
+
+      if (cs == CS_UNKNOWN)
+        rxvt_warn ("%s: cannot deduce encoding from registry/encoding properties \"%s\", ignoring font.\n", name, charset);
     }
-  else
+
+  free (registry);
+  free (encoding);
+
+  if (cs == CS_UNKNOWN)
     {
       const char *charset = get_property (f, XA_FONT, 0);
 
@@ -814,10 +823,15 @@ rxvt_font_x11::load (const rxvt_fontprop &prop, bool force_prop)
           break;
 
       cs = codeset_from_name (charset);
+      if (cs == CS_UNKNOWN)
+        rxvt_warn ("%s: cannot deduce encoding from font name property \"%s\", ignoring font.\n", name, charset);
     }
 
-  free (registry);
-  free (encoding);
+  if (cs == CS_UNKNOWN)
+    {
+      clear ();
+      return false;
+    }
 
   if (cs == CS_UNICODE)
     cs = CS_UNICODE_16; // X11 can have a max. of 65536 chars per font
@@ -874,14 +888,6 @@ rxvt_font_x11::load (const rxvt_fontprop &prop, bool force_prop)
       if (width < g.width) width = g.width;
     }
 
-  if (cs == CS_UNKNOWN)
-    {
-      fprintf (stderr, "unable to deduce codeset, ignoring font '%s'\n", name);
-
-      clear ();
-      return false;
-    }
-
 #if 0 // do it per-character
   if (prop && width > prop->width)
     {
@@ -1135,7 +1141,7 @@ rxvt_font_xft::load (const rxvt_fontprop &prop, bool force_prop)
 #if 0 // clipping unfortunately destroys our precious double-width-characters
   // clip width, we can't do better, or can we?
   if (FcPatternGet (p, FC_CHAR_WIDTH, 0, &v) != FcResultMatch)
-    FcPatternAddInteger (p, FC_CHAR_WIDTH, prop->width);
+    FcPatternAddInteger (p, FC_CHAR_WIDTH, prop.width);
 #endif
 
   if (FcPatternGet (p, FC_MINSPACE, 0, &v) != FcResultMatch)
@@ -1289,7 +1295,7 @@ rxvt_font_xft::draw (rxvt_drawable &d, int x, int y,
                      int fg, int bg)
 {
   XGlyphInfo extents;
-  XftGlyphSpec *enc = (XftGlyphSpec *)rxvt_temp_buf (len * sizeof (XftGlyphSpec));
+  XftGlyphSpec *enc = rxvt_temp_buf<XftGlyphSpec> (len);
   XftGlyphSpec *ep = enc;
 
   dTermDisplay;
@@ -1298,14 +1304,8 @@ rxvt_font_xft::draw (rxvt_drawable &d, int x, int y,
   int w = term->fwidth * len;
   int h = term->fheight;
 
-  /*
-   * Maybe make buffering into a resource flag? Compile time option doesn't seems like a
-   * good idea from the perspective of packaging for wide variety of user configs.
-   */
-  bool buffered = bg >= Color_transparent;
-#ifdef FORCE_UNBUFFERED_XFT
-  buffered = false;
-#endif
+  bool buffered = bg >= Color_transparent
+                  && term->option (Opt_buffered);
 
   // cut trailing spaces
   while (len && text [len - 1] == ' ')