#endif
#include "lisp.h"
-#include "charset.h"
+#include "character.h"
#include "keyboard.h"
#include "frame.h"
#include "dispextern.h"
#define FONT_CACHE_SLOT_OVER_P(p) ((p) >= cached_bitmap_slots + BDF_FONT_CACHE_SIZE)
-static int
+static int
search_file_line(char *key, char *start, int len, char **val, char **next)
{
unsigned int linelen;
*val = start + strlen(key);
return 1;
}
-
+
return 0;
}
else if (search_file_line("CHARSET_ENCODING", start, len,
(char **)&p, (char **)&q) == 1)
{
- fontp->encoding = get_quoted_string(p, q);
+ fontp->encoding = get_quoted_string(p, q);
}
else if (search_file_line("SLANT", start, len,
(char **)&p, (char **)&q) == 1)
hbdf_bmp_heap = HeapCreate(0, BDF_BITMAP_HEAP_INITIAL_SIZE, 0);
if (!hbdf_cp_heap || !hbdf_bmp_heap)
- error("Fail to create heap for BDF.");
+ error("Fail to create heap for BDF");
hfile = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
(fileinfo.nFileSizeLow > BDF_FILE_SIZE_MAX))
{
CloseHandle(hfile);
- error("Fail to open BDF file.");
+ error("Fail to open BDF file");
}
hfilemap = CreateFileMapping(hfile, NULL, PAGE_READONLY, 0, 0, NULL);
if (hfilemap == INVALID_HANDLE_VALUE)
{
CloseHandle(hfile);
- error("Can't map font.");
+ error("Can't map font");
}
font = MapViewOfFile(hfilemap, FILE_MAP_READ, 0, 0, 0);
{
CloseHandle(hfile);
CloseHandle(hfilemap);
- error("Can't view font.");
+ error("Can't view font");
}
bdffontp = (bdffont *) xmalloc(sizeof(bdffont));
-
+
for(i = 0;i < BDF_FIRST_OFFSET_TABLE;i++)
bdffontp->chtbl[i] = NULL;
bdffontp->size = fileinfo.nFileSizeLow;
bdffontp->hfilemap = hfilemap;
bdffontp->filename = (char*) xmalloc(strlen(filename) + 1);
strcpy(bdffontp->filename, filename);
-
+
if (!set_bdf_font_info(bdffontp))
{
w32_free_bdf_font(bdffontp);
{
pch = fontp->chtbl[BDF_FIRST_OFFSET(index)] =
(font_char*) HeapAlloc(hbdf_cp_heap,
- HEAP_ZERO_MEMORY,
+ HEAP_ZERO_MEMORY,
sizeof(font_char) *
BDF_SECOND_OFFSET_TABLE);
if (!pch) return NULL;
pcb->row_byte_size = glyph.row_byte_size;
pch->pcbmp = pcb;
-
+
pcached_bitmap_latest++;
if (FONT_CACHE_SLOT_OVER_P(pcached_bitmap_latest))
pcached_bitmap_latest = cached_bitmap_slots;
return 0;
textalign = GetTextAlign(hdc);
-
+
hFgBrush = CreateSolidBrush(GetTextColor(hdc));
hOrgBrush = SelectObject(hdc, hFgBrush);
{
width = pcb->metric.bbw;
height = pcb->metric.bbh;
-
+
if (!(hBMP
&& (DIBsection_hdc == hdc)
&& (DIBsection_width == width)
/* Now fill in the slots of *FONTP. */
BLOCK_INPUT;
+ bzero (fontp, sizeof (*fontp));
fontp->font = font;
fontp->font_idx = dpyinfo->n_fonts;
fontp->name = (char *) xmalloc (strlen (fontname) + 1);
bcopy (fontname, fontp->name, strlen (fontname) + 1);
fontp->full_name = fontp->name;
- fontp->size = FONT_WIDTH (font);
+ /* FIXME: look at BDF spec to see if there are better ways of finding
+ average_width and space_width, hopefully that don't involve working out
+ the values for ourselves from the data. */
+ fontp->size = fontp->average_width = fontp->space_width = FONT_WIDTH (font);
fontp->height = FONT_HEIGHT (font);
/* The slot `encoding' specifies how to map a character
uses this font. So, we set informatoin in fontp->encoding[1]
which is never used by any charset. If mapping can't be
decided, set FONT_ENCODING_NOT_DECIDED. */
- fontp->encoding[1] = FONT_ENCODING_NOT_DECIDED;
+ fontp->encoding_type = FONT_ENCODING_NOT_DECIDED;
fontp->baseline_offset = bdf_font->yoffset;
fontp->relative_compose = bdf_font->relative_compose;
fontp->default_ascent = bdf_font->default_ascent;
+ /* Set global flag fonts_changed_p to non-zero if the font loaded
+ has a character with a smaller width than any other character
+ before, or if the font loaded has a smaller height than any
+ other font loaded before. If this happens, it will make a
+ glyph matrix reallocation necessary. */
+ fonts_changed_p |= x_compute_min_glyph_bounds (f);
+
UNBLOCK_INPUT;
dpyinfo->n_fonts++;
return fontp;
CloseHandle (hfilemap);
return retval;
}
+
+/* arch-tag: 2e9a45de-0c54-4a0e-95c8-2d67b2b1fa32
+ (do not change this comment) */