[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: About x_draw_xwidget_glyph_string
From: |
joakim |
Subject: |
Re: About x_draw_xwidget_glyph_string |
Date: |
Mon, 25 Jan 2016 07:59:07 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/25.0.50 (gnu/linux) |
YAMAMOTO Mitsuharu <address@hidden> writes:
> I have a question and a comment about x_draw_xwidget_glyph_string in
> src/xwidget.c.
>
> 1. Question about xwidget initialization.
>
> 559 x_draw_xwidget_glyph_string (struct glyph_string *s)
> 560 {
> 561 /* This method is called by the redisplay engine and places
> the
> 562 xwidget on screen. Moving and clipping is done here.
> Also view
> 563 initialization. */
> 564 struct xwidget *xww = s->xwidget;
> 565 struct xwidget_view *xv = xwidget_view_lookup (xww, s->w);
> (snip)
> 574 /* Do initialization here in the display loop because there
> is no
> 575 other time to know things like window placement etc. */
> 576 xv = xwidget_init_view (xww, s, x, y);
>
> Line 576 indicates a new xwidget view is created in every
> x_draw_xwidget_glyph_string call. But this makes xwidget-view-list
> longer and longer, and looks like a waste of memory, if not a leak.
> Also, if it is an intended behavior, then it looks strange to look up
> a view at Line 565.
>
> 2. Comment on clipping.
>
> 578 /* Calculate clipping, which is used for all manner of
> onscreen
> 579 xwidget views. Each widget border can get clipped by
> other emacs
> 580 objects so there are four clipping variables. */
> 581 clip_right =
> 582 min (xww->width,
> 583 WINDOW_RIGHT_EDGE_X (s->w) - x -
> 584 WINDOW_RIGHT_SCROLL_BAR_AREA_WIDTH (s->w) -
> 585 WINDOW_RIGHT_FRINGE_WIDTH (s->w));
> 586 clip_left =
> 587 max (0,
> 588 WINDOW_LEFT_EDGE_X (s->w) - x +
> 589 WINDOW_LEFT_SCROLL_BAR_AREA_WIDTH (s->w) +
> 590 WINDOW_LEFT_FRINGE_WIDTH (s->w));
> 591
> 592 clip_bottom =
> 593 min (xww->height,
> 594 WINDOW_BOTTOM_EDGE_Y (s->w) - WINDOW_MODE_LINE_HEIGHT
> (s->w) - y);
> 595 clip_top = max (0, WINDOW_TOP_EDGE_Y (s->w) - y);
>
> I think the calculation of clipping should use the function window_box
> rather than manual calculation with various window macros. Otherwise,
> xwidget views will cover horizontal scroll bars, for example.
>
> YAMAMOTO Mitsuharu
> address@hidden
>
I won't have time to have a look at this until a couple of days, but
your suggestions sound promising. If you have a patch I can test I would
be grateful.
--
Joakim Verona