Changeset 2995
- Timestamp:
- 2003年02月14日 23時04分57秒 (6 years ago)
- Files:
-
- work/cvs2svn/src/ChangeLog.Meadow (modified) (1 diff)
- work/cvs2svn/src/mw32font.c (modified) (2 diffs)
- work/cvs2svn/src/mw32term.c (modified) (16 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
work/cvs2svn/src/ChangeLog.Meadow
r2993 r2995 1 2003-02-14 MIYOSHI Masanori <miyoshi@boreas.dti.ne.jp> 2 3 * mw32term.c (mw32_destroy_frame_hdc): Clear *pf instead of pf. 4 (mw32_draw_relief_rect): Unify the calls of RestoreDC(). 5 (mw32_draw_image_foreground): Narrow the clipping rectangle. 6 Ensure deletion of HDC and HGDIOBJ. 7 8 * mw32font.c (mw32_set_windows_logical_font): Defer initializing 9 message_thread_hdc. 10 1 11 2003-02-13 MIYOSHI Masanori <miyoshi@boreas.dti.ne.jp> 2 12 work/cvs2svn/src/mw32font.c
r2992 r2995 372 372 mw32_windows_font *pwf; 373 373 HFONT hf; 374 HDC mhdc = INVALID_HANDLE_VALUE;375 376 if (f->output_data.mw32->message_thread_hdc == INVALID_HANDLE_VALUE)377 {378 mhdc = GetDC (FRAME_MW32_WINDOW (f));379 mw32_setup_default_hdc (mhdc);380 f->output_data.mw32->message_thread_hdc = mhdc;381 }382 374 383 375 pwf = (mw32_windows_font*) xmalloc(sizeof(mw32_windows_font)); … … 391 383 TEXTMETRIC tm; 392 384 int flag; 385 HDC mhdc = INVALID_HANDLE_VALUE; 386 387 if (f->output_data.mw32->message_thread_hdc == INVALID_HANDLE_VALUE) 388 { 389 mhdc = GetDC (FRAME_MW32_WINDOW (f)); 390 mw32_setup_default_hdc (mhdc); 391 f->output_data.mw32->message_thread_hdc = mhdc; 392 } 393 393 394 394 hwnd = FRAME_MW32_WINDOW(f); work/cvs2svn/src/mw32term.c
r2993 r2995 544 544 545 545 HDC 546 mw32_get_frame_hdc (struct frame *f)546 mw32_get_frame_hdc (struct frame *f) 547 547 { 548 548 int i; 549 549 HDC *phdc, hdc; 550 550 struct frame **pf; 551 struct mw32_display_info *dpyinfo = FRAME_MW32_DISPLAY_INFO (f);551 struct mw32_display_info *dpyinfo = FRAME_MW32_DISPLAY_INFO (f); 552 552 553 553 phdc = dpyinfo->alloced_DCs; 554 554 pf = dpyinfo->alloced_DC_frames; 555 for (i = 0; i < MAX_DC_NUM;i++)555 for (i = 0; i < MAX_DC_NUM; i++) 556 556 { 557 557 if (*phdc == INVALID_HANDLE_VALUE) 558 558 { 559 hdc = GetDC (FRAME_MW32_WINDOW (f));559 hdc = GetDC (FRAME_MW32_WINDOW (f)); 560 560 f->output_data.mw32->hdc = *phdc = hdc; 561 561 *pf = f; … … 571 571 572 572 RestoreDC (*phdc, -1); 573 ReleaseDC (FRAME_MW32_WINDOW (*pf), *phdc);573 ReleaseDC (FRAME_MW32_WINDOW (*pf), *phdc); 574 574 pf[0]->output_data.mw32->hdc = INVALID_HANDLE_VALUE; 575 memmove (phdc, phdc + 1, sizeof(HDC) * (MAX_DC_NUM - 1));576 memmove (pf, pf + 1, sizeof(struct frame*) * (MAX_DC_NUM - 1));577 hdc = GetDC (FRAME_MW32_WINDOW (f));575 memmove (phdc, phdc + 1, sizeof (HDC) * (MAX_DC_NUM - 1)); 576 memmove (pf, pf + 1, sizeof (struct frame*) * (MAX_DC_NUM - 1)); 577 hdc = GetDC (FRAME_MW32_WINDOW (f)); 578 578 f->output_data.mw32->hdc = phdc[MAX_DC_NUM - 1] = hdc; 579 579 pf[MAX_DC_NUM - 1] = f; … … 589 589 590 590 void 591 mw32_destroy_frame_hdc (struct frame *f)591 mw32_destroy_frame_hdc (struct frame *f) 592 592 { 593 593 HDC hdc; … … 597 597 { 598 598 int i; 599 struct mw32_display_info *dpyinfo = FRAME_MW32_DISPLAY_INFO (f);599 struct mw32_display_info *dpyinfo = FRAME_MW32_DISPLAY_INFO (f); 600 600 HDC *phdc = dpyinfo->alloced_DCs; 601 601 struct frame **pf = dpyinfo->alloced_DC_frames; 602 602 603 for (i = 0; i < MAX_DC_NUM;i++)603 for (i = 0; i < MAX_DC_NUM; i++) 604 604 { 605 605 if (*phdc == hdc) 606 606 { 607 xassert (*pf == f);607 xassert (*pf == f); 608 608 f->output_data.mw32->hdc = *phdc = INVALID_HANDLE_VALUE; 609 pf = NULL;609 *pf = NULL; 610 610 break; 611 611 } … … 613 613 pf++; 614 614 } 615 xassert (i < MAX_DC_NUM);615 xassert (i < MAX_DC_NUM); 616 616 RestoreDC (hdc, -1); 617 617 ReleaseDC (FRAME_MW32_WINDOW(f), hdc); 618 f->output_data.mw32->hdc = INVALID_HANDLE_VALUE;619 618 } 620 619 } … … 3623 3622 bottom_y--; 3624 3623 right_x--; 3625 if (width <= 0) return;3626 3624 if (width == 1) 3627 3625 { … … 3650 3648 /* To draw the point (left_x, bottom_y), sub 1 to the end. */ 3651 3649 LineTo (hdc, left_x - 1, bottom_y); 3652 3653 RestoreDC (hdc, -1); 3654 } 3655 else 3650 } 3651 else if (width > 1) 3656 3652 { 3657 3653 HBRUSH hb1, hb2; … … 3708 3704 right_x + 1, bottom_y + 1); 3709 3705 } 3710 RestoreDC (hdc, -1);3711 3706 DeleteObject (hb1); 3712 3707 DeleteObject (hb2); 3713 3708 } 3709 RestoreDC (hdc, -1); 3714 3710 DeleteObject (hp1); 3715 3711 DeleteObject (hp2); … … 3860 3856 { 3861 3857 DeleteObject (*phbmp); 3858 *phbmp = 0; 3862 3859 return 0; 3863 3860 } … … 3873 3870 mw32_draw_image_foreground (struct glyph_string *s) 3874 3871 { 3875 HBITMAP hbmp, hbmpmask, holdbmp; 3876 HDC hdcimg; 3872 HBITMAP hbmp, hbmpmask; 3877 3873 int x; 3878 3874 int y = s->ybase - image_ascent (s->img, s->face); … … 3895 3891 { 3896 3892 RECT clip_rect, image_rect, r; 3897 hdcimg = CreateCompatibleDC (s->hdc);3893 HDC hdcimg = CreateCompatibleDC (s->hdc); 3898 3894 if (!hdcimg) return; 3899 3895 … … 3901 3897 image_rect.left = x; 3902 3898 image_rect.top = y; 3903 image_rect.right = x + s->img->width ;3904 image_rect.bottom = y + s->img->height ;3899 image_rect.right = x + s->img->width - 1; 3900 image_rect.bottom = y + s->img->height - 1; 3905 3901 3906 3902 if (mw32_intersect_rectangles (&clip_rect, &image_rect, &r)) 3907 3903 { 3908 holdbmp = SelectObject (hdcimg, hbmp);3904 HGDIOBJ holdbmp = SelectObject (hdcimg, hbmp); 3909 3905 /* we ignore s->img->mask. Use hbmpmask instead. */ 3910 3906 if (hbmpmask) … … 3914 3910 { 3915 3911 HBITMAP hsrc = CreateCompatibleBitmap (s->hdc, 3916 r.right - r.left + 1,3912 r.right - r.left + 1, 3917 3913 r.bottom - r.top + 1); 3918 3914 if (hsrc) 3919 3915 { 3920 SelectObject (hdc_src, hsrc);3916 HGDIOBJ hsrc_old = SelectObject (hdc_src, hsrc); 3921 3917 3922 3918 /* Fill the background area with black mask. */ … … 3944 3940 r.right - r.left + 1, r.bottom - r.top + 1, 3945 3941 hdc_src, 0, 0, SRCPAINT); 3946 DeleteObject (hsrc);3942 SelectObject (hdc_src, hsrc_old); 3947 3943 } 3948 DeleteObject (hdc_src); 3944 DeleteDC (hdc_src); 3945 DeleteObject (hsrc); 3949 3946 } 3950 3947 } 3951 3948 else 3952 3949 { 3953 holdbmp = SelectObject (hdcimg, hbmp);3954 3950 BitBlt (s->hdc, 3955 3951 r.left, r.top, … … 3957 3953 hdcimg, 0, 0, SRCCOPY); 3958 3954 } 3959 } 3955 SelectObject (hdcimg, holdbmp); 3956 } 3957 DeleteDC (hdcimg); 3958 DeleteObject (hbmp); 3959 DeleteObject (hbmpmask); 3960 3960 3961 /* When the image has a mask, we can expect that at 3961 3962 least part of a mouse highlight or a block cursor will … … 3973 3974 SelectObject (s->hdc, hold); 3974 3975 } 3975 3976 SelectObject (hdcimg, holdbmp);3977 DeleteDC (hdcimg);3978 DeleteObject (hbmp);3979 if (hbmpmask) DeleteObject (hbmpmask);3980 3976 } 3981 3977 else
