From unknown Sat Aug 16 18:19:16 2025 X-Loop: help-debbugs@gnu.org Subject: bug#7316: 24.0.50; [PATCH] Add support for GIF transparency Resent-From: Julien Danjou Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-To: owner@debbugs.gnu.org Resent-CC: rfrancoise@debian.org, bug-gnu-emacs@gnu.org Resent-Date: Tue, 02 Nov 2010 13:36:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 7316 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: 7316@debbugs.gnu.org Cc: rfrancoise@debian.org X-Debbugs-Original-To: bug-gnu-emacs@gnu.org X-Debbugs-Original-Xcc: rfrancoise@debian.org Received: via spool by submit@debbugs.gnu.org id=B.128870495229908 (code B ref -1); Tue, 02 Nov 2010 13:36:02 +0000 Received: (at submit) by debbugs.gnu.org; 2 Nov 2010 13:35:52 +0000 Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1PDH1j-0007mL-5C for submit@debbugs.gnu.org; Tue, 02 Nov 2010 09:35:51 -0400 Received: from eggs.gnu.org ([140.186.70.92]) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1PDH1c-0007m9-Hl for submit@debbugs.gnu.org; Tue, 02 Nov 2010 09:35:49 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PDH5m-0000Jd-7N for submit@debbugs.gnu.org; Tue, 02 Nov 2010 09:40:07 -0400 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=unavailable version=3.3.1 Received: from lists.gnu.org ([199.232.76.165]:38019) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PDH5m-0000JW-22 for submit@debbugs.gnu.org; Tue, 02 Nov 2010 09:40:02 -0400 Received: from [140.186.70.92] (port=36134 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PDH5g-0004PX-E1 for bug-gnu-emacs@gnu.org; Tue, 02 Nov 2010 09:40:01 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PDDLX-0003Z1-PX for bug-gnu-emacs@gnu.org; Tue, 02 Nov 2010 05:40:06 -0400 Received: from coquelicot-s.easter-eggs.com ([213.215.37.94]:34944) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PDDLW-0003Xf-3i for bug-gnu-emacs@gnu.org; Tue, 02 Nov 2010 05:40:03 -0400 Received: from cigue.easter-eggs.fr (cigue.easter-eggs.fr [10.0.0.33]) by rose.easter-eggs.fr (Postfix) with ESMTPS id CF49E14047 for ; Tue, 2 Nov 2010 10:39:57 +0100 (CET) Received: from jdanjou by cigue.easter-eggs.fr with local (Exim 4.72) (envelope-from ) id 1PDDLT-0001zt-3g for bug-gnu-emacs@gnu.org; Tue, 02 Nov 2010 10:39:59 +0100 From: Julien Danjou Date: Tue, 02 Nov 2010 10:39:59 +0100 Message-ID: User-Agent: Gnus/5.110011 (No Gnus v0.11) Emacs/24.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6, seldom 2.4 (older, 4) X-Spam-Score: -5.4 (-----) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: -5.5 (-----) --=-=-= Content-Type: text/plain Attached are 2 patches adding correct transparency support for GIF images inside Emacs. --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=gif-1.diff >From nobody Tue Nov 2 10:39:02 2010 Return-Path: Delivered-To: jd@danjou.info Received: by mx1.naquadah.org (Postfix, from userid 8) id 759E15C156; Wed, 27 Oct 2010 18:21:47 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on prometheus.naquadah.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=4.5 tests=BAYES_00,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [199.232.76.165]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.naquadah.org (Postfix) with ESMTPS id CFC485C0FB for ; Wed, 27 Oct 2010 18:21:37 +0200 (CEST) Received: from localhost ([127.0.0.1]:41338 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PB8jo-0007sh-T3 for julien@danjou.info; Wed, 27 Oct 2010 12:20:32 -0400 Received: from [140.186.70.92] (port=36740 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PB8DC-0002Ay-0N for emacs-devel@gnu.org; Wed, 27 Oct 2010 11:47:02 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PB7Uj-0008Td-Q7 for emacs-devel@gnu.org; Wed, 27 Oct 2010 11:01:05 -0400 Received: from coquelicot-s.easter-eggs.com ([213.215.37.94]:57239) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PB7Uj-0008TR-Kj for emacs-devel@gnu.org; Wed, 27 Oct 2010 11:00:53 -0400 Received: from cigue.easter-eggs.fr (cigue.easter-eggs.fr [10.0.0.33]) by rose.easter-eggs.fr (Postfix) with ESMTPS id 307B71409D; Wed, 27 Oct 2010 17:00:49 +0200 (CEST) Received: from jdanjou by cigue.easter-eggs.fr with local (Exim 4.72) (envelope-from ) id 1PB7Ui-00012M-Lo; Wed, 27 Oct 2010 17:00:52 +0200 From: Julien Danjou To: emacs-devel@gnu.org Date: Wed, 27 Oct 2010 17:00:50 +0200 Message-Id: <1288191651-3958-1-git-send-email-julien@danjou.info> X-Mailer: git-send-email 1.7.2.3 In-Reply-To: References: X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) Cc: Julien Danjou Subject: [PATCH 1/2] image: add support for GIF transparency X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Mailman-Copy: yes Sender: emacs-devel-bounces+julien=danjou.info@gnu.org Errors-To: emacs-devel-bounces+julien=danjou.info@gnu.org Signed-off-by: Julien Danjou --- src/ChangeLog | 4 ++++ src/image.c | 27 +++++++++++++++++++++++---- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 51645ac..3d9b6bf 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2010-10-27 Julien Danjou + + * image.c (gif_load): Add support for transparency. + 2010-10-26 Juanma Barranquero * eval.c (init_eval_once): Set max_lisp_eval_depth to 600; diff --git a/src/image.c b/src/image.c index b7edf05..e9b85fa 100644 --- a/src/image.c +++ b/src/image.c @@ -7096,12 +7096,15 @@ gif_read_from_memory (GifFileType *file, GifByteType *buf, int len) static const int interlace_start[] = {0, 4, 2, 1}; static const int interlace_increment[] = {8, 8, 4, 2}; +#define GIF_LOCAL_DESCRIPTOR_EXTENSION 249 + static int gif_load (struct frame *f, struct image *img) { Lisp_Object file, specified_file; Lisp_Object specified_data; int rc, width, height, x, y, i; + boolean transparent_p; XImagePtr ximg; ColorMapObject *gif_color_map; unsigned long pixel_colors[256]; @@ -7110,6 +7113,7 @@ gif_load (struct frame *f, struct image *img) int ino, image_height, image_width; gif_memory_source memsrc; unsigned char *raster; + unsigned int transparency_color_index; specified_file = image_spec_value (img->spec, QCfile, NULL); specified_data = image_spec_value (img->spec, QCdata, NULL); @@ -7182,6 +7186,16 @@ gif_load (struct frame *f, struct image *img) return 0; } + for(i = 0; i < gif->SavedImages[ino].ExtensionBlockCount; i++) + if (gif->SavedImages[ino].ExtensionBlocks[i].Function == GIF_LOCAL_DESCRIPTOR_EXTENSION + && gif->SavedImages[ino].ExtensionBlocks[i].ByteCount == 4 + /* Transparency enabled? */ + && gif->SavedImages[ino].ExtensionBlocks[i].Bytes[0] & 1) + { + transparent_p = 1; + transparency_color_index = (unsigned char) gif->SavedImages[ino].ExtensionBlocks[i].Bytes[3]; + } + img->corners[TOP_CORNER] = gif->SavedImages[ino].ImageDesc.Top; img->corners[LEFT_CORNER] = gif->SavedImages[ino].ImageDesc.Left; image_height = gif->SavedImages[ino].ImageDesc.Height; @@ -7220,10 +7234,15 @@ gif_load (struct frame *f, struct image *img) if (gif_color_map) for (i = 0; i < gif_color_map->ColorCount; ++i) { - int r = gif_color_map->Colors[i].Red << 8; - int g = gif_color_map->Colors[i].Green << 8; - int b = gif_color_map->Colors[i].Blue << 8; - pixel_colors[i] = lookup_rgb_color (f, r, g, b); + if (transparent_p && transparency_color_index == i) + pixel_colors[i] = FRAME_BACKGROUND_PIXEL (f); + else + { + int r = gif_color_map->Colors[i].Red << 8; + int g = gif_color_map->Colors[i].Green << 8; + int b = gif_color_map->Colors[i].Blue << 8; + pixel_colors[i] = lookup_rgb_color (f, r, g, b); + } } #ifdef COLOR_TABLE_SUPPORT -- 1.7.2.3 --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=gif-2.diff >From nobody Tue Nov 2 10:39:05 2010 Return-Path: Delivered-To: jd@danjou.info Received: by mx1.naquadah.org (Postfix, from userid 8) id 5BFBD5C17C; Wed, 27 Oct 2010 18:09:48 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on prometheus.naquadah.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=4.5 tests=BAYES_00,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [199.232.76.165]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.naquadah.org (Postfix) with ESMTPS id EB16A5C159 for ; Wed, 27 Oct 2010 18:09:45 +0200 (CEST) Received: from localhost ([127.0.0.1]:41062 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PB8ZL-0008PA-M2 for julien@danjou.info; Wed, 27 Oct 2010 12:09:43 -0400 Received: from [140.186.70.92] (port=42377 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PB8DB-0002x0-LR for emacs-devel@gnu.org; Wed, 27 Oct 2010 11:46:57 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PB7Uk-0008Tu-9U for emacs-devel@gnu.org; Wed, 27 Oct 2010 11:01:08 -0400 Received: from coquelicot-s.easter-eggs.com ([213.215.37.94]:57242) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PB7Uk-0008Ta-1x for emacs-devel@gnu.org; Wed, 27 Oct 2010 11:00:54 -0400 Received: from cigue.easter-eggs.fr (cigue.easter-eggs.fr [10.0.0.33]) by rose.easter-eggs.fr (Postfix) with ESMTPS id E88E01425C; Wed, 27 Oct 2010 17:00:49 +0200 (CEST) Received: from jdanjou by cigue.easter-eggs.fr with local (Exim 4.72) (envelope-from ) id 1PB7Uj-00012P-EL; Wed, 27 Oct 2010 17:00:53 +0200 From: Julien Danjou To: emacs-devel@gnu.org Date: Wed, 27 Oct 2010 17:00:51 +0200 Message-Id: <1288191651-3958-2-git-send-email-julien@danjou.info> X-Mailer: git-send-email 1.7.2.3 In-Reply-To: References: X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) Cc: Julien Danjou Subject: [PATCH 2/2] image: add support for specified :background on GIF X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Mailman-Copy: yes Sender: emacs-devel-bounces+julien=danjou.info@gnu.org Errors-To: emacs-devel-bounces+julien=danjou.info@gnu.org Signed-off-by: Julien Danjou --- src/ChangeLog | 1 + src/image.c | 9 ++++++++- 2 files changed, 9 insertions(+), 1 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 3d9b6bf..65d2730 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,6 +1,7 @@ 2010-10-27 Julien Danjou * image.c (gif_load): Add support for transparency. + (gif_load): Add support for specified :background. 2010-10-26 Juanma Barranquero diff --git a/src/image.c b/src/image.c index e9b85fa..ef6a6d0 100644 --- a/src/image.c +++ b/src/image.c @@ -7235,7 +7235,14 @@ gif_load (struct frame *f, struct image *img) for (i = 0; i < gif_color_map->ColorCount; ++i) { if (transparent_p && transparency_color_index == i) - pixel_colors[i] = FRAME_BACKGROUND_PIXEL (f); + { + Lisp_Object specified_bg + = image_spec_value (img->spec, QCbackground, NULL); + if (STRINGP (specified_bg)) + pixel_colors[i] = x_alloc_image_color (f, img, specified_bg, FRAME_BACKGROUND_PIXEL (f)); + else + pixel_colors[i] = FRAME_BACKGROUND_PIXEL (f); + } else { int r = gif_color_map->Colors[i].Red << 8; -- 1.7.2.3 --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Cheers, --=20 Julien Danjou // =E1=90=B0 http://julien.danjou.info --=-=-=-- From unknown Sat Aug 16 18:19:16 2025 MIME-Version: 1.0 X-Mailer: MIME-tools 5.427 (Entity 5.427) X-Loop: help-debbugs@gnu.org From: help-debbugs@gnu.org (GNU bug Tracking System) To: Julien Danjou Subject: bug#7316: closed (Re: bug#7316: Acknowledgement (24.0.50; [PATCH] Add support for GIF transparency)) Message-ID: References: X-Gnu-PR-Message: they-closed 7316 X-Gnu-PR-Package: emacs X-Gnu-PR-Keywords: patch Reply-To: 7316@debbugs.gnu.org Date: Fri, 05 Nov 2010 13:21:02 +0000 Content-Type: multipart/mixed; boundary="----------=_1288963262-20699-1" This is a multi-part message in MIME format... ------------=_1288963262-20699-1 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Your bug report #7316: 24.0.50; [PATCH] Add support for GIF transparency which was filed against the emacs package, has been closed. The explanation is attached below, along with your original report. If you require more details, please reply to 7316@debbugs.gnu.org. --=20 7316: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D7316 GNU Bug Tracking System Contact help-debbugs@gnu.org with problems ------------=_1288963262-20699-1 Content-Type: message/rfc822 Content-Disposition: inline Content-Transfer-Encoding: 7bit Received: (at 7316-done) by debbugs.gnu.org; 5 Nov 2010 13:20:20 +0000 Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1PEMDM-0005Nb-Bt for submit@debbugs.gnu.org; Fri, 05 Nov 2010 09:20:20 -0400 Received: from coquelicot-s.easter-eggs.com ([213.215.37.94]) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1PEMDK-0005NW-2d for 7316-done@debbugs.gnu.org; Fri, 05 Nov 2010 09:20:19 -0400 Received: from cigue.easter-eggs.fr (cigue.easter-eggs.fr [10.0.0.33]) by rose.easter-eggs.fr (Postfix) with ESMTPS id 3D48114047 for <7316-done@debbugs.gnu.org>; Fri, 5 Nov 2010 14:24:44 +0100 (CET) Received: from jdanjou by cigue.easter-eggs.fr with local (Exim 4.72) (envelope-from ) id 1PEMHe-0002Kn-Nx for 7316-done@debbugs.gnu.org; Fri, 05 Nov 2010 14:24:46 +0100 From: Julien Danjou To: 7316-done@debbugs.gnu.org Subject: Re: bug#7316: Acknowledgement (24.0.50; [PATCH] Add support for GIF transparency) References: Date: Fri, 05 Nov 2010 14:24:46 +0100 In-Reply-To: (GNU bug Tracking System's message of "Tue, 02 Nov 2010 13:36:02 +0000") Message-ID: User-Agent: Gnus/5.110011 (No Gnus v0.11) Emacs/24.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: -3.7 (---) X-Debbugs-Envelope-To: 7316-done X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: -3.5 (---) Already merged into trunk. --=20 Julien Danjou // =E1=90=B0 http://julien.danjou.info ------------=_1288963262-20699-1 Content-Type: message/rfc822 Content-Disposition: inline Content-Transfer-Encoding: 7bit Received: (at submit) by debbugs.gnu.org; 2 Nov 2010 13:35:52 +0000 Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1PDH1j-0007mL-5C for submit@debbugs.gnu.org; Tue, 02 Nov 2010 09:35:51 -0400 Received: from eggs.gnu.org ([140.186.70.92]) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1PDH1c-0007m9-Hl for submit@debbugs.gnu.org; Tue, 02 Nov 2010 09:35:49 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PDH5m-0000Jd-7N for submit@debbugs.gnu.org; Tue, 02 Nov 2010 09:40:07 -0400 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=unavailable version=3.3.1 Received: from lists.gnu.org ([199.232.76.165]:38019) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PDH5m-0000JW-22 for submit@debbugs.gnu.org; Tue, 02 Nov 2010 09:40:02 -0400 Received: from [140.186.70.92] (port=36134 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PDH5g-0004PX-E1 for bug-gnu-emacs@gnu.org; Tue, 02 Nov 2010 09:40:01 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PDDLX-0003Z1-PX for bug-gnu-emacs@gnu.org; Tue, 02 Nov 2010 05:40:06 -0400 Received: from coquelicot-s.easter-eggs.com ([213.215.37.94]:34944) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PDDLW-0003Xf-3i for bug-gnu-emacs@gnu.org; Tue, 02 Nov 2010 05:40:03 -0400 Received: from cigue.easter-eggs.fr (cigue.easter-eggs.fr [10.0.0.33]) by rose.easter-eggs.fr (Postfix) with ESMTPS id CF49E14047 for ; Tue, 2 Nov 2010 10:39:57 +0100 (CET) Received: from jdanjou by cigue.easter-eggs.fr with local (Exim 4.72) (envelope-from ) id 1PDDLT-0001zt-3g for bug-gnu-emacs@gnu.org; Tue, 02 Nov 2010 10:39:59 +0100 From: Julien Danjou To: bug-gnu-emacs@gnu.org Subject: 24.0.50; [PATCH] Add support for GIF transparency X-Debbugs-Cc: rfrancoise@debian.org Date: Tue, 02 Nov 2010 10:39:59 +0100 Message-ID: User-Agent: Gnus/5.110011 (No Gnus v0.11) Emacs/24.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6, seldom 2.4 (older, 4) X-Spam-Score: -5.4 (-----) X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: -5.5 (-----) --=-=-= Content-Type: text/plain Attached are 2 patches adding correct transparency support for GIF images inside Emacs. --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=gif-1.diff >From nobody Tue Nov 2 10:39:02 2010 Return-Path: Delivered-To: jd@danjou.info Received: by mx1.naquadah.org (Postfix, from userid 8) id 759E15C156; Wed, 27 Oct 2010 18:21:47 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on prometheus.naquadah.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=4.5 tests=BAYES_00,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [199.232.76.165]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.naquadah.org (Postfix) with ESMTPS id CFC485C0FB for ; Wed, 27 Oct 2010 18:21:37 +0200 (CEST) Received: from localhost ([127.0.0.1]:41338 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PB8jo-0007sh-T3 for julien@danjou.info; Wed, 27 Oct 2010 12:20:32 -0400 Received: from [140.186.70.92] (port=36740 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PB8DC-0002Ay-0N for emacs-devel@gnu.org; Wed, 27 Oct 2010 11:47:02 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PB7Uj-0008Td-Q7 for emacs-devel@gnu.org; Wed, 27 Oct 2010 11:01:05 -0400 Received: from coquelicot-s.easter-eggs.com ([213.215.37.94]:57239) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PB7Uj-0008TR-Kj for emacs-devel@gnu.org; Wed, 27 Oct 2010 11:00:53 -0400 Received: from cigue.easter-eggs.fr (cigue.easter-eggs.fr [10.0.0.33]) by rose.easter-eggs.fr (Postfix) with ESMTPS id 307B71409D; Wed, 27 Oct 2010 17:00:49 +0200 (CEST) Received: from jdanjou by cigue.easter-eggs.fr with local (Exim 4.72) (envelope-from ) id 1PB7Ui-00012M-Lo; Wed, 27 Oct 2010 17:00:52 +0200 From: Julien Danjou To: emacs-devel@gnu.org Date: Wed, 27 Oct 2010 17:00:50 +0200 Message-Id: <1288191651-3958-1-git-send-email-julien@danjou.info> X-Mailer: git-send-email 1.7.2.3 In-Reply-To: References: X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) Cc: Julien Danjou Subject: [PATCH 1/2] image: add support for GIF transparency X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Mailman-Copy: yes Sender: emacs-devel-bounces+julien=danjou.info@gnu.org Errors-To: emacs-devel-bounces+julien=danjou.info@gnu.org Signed-off-by: Julien Danjou --- src/ChangeLog | 4 ++++ src/image.c | 27 +++++++++++++++++++++++---- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 51645ac..3d9b6bf 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2010-10-27 Julien Danjou + + * image.c (gif_load): Add support for transparency. + 2010-10-26 Juanma Barranquero * eval.c (init_eval_once): Set max_lisp_eval_depth to 600; diff --git a/src/image.c b/src/image.c index b7edf05..e9b85fa 100644 --- a/src/image.c +++ b/src/image.c @@ -7096,12 +7096,15 @@ gif_read_from_memory (GifFileType *file, GifByteType *buf, int len) static const int interlace_start[] = {0, 4, 2, 1}; static const int interlace_increment[] = {8, 8, 4, 2}; +#define GIF_LOCAL_DESCRIPTOR_EXTENSION 249 + static int gif_load (struct frame *f, struct image *img) { Lisp_Object file, specified_file; Lisp_Object specified_data; int rc, width, height, x, y, i; + boolean transparent_p; XImagePtr ximg; ColorMapObject *gif_color_map; unsigned long pixel_colors[256]; @@ -7110,6 +7113,7 @@ gif_load (struct frame *f, struct image *img) int ino, image_height, image_width; gif_memory_source memsrc; unsigned char *raster; + unsigned int transparency_color_index; specified_file = image_spec_value (img->spec, QCfile, NULL); specified_data = image_spec_value (img->spec, QCdata, NULL); @@ -7182,6 +7186,16 @@ gif_load (struct frame *f, struct image *img) return 0; } + for(i = 0; i < gif->SavedImages[ino].ExtensionBlockCount; i++) + if (gif->SavedImages[ino].ExtensionBlocks[i].Function == GIF_LOCAL_DESCRIPTOR_EXTENSION + && gif->SavedImages[ino].ExtensionBlocks[i].ByteCount == 4 + /* Transparency enabled? */ + && gif->SavedImages[ino].ExtensionBlocks[i].Bytes[0] & 1) + { + transparent_p = 1; + transparency_color_index = (unsigned char) gif->SavedImages[ino].ExtensionBlocks[i].Bytes[3]; + } + img->corners[TOP_CORNER] = gif->SavedImages[ino].ImageDesc.Top; img->corners[LEFT_CORNER] = gif->SavedImages[ino].ImageDesc.Left; image_height = gif->SavedImages[ino].ImageDesc.Height; @@ -7220,10 +7234,15 @@ gif_load (struct frame *f, struct image *img) if (gif_color_map) for (i = 0; i < gif_color_map->ColorCount; ++i) { - int r = gif_color_map->Colors[i].Red << 8; - int g = gif_color_map->Colors[i].Green << 8; - int b = gif_color_map->Colors[i].Blue << 8; - pixel_colors[i] = lookup_rgb_color (f, r, g, b); + if (transparent_p && transparency_color_index == i) + pixel_colors[i] = FRAME_BACKGROUND_PIXEL (f); + else + { + int r = gif_color_map->Colors[i].Red << 8; + int g = gif_color_map->Colors[i].Green << 8; + int b = gif_color_map->Colors[i].Blue << 8; + pixel_colors[i] = lookup_rgb_color (f, r, g, b); + } } #ifdef COLOR_TABLE_SUPPORT -- 1.7.2.3 --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=gif-2.diff >From nobody Tue Nov 2 10:39:05 2010 Return-Path: Delivered-To: jd@danjou.info Received: by mx1.naquadah.org (Postfix, from userid 8) id 5BFBD5C17C; Wed, 27 Oct 2010 18:09:48 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on prometheus.naquadah.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=4.5 tests=BAYES_00,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [199.232.76.165]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.naquadah.org (Postfix) with ESMTPS id EB16A5C159 for ; Wed, 27 Oct 2010 18:09:45 +0200 (CEST) Received: from localhost ([127.0.0.1]:41062 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PB8ZL-0008PA-M2 for julien@danjou.info; Wed, 27 Oct 2010 12:09:43 -0400 Received: from [140.186.70.92] (port=42377 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PB8DB-0002x0-LR for emacs-devel@gnu.org; Wed, 27 Oct 2010 11:46:57 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PB7Uk-0008Tu-9U for emacs-devel@gnu.org; Wed, 27 Oct 2010 11:01:08 -0400 Received: from coquelicot-s.easter-eggs.com ([213.215.37.94]:57242) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PB7Uk-0008Ta-1x for emacs-devel@gnu.org; Wed, 27 Oct 2010 11:00:54 -0400 Received: from cigue.easter-eggs.fr (cigue.easter-eggs.fr [10.0.0.33]) by rose.easter-eggs.fr (Postfix) with ESMTPS id E88E01425C; Wed, 27 Oct 2010 17:00:49 +0200 (CEST) Received: from jdanjou by cigue.easter-eggs.fr with local (Exim 4.72) (envelope-from ) id 1PB7Uj-00012P-EL; Wed, 27 Oct 2010 17:00:53 +0200 From: Julien Danjou To: emacs-devel@gnu.org Date: Wed, 27 Oct 2010 17:00:51 +0200 Message-Id: <1288191651-3958-2-git-send-email-julien@danjou.info> X-Mailer: git-send-email 1.7.2.3 In-Reply-To: References: X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) Cc: Julien Danjou Subject: [PATCH 2/2] image: add support for specified :background on GIF X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Mailman-Copy: yes Sender: emacs-devel-bounces+julien=danjou.info@gnu.org Errors-To: emacs-devel-bounces+julien=danjou.info@gnu.org Signed-off-by: Julien Danjou --- src/ChangeLog | 1 + src/image.c | 9 ++++++++- 2 files changed, 9 insertions(+), 1 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 3d9b6bf..65d2730 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,6 +1,7 @@ 2010-10-27 Julien Danjou * image.c (gif_load): Add support for transparency. + (gif_load): Add support for specified :background. 2010-10-26 Juanma Barranquero diff --git a/src/image.c b/src/image.c index e9b85fa..ef6a6d0 100644 --- a/src/image.c +++ b/src/image.c @@ -7235,7 +7235,14 @@ gif_load (struct frame *f, struct image *img) for (i = 0; i < gif_color_map->ColorCount; ++i) { if (transparent_p && transparency_color_index == i) - pixel_colors[i] = FRAME_BACKGROUND_PIXEL (f); + { + Lisp_Object specified_bg + = image_spec_value (img->spec, QCbackground, NULL); + if (STRINGP (specified_bg)) + pixel_colors[i] = x_alloc_image_color (f, img, specified_bg, FRAME_BACKGROUND_PIXEL (f)); + else + pixel_colors[i] = FRAME_BACKGROUND_PIXEL (f); + } else { int r = gif_color_map->Colors[i].Red << 8; -- 1.7.2.3 --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Cheers, --=20 Julien Danjou // =E1=90=B0 http://julien.danjou.info --=-=-=-- ------------=_1288963262-20699-1--