aboutsummaryrefslogtreecommitdiff
path: root/win32/winfont.c
diff options
context:
space:
mode:
authorTakamichi Horikawa <takamichiho@gmail.com>2017-09-24 19:24:17 +0900
committerTakamichi Horikawa <takamichiho@gmail.com>2017-09-24 19:24:17 +0900
commit1008ae28bfa7265a6c1990b4452e8ba23d5d8727 (patch)
tree10fda2515aabf41aa399ae084b21db909c641996 /win32/winfont.c
parente16e86b42f626ca3ef64a6eff30aa442d7710642 (diff)
make code independent of -DUNICODE
Diffstat (limited to 'win32/winfont.c')
-rw-r--r--win32/winfont.c160
1 files changed, 0 insertions, 160 deletions
diff --git a/win32/winfont.c b/win32/winfont.c
deleted file mode 100644
index 1ed7a78..0000000
--- a/win32/winfont.c
+++ /dev/null
@@ -1,160 +0,0 @@
-#include "winfont.h"
-#include <windows.h>
-
-struct font_win32 {
- HFONT font;
- HDC dc;
- HBITMAP bitmap;
- HBRUSH white;
- HBRUSH black;
- uint8_t *data;
- uint8_t buf[16];
-};
-
-/*
-#include "jisunih.h"
-
-uint16_t jis2unih(uint8_t jis) {
- if (jis & 0x80) {
- const uint16_t *tab = jis2unicode_h;
- while (tab[0]) {
- if (tab[0] == jis) return tab[1];
- tab += 2;
- }
- return 0;
- } else {
- return jis;
- }
-}
-*/
-uint16_t jis2unih(uint8_t jis) {
- uint16_t wbuf[2];
- int outchar = MultiByteToWideChar(932, MB_ERR_INVALID_CHARS,
- (char *)&jis, 1, (wchar_t *)wbuf, 2);
- if (!outchar) return 0;
- return wbuf[0];
-}
-/*
-#include "jisuni.h"
-
-uint16_t jis2uni(uint16_t jis) {
- if ((jis>>8) == 0x29) {
- return jis2unih(jis & 0xff);
- }
- const uint16_t *tab = jis2unicode;
- while (tab[0]) {
- if (tab[0] == jis) return tab[1];
- tab += 2;
- }
- return 0;
-}
-*/
-uint16_t jis2uni(uint16_t jis) {
- uint16_t sjis = jis2sjis(jis);
- uint8_t abuf[2] = {sjis>>8, sjis};
- uint16_t wbuf[2];
- int outchar = MultiByteToWideChar(932, MB_ERR_INVALID_CHARS,
- (char *)abuf, 2, (wchar_t *)wbuf, 2);
- if (!outchar) return 0;
- return wbuf[0];
-}
-
-static const void *winfont_get(const struct fmdsp_font *font,
- uint16_t c, enum fmdsp_font_type type) {
- struct font_win32 *fw = (struct font_win32 *)font->data;
- RECT r = {
- 0, 0, 8, 16
- };
- FillRect(fw->dc, &r, fw->white);
- wchar_t text[2] = {0};
- switch (type) {
- case FMDSP_FONT_ANK:
- text[0] = jis2unih(c);
- TextOut(fw->dc, 0, 0, text, 1);
- break;
- case FMDSP_FONT_JIS_LEFT:
- {
- uint8_t row = c >> 8;
- if (row == 0x29 || row == 0x2a) {
- // doublebyte halfwidth ANK
- // JIS doublewidth JIS halfwidth
- // 0x2921-0x297e -> 0x21-0x7e (ASCII)
- // 0x2a21-0x2a7e -> 0xa1-0xfe (halfwidth katakana)
- uint16_t jis = (c & 0xff) | ((row-0x29) * 0x80);
- text[0] = jis2unih(jis);
- } else {
- text[0] = jis2uni(c);
- }
- }
- TextOut(fw->dc, 0, 0, text, 1);
- break;
- case FMDSP_FONT_JIS_RIGHT:
- text[0] = jis2uni(c);
- TextOut(fw->dc, -8, 0, text, 1);
- break;
- }
- GdiFlush();
-// return fw->data;
- for (int y = 0; y < 16; y++) {
- fw->buf[y] = fw->data[y*4];
- }
- return fw->buf;
-}
-
-struct BITMAPINFO_mono {
- BITMAPINFOHEADER bmihead;
- RGBQUAD bmicolors[2];
-};
-
-bool fmdsp_font_win(struct fmdsp_font *font) {
- struct font_win32 *fw = HeapAlloc(
- GetProcessHeap(), 0, sizeof(struct font_win32)
- );
- if (!fw) goto err;
- fw->font = CreateFont(16, 0, 0, 0,
- FW_NORMAL, FALSE, FALSE, FALSE,
- SHIFTJIS_CHARSET,
- OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
- NONANTIALIASED_QUALITY, FIXED_PITCH,
- L"MS Gothic");
- if (!fw->font) goto err_fw;
- fw->dc = CreateCompatibleDC(0);
- if (!fw->dc) goto err_font;
- struct BITMAPINFO_mono bmi = {0};
- bmi.bmihead.biSize = sizeof(bmi.bmihead);
- bmi.bmihead.biWidth = 8;
- bmi.bmihead.biHeight = -16;
- bmi.bmihead.biPlanes = 1;
- bmi.bmihead.biBitCount = 1;
- bmi.bmihead.biCompression = BI_RGB;
- bmi.bmihead.biSizeImage = 16;
- bmi.bmihead.biClrUsed = 2;
- bmi.bmicolors[0].rgbRed = 0xff;
- bmi.bmicolors[0].rgbGreen = 0xff;
- bmi.bmicolors[0].rgbBlue = 0xff;
- fw->bitmap = CreateDIBSection(
- fw->dc, (BITMAPINFO *)&bmi,
- DIB_RGB_COLORS, (void **)&fw->data,
- 0, 0);
- if (!fw->bitmap) {
- MessageBox(0, L"a", L"b", 0);
- goto err_dc;
- }
- SelectObject(fw->dc, fw->bitmap);
- SelectObject(fw->dc, fw->font);
- fw->white = CreateSolidBrush(RGB(0xff, 0xff, 0xff));
- fw->black = CreateSolidBrush(RGB(0x00, 0x00, 0x00));
- font->get = winfont_get;
- font->data = fw;
- font->width_half = 8;
- font->height = 16;
- return true;
-err_dc:
- DeleteDC(fw->dc);
-err_font:
- DeleteObject(fw->font);
-err_fw:
- HeapFree(GetProcessHeap(), 0, fw);
-err:
- return false;
-}