| To: vim_dev@googlegroups.com |
| Subject: Patch 7.4.332 |
| Fcc: outbox |
| From: Bram Moolenaar <Bram@moolenaar.net> |
| Mime-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| |
| Patch 7.4.332 |
| Problem: GTK: When a sign icon doesn't fit exactly there can be ugly gaps. |
| Solution: Scale the sign to fit when the aspect ratio is not too far off. |
| (Christian Brabandt) |
| Files: src/gui_gtk_x11.c |
| |
| |
| |
| |
| |
| *** 5965,5991 **** |
| * Decide whether we need to scale. Allow one pixel of border |
| * width to be cut off, in order to avoid excessive scaling for |
| * tiny differences in font size. |
| */ |
| need_scale = (width > SIGN_WIDTH + 2 |
| ! || height > SIGN_HEIGHT + 2 |
| || (width < 3 * SIGN_WIDTH / 4 |
| && height < 3 * SIGN_HEIGHT / 4)); |
| if (need_scale) |
| { |
| ! double aspect; |
| |
| /* Keep the original aspect ratio */ |
| aspect = (double)height / (double)width; |
| width = (double)SIGN_WIDTH * SIGN_ASPECT / aspect; |
| width = MIN(width, SIGN_WIDTH); |
| ! height = (double)width * aspect; |
| |
| ! /* This doesn't seem to be worth caching, and doing so |
| ! * would complicate the code quite a bit. */ |
| ! sign = gdk_pixbuf_scale_simple(sign, width, height, |
| ! GDK_INTERP_BILINEAR); |
| ! if (sign == NULL) |
| ! return; /* out of memory */ |
| } |
| |
| /* The origin is the upper-left corner of the pixmap. Therefore |
| --- 5965,6012 ---- |
| * Decide whether we need to scale. Allow one pixel of border |
| * width to be cut off, in order to avoid excessive scaling for |
| * tiny differences in font size. |
| + * Do scale to fit the height to avoid gaps because of linespacing. |
| */ |
| need_scale = (width > SIGN_WIDTH + 2 |
| ! || height != SIGN_HEIGHT |
| || (width < 3 * SIGN_WIDTH / 4 |
| && height < 3 * SIGN_HEIGHT / 4)); |
| if (need_scale) |
| { |
| ! double aspect; |
| ! int w = width; |
| ! int h = height; |
| |
| /* Keep the original aspect ratio */ |
| aspect = (double)height / (double)width; |
| width = (double)SIGN_WIDTH * SIGN_ASPECT / aspect; |
| width = MIN(width, SIGN_WIDTH); |
| ! if (((double)(MAX(height, SIGN_HEIGHT)) / |
| ! (double)(MIN(height, SIGN_HEIGHT))) < 1.15) |
| ! { |
| ! /* Change the aspect ratio by at most 15% to fill the |
| ! * available space completly. */ |
| ! height = (double)SIGN_HEIGHT * SIGN_ASPECT / aspect; |
| ! height = MIN(height, SIGN_HEIGHT); |
| ! } |
| ! else |
| ! height = (double)width * aspect; |
| |
| ! if (w == width && h == height) |
| ! { |
| ! /* no change in dimensions; don't decrease reference counter |
| ! * (below) */ |
| ! need_scale = FALSE; |
| ! } |
| ! else |
| ! { |
| ! /* This doesn't seem to be worth caching, and doing so would |
| ! * complicate the code quite a bit. */ |
| ! sign = gdk_pixbuf_scale_simple(sign, width, height, |
| ! GDK_INTERP_BILINEAR); |
| ! if (sign == NULL) |
| ! return; /* out of memory */ |
| ! } |
| } |
| |
| /* The origin is the upper-left corner of the pixmap. Therefore |
| |
| |
| |
| *** 736,737 **** |
| --- 736,739 ---- |
| { /* Add new patch number below this line */ |
| + /**/ |
| + 332, |
| /**/ |
| |
| -- |
| "To whoever finds this note - |
| I have been imprisoned by my father who wishes me to marry |
| against my will. Please please please please come and rescue me. |
| I am in the tall tower of Swamp Castle." |
| SIR LAUNCELOT's eyes light up with holy inspiration. |
| "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD |
| |
| /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ |
| /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ |
| \\\ an exciting new programming language -- http://www.Zimbu.org /// |
| \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |