Skip to content

Commit

Permalink
文字を拡大縮小して描画できるようにした
Browse files Browse the repository at this point in the history
- 拡大縮小して描画できるようにした
  - 2cell幅の文字を1cell幅に縮小して描画
  - 1cell幅の文字を2cell幅に拡大して描画,等
- フォントプロパティーページに設定を追加
  - "Drawing resized font to fit cell width" checkbox
- compat_win.cpp に TransparentBlt() (msimg32.dll) を追加
- ヘルプ追加(enはjaのコピー)

git-svn-id: https://svn.osdn.net/svnroot/ttssh2/trunk@10806 f5f01b69-1e22-0410-acbf-894ab4bd6246
  • Loading branch information
zmatsuo committed Jul 23, 2023
1 parent 9bccc07 commit 7f33265
Show file tree
Hide file tree
Showing 12 changed files with 255 additions and 79 deletions.
12 changes: 12 additions & 0 deletions doc/en/html/menu/setup-additional-font.html
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,18 @@ <h1>Additional settings / "Font" tab ([Setup] menu)</h1>
</pre>
</dd>

<dt>描画幅に合わせてリサイズしたフォントを描画(Drawing resized font to fit cell width)</dt>
<dd>
ONのとき表示したい幅と描画するフォントの幅が異なっている時、
フォントを縮小拡大してから描画します。<br>
"&copy;"など、表示しようとする幅は1cell,2cellのどちらの場合もあり、
フォントファイルによってフォントの幅も1cell,2cellのどちらの場合もあります。<br>
言語やフォントによってフォント幅は表示しようとする幅に合わない場合もあります。<br>
このチェックをONにすると、cell幅に合わせて文字を描画します。<br>
cell幅にあわせて文字が描画されるため文字は判別しやすくなるという利点がある一方で、
描画速度が遅くなったり、デザインがフォント開発者の意図と異なってしまうという欠点があります。
</dd>

<dt>Character space</dt>
<dd>
Under construction.<br>
Expand Down
12 changes: 12 additions & 0 deletions doc/ja/html/menu/setup-additional-font.html
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,18 @@
</pre>
</dd>

<dt>描画幅に合わせてリサイズしたフォントを描画(Drawing resized font to fit cell width)</dt>
<dd>
ONのとき表示したい幅と描画するフォントの幅が異なっている時、
フォントを縮小拡大してから描画します。<br>
"&copy;"など、表示しようとする幅は1cell,2cellのどちらの場合もあり、
フォントファイルによってフォントの幅も1cell,2cellのどちらの場合もあります。<br>
言語やフォントによってフォント幅は表示しようとする幅に合わない場合もあります。<br>
このチェックをONにすると、cell幅に合わせて文字を描画します。<br>
cell幅にあわせて文字が描画されるため文字は判別しやすくなるという利点がある一方で、
描画速度が遅くなったり、デザインがフォント開発者の意図と異なってしまうという欠点があります。
</dd>

<dt>文字間スペース</dt>
<dd>
工事中です。<br>
Expand Down
4 changes: 4 additions & 0 deletions teraterm/common/compat_win.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,10 @@ static HRESULT (WINAPI *pLoadIconWithScaleDown)(HINSTANCE hinst, PCWSTR pszName,
HRESULT (WINAPI *pDwmSetWindowAttribute)(HWND hwnd, DWORD dwAttribute, LPCVOID pvAttribute, DWORD cbAttribute);
HRESULT (WINAPI *pDwmGetWindowAttribute)(HWND hwnd, DWORD dwAttribute, PVOID pvAttribute, DWORD cbAttribute);

// msimg32.dll
BOOL (WINAPI *pTransparentBlt)(HDC hdcDest, int xoriginDest, int yoriginDest, int wDest, int hDest, HDC hdcSrc,
int xoriginSrc, int yoriginSrc, int wSrc, int hSrc, UINT crTransparent);

class Initializer {
public:
Initializer() {
Expand Down
4 changes: 4 additions & 0 deletions teraterm/common/compat_win.h
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,10 @@ HRESULT _LoadIconWithScaleDown(HINSTANCE hinst, PCWSTR pszName, int cx, int cy,
extern HRESULT (WINAPI *pDwmSetWindowAttribute)(HWND hwnd, DWORD dwAttribute, LPCVOID pvAttribute, DWORD cbAttribute);
extern HRESULT (WINAPI *pDwmGetWindowAttribute)(HWND hwnd, DWORD dwAttribute, PVOID pvAttribute, DWORD cbAttribute);

// msimg32.dll
extern BOOL(WINAPI *pTransparentBlt)(HDC hdcDest, int xoriginDest, int yoriginDest, int wDest, int hDest, HDC hdcSrc,
int xoriginSrc, int yoriginSrc, int wSrc, int hSrc, UINT crTransparent);

void WinCompatInit();

#ifdef __cplusplus
Expand Down
20 changes: 11 additions & 9 deletions teraterm/teraterm/buffer.c
Original file line number Diff line number Diff line change
Expand Up @@ -3356,22 +3356,24 @@ void BuffGetDrawInfoW(int SY, int IStart, int IEnd,
} else {
// UTF-16でサロゲートペア
bufW[lenW] = b->wc2[0];
bufWW[lenW] = b->cell;
bufWW[lenW] = 0;
lenW++;
bufW[lenW] = b->wc2[1];
bufWW[lenW] = 0;
bufWW[lenW] = b->cell;
lenW++;
}
if (b->CombinationCharCount16 != 0)
{
if (b->CombinationCharCount16 != 0) {
// コンビネーション
int i;
for (i = 0 ; i < (int)b->CombinationCharCount16; i++) {
bufW[lenW+i] = b->pCombinationChars16[i];
const char cell_tmp = bufWW[lenW - 1];
bufWW[lenW - 1] = 0;
for (i = 0; i < (int)b->CombinationCharCount16; i++) {
bufW[lenW + i] = b->pCombinationChars16[i];
bufWW[lenW + i] = 0;
}
bufWW[lenW + b->CombinationCharCount16 - 1] = cell_tmp;
lenW += b->CombinationCharCount16;
DrawFlag = TRUE; // コンビネーションがある場合はすぐ描画
DrawFlag = TRUE; // コンビネーションがある場合はすぐ描画
}

// ANSI版
Expand Down Expand Up @@ -3451,12 +3453,12 @@ typedef struct {
int draw_y;
} disp_data_t;

static void l_disp_strW(const wchar_t *bufW, const char *width_info, int count, void *data_)
static void l_disp_strW(const wchar_t *bufW, const char *cells, int len, void *data_)
{
disp_data_t *data = (disp_data_t *)data_;
int x = data->draw_x;
int y = data->draw_y;
DispStrW(bufW, width_info, count, y, &x);
DispStrW(bufW, cells, len, y, &x);
data->draw_x = x;
}

Expand Down
4 changes: 4 additions & 0 deletions teraterm/teraterm/font_pp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -210,6 +210,8 @@ static INT_PTR CALLBACK Proc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)

SetFontString(hWnd, IDC_DLGFONT_EDIT, &dlg_data->DlgFont);

CheckDlgButton(hWnd, IDC_RESIZED_FONT, DispIsResizedFont());

break;
}
case WM_NOTIFY: {
Expand All @@ -234,6 +236,8 @@ static INT_PTR CALLBACK Proc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
cur == 2 ? ANTIALIASED_QUALITY :
CLEARTYPE_QUALITY;

DispEnableResizedFont(IsDlgButtonChecked(hWnd, IDC_RESIZED_FONT) == BST_CHECKED);

break;
}
case PSN_HELP: {
Expand Down
17 changes: 10 additions & 7 deletions teraterm/teraterm/font_pp.rc
Original file line number Diff line number Diff line change
Expand Up @@ -65,19 +65,21 @@ BEGIN
EDITTEXT IDC_VTFONT_CODEPAGE_EDIT,44,108,40,12,ES_AUTOHSCROLL
LTEXT "&Font Quality",IDC_FONT_QUALITY_LABEL,19,129,91,8
COMBOBOX IDC_FONT_QUALITY,30,141,87,69,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
LTEXT "&Dialog font",IDC_DLGFONT,7,162,115,8
EDITTEXT IDC_DLGFONT_EDIT,19,177,148,12,ES_AUTOHSCROLL | ES_READONLY
PUSHBUTTON "Select...",IDC_DLGFONT_CHOOSE,177,176,50,14
PUSHBUTTON "&default",IDC_DLGFONT_DEFAULT,231,176,50,14
LTEXT "&Dialog font",IDC_DLGFONT,7,175,115,8
EDITTEXT IDC_DLGFONT_EDIT,19,192,148,12,ES_AUTOHSCROLL | ES_READONLY
PUSHBUTTON "Select...",IDC_DLGFONT_CHOOSE,177,191,50,14
PUSHBUTTON "&default",IDC_DLGFONT_DEFAULT,231,191,50,14
CONTROL "List &hidden fonts in font dialog",IDC_LIST_HIDDEN_FONTS,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,194,234,10
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,211,234,10
CONTROL "List &proportional fonts in font dialog",IDC_LIST_PRO_FONTS,
"Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,7,209,240,10
"Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,7,226,240,10
LTEXT "character space",IDC_CHARACTER_SPACE_TITLE,187,51,115,8,WS_DISABLED
EDITTEXT IDC_SPACE_TOP,224,68,40,14,ES_AUTOHSCROLL | WS_DISABLED
EDITTEXT IDC_SPACE_BOTTOM,224,87,40,14,ES_AUTOHSCROLL | WS_DISABLED
EDITTEXT IDC_SPACE_LEFT,224,105,40,14,ES_AUTOHSCROLL | WS_DISABLED
EDITTEXT IDC_SPACE_RIGHT,224,123,40,14,ES_AUTOHSCROLL | WS_DISABLED
CONTROL "Drawing resized font to fit cell width",IDC_RESIZED_FONT,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,19,159,140,10
END


Expand All @@ -93,10 +95,11 @@ BEGIN
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 302
VERTGUIDE, 19
TOPMARGIN, 7
BOTTOMMARGIN, 260
HORZGUIDE, 33
HORZGUIDE, 183
HORZGUIDE, 198
END
END
#endif // APSTUDIO_INVOKED
Expand Down
6 changes: 4 additions & 2 deletions teraterm/teraterm/font_pp_res.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,16 @@
#define IDC_DLGFONT_DEFAULT 1018
#define IDC_LIST_HIDDEN_FONTS 1019
#define IDC_LIST_PRO_FONTS 1020
#define IDC_SCALED_FONT 1021
#define IDC_RESIZED_FONT 1021

// Next default values for new objects
//
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 102
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1021
#define _APS_NEXT_CONTROL_VALUE 1022
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
4 changes: 2 additions & 2 deletions teraterm/teraterm/teraprn.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -384,7 +384,7 @@ void PrnOutTextA(const char *StrA, const char *WidthInfo, int Count, void *data)
DrawStrA(PrintDC, NULL, StrA, WidthInfo, Count, PrnFW, PrnFH, PrnY, &PrnX);
}

void PrnOutTextW(const wchar_t *StrW, const char *WidthInfo, int Count, void *data)
void PrnOutTextW(const wchar_t *StrW, const char *cells, int len, void *data)
{
if (PrnX+PrnFW > Margin.right) {
/* new line */
Expand All @@ -399,7 +399,7 @@ void PrnOutTextW(const wchar_t *StrW, const char *WidthInfo, int Count, void *da
PrnY = Margin.top;
}

DrawStrW(PrintDC, NULL, StrW, WidthInfo, Count, PrnFW, PrnFH, PrnY, &PrnX);
DrawStrW(PrintDC, NULL, StrW, cells, len, PrnFW, PrnFH, PrnY, &PrnX);
}

void PrnNewLine()
Expand Down
Loading

0 comments on commit 7f33265

Please sign in to comment.