emacs-devel
[Top][All Lists]
Advanced

[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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]