on WM_COMMAND */
| 665 | |
| 666 | /* on WM_COMMAND */ |
| 667 | void |
| 668 | onMSNHCommand(HWND hWnd, WPARAM wParam, LPARAM lParam) |
| 669 | { |
| 670 | PNHMapWindow data; |
| 671 | |
| 672 | data = (PNHMapWindow) GetWindowLongPtr(hWnd, GWLP_USERDATA); |
| 673 | switch (wParam) { |
| 674 | case MSNH_MSG_PRINT_GLYPH: { |
| 675 | PMSNHMsgPrintGlyph msg_data = (PMSNHMsgPrintGlyph) lParam; |
| 676 | setGlyph(data, msg_data->x, msg_data->y, |
| 677 | &msg_data->glyphinfo, &msg_data->bkglyphinfo); |
| 678 | } break; |
| 679 | |
| 680 | case MSNH_MSG_CLIPAROUND: { |
| 681 | PMSNHMsgClipAround msg_data = (PMSNHMsgClipAround) lParam; |
| 682 | int x, y; |
| 683 | BOOL scroll_x, scroll_y; |
| 684 | int mcam = iflags.wc_scroll_margin; |
| 685 | |
| 686 | /* calculate if you should clip around */ |
| 687 | scroll_x = |
| 688 | !GetNHApp()->bNoHScroll |
| 689 | && (msg_data->x < (data->xPos + mcam) |
| 690 | || msg_data->x > (data->xPos + data->xPageSize - mcam)); |
| 691 | scroll_y = |
| 692 | !GetNHApp()->bNoVScroll |
| 693 | && (msg_data->y < (data->yPos + mcam) |
| 694 | || msg_data->y > (data->yPos + data->yPageSize - mcam)); |
| 695 | |
| 696 | mcam += iflags.wc_scroll_amount - 1; |
| 697 | /* get page size and center horizontally on x-position */ |
| 698 | if (scroll_x) { |
| 699 | if (data->xPageSize <= 2 * mcam) { |
| 700 | x = max(0, min(COLNO, msg_data->x - data->xPageSize / 2)); |
| 701 | } else if (msg_data->x < data->xPos + data->xPageSize / 2) { |
| 702 | x = max(0, min(COLNO, msg_data->x - mcam)); |
| 703 | } else { |
| 704 | x = max(0, min(COLNO, msg_data->x - data->xPageSize + mcam)); |
| 705 | } |
| 706 | SendMessage(hWnd, WM_HSCROLL, (WPARAM) MAKELONG(SB_THUMBTRACK, x), |
| 707 | (LPARAM) NULL); |
| 708 | } |
| 709 | |
| 710 | /* get page size and center vertically on y-position */ |
| 711 | if (scroll_y) { |
| 712 | if (data->yPageSize <= 2 * mcam) { |
| 713 | y = max(0, min(ROWNO, msg_data->y - data->yPageSize / 2)); |
| 714 | } else if (msg_data->y < data->yPos + data->yPageSize / 2) { |
| 715 | y = max(0, min(ROWNO, msg_data->y - mcam)); |
| 716 | } else { |
| 717 | y = max(0, min(ROWNO, msg_data->y - data->yPageSize + mcam)); |
| 718 | } |
| 719 | SendMessage(hWnd, WM_VSCROLL, (WPARAM) MAKELONG(SB_THUMBTRACK, y), |
| 720 | (LPARAM) NULL); |
| 721 | } |
| 722 | } break; |
| 723 | |
| 724 | case MSNH_MSG_CLEAR_WINDOW: |
no test coverage detected