To: vim_dev@googlegroups.com Subject: Patch 7.4.332 Fcc: outbox From: Bram Moolenaar 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 *** ../vim-7.4.331/src/gui_gtk_x11.c 2014-05-13 20:19:53.573808877 +0200 --- src/gui_gtk_x11.c 2014-06-17 18:44:39.900755807 +0200 *************** *** 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 *** ../vim-7.4.331/src/version.c 2014-06-17 18:16:08.420691059 +0200 --- src/version.c 2014-06-17 18:46:49.784760721 +0200 *************** *** 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 ///