More PDCurses changes.

This commit is contained in:
casey langen 2022-07-25 19:09:24 -07:00
parent 57688429cd
commit f3dbca0ad7
3 changed files with 338 additions and 48 deletions

265
src/3rdparty/win32_include/acs_defs.h vendored Normal file
View File

@ -0,0 +1,265 @@
/* Many of the following #defines are completely unused for the
nonce. For each character, its code point in code page 437,
Unicode, and page 8859-1 are given. The first is used for
non-wide builds in Win32 console, DOS, SDL, and OS/2.
Unicode is used for all wide builds, and for the non-wide
build of WinGUI. Code page 8859-1 is used for non-wide X11.
All of these characters exist in CP437 and Unicode. Some
don't exist in 8859-1, in which case the last column is 'TBD'.
Only 32 are used in ncurses. So caution is advised. */
#ifdef USE_ISO8859_CHARSET
#define CHOOSE( A, B, C) (C)
#define TBD '!'
#else
#define CHOOSE( A, B, C) (USE_UNICODE_ACS_CHARS ? B : A)
#endif
/* Codes found from https://en.wikipedia.org/wiki/Code_page_437 */
#define SMILE CHOOSE( 0x01, 0x263a, 'O')
#define REV_SMILE CHOOSE( 0x02, 0x263b, 'O')
#define HEART CHOOSE( 0x03, 0x2665, 'H')
#define DIAMOND CHOOSE( 0x04, 0x2666, 0x01)
#define CLUB CHOOSE( 0x05, 0x2663, 'C')
#define SPADE CHOOSE( 0x06, 0x2660, 'S')
#define MEDIUM_BULLET CHOOSE( 0x07, 0x2022, 0xb7)
#define REV_BULLET CHOOSE( 0x08, 0x2508, 0xb7)
#define WHITE_BULLET CHOOSE( 0x09, 0x25cb, 7)
#define REV_WHITE_BULLET CHOOSE( 0x0a, 0x25D9, 7)
#define MALE_SYM CHOOSE( 0x0b, 0x2642, 'm')
#define FEMALE_SYM CHOOSE( 0x0c, 0x2640, 'f')
#define QTR_NOTE CHOOSE( 0x0d, 0x266a, 0xbc)
#define EIGHTH_NOTE CHOOSE( 0x0e, 0x266b, 0xbd)
#define SPLAT CHOOSE( 0x0f, 0xa4 , 0xa4)
#define RIGHT_TRIANGLE CHOOSE( 0x10, 0x25b6, '>')
#define LEFT_TRIANGLE CHOOSE( 0x11, 0x25c0, '<')
#define UP_DOWN_ARROW CHOOSE( 0x12, 0x2195, 0x19)
#define DBL_BANG CHOOSE( 0x13, 0x203c, '!')
#define PILCROW CHOOSE( 0x14, 0xb6 , 0xb6)
#define SECTION_SIGN CHOOSE( 0x15, 0xa7 , 0xa7)
#define LOW_QTR_BLOCK CHOOSE( 0x16, 0x25b2, '_')
#define UP_DOWN_ARROW_UNDERSCORED CHOOSE( 0x17, 0x21ab, 0x19)
#define UP_ARROW CHOOSE( 0x18, 0x2191, '^')
#define DOWN_ARROW CHOOSE( 0x19, 0x2193, 'v')
#define RIGHT_ARROW CHOOSE( 0x1a, 0x2192, '>')
#define LEFT_ARROW CHOOSE( 0x1b, 0x2190, '<')
#define RIGHT_ANGLE CHOOSE( 0x1c, 0x221f, 0xe)
#define LEFT_RIGHT_ARROW CHOOSE( 0x1d, 0x2194, '-')
#define UP_TRIANGLE CHOOSE( 0x1e, 0x25b2, '^')
#define DOWN_TRIANGLE CHOOSE( 0x1f, 0x25bc, 'v')
#define UPPERCASE_C_CEDILLA CHOOSE( 0x80, 0xc7 , 0xc7)
#define LOWERCASE_U_UMLAUT CHOOSE( 0x81, 0xfc , 0xfc)
#define LOWERCASE_E_ACUTE CHOOSE( 0x82, 0xe9 , 0xe9)
#define LOWERCASE_A_CIRCUMFLEX CHOOSE( 0x83, 0xe2 , 0xe2)
#define LOWERCASE_A_UMLAUT CHOOSE( 0x84, 0xe4 , 0xe4)
#define LOWERCASE_A_GRAVE CHOOSE( 0x85, 0xe0 , 0xea)
#define LOWERCASE_A_RING CHOOSE( 0x86, 0xe5 , 0xe5)
#define LOWERCASE_C_CEDILLA CHOOSE( 0x87, 0xe7 , 0xe7)
#define LOWERCASE_E_CIRCUMFLEX CHOOSE( 0x88, 0xea , 0xea)
#define LOWERCASE_E_UMLAUT CHOOSE( 0x89, 0xeb , 0xeb)
#define LOWERCASE_E_GRAVE CHOOSE( 0x8a, 0xe8 , 0xe8)
#define LOWERCASE_I_UMLAUT CHOOSE( 0x8b, 0xef , 0xef)
#define LOWERCASE_I_CIRCUMFLEX CHOOSE( 0x8c, 0xee , 0xee)
#define LOWERCASE_I_GRAVE CHOOSE( 0x8d, 0xec , 0xce)
#define UPPERCASE_A_UMLAUT CHOOSE( 0x8e, 0xc4 , 0xc4)
#define UPPERCASE_A_RING CHOOSE( 0x8f, 0xc5 , 0xc5)
#define UPPERCASE_E_ACUTE CHOOSE( 0x90, 0xc9 , 0xc9)
#define LOWERCASE_AE_LIGATURE CHOOSE( 0x91, 0xe6 , 0xe6)
#define UPPERCASE_AE_LIGATURE CHOOSE( 0x92, 0xc6 , 0xc6)
#define LOWERCASE_O_CIRCUMFLEX CHOOSE( 0x93, 0xf4 , 0xf4)
#define LOWERCASE_O_UMLAUT CHOOSE( 0x94, 0xf6 , 0xf6)
#define LOWERCASE_O_GRAVE CHOOSE( 0x95, 0xf2 , 0xf2)
#define LOWERCASE_U_CIRCUMFLEX CHOOSE( 0x96, 0xfb , 0xfb)
#define LOWERCASE_U_GRAVE CHOOSE( 0x97, 0xf9 , 0xf9)
#define LOWERCASE_Y_UMLAUT CHOOSE( 0x98, 0xff , 0xff)
#define UPPERCASE_O_UMLAUT CHOOSE( 0x99, 0xd6 , 0xd6)
#define UPPERCASE_U_UMLAUT CHOOSE( 0x9a, 0xdc , 0xdc)
#define CENT_SIGN CHOOSE( 0x9b, 0xa2 , 0xa2)
#define STERLING_SIGN CHOOSE( 0x9c, 0xa3 , 30)
#define YEN_SIGN CHOOSE( 0x9d, 0xa5 , 0xa5)
#define PESETA_SIGN CHOOSE( 0x9e, 0x20a7, TBD)
#define F_WITH_HOOK CHOOSE( 0x9f, 0x0192, TBD)
#define LOWERCASE_A_ACUTE CHOOSE( 0xa0, 0xe1 , 0xe1)
#define LOWERCASE_I_ACUTE CHOOSE( 0xa1, 0xed , 0xed)
#define LOWERCASE_O_ACUTE CHOOSE( 0xa2, 0xf3 , 0xf3)
#define LOWERCASE_U_ACUTE CHOOSE( 0xa3, 0xfa , 0xfa)
#define LOWERCASE_N_TILDE CHOOSE( 0xa4, 0xf1 , 0xf1)
#define UPPERCASE_N_TILDE CHOOSE( 0xa5, 0xd1 , 0xd1)
#define A_ORDINAL CHOOSE( 0xa6, 0xaa , 0xaa)
#define O_ORDINAL CHOOSE( 0xa7, 0xba , 0xba)
#define INVERTED_QUESTION_MARK CHOOSE( 0xa8, 0xbf , 0xbf)
#define REVERSED_NOT_SIGN CHOOSE( 0xa9, 0x2310, TBD)
#define NOT_SIGN CHOOSE( 0xaa, 0xac , 0xac)
#define VULGAR_HALF CHOOSE( 0xab, 0xbd , 0xbd)
#define VULGAR_QUARTER CHOOSE( 0xac, 0xbc , 0xbc)
#define INVERTED_EXCLAMATION_MARK CHOOSE( 0xad, 0xa1 , 0xa1)
#define LEFT_ANGLE_QUOTE_MARK CHOOSE( 0xae, 0xab , 0xab)
#define RIGHT_ANGLE_QUOTE_MARK CHOOSE( 0xaf, 0xbb , 0xbb)
#define LIGHT_SHADE CHOOSE( 0xb0, 0x2591, '#' )
#define MEDIUM_SHADE CHOOSE( 0xb1, 0x2592, 2)
#define DARK_SHADE CHOOSE( 0xb2, 0x2593, TBD)
#define BOX_VLINE CHOOSE( 0xb3, 0x2502, 25)
#define BOX_RTEE CHOOSE( 0xb4, 0x2524, 22)
#define BOX_SD_RTEE CHOOSE( 0xb5, 0x2561, 22)
#define BOX_DS_RTEE CHOOSE( 0xb6, 0x2562, 22)
#define BOX_DS_URCORNER CHOOSE( 0xb7, 0x2556, 12)
#define BOX_SD_URCORNER CHOOSE( 0xb8, 0x2555, 12)
#define BOX_D_RTEE CHOOSE( 0xb9, 0x2563, 22)
#define BOX_D_VLINE CHOOSE( 0xba, 0x2551, 25)
#define BOX_D_URCORNER CHOOSE( 0xbb, 0x2557, 12)
#define BOX_D_LRCORNER CHOOSE( 0xbc, 0x255D, 11)
#define BOX_DS_LRCORNER CHOOSE( 0xbd, 0x255c, 11)
#define BOX_SD_LRCORNER CHOOSE( 0xbe, 0x255b, 11)
#define BOX_URCORNER CHOOSE( 0xbf, 0x2510, 12)
#define BOX_LLCORNER CHOOSE( 0xc0, 0x2514, 14)
#define BOX_BTEE CHOOSE( 0xc1, 0x2534, 23)
#define BOX_TTEE CHOOSE( 0xc2, 0x252c, 24)
#define BOX_LTEE CHOOSE( 0xc3, 0x251c, 21)
#define BOX_HLINE CHOOSE( 0xc4, 0x2500, 18)
#define BOX_PLUS CHOOSE( 0xc5, 0x253c, 15)
#define BOX_SD_LTEE CHOOSE( 0xc6, 0x255e, 21)
#define BOX_DS_LTEE CHOOSE( 0xc7, 0x255f, 21)
#define BOX_D_LLCORNER CHOOSE( 0xc8, 0x255A, 14)
#define BOX_D_ULCORNER CHOOSE( 0xc9, 0x2554, 13)
#define BOX_D_BTEE CHOOSE( 0xca, 0x2569, 23)
#define BOX_D_TTEE CHOOSE( 0xcb, 0x2566, 24)
#define BOX_D_LTEE CHOOSE( 0xcc, 0x2560, 21)
#define BOX_D_HLINE CHOOSE( 0xcd, 0x2550, 18)
#define BOX_D_PLUS CHOOSE( 0xce, 0x256C, 15)
#define BOX_SD_BTEE CHOOSE( 0xcf, 0x2567, 23)
#define BOX_DS_BTEE CHOOSE( 0xd0, 0x2568, 23)
#define BOX_SD_TTEE CHOOSE( 0xd1, 0x2564, 24)
#define BOX_DS_TTEE CHOOSE( 0xd2, 0x2565, 24)
#define BOX_DS_LLCORNER CHOOSE( 0xd3, 0x2559, 14)
#define BOX_SD_LLCORNER CHOOSE( 0xd4, 0x2558, 14)
#define BOX_SD_ULCORNER CHOOSE( 0xd5, 0x2552, 13)
#define BOX_DS_ULCORNER CHOOSE( 0xd6, 0x2553, 13)
#define BOX_DS_PLUS CHOOSE( 0xd7, 0x256b, 15)
#define BOX_SD_PLUS CHOOSE( 0xd8, 0x256a, 15)
#define BOX_LRCORNER CHOOSE( 0xd9, 0x2518, 11)
#define BOX_ULCORNER CHOOSE( 0xda, 0x250c, 13)
#define FULL_BLOCK CHOOSE( 0xdb, 0x2588, 0)
#define LOWER_HALF_BLOCK CHOOSE( 0xdc, 0x2584, TBD)
#define LEFT_HALF_BLOCK CHOOSE( 0xdd, 0x258c, TBD)
#define RIGHT_HALF_BLOCK CHOOSE( 0xde, 0x2590, TBD)
#define UPPER_HALF_BLOCK CHOOSE( 0xdf, 0x2580, TBD)
#define ALPHA CHOOSE( 0xe0, 0x03b1, TBD)
#define BETA CHOOSE( 0xe1, 0x00df, TBD)
#define GAMMA CHOOSE( 0xe2, 0x0393, TBD)
#define PI CHOOSE( 0xe3, 0x03c0, 28)
#define UPPERCASE_SIGMA CHOOSE( 0xe4, 0x03a3, TBD)
#define LOWERCASE_SIGMA CHOOSE( 0xe5, 0x03c3, TBD)
#define MU CHOOSE( 0xe6, 0x00b5, 0xb5)
#define TAU CHOOSE( 0xe7, 0x03c4, TBD)
#define UPPERCASE_PHI CHOOSE( 0xe8, 0x03a6, TBD)
#define THETA CHOOSE( 0xe9, 0x0398, TBD)
#define OMEGA CHOOSE( 0xea, 0x03a9, TBD)
#define DELTA CHOOSE( 0xeb, 0x03b4, TBD)
#define INFINITY_SIGN CHOOSE( 0xec, 0x221e, TBD)
#define LOWERCASE_PHI CHOOSE( 0xed, 0x03c6, TBD)
#define EPSILON CHOOSE( 0xee, 0x03b5, TBD)
#define INTERSECTION CHOOSE( 0xef, 0x2229, TBD)
#define TRIPLE_BAR CHOOSE( 0xf0, 0x2261, TBD)
#define PLUS_OR_MINUS CHOOSE( 0xf1, 0x00b1, 8)
#define GREATER_THAN_OR_EQUAL_TO CHOOSE( 0xf2, 0x2265, 27)
#define LESSER_THAN_OR_EQUAL_TO CHOOSE( 0xf3, 0x2264, 26)
#define UPPER_HALF_INTEGRAL_SIGN CHOOSE( 0xf4, 0x2320, TBD)
#define LOWER_HALF_INTEGRAL_SIGN CHOOSE( 0xf5, 0x2321, TBD)
#define DIVISION_SIGN CHOOSE( 0xf6, 0x00f7, 0xf7)
#define APPROXIMATELY_EQUALS_SIGN CHOOSE( 0xf7, 0x2248, TBD)
#define DEGREE_SIGN CHOOSE( 0xf8, 0x00b0, 0xb0)
#define LARGE_BULLET CHOOSE( 0xf9, 0x2219, 7)
#define SMALL_BULLET CHOOSE( 0xfa, 0x00b7, 0xb7)
#define SQUARE_ROOT CHOOSE( 0xfb, 0x221a, TBD)
#define SUPERSCRIPT_N CHOOSE( 0xfc, 0x207f, TBD)
#define SUPERSCRIPT_2 CHOOSE( 0xfd, 0x00b2, 0xb2)
#define CENTERED_SQUARE CHOOSE( 0xfe, 0x25a0, TBD)
#define NON_BREAKING_SPACE CHOOSE( 0xff, 0x00a0, TBD)
/* It says at http://unicode.org/charts/PDF/U2300.pdf */
/* that '...the scan line numbers here refer to old, */
/* low-resolution technology for terminals, with only */
/* nine scan lines per fixed-size character glyph. */
/* Even-numbered scan lines are unified with box */
/* drawing graphics." */
/* The utility of these is questionable; they'd */
/* work Just Fine in wingdi (_if_ the appropriate */
/* glyphs are available), but not elsewhere. */
#define HORIZ_SCAN_LINE_1 CHOOSE( 0x2d, 0x23ba, 16)
#define HORIZ_SCAN_LINE_3 CHOOSE( 0x2d, 0x23bb, 17)
#define HORIZ_SCAN_LINE_7 CHOOSE( 0x2d, 0x23bc, 19)
#define HORIZ_SCAN_LINE_9 CHOOSE( '_', 0x23bd, 20)
/* Code page 437 lacks a 'for real' not-equals, so for that, */
/* we use the double-horizontal single-vertical box drawing : */
#define NOT_EQUALS_SIGN CHOOSE( 0xd8, 0x2260, 29)
# define A(x) ((chtype)x | A_ALTCHARSET)
chtype acs_map[128] =
{
A(0), A(1), A(2), A(3), A(4), A(5), A(6), A(7), A(8),
A(9), A(10),
CLUB, HEART, SPADE, SMILE, REV_SMILE, /* 11 12 13 14 15 */
MEDIUM_BULLET, WHITE_BULLET, PILCROW, SECTION_SIGN, /* 16 17 18 19 */
A_ORDINAL, O_ORDINAL, LOWERCASE_PHI, /* 20 21 22 */
INVERTED_EXCLAMATION_MARK, INVERTED_QUESTION_MARK, /* 23 24 */
REVERSED_NOT_SIGN, NOT_SIGN, /* 25 26 */
UPPER_HALF_INTEGRAL_SIGN, LOWER_HALF_INTEGRAL_SIGN, /* 27 28 */
SUPERSCRIPT_N, CENTERED_SQUARE, F_WITH_HOOK, /* 29 30 31 */
RIGHT_ARROW, LEFT_ARROW, UP_ARROW, DOWN_ARROW, /* 32 !"# */
PI, NOT_EQUALS_SIGN, VULGAR_HALF, VULGAR_QUARTER, /* $%&' */
'(',
LEFT_ANGLE_QUOTE_MARK, RIGHT_ANGLE_QUOTE_MARK, /* )* */
DARK_SHADE, SUPERSCRIPT_2, INFINITY_SIGN, /* +,- */
ALPHA, BETA, GAMMA, UPPERCASE_SIGMA, LOWERCASE_SIGMA, /* ./012 */
'3',
MU, TAU, UPPERCASE_PHI, THETA, OMEGA, DELTA, EPSILON, /* 456789: */
BOX_SD_LRCORNER, BOX_SD_URCORNER, BOX_SD_ULCORNER, /* ;<= */
BOX_SD_LLCORNER, BOX_SD_PLUS, /* >? */
BOX_SD_LTEE, BOX_SD_RTEE, BOX_SD_BTEE, BOX_SD_TTEE, /* @ABC */
BOX_D_LRCORNER, BOX_D_URCORNER, BOX_D_ULCORNER, /* DEF */
BOX_D_LLCORNER, BOX_D_PLUS, /* GH */
BOX_D_LTEE, BOX_D_RTEE, BOX_D_BTEE, BOX_D_TTEE, /* IJKL */
BOX_DS_LRCORNER, BOX_DS_URCORNER, BOX_DS_ULCORNER, /* MNO */
BOX_DS_LLCORNER, BOX_DS_PLUS, /* PQ */
BOX_DS_LTEE, BOX_DS_RTEE, BOX_DS_BTEE, BOX_DS_TTEE, /* RSTU */
BOX_LRCORNER, BOX_URCORNER, BOX_ULCORNER, /* VWX */
BOX_LLCORNER, BOX_PLUS, /* YZ */
BOX_LTEE, BOX_RTEE, BOX_BTEE, BOX_TTEE, /* [\]^ */
BOX_HLINE, BOX_VLINE, BOX_D_HLINE, BOX_D_VLINE, /* _`ab */
DIVISION_SIGN, APPROXIMATELY_EQUALS_SIGN, /* cd */
INTERSECTION, TRIPLE_BAR, /* ef */
SMALL_BULLET, LARGE_BULLET, SQUARE_ROOT, /* ghi */
DIAMOND, MEDIUM_SHADE, /* jk */
HORIZ_SCAN_LINE_1, HORIZ_SCAN_LINE_3, /* lm */
HORIZ_SCAN_LINE_7, HORIZ_SCAN_LINE_9, /* no */
UPPER_HALF_BLOCK, LOWER_HALF_BLOCK, /* pq */
LEFT_HALF_BLOCK, RIGHT_HALF_BLOCK, FULL_BLOCK, /* rst */
LESSER_THAN_OR_EQUAL_TO, GREATER_THAN_OR_EQUAL_TO, /* uv */
DEGREE_SIGN, PLUS_OR_MINUS, LIGHT_SHADE, SPLAT, /* wxyz */
CENT_SIGN, YEN_SIGN, PESETA_SIGN, STERLING_SIGN, /* {|}~ */
A(127)
};
# undef A

View File

@ -0,0 +1,27 @@
/* PDCurses */
#include <curspriv.h>
/* Deprecated functions. These should not be used, and will eventually
be removed. They're here solely for the benefit of applications that
linked to them in older versions of PDCurses. */
bool PDC_check_bios_key(void)
{
return PDC_check_key();
}
int PDC_get_bios_key(void)
{
return PDC_get_key();
}
bool PDC_get_ctrl_break(void)
{
return !SP->raw_inp;
}
int PDC_set_ctrl_break(bool setting)
{
return setting ? noraw() : raw();
}

View File

@ -1278,84 +1278,81 @@ struct BACK_BUFFER {
HANDLE original_object;
RECT rect;
bool is_rect_valid;
} backBuffer;
} back_buffer;
static void PrepareBackBuffer(HDC hdc, RECT rect)
{
memset(&backBuffer, 0, sizeof(backBuffer));
int width = rect.right - rect.left;
int height = rect.bottom - rect.top;
backBuffer.rect = rect;
backBuffer.window_dc = hdc;
backBuffer.memory_dc = CreateCompatibleDC(hdc);
backBuffer.memory_bitmap = CreateCompatibleBitmap(hdc, width, height);
backBuffer.original_object =
SelectObject(backBuffer.memory_dc, backBuffer.memory_bitmap);
backBuffer.is_rect_valid = width > 0 && height > 0;
memset(&back_buffer, 0, sizeof(back_buffer));
back_buffer.rect = rect;
back_buffer.window_dc = hdc;
back_buffer.memory_dc = CreateCompatibleDC(hdc);
back_buffer.memory_bitmap = CreateCompatibleBitmap(hdc, width, height);
back_buffer.original_object =
SelectObject(back_buffer.memory_dc, back_buffer.memory_bitmap);
back_buffer.is_rect_valid = width > 0 && height > 0;
}
static void BlitBackBuffer()
{
if (backBuffer.is_rect_valid)
const RECT* r = NULL;
int width = 0;
int height = 0;
if (back_buffer.is_rect_valid)
{
const RECT* r = &backBuffer.rect;
int width = r->right - r->left;
int height = r->bottom - r->top;
r = &back_buffer.rect;
width = r->right - r->left;
height = r->bottom - r->top;
BitBlt(
backBuffer.window_dc,
back_buffer.window_dc,
r->left, r->top,
width, height,
backBuffer.memory_dc,
back_buffer.memory_dc,
0, 0,
SRCCOPY);
}
SelectObject(backBuffer.memory_dc, backBuffer.original_object);
DeleteObject(backBuffer.memory_bitmap);
DeleteObject(backBuffer.memory_dc);
memset(&backBuffer, 0, sizeof(backBuffer));
SelectObject(back_buffer.memory_dc, back_buffer.original_object);
DeleteObject(back_buffer.memory_bitmap);
DeleteObject(back_buffer.memory_dc);
memset(&back_buffer, 0, sizeof(back_buffer));
}
static void HandlePaint( HWND hwnd )
{
PAINTSTRUCT ps;
HDC windowDC, memoryDC;
RECT clientRect;
HDC window_dc, memory_dc;
RECT client_rect;
HBRUSH old_brush;
int i;
/* printf( "In HandlePaint: %ld %ld, %ld %ld\n",
rect.left, rect.top, rect.right, rect.bottom); */
windowDC = BeginPaint( hwnd, &ps);
GetClientRect(hwnd, &clientRect);
window_dc = BeginPaint( hwnd, &ps);
GetClientRect(hwnd, &client_rect);
PrepareBackBuffer(windowDC, clientRect);
memoryDC = backBuffer.memory_dc;
PrepareBackBuffer(window_dc, client_rect);
memory_dc = back_buffer.memory_dc;
{
/* paint the background black. */
const HBRUSH hOldBrush =
SelectObject(memoryDC, GetStockObject(BLACK_BRUSH));
Rectangle(memoryDC,
clientRect.left, clientRect.top,
clientRect.right, clientRect.bottom);
SelectObject(memoryDC, hOldBrush);
old_brush = SelectObject(memory_dc, GetStockObject(BLACK_BRUSH));
Rectangle(memory_dc,
client_rect.left, client_rect.top,
client_rect.right, client_rect.bottom);
SelectObject(memory_dc, old_brush);
/* paint all the rows */
if (curscr && curscr->_y)
if (curscr && curscr->_y && PDC_n_cols > 0 && PDC_n_rows > 0)
{
int i, x1, n_chars;
x1 = clientRect.left / PDC_cxChar;
n_chars = clientRect.right / PDC_cxChar - x1 + 1;
if (n_chars > SP->cols - x1)
n_chars = SP->cols - x1;
if (n_chars > 0)
for (i = clientRect.top / PDC_cyChar; i <= clientRect.bottom / PDC_cyChar; i++)
if (i < SP->lines && curscr->_y[i])
PDC_transform_line_given_hdc(memoryDC, i, x1,
n_chars, curscr->_y[i] + x1);
for (i = 0; i < PDC_n_rows; i++)
if (i < SP->lines && curscr->_y[i])
PDC_transform_line_given_hdc(memory_dc, i, 0, PDC_n_cols, curscr->_y[i]);
}
}
BlitBackBuffer();
EndPaint( hwnd, &ps );
EndPaint(hwnd, &ps);
}
static bool key_already_handled = FALSE;
@ -1753,14 +1750,14 @@ static LRESULT ALIGN_STACK CALLBACK WndProc (const HWND hwnd,
{
case WM_SIZING:
HandleSizing( wParam, lParam );
return( TRUE );
return 1;
case WM_SIZE:
/* If ignore_resize = 1, don't bother resizing; */
/* the final window size has yet to be set */
if( ignore_resize == FALSE)
HandleSize( wParam, lParam);
return 0 ;
return 0;
case WM_MOUSEWHEEL:
case WM_MOUSEHWHEEL:
@ -2070,7 +2067,8 @@ INLINE int set_up_window( void)
HANDLE hInstance = GetModuleHandle( NULL);
int n_default_columns = 80;
int n_default_rows = 25;
int xsize, ysize, window_style;
int xsize, ysize;
DWORD window_style, window_ex_style;
int xloc = CW_USEDEFAULT;
int yloc = CW_USEDEFAULT;
TCHAR WindowTitle[MAX_PATH];
@ -2141,7 +2139,7 @@ INLINE int set_up_window( void)
else /* fixed-size window: looks "normal", but w/o a maximize box */
window_style = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX;
DWORD window_ex_style = WS_EX_CLIENTEDGE;
window_ex_style = WS_EX_CLIENTEDGE;
if( n_default_columns == -1)
xsize = ysize = CW_USEDEFAULT;