From 8441ca6f2cfc9732aeb23057ad843c4047262779 Mon Sep 17 00:00:00 2001 From: Vadim Lopatin Date: Wed, 11 Jun 2014 14:16:26 +0400 Subject: [PATCH] remove gl3n and libpng usage --- 3rdparty/gl3n/gl3n.visualdproj | 202 -- 3rdparty/libpng/README.md | 12 - 3rdparty/libpng/lib/libpng15.dll | Bin 175104 -> 0 bytes 3rdparty/libpng/lib/libpng15.lib | Bin 30720 -> 0 bytes 3rdparty/libpng/package.json | 13 - 3rdparty/libpng/source/libpng/png.d | 2616 -------------------- 3rdparty/libpng/source/libpng/pngconf.d | 100 - 3rdparty/libpng/source/libpng/pnglibconf.d | 180 -- 8 files changed, 3123 deletions(-) delete mode 100644 3rdparty/gl3n/gl3n.visualdproj delete mode 100644 3rdparty/libpng/README.md delete mode 100644 3rdparty/libpng/lib/libpng15.dll delete mode 100644 3rdparty/libpng/lib/libpng15.lib delete mode 100644 3rdparty/libpng/package.json delete mode 100644 3rdparty/libpng/source/libpng/png.d delete mode 100644 3rdparty/libpng/source/libpng/pngconf.d delete mode 100644 3rdparty/libpng/source/libpng/pnglibconf.d diff --git a/3rdparty/gl3n/gl3n.visualdproj b/3rdparty/gl3n/gl3n.visualdproj deleted file mode 100644 index 1a19b557..00000000 --- a/3rdparty/gl3n/gl3n.visualdproj +++ /dev/null @@ -1,202 +0,0 @@ - - {6EDE8E99-6487-4505-94E9-C717112526A4} - - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 2.043 - 0 - 0 - 0 - $(DMDInstallDir)windows\bin\dmd.exe - - - $(ConfigurationName) - $(OutDir) - - - 0 - - - - - 0 - - - 1 - $(IntDir)\$(TargetName).json - 0 - - 0 - - 0 - 0 - 0 - - - - 0 - - 1 - $(VisualDInstallDir)cv2pdb\cv2pdb.exe - 0 - 0 - 0 - - - - - - - - $(OutDir)\$(ProjectName).lib - 1 - - - - *.obj;*.cmd;*.build;*.json;*.dep - - - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 2.043 - 0 - 0 - 0 - $(DMDInstallDir)windows\bin\dmd.exe - - - $(ConfigurationName) - $(OutDir) - - - 0 - - - - - 0 - - - 1 - $(IntDir)\$(TargetName).json - 0 - - 0 - - 0 - 0 - 0 - - - - 0 - - 0 - $(VisualDInstallDir)cv2pdb\cv2pdb.exe - 0 - 0 - 0 - - - - - - - - $(OutDir)\$(ProjectName).lib - 1 - - - - *.obj;*.cmd;*.build;*.json;*.dep - - - - - - - - - - - - - diff --git a/3rdparty/libpng/README.md b/3rdparty/libpng/README.md deleted file mode 100644 index 70778b7b..00000000 --- a/3rdparty/libpng/README.md +++ /dev/null @@ -1,12 +0,0 @@ -libpng -====== - -D bindings to libpng. - -Seems suitable for inclusion into the larger set of bindings offered by the Deimos project. - -These bindings were miticulously created by hand, based on the C headers from libpng -version 1.5.14 - January 24, 2013. - -The repo is following the usual 'dub' structure, but you don't need 'dub' to use it. -You can simply copy the libpng folder to your import path. diff --git a/3rdparty/libpng/lib/libpng15.dll b/3rdparty/libpng/lib/libpng15.dll deleted file mode 100644 index fad7e845d8fa677173b3b13feec206d339e47916..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 175104 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≀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 OOaX!a{QW!C)k!hN#i=aqsV*`|)O) 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 HngIU`oA>z@ diff --git a/3rdparty/libpng/package.json b/3rdparty/libpng/package.json deleted file mode 100644 index 671fba09..00000000 --- a/3rdparty/libpng/package.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "libpng", - "description": "D bindings to libpng.", - "homepage": "http://libpng.org/", - "license": "Boost", - "authors": [ - "Lionello Lunesu" - ], - "targetType": "sourceLibrary", - "dependencies": { - }, - "libs": ["png"] -} diff --git a/3rdparty/libpng/source/libpng/png.d b/3rdparty/libpng/source/libpng/png.d deleted file mode 100644 index 532056e8..00000000 --- a/3rdparty/libpng/source/libpng/png.d +++ /dev/null @@ -1,2616 +0,0 @@ -module libpng.png; -/* png.h - header file for PNG reference library - * - * libpng version 1.5.14 - January 24, 2013 - * Copyright (c) 1998-2013 Glenn Randers-Pehrson - * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) - * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) - * - * This code is released under the libpng license (See LICENSE, below) - * - * Authors and maintainers: - * libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat - * libpng versions 0.89c, June 1996, through 0.96, May 1997: Andreas Dilger - * libpng versions 0.97, January 1998, through 1.5.14 - January 24, 2013: Glenn - * See also "Contributing Authors", below. - * - * Note about libpng version numbers: - * - * Due to various miscommunications, unforeseen code incompatibilities - * and occasional factors outside the authors' control, version numbering - * on the library has not always been consistent and straightforward. - * The following table summarizes matters since version 0.89c, which was - * the first widely used release: - * - * source png.h png.h shared-lib - * version string int version - * ------- ------ ----- ---------- - * 0.89c "1.0 beta 3" 0.89 89 1.0.89 - * 0.90 "1.0 beta 4" 0.90 90 0.90 [should have been 2.0.90] - * 0.95 "1.0 beta 5" 0.95 95 0.95 [should have been 2.0.95] - * 0.96 "1.0 beta 6" 0.96 96 0.96 [should have been 2.0.96] - * 0.97b "1.00.97 beta 7" 1.00.97 97 1.0.1 [should have been 2.0.97] - * 0.97c 0.97 97 2.0.97 - * 0.98 0.98 98 2.0.98 - * 0.99 0.99 98 2.0.99 - * 0.99a-m 0.99 99 2.0.99 - * 1.00 1.00 100 2.1.0 [100 should be 10000] - * 1.0.0 (from here on, the 100 2.1.0 [100 should be 10000] - * 1.0.1 png.h string is 10001 2.1.0 - * 1.0.1a-e identical to the 10002 from here on, the shared library - * 1.0.2 source version) 10002 is 2.V where V is the source code - * 1.0.2a-b 10003 version, except as noted. - * 1.0.3 10003 - * 1.0.3a-d 10004 - * 1.0.4 10004 - * 1.0.4a-f 10005 - * 1.0.5 (+ 2 patches) 10005 - * 1.0.5a-d 10006 - * 1.0.5e-r 10100 (not source compatible) - * 1.0.5s-v 10006 (not binary compatible) - * 1.0.6 (+ 3 patches) 10006 (still binary incompatible) - * 1.0.6d-f 10007 (still binary incompatible) - * 1.0.6g 10007 - * 1.0.6h 10007 10.6h (testing xy.z so-numbering) - * 1.0.6i 10007 10.6i - * 1.0.6j 10007 2.1.0.6j (incompatible with 1.0.0) - * 1.0.7beta11-14 DLLNUM 10007 2.1.0.7beta11-14 (binary compatible) - * 1.0.7beta15-18 1 10007 2.1.0.7beta15-18 (binary compatible) - * 1.0.7rc1-2 1 10007 2.1.0.7rc1-2 (binary compatible) - * 1.0.7 1 10007 (still compatible) - * 1.0.8beta1-4 1 10008 2.1.0.8beta1-4 - * 1.0.8rc1 1 10008 2.1.0.8rc1 - * 1.0.8 1 10008 2.1.0.8 - * 1.0.9beta1-6 1 10009 2.1.0.9beta1-6 - * 1.0.9rc1 1 10009 2.1.0.9rc1 - * 1.0.9beta7-10 1 10009 2.1.0.9beta7-10 - * 1.0.9rc2 1 10009 2.1.0.9rc2 - * 1.0.9 1 10009 2.1.0.9 - * 1.0.10beta1 1 10010 2.1.0.10beta1 - * 1.0.10rc1 1 10010 2.1.0.10rc1 - * 1.0.10 1 10010 2.1.0.10 - * 1.0.11beta1-3 1 10011 2.1.0.11beta1-3 - * 1.0.11rc1 1 10011 2.1.0.11rc1 - * 1.0.11 1 10011 2.1.0.11 - * 1.0.12beta1-2 2 10012 2.1.0.12beta1-2 - * 1.0.12rc1 2 10012 2.1.0.12rc1 - * 1.0.12 2 10012 2.1.0.12 - * 1.1.0a-f - 10100 2.1.1.0a-f (branch abandoned) - * 1.2.0beta1-2 2 10200 2.1.2.0beta1-2 - * 1.2.0beta3-5 3 10200 3.1.2.0beta3-5 - * 1.2.0rc1 3 10200 3.1.2.0rc1 - * 1.2.0 3 10200 3.1.2.0 - * 1.2.1beta1-4 3 10201 3.1.2.1beta1-4 - * 1.2.1rc1-2 3 10201 3.1.2.1rc1-2 - * 1.2.1 3 10201 3.1.2.1 - * 1.2.2beta1-6 12 10202 12.so.0.1.2.2beta1-6 - * 1.0.13beta1 10 10013 10.so.0.1.0.13beta1 - * 1.0.13rc1 10 10013 10.so.0.1.0.13rc1 - * 1.2.2rc1 12 10202 12.so.0.1.2.2rc1 - * 1.0.13 10 10013 10.so.0.1.0.13 - * 1.2.2 12 10202 12.so.0.1.2.2 - * 1.2.3rc1-6 12 10203 12.so.0.1.2.3rc1-6 - * 1.2.3 12 10203 12.so.0.1.2.3 - * 1.2.4beta1-3 13 10204 12.so.0.1.2.4beta1-3 - * 1.0.14rc1 13 10014 10.so.0.1.0.14rc1 - * 1.2.4rc1 13 10204 12.so.0.1.2.4rc1 - * 1.0.14 10 10014 10.so.0.1.0.14 - * 1.2.4 13 10204 12.so.0.1.2.4 - * 1.2.5beta1-2 13 10205 12.so.0.1.2.5beta1-2 - * 1.0.15rc1-3 10 10015 10.so.0.1.0.15rc1-3 - * 1.2.5rc1-3 13 10205 12.so.0.1.2.5rc1-3 - * 1.0.15 10 10015 10.so.0.1.0.15 - * 1.2.5 13 10205 12.so.0.1.2.5 - * 1.2.6beta1-4 13 10206 12.so.0.1.2.6beta1-4 - * 1.0.16 10 10016 10.so.0.1.0.16 - * 1.2.6 13 10206 12.so.0.1.2.6 - * 1.2.7beta1-2 13 10207 12.so.0.1.2.7beta1-2 - * 1.0.17rc1 10 10017 12.so.0.1.0.17rc1 - * 1.2.7rc1 13 10207 12.so.0.1.2.7rc1 - * 1.0.17 10 10017 12.so.0.1.0.17 - * 1.2.7 13 10207 12.so.0.1.2.7 - * 1.2.8beta1-5 13 10208 12.so.0.1.2.8beta1-5 - * 1.0.18rc1-5 10 10018 12.so.0.1.0.18rc1-5 - * 1.2.8rc1-5 13 10208 12.so.0.1.2.8rc1-5 - * 1.0.18 10 10018 12.so.0.1.0.18 - * 1.2.8 13 10208 12.so.0.1.2.8 - * 1.2.9beta1-3 13 10209 12.so.0.1.2.9beta1-3 - * 1.2.9beta4-11 13 10209 12.so.0.9[.0] - * 1.2.9rc1 13 10209 12.so.0.9[.0] - * 1.2.9 13 10209 12.so.0.9[.0] - * 1.2.10beta1-7 13 10210 12.so.0.10[.0] - * 1.2.10rc1-2 13 10210 12.so.0.10[.0] - * 1.2.10 13 10210 12.so.0.10[.0] - * 1.4.0beta1-5 14 10400 14.so.0.0[.0] - * 1.2.11beta1-4 13 10211 12.so.0.11[.0] - * 1.4.0beta7-8 14 10400 14.so.0.0[.0] - * 1.2.11 13 10211 12.so.0.11[.0] - * 1.2.12 13 10212 12.so.0.12[.0] - * 1.4.0beta9-14 14 10400 14.so.0.0[.0] - * 1.2.13 13 10213 12.so.0.13[.0] - * 1.4.0beta15-36 14 10400 14.so.0.0[.0] - * 1.4.0beta37-87 14 10400 14.so.14.0[.0] - * 1.4.0rc01 14 10400 14.so.14.0[.0] - * 1.4.0beta88-109 14 10400 14.so.14.0[.0] - * 1.4.0rc02-08 14 10400 14.so.14.0[.0] - * 1.4.0 14 10400 14.so.14.0[.0] - * 1.4.1beta01-03 14 10401 14.so.14.1[.0] - * 1.4.1rc01 14 10401 14.so.14.1[.0] - * 1.4.1beta04-12 14 10401 14.so.14.1[.0] - * 1.4.1 14 10401 14.so.14.1[.0] - * 1.4.2 14 10402 14.so.14.2[.0] - * 1.4.3 14 10403 14.so.14.3[.0] - * 1.4.4 14 10404 14.so.14.4[.0] - * 1.5.0beta01-58 15 10500 15.so.15.0[.0] - * 1.5.0rc01-07 15 10500 15.so.15.0[.0] - * 1.5.0 15 10500 15.so.15.0[.0] - * 1.5.1beta01-11 15 10501 15.so.15.1[.0] - * 1.5.1rc01-02 15 10501 15.so.15.1[.0] - * 1.5.1 15 10501 15.so.15.1[.0] - * 1.5.2beta01-03 15 10502 15.so.15.2[.0] - * 1.5.2rc01-03 15 10502 15.so.15.2[.0] - * 1.5.2 15 10502 15.so.15.2[.0] - * 1.5.3beta01-10 15 10503 15.so.15.3[.0] - * 1.5.3rc01-02 15 10503 15.so.15.3[.0] - * 1.5.3beta11 15 10503 15.so.15.3[.0] - * 1.5.3 [omitted] - * 1.5.4beta01-08 15 10504 15.so.15.4[.0] - * 1.5.4rc01 15 10504 15.so.15.4[.0] - * 1.5.4 15 10504 15.so.15.4[.0] - * 1.5.5beta01-08 15 10505 15.so.15.5[.0] - * 1.5.5rc01 15 10505 15.so.15.5[.0] - * 1.5.5 15 10505 15.so.15.5[.0] - * 1.5.6beta01-07 15 10506 15.so.15.6[.0] - * 1.5.6rc01-03 15 10506 15.so.15.6[.0] - * 1.5.6 15 10506 15.so.15.6[.0] - * 1.5.7beta01-05 15 10507 15.so.15.7[.0] - * 1.5.7rc01-03 15 10507 15.so.15.7[.0] - * 1.5.7 15 10507 15.so.15.7[.0] - * 1.5.8beta01 15 10508 15.so.15.8[.0] - * 1.5.8rc01 15 10508 15.so.15.8[.0] - * 1.5.8 15 10508 15.so.15.8[.0] - * 1.5.9beta01-02 15 10509 15.so.15.9[.0] - * 1.5.9rc01 15 10509 15.so.15.9[.0] - * 1.5.9 15 10509 15.so.15.9[.0] - * 1.5.10beta01-05 15 10510 15.so.15.10[.0] - * 1.5.10 15 10510 15.so.15.10[.0] - * 1.5.11beta01 15 10511 15.so.15.11[.0] - * 1.5.11rc01-05 15 10511 15.so.15.11[.0] - * 1.5.11 15 10511 15.so.15.11[.0] - * 1.5.12 15 10512 15.so.15.12[.0] - * 1.5.13beta01-02 15 10513 15.so.15.13[.0] - * 1.5.13rc01 15 10513 15.so.15.13[.0] - * 1.5.13 15 10513 15.so.15.13[.0] - * 1.5.14beta01-08 15 10514 15.so.15.14[.0] - * 1.5.14rc01-03 15 10514 15.so.15.14[.0] - * 1.5.14 15 10514 15.so.15.14[.0] - * - * Henceforth the source version will match the shared-library major - * and minor numbers; the shared-library major version number will be - * used for changes in backward compatibility, as it is intended. The - * PNG_LIBPNG_VER macro, which is not used within libpng but is available - * for applications, is an unsigned integer of the form xyyzz corresponding - * to the source version x.y.z (leading zeros in y and z). Beta versions - * were given the previous public release number plus a letter, until - * version 1.0.6j; from then on they were given the upcoming public - * release number plus "betaNN" or "rcNN". - * - * Binary incompatibility exists only when applications make direct access - * to the info_ptr or png_ptr members through png.h, and the compiled - * application is loaded with a different version of the library. - * - * DLLNUM will change each time there are forward or backward changes - * in binary compatibility (e.g., when a new feature is added). - * - * See libpng-manual.txt or libpng.3 for more information. The PNG - * specification is available as a W3C Recommendation and as an ISO - * Specification, defines should NOT be changed. - */ -enum PNG_INFO_gAMA = 0x0001; -enum PNG_INFO_sBIT = 0x0002; -enum PNG_INFO_cHRM = 0x0004; -enum PNG_INFO_PLTE = 0x0008; -enum PNG_INFO_tRNS = 0x0010; -enum PNG_INFO_bKGD = 0x0020; -enum PNG_INFO_hIST = 0x0040; -enum PNG_INFO_pHYs = 0x0080; -enum PNG_INFO_oFFs = 0x0100; -enum PNG_INFO_tIME = 0x0200; -enum PNG_INFO_pCAL = 0x0400; -enum PNG_INFO_sRGB = 0x0800; /* GR-P, 0.96a */ -enum PNG_INFO_iCCP = 0x1000; /* ESR, 1.0.6 */ -enum PNG_INFO_sPLT = 0x2000; /* ESR, 1.0.6 */ -enum PNG_INFO_sCAL = 0x4000; /* ESR, 1.0.6 */ -enum PNG_INFO_IDAT = 0x8000; /* ESR, 1.0.6 */ - -/* This is used for the transformation routines, as some of them - * change these values for the row. It also should enable using - * the routines for other purposes. - */ -struct png_row_info -{ - uint width; /* width of row */ - size_t rowbytes; /* number of bytes in row */ - png_byte color_type; /* color type of row */ - png_byte bit_depth; /* bit depth of row */ - png_byte channels; /* number of channels (1, 2, 3, or 4) */ - png_byte pixel_depth; /* bits per pixel (depth * channels) */ -} - -alias png_row_info * png_row_infop; -alias png_row_info * * png_row_infopp; - -/* The complete definition of png_struct has, as of libpng-1.5.0, - * been moved into a separate header file that is not accessible to - * applications. Read libpng-manual.txt or libpng.3 for more info. - */ -struct png_struct {} -alias const(png_struct) * png_const_structp; -alias png_struct * png_structp; - -/* These are the function types for the I/O functions and for the functions - * that allow the user to override the default I/O functions with his or her - * own. The png_error_ptr type should match that of user-supplied warning - * and error functions, while the png_rw_ptr type should match that of the - * user read/write data functions. Note that the 'write' function must not - * modify the buffer it is passed. The 'read' function, on the other hand, is - * expected to return the read data in the buffer. - */ -alias void function(png_structp, png_const_charp) png_error_ptr; -alias void function(png_structp, png_bytep, size_t) png_rw_ptr; -alias void function(png_structp) png_flush_ptr; -alias void function(png_structp, uint, int) png_read_status_ptr; -alias void function(png_structp, uint, int) png_write_status_ptr; - -static if(PNG_PROGRESSIVE_READ_SUPPORTED) { -alias void function(png_structp, png_infop) png_progressive_info_ptr; -alias void function(png_structp, png_infop) png_progressive_end_ptr; - -/* The following callback receives uint row_number, int pass for the - * png_bytep data of the row. When transforming an interlaced image the - * row number is the row number within the sub-image of the interlace pass, so - * the value will increase to the height of the sub-image (not the full image) - * then reset to 0 for the next pass. - * - * Use PNG_ROW_FROM_PASS_ROW(row, pass) and PNG_COL_FROM_PASS_COL(col, pass) to - * find the output pixel (x,y) given an interlaced sub-image pixel - * (row,col,pass). (See below for these macros.) - */ -alias void function(png_structp, png_bytep, uint, int) png_progressive_row_ptr; -} - -static if(PNG_READ_USER_TRANSFORM_SUPPORTED || PNG_WRITE_USER_TRANSFORM_SUPPORTED){ -alias void function(png_structp, png_row_infop, png_bytep) png_user_transform_ptr; -} - -static if(PNG_USER_CHUNKS_SUPPORTED) { -alias int function(png_structp, png_unknown_chunkp) png_user_chunk_ptr; -} -static if(PNG_UNKNOWN_CHUNKS_SUPPORTED) { -alias void function(png_structp) png_unknown_chunk_ptr; -} - -static if(PNG_SETJMP_SUPPORTED) { -/* This must match the function definition in , and the application - * must include this before png.h to obtain the definition of jmp_buf. The - * function is required, but this is not checked. If the - * function does return the application will crash via an abort() or similar - * system level call. - * - * If you get a warning here while building the library you may need to make - * changes to ensure that pnglibconf.h records the calling convention used by - * your compiler. This may be very difficult - try using a different compiler - * to build the library! - */ -//alias void function(PNGARG((jmp_buf, int)), alias) png_longjmp_ptr; -} - -/* Transform masks for the high-level interface */ -enum PNG_TRANSFORM_IDENTITY = 0x0000; /* read and write */ -enum PNG_TRANSFORM_STRIP_16 = 0x0001; /* read only */ -enum PNG_TRANSFORM_STRIP_ALPHA = 0x0002; /* read only */ -enum PNG_TRANSFORM_PACKING = 0x0004; /* read and write */ -enum PNG_TRANSFORM_PACKSWAP = 0x0008; /* read and write */ -enum PNG_TRANSFORM_EXPAND = 0x0010; /* read only */ -enum PNG_TRANSFORM_INVERT_MONO = 0x0020; /* read and write */ -enum PNG_TRANSFORM_SHIFT = 0x0040; /* read and write */ -enum PNG_TRANSFORM_BGR = 0x0080; /* read and write */ -enum PNG_TRANSFORM_SWAP_ALPHA = 0x0100; /* read and write */ -enum PNG_TRANSFORM_SWAP_ENDIAN = 0x0200; /* read and write */ -enum PNG_TRANSFORM_INVERT_ALPHA = 0x0400; /* read and write */ -enum PNG_TRANSFORM_STRIP_FILLER = 0x0800; /* write only */ -/* Added to libpng-1.2.34 */ -alias PNG_TRANSFORM_STRIP_FILLER_BEFORE = PNG_TRANSFORM_STRIP_FILLER; -enum PNG_TRANSFORM_STRIP_FILLER_AFTER = 0x1000; /* write only */ -/* Added to libpng-1.4.0 */ -enum PNG_TRANSFORM_GRAY_TO_RGB = 0x2000; /* read only */ -/* Added to libpng-1.5.4 */ -enum PNG_TRANSFORM_EXPAND_16 = 0x4000; /* read only */ -enum PNG_TRANSFORM_SCALE_16 = 0x8000; /* read only */ - -/* Flags for MNG supported features */ -enum PNG_FLAG_MNG_EMPTY_PLTE = 0x01; -enum PNG_FLAG_MNG_FILTER_64 = 0x04; -enum PNG_ALL_MNG_FEATURES = 0x05; - -/* NOTE: prior to 1.5 these functions had no 'API' style declaration, - * this allowed the zlib default functions to be used on Windows - * platforms. In 1.5 the zlib default malloc (which just calls malloc and - * ignores the first argument) should be completely compatible with the - * following. - */ -alias png_voidp function(png_structp, png_alloc_size_t) png_malloc_ptr; -alias void function(png_structp, png_voidp) png_free_ptr; - -alias png_struct * * png_structpp; - -/* Section 3: exported functions - * Here are the function definitions most commonly used. This is not - * the place to find out how to use libpng. See libpng-manual.txt for the - * full explanation, see example.c for the summary. This just provides - * a simple one line description of the use of each function. - * - * The PNG_EXPORT() and PNG_EXPORTA() macros used below are defined in - * pngconf.h and in the *.dfn files in the scripts directory. - * - * PNG_EXPORT(ordinal, type, name, (args); - * - * ordinal: ordinal that is used while building - * *.def files. The ordinal value is only - * relevant when preprocessing png.h with - * the *.dfn files for building symbol table - * entries, and are removed by pngconf.h. - * type: return type of the function - * name: function name - * args: function arguments, with types - * - * When we wish to append attributes to a function prototype we use - * the PNG_EXPORTA() macro instead. - * - * PNG_EXPORTA(ordinal, type, name, (args), attributes); - * - * ordinal, type, name, and args: same as in PNG_EXPORT(). - * attributes: function attributes - */ - -/* Returns the version number of the library */ -uint png_access_version_number(); - -/* Tell lib we have already handled the first magic bytes. - * Handling more than 8 bytes from the beginning of the file is an error. - */ -void png_set_sig_bytes(png_structp png_ptr, int num_bytes); - -/* Check sig[start] through sig[start + num_to_check - 1] to see if it's a - * PNG file. Returns zero if the supplied bytes match the 8-byte PNG - * signature, and non-zero otherwise. Having num_to_check == 0 or - * start > 7 will always fail (ie return non-zero). - */ -int png_sig_cmp(png_const_bytep sig, size_t start, - size_t num_to_check); - -/* Simple signature checking function. This is the same as calling - * png_check_sig(sig, n) := !png_sig_cmp(sig, 0, n). - */ -auto png_check_sig(S,N)(S sig, N n) { return !png_sig_cmp((sig), 0, (n)); } - -/* Allocate and initialize png_ptr struct for reading, and any other memory. */ -extern(C) -png_structp png_create_read_struct - (png_const_charp user_png_ver, png_voidp error_ptr, - png_error_ptr error_fn, png_error_ptr warn_fn); - -/* Allocate and initialize png_ptr struct for writing, and any other memory */ -png_structp png_create_write_struct - (png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn, - png_error_ptr warn_fn); - -size_t png_get_compression_buffer_size - (png_const_structp png_ptr); - -void png_set_compression_buffer_size(png_structp png_ptr, - size_t size); - -/* Moved from pngconf.h in 1.4.0 and modified to ensure setjmp/longjmp - * match up. - */ -static if(PNG_SETJMP_SUPPORTED){ -/* This function returns the jmp_buf built in to *png_ptr. It must be - * supplied with an appropriate 'longjmp' function to use on that jmp_buf - * unless the default error function is overridden in which case NULL is - * acceptable. The size of the jmp_buf is checked against the actual size - * allocated by the library - the call will return NULL on a mismatch - * indicating an ABI mismatch. - */ -//jmp_buf* png_set_longjmp_fn(png_structp png_ptr, -// png_longjmp_ptr longjmp_fn, size_t jmp_buf_size); -//# define png_jmpbuf(png_ptr) \ -// (*png_set_longjmp_fn((png_ptr), longjmp, sizeof (jmp_buf))) -}else{ -//# define png_jmpbuf(png_ptr) \ -// (LIBPNG_WAS_COMPILED_WITH__PNG_NO_SETJMP) -} -/* This function should be used by libpng applications in place of - * longjmp(png_ptr->jmpbuf, val). If longjmp_fn() has been set, it - * will use it; otherwise it will call PNG_ABORT(). This function was - * added in libpng-1.5.0. - */ -void png_longjmp(png_structp png_ptr, int val); - -static if(PNG_READ_SUPPORTED){ -/* Reset the compression stream */ -int png_reset_zstream(png_structp png_ptr); -} - -/* New functions added in libpng-1.0.2 (not enabled by default until 1.2.0) */ -static if(PNG_USER_MEM_SUPPORTED){ -png_structp png_create_read_struct_2 - (png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn, - png_error_ptr warn_fn, - png_voidp mem_ptr, png_malloc_ptr malloc_fn, png_free_ptr free_fn); -png_structp png_create_write_struct_2 - (png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn, - png_error_ptr warn_fn, - png_voidp mem_ptr, png_malloc_ptr malloc_fn, png_free_ptr free_fn); -} - -/* Write the PNG file signature. */ -void png_write_sig(png_structp png_ptr); - -/* Write a PNG chunk - size, type, (optional) data, CRC. */ -void png_write_chunk(png_structp png_ptr, png_const_bytep - chunk_name, png_const_bytep data, size_t length); - -/* Write the start of a PNG chunk - length and chunk name. */ -void png_write_chunk_start(png_structp png_ptr, - png_const_bytep chunk_name, uint length); - -/* Write the data of a PNG chunk started with png_write_chunk_start(). */ -void png_write_chunk_data(png_structp png_ptr, - png_const_bytep data, size_t length); - -/* Finish a chunk started with png_write_chunk_start() (includes CRC). */ -void png_write_chunk_end(png_structp png_ptr); - -/* Allocate and initialize the info structure */ -png_infop png_create_info_struct(png_structp png_ptr); - -void png_info_init_3(png_infopp info_ptr, - size_t png_info_struct_size); - -/* Writes all the PNG information before the image. */ -void png_write_info_before_PLTE - (png_structp png_ptr, png_infop info_ptr); -void png_write_info - (png_structp png_ptr, png_infop info_ptr); - -static if(PNG_SEQUENTIAL_READ_SUPPORTED){ -/* Read the information before the actual image data. */ -void png_read_info - (png_structp png_ptr, png_infop info_ptr); -} - -static if(PNG_TIME_RFC1123_SUPPORTED){ -png_const_charp png_convert_to_rfc1123 - (png_structp png_ptr, - png_const_timep ptime); -} - -static if(PNG_CONVERT_tIME_SUPPORTED){ -/* Convert from a struct tm to png_time */ -void png_convert_from_struct_tm(png_timep ptime, - const(tm) * ttime); - -/* Convert from time_t to png_time. Uses gmtime() */ -void png_convert_from_time_t - (png_timep ptime, time_t ttime); -} /* PNG_CONVERT_tIME_SUPPORTED */ - -static if(PNG_READ_EXPAND_SUPPORTED){ -/* Expand data to 24-bit RGB, or 8-bit grayscale, with alpha if available. */ -void png_set_expand(png_structp png_ptr); -void png_set_expand_gray_1_2_4_to_8(png_structp png_ptr); -void png_set_palette_to_rgb(png_structp png_ptr); -void png_set_tRNS_to_alpha(png_structp png_ptr); -} - -static if(PNG_READ_EXPAND_16_SUPPORTED){ -/* Expand to 16-bit channels, forces conversion of palette to RGB and expansion - * of a tRNS chunk if present. - */ -void png_set_expand_16(png_structp png_ptr); -} - -static if(PNG_READ_BGR_SUPPORTED || PNG_WRITE_BGR_SUPPORTED){ -/* Use blue, green, red order for pixels. */ -void png_set_bgr(png_structp png_ptr); -} - -static if(PNG_READ_GRAY_TO_RGB_SUPPORTED){ -/* Expand the grayscale to 24-bit RGB if necessary. */ -void png_set_gray_to_rgb(png_structp png_ptr); -} - -static if(PNG_READ_RGB_TO_GRAY_SUPPORTED){ -/* Reduce RGB to grayscale. */ -enum PNG_ERROR_ACTION_NONE = 1; -enum PNG_ERROR_ACTION_WARN = 2; -enum PNG_ERROR_ACTION_ERROR = 3; -enum PNG_RGB_TO_GRAY_DEFAULT = (-1);/*for red/green coefficients*/ - -void png_set_rgb_to_gray(png_structp png_ptr, - int error_action, double red, double green); -void png_set_rgb_to_gray_fixed(png_structp png_ptr, - int error_action, png_fixed_point red, png_fixed_point green); - -png_byte png_get_rgb_to_gray_status(png_const_structp - png_ptr); -} - -static if(PNG_BUILD_GRAYSCALE_PALETTE_SUPPORTED){ -void png_build_grayscale_palette(int bit_depth, - png_colorp palette); -} - -static if(PNG_READ_ALPHA_MODE_SUPPORTED){ -/* How the alpha channel is interpreted - this affects how the color channels of - * a PNG file are returned when an alpha channel, or tRNS chunk in a palette - * file, is present. - * - * This has no effect on the way pixels are written into a PNG output - * datastream. The color samples in a PNG datastream are never premultiplied - * with the alpha samples. - * - * The default is to return data according to the PNG specification: the alpha - * channel is a linear measure of the contribution of the pixel to the - * corresponding composited pixel. The gamma encoded color channels must be - * scaled according to the contribution and to do this it is necessary to undo - * the encoding, scale the color values, perform the composition and reencode - * the values. This is the 'PNG' mode. - * - * The alternative is to 'associate' the alpha with the color information by - * storing color channel values that have been scaled by the alpha. The - * advantage is that the color channels can be resampled (the image can be - * scaled) in this form. The disadvantage is that normal practice is to store - * linear, not (gamma) encoded, values and this requires 16-bit channels for - * still images rather than the 8-bit channels that are just about sufficient if - * gamma encoding is used. In addition all non-transparent pixel values, - * including completely opaque ones, must be gamma encoded to produce the final - * image. This is the 'STANDARD', 'ASSOCIATED' or 'PREMULTIPLIED' mode (the - * latter being the two common names for associated alpha color channels.) - * - * Since it is not necessary to perform arithmetic on opaque color values so - * long as they are not to be resampled and are in the final color space it is - * possible to optimize the handling of alpha by storing the opaque pixels in - * the PNG format (adjusted for the output color space) while storing partially - * opaque pixels in the standard, linear, format. The accuracy required for - * standard alpha composition is relatively low, because the pixels are - * isolated, therefore typically the accuracy loss in storing 8-bit linear - * values is acceptable. (This is not true if the alpha channel is used to - * simulate transparency over large areas - use 16 bits or the PNG mode in - * this case!) This is the 'OPTIMIZED' mode. For this mode a pixel is - * treated as opaque only if the alpha value is equal to the maximum value. - * - * The final choice is to gamma encode the alpha channel as well. This is - * broken because, in practice, no implementation that uses this choice - * correctly undoes the encoding before handling alpha composition. Use this - * choice only if other serious errors in the software or hardware you use - * mandate it; the typical serious error is for dark halos to appear around - * opaque areas of the composited PNG image because of arithmetic overflow. - * - * The API function png_set_alpha_mode specifies which of these choices to use - * with an enumerated 'mode' value and the gamma of the required output: - */ -enum PNG_ALPHA_PNG = 0; /* according to the PNG standard */ -enum PNG_ALPHA_STANDARD = 1; /* according to Porter/Duff */ -enum PNG_ALPHA_ASSOCIATED = 1; /* as above; this is the normal practice */ -enum PNG_ALPHA_PREMULTIPLIED = 1; /* as above */ -enum PNG_ALPHA_OPTIMIZED = 2; /* 'PNG' for opaque pixels, else 'STANDARD' */ -enum PNG_ALPHA_BROKEN = 3; /* the alpha channel is gamma encoded */ - -void png_set_alpha_mode(png_structp png_ptr, int mode, - double output_gamma); -void png_set_alpha_mode_fixed(png_structp png_ptr, - int mode, png_fixed_point output_gamma); -} - -static if(PNG_READ_GAMMA_SUPPORTED || PNG_READ_ALPHA_MODE_SUPPORTED){ -/* The output_gamma value is a screen gamma in libpng terminology: it expresses - * how to decode the output values, not how they are encoded. The values used - * correspond to the normal numbers used to describe the overall gamma of a - * computer display system; for example 2.2 for an sRGB conformant system. The - * values are scaled by 100000 in the _fixed version of the API (so 220000 for - * sRGB.) - * - * The inverse of the value is always used to provide a default for the PNG file - * encoding if it has no gAMA chunk and if png_set_gamma() has not been called - * to override the PNG gamma information. - * - * When the ALPHA_OPTIMIZED mode is selected the output gamma is used to encode - * opaque pixels however pixels with lower alpha values are not encoded, - * regardless of the output gamma setting. - * - * When the standard Porter Duff handling is requested with mode 1 the output - * encoding is set to be linear and the output_gamma value is only relevant - * as a default for input data that has no gamma information. The linear output - * encoding will be overridden if png_set_gamma() is called - the results may be - * highly unexpected! - * - * The following numbers are derived from the sRGB standard and the research - * behind it. sRGB is defined to be approximated by a PNG gAMA chunk value of - * 0.45455 (1/2.2) for PNG. The value implicitly includes any viewing - * correction required to take account of any differences in the color - * environment of the original scene and the intended display environment; the - * value expresses how to *decode* the image for display, not how the original - * data was *encoded*. - * - * sRGB provides a peg for the PNG standard by defining a viewing environment. - * sRGB itself, and earlier TV standards, actually use a more complex transform - * (a linear portion then a gamma 2.4 power law) than PNG can express. (PNG is - * limited to simple power laws.) By saying that an image for direct display on - * an sRGB conformant system should be stored with a gAMA chunk value of 45455 - * (11.3.3.2 and 11.3.3.5 of the ISO PNG specification) the PNG specification - * makes it possible to derive values for other display systems and - * environments. - * - * The Mac value is deduced from the sRGB based on an assumption that the actual - * extra viewing correction used in early Mac display systems was implemented as - * a power 1.45 lookup table. - * - * Any system where a programmable lookup table is used or where the behavior of - * the final display device characteristics can be changed requires system - * specific code to obtain the current characteristic. However this can be - * difficult and most PNG gamma correction only requires an approximate value. - * - * By default, if png_set_alpha_mode() is not called, libpng assumes that all - * values are unencoded, linear, values and that the output device also has a - * linear characteristic. This is only very rarely correct - it is invariably - * better to call png_set_alpha_mode() with PNG_DEFAULT_sRGB than rely on the - * default if you don't know what the right answer is! - * - * The special value PNG_GAMMA_MAC_18 indicates an older Mac system (pre Mac OS - * 10.6) which used a correction table to implement a somewhat lower gamma on an - * otherwise sRGB system. - * - * Both these values are reserved (not simple gamma values) in order to allow - * more precise correction internally in the future. - * - * NOTE: the following values can be passed to either the fixed or floating - * point APIs, but the floating point API will also accept floating point - * values. - */ -enum PNG_DEFAULT_sRGB = -1; /* sRGB gamma and color space */ -enum PNG_GAMMA_MAC_18 = -2; /* Old Mac '1.8' gamma and color space */ -enum PNG_GAMMA_sRGB = 220000; /* Television standards--matches sRGB gamma */ -alias PNG_GAMMA_LINEAR = PNG_FP_1; /* Linear */ -} - -/* The following are examples of calls to png_set_alpha_mode to achieve the - * required overall gamma correction and, where necessary, alpha - * premultiplication. - * - * png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_DEFAULT_sRGB); - * This is the default libpng handling of the alpha channel - it is not - * pre-multiplied into the color components. In addition the call states - * that the output is for a sRGB system and causes all PNG files without gAMA - * chunks to be assumed to be encoded using sRGB. - * - * png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_GAMMA_MAC); - * In this case the output is assumed to be something like an sRGB conformant - * display preceeded by a power-law lookup table of power 1.45. This is how - * early Mac systems behaved. - * - * png_set_alpha_mode(pp, PNG_ALPHA_STANDARD, PNG_GAMMA_LINEAR); - * This is the classic Jim Blinn approach and will work in academic - * environments where everything is done by the book. It has the shortcoming - * of assuming that input PNG data with no gamma information is linear - this - * is unlikely to be correct unless the PNG files where generated locally. - * Most of the time the output precision will be so low as to show - * significant banding in dark areas of the image. - * - * png_set_expand_16(pp); - * png_set_alpha_mode(pp, PNG_ALPHA_STANDARD, PNG_DEFAULT_sRGB); - * This is a somewhat more realistic Jim Blinn inspired approach. PNG files - * are assumed to have the sRGB encoding if not marked with a gamma value and - * the output is always 16 bits per component. This permits accurate scaling - * and processing of the data. If you know that your input PNG files were - * generated locally you might need to replace PNG_DEFAULT_sRGB with the - * correct value for your system. - * - * png_set_alpha_mode(pp, PNG_ALPHA_OPTIMIZED, PNG_DEFAULT_sRGB); - * If you just need to composite the PNG image onto an existing background - * and if you control the code that does this you can use the optimization - * setting. In this case you just copy completely opaque pixels to the - * output. For pixels that are not completely transparent (you just skip - * those) you do the composition math using png_composite or png_composite_16 - * below then encode the resultant 8-bit or 16-bit values to match the output - * encoding. - * - * Other cases - * If neither the PNG nor the standard linear encoding work for you because - * of the software or hardware you use then you have a big problem. The PNG - * case will probably result in halos around the image. The linear encoding - * will probably result in a washed out, too bright, image (it's actually too - * contrasty.) Try the ALPHA_OPTIMIZED mode above - this will probably - * substantially reduce the halos. Alternatively try: - * - * png_set_alpha_mode(pp, PNG_ALPHA_BROKEN, PNG_DEFAULT_sRGB); - * This option will also reduce the halos, but there will be slight dark - * halos round the opaque parts of the image where the background is light. - * In the OPTIMIZED mode the halos will be light halos where the background - * is dark. Take your pick - the halos are unavoidable unless you can get - * your hardware/software fixed! (The OPTIMIZED approach is slightly - * faster.) - * - * When the default gamma of PNG files doesn't match the output gamma. - * If you have PNG files with no gamma information png_set_alpha_mode allows - * you to provide a default gamma, but it also sets the ouput gamma to the - * matching value. If you know your PNG files have a gamma that doesn't - * match the output you can take advantage of the fact that - * png_set_alpha_mode always sets the output gamma but only sets the PNG - * default if it is not already set: - * - * png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_DEFAULT_sRGB); - * png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_GAMMA_MAC); - * The first call sets both the default and the output gamma values, the - * second call overrides the output gamma without changing the default. This - * is easier than achieving the same effect with png_set_gamma. You must use - * PNG_ALPHA_PNG for the first call - internal checking in png_set_alpha will - * fire if more than one call to png_set_alpha_mode and png_set_background is - * made in the same read operation, however multiple calls with PNG_ALPHA_PNG - * are ignored. - */ - -static if(PNG_READ_STRIP_ALPHA_SUPPORTED){ -void png_set_strip_alpha(png_structp png_ptr); -} - -static if(PNG_READ_SWAP_ALPHA_SUPPORTED || PNG_WRITE_SWAP_ALPHA_SUPPORTED){ -void png_set_swap_alpha(png_structp png_ptr); -} - -static if(PNG_READ_INVERT_ALPHA_SUPPORTED || PNG_WRITE_INVERT_ALPHA_SUPPORTED){ -void png_set_invert_alpha(png_structp png_ptr); -} - -static if(PNG_READ_FILLER_SUPPORTED || PNG_WRITE_FILLER_SUPPORTED){ -/* Add a filler byte to 8-bit Gray or 24-bit RGB images. */ -void png_set_filler(png_structp png_ptr, uint filler, - int flags); -/* The values of the PNG_FILLER_ defines should NOT be changed */ -enum PNG_FILLER_BEFORE = 0; -enum PNG_FILLER_AFTER = 1; -/* Add an alpha byte to 8-bit Gray or 24-bit RGB images. */ -void png_set_add_alpha - (png_structp png_ptr, uint filler, - int flags); -} /* PNG_READ_FILLER_SUPPORTED || PNG_WRITE_FILLER_SUPPORTED */ - -static if(PNG_READ_SWAP_SUPPORTED || PNG_WRITE_SWAP_SUPPORTED){ -/* Swap bytes in 16-bit depth files. */ -void png_set_swap(png_structp png_ptr); -} - -static if(PNG_READ_PACK_SUPPORTED || PNG_WRITE_PACK_SUPPORTED){ -/* Use 1 byte per pixel in 1, 2, or 4-bit depth files. */ -void png_set_packing(png_structp png_ptr); -} - -static if(PNG_READ_PACKSWAP_SUPPORTED || PNG_WRITE_PACKSWAP_SUPPORTED){ -/* Swap packing order of pixels in bytes. */ -void png_set_packswap(png_structp png_ptr); -} - -static if(PNG_READ_SHIFT_SUPPORTED || PNG_WRITE_SHIFT_SUPPORTED){ -/* Converts files to legal bit depths. */ -void png_set_shift(png_structp png_ptr, png_const_color_8p - true_bits); -} - -static if(PNG_READ_INTERLACING_SUPPORTED || PNG_WRITE_INTERLACING_SUPPORTED){ -/* Have the code handle the interlacing. Returns the number of passes. - * MUST be called before png_read_update_info or png_start_read_image, - * otherwise it will not have the desired effect. Note that it is still - * necessary to call png_read_row or png_read_rows png_get_image_height - * times for each pass. -*/ -int png_set_interlace_handling(png_structp png_ptr); -} - -static if(PNG_READ_INVERT_SUPPORTED || PNG_WRITE_INVERT_SUPPORTED){ -/* Invert monochrome files */ -void png_set_invert_mono(png_structp png_ptr); -} - -static if(PNG_READ_BACKGROUND_SUPPORTED){ -/* Handle alpha and tRNS by replacing with a background color. Prior to - * libpng-1.5.4 this API must not be called before the PNG file header has been - * read. Doing so will result in unexpected behavior and possible warnings or - * errors if the PNG file contains a bKGD chunk. - */ -void png_set_background(png_structp png_ptr, - png_const_color_16p background_color, int background_gamma_code, - int need_expand, double background_gamma); -void png_set_background_fixed (png_structp png_ptr, - png_const_color_16p background_color, int background_gamma_code, - int need_expand, png_fixed_point background_gamma); -} -static if(PNG_READ_BACKGROUND_SUPPORTED){ -enum PNG_BACKGROUND_GAMMA_UNKNOWN = 0; -enum PNG_BACKGROUND_GAMMA_SCREEN = 1; -enum PNG_BACKGROUND_GAMMA_FILE = 2; -enum PNG_BACKGROUND_GAMMA_UNIQUE = 3; -} - -static if(PNG_READ_SCALE_16_TO_8_SUPPORTED){ -/* Scale a 16-bit depth file down to 8-bit, accurately. */ -void png_set_scale_16(png_structp png_ptr); -} - -static if(PNG_READ_STRIP_16_TO_8_SUPPORTED){ -//alias PNG_READ_16_TO_8 = SUPPORTED; /* Name prior to 1.5.4 */ -/* Strip the second byte of information from a 16-bit depth file. */ -void png_set_strip_16(png_structp png_ptr); -} - -static if(PNG_READ_QUANTIZE_SUPPORTED){ -/* Turn on quantizing, and reduce the palette to the number of colors - * available. - */ -void png_set_quantize - (png_structp png_ptr, png_colorp palette, - int num_palette, int maximum_colors, png_const_uint_16p histogram, - int full_quantize); -} - -static if(PNG_READ_GAMMA_SUPPORTED){ -/* The threshold on gamma processing is configurable but hard-wired into the - * library. The following is the floating point variant. - */ -enum PNG_GAMMA_THRESHOLD = (PNG_GAMMA_THRESHOLD_FIXED*0.00001); - -/* Handle gamma correction. Screen_gamma=(display_exponent). - * NOTE: this API simply sets the screen and file gamma values. It will - * therefore override the value for gamma in a PNG file if it is called after - * the file header has been read - use with care - call before reading the PNG - * file for best results! - * - * These routines accept the same gamma values as png_set_alpha_mode (described - * above). The PNG_GAMMA_ defines and PNG_DEFAULT_sRGB can be passed to either - * API (floating point or fixed.) Notice, however, that the 'file_gamma' value - * is the inverse of a 'screen gamma' value. - */ -void png_set_gamma - (png_structp png_ptr, double screen_gamma, - double override_file_gamma); -void png_set_gamma_fixed(png_structp png_ptr, - png_fixed_point screen_gamma, png_fixed_point override_file_gamma); -} - -static if(PNG_WRITE_FLUSH_SUPPORTED){ -/* Set how many lines between output flushes - 0 for no flushing */ -void png_set_flush(png_structp png_ptr, int nrows); -/* Flush the current PNG output buffer */ -void png_write_flush(png_structp png_ptr); -} - -/* Optional update palette with requested transformations */ -void png_start_read_image(png_structp png_ptr); - -/* Optional call to update the users info structure */ -void png_read_update_info - (png_structp png_ptr, png_infop info_ptr); - -static if(PNG_SEQUENTIAL_READ_SUPPORTED){ -/* Read one or more rows of image data. */ -void png_read_rows(png_structp png_ptr, png_bytepp row, - png_bytepp display_row, uint num_rows); -} - -static if(PNG_SEQUENTIAL_READ_SUPPORTED){ -/* Read a row of data. */ -void png_read_row(png_structp png_ptr, png_bytep row, - png_bytep display_row); -} - -static if(PNG_SEQUENTIAL_READ_SUPPORTED){ -/* Read the whole image into memory at once. */ -void png_read_image(png_structp png_ptr, png_bytepp image); -} - -/* Write a row of image data */ -void png_write_row - (png_structp png_ptr, png_const_bytep row); - -/* Write a few rows of image data: (*row) is not written; however, the type - * is declared as writeable to maintain compatibility with previous versions - * of libpng and to allow the 'display_row' array from read_rows to be passed - * unchanged to write_rows. - */ -void png_write_rows(png_structp png_ptr, in png_bytepp row, - uint num_rows); - -/* Write the image data */ -void png_write_image - (png_structp png_ptr, in png_bytepp image); - -/* Write the end of the PNG file. */ -void png_write_end - (png_structp png_ptr, png_infop info_ptr); - -static if(PNG_SEQUENTIAL_READ_SUPPORTED){ -/* Read the end of the PNG file. */ -void png_read_end(png_structp png_ptr, png_infop info_ptr); -} - -/* Free any memory associated with the png_info_struct */ -void png_destroy_info_struct(png_structp png_ptr, - png_infopp info_ptr_ptr); - -/* Free any memory associated with the png_struct and the png_info_structs */ -void png_destroy_read_struct(png_structpp png_ptr_ptr, - png_infopp info_ptr_ptr, png_infopp end_info_ptr_ptr); - -/* Free any memory associated with the png_struct and the png_info_structs */ -void png_destroy_write_struct(png_structpp png_ptr_ptr, - png_infopp info_ptr_ptr); - -/* Set the libpng method of handling chunk CRC errors */ -void png_set_crc_action - (png_structp png_ptr, int crit_action, int ancil_action); - -/* Values for png_set_crc_action() say how to handle CRC errors in - * ancillary and critical chunks, and whether to use the data contained - * therein. Note that it is impossible to "discard" data in a critical - * chunk. For versions prior to 0.90, the action was always error/quit, - * whereas in version 0.90 and later, the action for CRC errors in ancillary - * chunks is warn/discard. These values should NOT be changed. - * - * value action:critical action:ancillary - */ -enum PNG_CRC_DEFAULT = 0; /* error/quit warn/discard data */ -enum PNG_CRC_ERROR_QUIT = 1; /* error/quit error/quit */ -enum PNG_CRC_WARN_DISCARD = 2; /* (INVALID) warn/discard data */ -enum PNG_CRC_WARN_USE = 3; /* warn/use data warn/use data */ -enum PNG_CRC_QUIET_USE = 4; /* quiet/use data quiet/use data */ -enum PNG_CRC_NO_CHANGE = 5; /* use current value use current value */ - -/* These functions give the user control over the scan-line filtering in - * libpng and the compression methods used by zlib. These functions are - * mainly useful for testing, as the defaults should work with most users. - * Those users who are tight on memory or want faster performance at the - * expense of compression can modify them. See the compression library - * header file (zlib.h) for an explination of the compression functions. - */ - -/* Set the filtering method(s) used by libpng. Currently, the only valid - * value for "method" is 0. - */ -void png_set_filter - (png_structp png_ptr, int method, int filters); - -/* Flags for png_set_filter() to say which filters to use. The flags - * are chosen so that they don't conflict with real filter types - * below, in case they are supplied instead of the #defined constants. - * These values should NOT be changed. - */ -enum PNG_NO_FILTERS = 0x00; -enum PNG_FILTER_NONE = 0x08; -enum PNG_FILTER_SUB = 0x10; -enum PNG_FILTER_UP = 0x20; -enum PNG_FILTER_AVG = 0x40; -enum PNG_FILTER_PAETH = 0x80; -enum PNG_ALL_FILTERS = (PNG_FILTER_NONE | PNG_FILTER_SUB | PNG_FILTER_UP | - PNG_FILTER_AVG | PNG_FILTER_PAETH); - -/* Filter values (not flags) - used in pngwrite.c, pngwutil.c for now. - * These defines should NOT be changed. - */ -enum PNG_FILTER_VALUE_NONE = 0; -enum PNG_FILTER_VALUE_SUB = 1; -enum PNG_FILTER_VALUE_UP = 2; -enum PNG_FILTER_VALUE_AVG = 3; -enum PNG_FILTER_VALUE_PAETH = 4; -enum PNG_FILTER_VALUE_LAST = 5; - -static if(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED){ /* EXPERIMENTAL */ -/* The "heuristic_method" is given by one of the PNG_FILTER_HEURISTIC_ - * defines, either the default (minimum-sum-of-absolute-differences), or - * the experimental method (weighted-minimum-sum-of-absolute-differences). - * - * Weights are factors >= 1.0, indicating how important it is to keep the - * filter type consistent between rows. Larger numbers mean the current - * filter is that many times as likely to be the same as the "num_weights" - * previous filters. This is cumulative for each previous row with a weight. - * There needs to be "num_weights" values in "filter_weights", or it can be - * NULL if the weights aren't being specified. Weights have no influence on - * the selection of the first row filter. Well chosen weights can (in theory) - * improve the compression for a given image. - * - * Costs are factors >= 1.0 indicating the relative decoding costs of a - * filter type. Higher costs indicate more decoding expense, and are - * therefore less likely to be selected over a filter with lower computational - * costs. There needs to be a value in "filter_costs" for each valid filter - * type (given by PNG_FILTER_VALUE_LAST), or it can be NULL if you aren't - * setting the costs. Costs try to improve the speed of decompression without - * unduly increasing the compressed image size. - * - * A negative weight or cost indicates the default value is to be used, and - * values in the range [0.0, 1.0) indicate the value is to remain unchanged. - * The default values for both weights and costs are currently 1.0, but may - * change if good general weighting/cost heuristics can be found. If both - * the weights and costs are set to 1.0, this degenerates the WEIGHTED method - * to the UNWEIGHTED method, but with added encoding time/computation. - */ -void png_set_filter_heuristics(png_structp png_ptr, - int heuristic_method, int num_weights, png_const_doublep filter_weights, - png_const_doublep filter_costs); -void png_set_filter_heuristics_fixed - (png_structp png_ptr, - int heuristic_method, int num_weights, png_const_fixed_point_p - filter_weights, png_const_fixed_point_p filter_costs); -} /* PNG_WRITE_WEIGHTED_FILTER_SUPPORTED */ - -/* Heuristic used for row filter selection. These defines should NOT be - * changed. - */ -enum PNG_FILTER_HEURISTIC_DEFAULT = 0; /* Currently "UNWEIGHTED" */ -enum PNG_FILTER_HEURISTIC_UNWEIGHTED = 1; /* Used by libpng < 0.95 */ -enum PNG_FILTER_HEURISTIC_WEIGHTED = 2; /* Experimental feature */ -enum PNG_FILTER_HEURISTIC_LAST = 3; /* Not a valid value */ - -static if(PNG_WRITE_SUPPORTED){ -/* Set the library compression level. Currently, valid values range from - * 0 - 9, corresponding directly to the zlib compression levels 0 - 9 - * (0 - no compression, 9 - "maximal" compression). Note that tests have - * shown that zlib compression levels 3-6 usually perform as well as level 9 - * for PNG images, and do considerably fewer caclulations. In the future, - * these values may not correspond directly to the zlib compression levels. - */ -void png_set_compression_level - (png_structp png_ptr, int level); - -void png_set_compression_mem_level(png_structp png_ptr, - int mem_level); - -void png_set_compression_strategy(png_structp png_ptr, - int strategy); - -/* If PNG_WRITE_OPTIMIZE_CMF_SUPPORTED is defined, libpng will use a - * smaller value of window_bits if it can do so safely. - */ -void png_set_compression_window_bits(png_structp png_ptr, - int window_bits); - -void png_set_compression_method(png_structp png_ptr, - int method); -} - -static if(PNG_WRITE_CUSTOMIZE_ZTXT_COMPRESSION_SUPPORTED){ -/* Also set zlib parameters for compressing non-IDAT chunks */ -void png_set_text_compression_level - (png_structp png_ptr, int level); - -void png_set_text_compression_mem_level(png_structp png_ptr, - int mem_level); - -void png_set_text_compression_strategy(png_structp png_ptr, - int strategy); - -/* If PNG_WRITE_OPTIMIZE_CMF_SUPPORTED is defined, libpng will use a - * smaller value of window_bits if it can do so safely. - */ -void png_set_text_compression_window_bits(png_structp - png_ptr, int window_bits); - -void png_set_text_compression_method(png_structp png_ptr, - int method); -} /* PNG_WRITE_CUSTOMIZE_ZTXT_COMPRESSION_SUPPORTED */ - -/* These next functions are called for input/output, memory, and error - * handling. They are in the file pngrio.c, pngwio.c, and pngerror.c, - * and call standard C I/O routines such as fread(), fwrite(), and - * fprintf(). These functions can be made to use other I/O routines - * at run time for those applications that need to handle I/O in a - * different manner by calling png_set_???_fn(). See libpng-manual.txt for - * more information. - */ - -static if(PNG_STDIO_SUPPORTED){ -/* Initialize the input/output for the PNG file to the default functions. */ -void png_init_io(png_structp png_ptr, png_FILE_p fp); -} - -/* Replace the (error and abort), and warning functions with user - * supplied functions. If no messages are to be printed you must still - * write and use replacement functions. The replacement error_fn should - * still do a longjmp to the last setjmp location if you are using this - * method of error handling. If error_fn or warning_fn is NULL, the - * default function will be used. - */ - -void png_set_error_fn - (png_structp png_ptr, png_voidp error_ptr, - png_error_ptr error_fn, png_error_ptr warning_fn); - -/* Return the user pointer associated with the error functions */ -png_voidp png_get_error_ptr(png_const_structp png_ptr); - -/* Replace the default data output functions with a user supplied one(s). - * If buffered output is not used, then output_flush_fn can be set to NULL. - * If PNG_WRITE_FLUSH_SUPPORTED is not defined at libpng compile time - * output_flush_fn will be ignored (and thus can be NULL). - * It is probably a mistake to use NULL for output_flush_fn if - * write_data_fn is not also NULL unless you have built libpng with - * PNG_WRITE_FLUSH_SUPPORTED undefined, because in this case libpng's - * default flush function, which uses the standard *FILE structure, will - * be used. - */ -void png_set_write_fn(png_structp png_ptr, png_voidp io_ptr, - png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn); - -/* Replace the default data input function with a user supplied one. */ -void png_set_read_fn(png_structp png_ptr, png_voidp io_ptr, - png_rw_ptr read_data_fn); - -/* Return the user pointer associated with the I/O functions */ -png_voidp png_get_io_ptr(png_structp png_ptr); - -void png_set_read_status_fn(png_structp png_ptr, - png_read_status_ptr read_row_fn); - -void png_set_write_status_fn(png_structp png_ptr, - png_write_status_ptr write_row_fn); - -static if(PNG_USER_MEM_SUPPORTED){ -/* Replace the default memory allocation functions with user supplied one(s). */ -void png_set_mem_fn(png_structp png_ptr, png_voidp mem_ptr, - png_malloc_ptr malloc_fn, png_free_ptr free_fn); -/* Return the user pointer associated with the memory functions */ -png_voidp png_get_mem_ptr(png_const_structp png_ptr); -} - -static if(PNG_READ_USER_TRANSFORM_SUPPORTED){ -void png_set_read_user_transform_fn(png_structp png_ptr, - png_user_transform_ptr read_user_transform_fn); -} - -static if(PNG_WRITE_USER_TRANSFORM_SUPPORTED){ -void png_set_write_user_transform_fn(png_structp png_ptr, - png_user_transform_ptr write_user_transform_fn); -} - -static if(PNG_USER_TRANSFORM_PTR_SUPPORTED){ -void png_set_user_transform_info(png_structp png_ptr, - png_voidp user_transform_ptr, int user_transform_depth, - int user_transform_channels); -/* Return the user pointer associated with the user transform functions */ -png_voidp png_get_user_transform_ptr - (png_const_structp png_ptr); -} - -static if(PNG_USER_TRANSFORM_INFO_SUPPORTED){ -/* Return information about the row currently being processed. Note that these - * APIs do not fail but will return unexpected results if called outside a user - * transform callback. Also note that when transforming an interlaced image the - * row number is the row number within the sub-image of the interlace pass, so - * the value will increase to the height of the sub-image (not the full image) - * then reset to 0 for the next pass. - * - * Use PNG_ROW_FROM_PASS_ROW(row, pass) and PNG_COL_FROM_PASS_COL(col, pass) to - * find the output pixel (x,y) given an interlaced sub-image pixel - * (row,col,pass). (See below for these macros.) - */ -uint png_get_current_row_number(png_const_structp); -png_byte png_get_current_pass_number(png_const_structp); -} - -static if(PNG_USER_CHUNKS_SUPPORTED){ -void png_set_read_user_chunk_fn(png_structp png_ptr, - png_voidp user_chunk_ptr, png_user_chunk_ptr read_user_chunk_fn); -png_voidp png_get_user_chunk_ptr(png_const_structp png_ptr); -} - -static if(PNG_PROGRESSIVE_READ_SUPPORTED){ -/* Sets the function callbacks for the push reader, and a pointer to a - * user-defined structure available to the callback functions. - */ -void png_set_progressive_read_fn(png_structp png_ptr, - png_voidp progressive_ptr, png_progressive_info_ptr info_fn, - png_progressive_row_ptr row_fn, png_progressive_end_ptr end_fn); - -/* Returns the user pointer associated with the push read functions */ -png_voidp png_get_progressive_ptr(png_const_structp png_ptr); - -/* Function to be called when data becomes available */ -void png_process_data - (png_structp png_ptr, png_infop info_ptr, - png_bytep buffer, size_t buffer_size); - -/* A function which may be called *only* within png_process_data to stop the - * processing of any more data. The function returns the number of bytes - * remaining, excluding any that libpng has cached internally. A subsequent - * call to png_process_data must supply these bytes again. If the argument - * 'save' is set to true the routine will first save all the pending data and - * will always return 0. - */ -size_t png_process_data_pause(png_structp, int save); - -/* A function which may be called *only* outside (after) a call to - * png_process_data. It returns the number of bytes of data to skip in the - * input. Normally it will return 0, but if it returns a non-zero value the - * application must skip than number of bytes of input data and pass the - * following data to the next call to png_process_data. - */ -uint png_process_data_skip(png_structp); - -static if(PNG_READ_INTERLACING_SUPPORTED){ -/* Function that combines rows. 'new_row' is a flag that should come from - * the callback and be non-NULL if anything needs to be done; the library - * stores its own version of the new data internally and ignores the passed - * in value. - */ -void png_progressive_combine_row(png_structp png_ptr, - png_bytep old_row, png_const_bytep new_row); -} /* PNG_READ_INTERLACING_SUPPORTED */ -} /* PNG_PROGRESSIVE_READ_SUPPORTED */ - -png_voidp png_malloc - (png_structp png_ptr, png_alloc_size_t size); -/* Added at libpng version 1.4.0 */ -png_voidp png_calloc - (png_structp png_ptr, png_alloc_size_t size); - -/* Added at libpng version 1.2.4 */ -png_voidp png_malloc_warn(png_structp png_ptr, - png_alloc_size_t size); - -/* Frees a pointer allocated by png_malloc() */ -void png_free(png_structp png_ptr, png_voidp ptr); - -/* Free data that was allocated internally */ -void png_free_data - (png_structp png_ptr, png_infop info_ptr, uint free_me, int num); - -/* Reassign responsibility for freeing existing data, whether allocated - * by libpng or by the application */ -void png_data_freer - (png_structp png_ptr, png_infop info_ptr, int freer, uint mask); - -/* Assignments for png_data_freer */ -enum PNG_DESTROY_WILL_FREE_DATA = 1; -enum PNG_SET_WILL_FREE_DATA = 1; -enum PNG_USER_WILL_FREE_DATA = 2; -/* Flags for png_ptr->free_me and info_ptr->free_me */ -enum PNG_FREE_HIST = 0x0008; -enum PNG_FREE_ICCP = 0x0010; -enum PNG_FREE_SPLT = 0x0020; -enum PNG_FREE_ROWS = 0x0040; -enum PNG_FREE_PCAL = 0x0080; -enum PNG_FREE_SCAL = 0x0100; -enum PNG_FREE_UNKN = 0x0200; -enum PNG_FREE_LIST = 0x0400; -enum PNG_FREE_PLTE = 0x1000; -enum PNG_FREE_TRNS = 0x2000; -enum PNG_FREE_TEXT = 0x4000; -enum PNG_FREE_ALL = 0x7fff; -enum PNG_FREE_MUL = 0x4220; /* PNG_FREE_SPLT|PNG_FREE_TEXT|PNG_FREE_UNKN */ - -static if(PNG_USER_MEM_SUPPORTED){ -png_voidp png_malloc_default(png_structp png_ptr, - png_alloc_size_t size); -void png_free_default(png_structp png_ptr, png_voidp ptr); -} - -static if(PNG_ERROR_TEXT_SUPPORTED){ -/* Fatal error in PNG image of libpng - can't continue */ -void png_error - (png_structp png_ptr, png_const_charp error_message); - -/* The same, but the chunk name is prepended to the error string. */ -void png_chunk_error(png_structp png_ptr, - png_const_charp error_mes); - -}else{ -/* Fatal error in PNG image of libpng - can't continue */ -void png_err(png_structp png); -} - -static if(PNG_WARNINGS_SUPPORTED){ -/* Non-fatal error in libpng. Can continue, but may have a problem. */ -void png_warning(png_structp png_ptr, - png_const_charp warning_message); - -/* Non-fatal error in libpng, chunk name is prepended to message. */ -void png_chunk_warning(png_structp png_ptr, - png_const_charp warning_message); -} - -static if(PNG_BENIGN_ERRORS_SUPPORTED){ -/* Benign error in libpng. Can continue, but may have a problem. - * User can choose whether to handle as a fatal error or as a warning. */ -//# undef png_benign_error -void png_benign_error(png_structp png_ptr, - png_const_charp warning_message); - -/* Same, chunk name is prepended to message. */ -//# undef png_chunk_benign_error -void png_chunk_benign_error(png_structp png_ptr, - png_const_charp warning_message); - -void png_set_benign_errors - (png_structp png_ptr, int allowed); -}else{ - version(PNG_ALLOW_BENIGN_ERRORS){ - alias png_benign_error = png_warning; - alias png_chunk_benign_error = png_chunk_warning; - }else{ - alias png_benign_error = png_error; - alias png_chunk_benign_error = png_chunk_error; - } -} - -/* The png_set_ functions are for storing values in the png_info_struct. - * Similarly, the png_get_ calls are used to read values from the - * png_info_struct, either storing the parameters in the passed variables, or - * setting pointers into the png_info_struct where the data is stored. The - * png_get_ functions return a non-zero value if the data was available - * in info_ptr, or return zero and do not change any of the parameters if the - * data was not available. - * - * These functions should be used instead of directly accessing png_info - * to avoid problems with future changes in the size and internal layout of - * png_info_struct. - */ -/* Returns "flag" if chunk data is valid in info_ptr. */ -uint png_get_valid - (png_const_structp png_ptr, png_const_infop info_ptr, - uint flag); - -/* Returns number of bytes needed to hold a transformed row. */ -size_t png_get_rowbytes(png_const_structp png_ptr, - png_const_infop info_ptr); - -static if(PNG_INFO_IMAGE_SUPPORTED){ -/* Returns row_pointers, which is an array of pointers to scanlines that was - * returned from png_read_png(). - */ -png_bytepp png_get_rows - (png_const_structp png_ptr, png_const_infop info_ptr); -/* Set row_pointers, which is an array of pointers to scanlines for use - * by png_write_png(). - */ -void png_set_rows(png_structp png_ptr, - png_infop info_ptr, png_bytepp row_pointers); -} - -/* Returns number of color channels in image. */ -png_byte png_get_channels - (png_const_structp png_ptr, png_const_infop info_ptr); - -static if(PNG_EASY_ACCESS_SUPPORTED){ -/* Returns image width in pixels. */ -uint png_get_image_width(png_const_structp png_ptr, - png_const_infop info_ptr); - -/* Returns image height in pixels. */ -uint png_get_image_height(png_const_structp png_ptr, - png_const_infop info_ptr); - -/* Returns image bit_depth. */ -png_byte png_get_bit_depth - (png_const_structp png_ptr, png_const_infop info_ptr); - -/* Returns image color_type. */ -png_byte png_get_color_type(png_const_structp png_ptr, - png_const_infop info_ptr); - -/* Returns image filter_type. */ -png_byte png_get_filter_type(png_const_structp png_ptr, - png_const_infop info_ptr); - -/* Returns image interlace_type. */ -png_byte png_get_interlace_type(png_const_structp png_ptr, - png_const_infop info_ptr); - -/* Returns image compression_type. */ -png_byte png_get_compression_type(png_const_structp png_ptr, - png_const_infop info_ptr); - -/* Returns image resolution in pixels per meter, from pHYs chunk data. */ -uint png_get_pixels_per_meter - (png_const_structp png_ptr, png_const_infop info_ptr); -uint png_get_x_pixels_per_meter - (png_const_structp png_ptr, png_const_infop info_ptr); -uint png_get_y_pixels_per_meter - (png_const_structp png_ptr, png_const_infop info_ptr); - -/* Returns pixel aspect ratio, computed from pHYs chunk data. */ -float png_get_pixel_aspect_ratio - (png_const_structp png_ptr, png_const_infop info_ptr); -png_fixed_point png_get_pixel_aspect_ratio_fixed - (png_const_structp png_ptr, png_const_infop info_ptr); - -/* Returns image x, y offset in pixels or microns, from oFFs chunk data. */ -png_int_32 png_get_x_offset_pixels - (png_const_structp png_ptr, png_const_infop info_ptr); -png_int_32 png_get_y_offset_pixels - (png_const_structp png_ptr, png_const_infop info_ptr); -png_int_32 png_get_x_offset_microns - (png_const_structp png_ptr, png_const_infop info_ptr); -png_int_32 png_get_y_offset_microns - (png_const_structp png_ptr, png_const_infop info_ptr); - -} /* PNG_EASY_ACCESS_SUPPORTED */ - -/* Returns pointer to signature string read from PNG header */ -png_const_bytep png_get_signature - (png_const_structp png_ptr, png_infop info_ptr); - -static if(PNG_bKGD_SUPPORTED){ -uint png_get_bKGD - (png_const_structp png_ptr, png_infop info_ptr, - png_color_16p *background); -} - -static if(PNG_bKGD_SUPPORTED){ -void png_set_bKGD(png_structp png_ptr, png_infop info_ptr, - png_const_color_16p background); -} - -static if(PNG_cHRM_SUPPORTED){ -png_uint_32 png_get_cHRM(png_const_structp png_ptr, - png_const_infop info_ptr, double *white_x, double *white_y, double *red_x, - double *red_y, double *green_x, double *green_y, double *blue_x, - double *blue_y); -png_uint_32 png_get_cHRM_XYZ(png_structp png_ptr, - png_const_infop info_ptr, double *red_X, double *red_Y, double *red_Z, - double *green_X, double *green_Y, double *green_Z, double *blue_X, - double *blue_Y, double *blue_Z); -static if(PNG_FIXED_POINT_SUPPORTED){ /* Otherwise not implemented */ -uint png_get_cHRM_fixed - (png_const_structp png_ptr, - png_const_infop info_ptr, png_fixed_point *int_white_x, - png_fixed_point *int_white_y, png_fixed_point *int_red_x, - png_fixed_point *int_red_y, png_fixed_point *int_green_x, - png_fixed_point *int_green_y, png_fixed_point *int_blue_x, - png_fixed_point *int_blue_y); -} -uint png_get_cHRM_XYZ_fixed - (png_structp png_ptr, png_const_infop info_ptr, - png_fixed_point *int_red_X, png_fixed_point *int_red_Y, - png_fixed_point *int_red_Z, png_fixed_point *int_green_X, - png_fixed_point *int_green_Y, png_fixed_point *int_green_Z, - png_fixed_point *int_blue_X, png_fixed_point *int_blue_Y, - png_fixed_point *int_blue_Z); -} - -static if(PNG_cHRM_SUPPORTED){ -void png_set_cHRM - (png_structp png_ptr, png_infop info_ptr, - double white_x, double white_y, double red_x, double red_y, double green_x, - double green_y, double blue_x, double blue_y); -void png_set_cHRM_XYZ(png_structp png_ptr, - png_infop info_ptr, double red_X, double red_Y, double red_Z, - double green_X, double green_Y, double green_Z, double blue_X, - double blue_Y, double blue_Z); -void png_set_cHRM_fixed(png_structp png_ptr, - png_infop info_ptr, png_fixed_point int_white_x, - png_fixed_point int_white_y, png_fixed_point int_red_x, - png_fixed_point int_red_y, png_fixed_point int_green_x, - png_fixed_point int_green_y, png_fixed_point int_blue_x, - png_fixed_point int_blue_y); -void png_set_cHRM_XYZ_fixed(png_structp png_ptr, - png_infop info_ptr, png_fixed_point int_red_X, png_fixed_point int_red_Y, - png_fixed_point int_red_Z, png_fixed_point int_green_X, - png_fixed_point int_green_Y, png_fixed_point int_green_Z, - png_fixed_point int_blue_X, png_fixed_point int_blue_Y, - png_fixed_point int_blue_Z); -} - -static if(PNG_gAMA_SUPPORTED){ -png_uint_32 png_get_gAMA - (png_const_structp png_ptr, png_const_infop info_ptr, - double *file_gamma); -uint png_get_gAMA_fixed - (png_const_structp png_ptr, png_const_infop info_ptr, - png_fixed_point *int_file_gamma); -} - -static if(PNG_gAMA_SUPPORTED){ -void png_set_gAMA(png_structp png_ptr, - png_infop info_ptr, double file_gamma); -void png_set_gAMA_fixed(png_structp png_ptr, - png_infop info_ptr, png_fixed_point int_file_gamma); -} - -static if(PNG_hIST_SUPPORTED){ -uint png_get_hIST - (png_const_structp png_ptr, png_const_infop info_ptr, - png_uint_16p *hist); -} - -static if(PNG_hIST_SUPPORTED){ -void png_set_hIST(png_structp png_ptr, - png_infop info_ptr, png_const_uint_16p hist); -} - -uint png_get_IHDR - (png_structp png_ptr, png_infop info_ptr, - uint *width, uint *height, int *bit_depth, int *color_type, - int *interlace_method, int *compression_method, int *filter_method); - -void png_set_IHDR - (png_structp png_ptr, png_infop info_ptr, - uint width, uint height, int bit_depth, int color_type, - int interlace_method, int compression_method, int filter_method); - -static if(PNG_oFFs_SUPPORTED){ -uint png_get_oFFs - (png_const_structp png_ptr, png_const_infop info_ptr, - png_int_32 *offset_x, png_int_32 *offset_y, int *unit_type); -} - -static if(PNG_oFFs_SUPPORTED){ -void png_set_oFFs - (png_structp png_ptr, png_infop info_ptr, - png_int_32 offset_x, png_int_32 offset_y, int unit_type); -} - -static if(PNG_pCAL_SUPPORTED){ -uint png_get_pCAL - (png_const_structp png_ptr, png_const_infop info_ptr, - png_charp *purpose, png_int_32 *X0, png_int_32 *X1, int *type, - int *nparams, - png_charp *units, png_charpp *params); -} - -static if(PNG_pCAL_SUPPORTED){ -void png_set_pCAL(png_structp png_ptr, - png_infop info_ptr, - png_const_charp purpose, png_int_32 X0, png_int_32 X1, int type, - int nparams, png_const_charp units, png_charpp params); -} - -static if(PNG_pHYs_SUPPORTED){ -uint png_get_pHYs - (png_const_structp png_ptr, png_const_infop info_ptr, - uint *res_x, uint *res_y, int *unit_type); -} - -static if(PNG_pHYs_SUPPORTED){ -void png_set_pHYs - (png_structp png_ptr, png_infop info_ptr, - uint res_x, uint res_y, int unit_type); -} - -uint png_get_PLTE - (png_const_structp png_ptr, png_const_infop info_ptr, - png_colorp *palette, int *num_palette); - -void png_set_PLTE - (png_structp png_ptr, png_infop info_ptr, - png_const_colorp palette, int num_palette); - -static if(PNG_sBIT_SUPPORTED){ -uint png_get_sBIT - (png_const_structp png_ptr, png_infop info_ptr, - png_color_8p *sig_bit); -} - -static if(PNG_sBIT_SUPPORTED){ -void png_set_sBIT - (png_structp png_ptr, png_infop info_ptr, png_const_color_8p sig_bit); -} - -static if(PNG_sRGB_SUPPORTED){ -uint png_get_sRGB(png_const_structp png_ptr, - png_const_infop info_ptr, int *file_srgb_intent); -} - -static if(PNG_sRGB_SUPPORTED){ -void png_set_sRGB - (png_structp png_ptr, png_infop info_ptr, int srgb_intent); -void png_set_sRGB_gAMA_and_cHRM(png_structp png_ptr, - png_infop info_ptr, int srgb_intent); -} - -static if(PNG_iCCP_SUPPORTED){ -uint png_get_iCCP - (png_const_structp png_ptr, png_const_infop info_ptr, - png_charpp name, int *compression_type, png_bytepp profile, - uint *proflen); -} - -static if(PNG_iCCP_SUPPORTED){ -void png_set_iCCP - (png_structp png_ptr, png_infop info_ptr, - png_const_charp name, int compression_type, png_const_bytep profile, - uint proflen); -} - -static if(PNG_sPLT_SUPPORTED){ -uint png_get_sPLT - (png_const_structp png_ptr, png_const_infop info_ptr, - png_sPLT_tpp entries); -} - -static if(PNG_sPLT_SUPPORTED){ -void png_set_sPLT - (png_structp png_ptr, png_infop info_ptr, - png_const_sPLT_tp entries, int nentries); -} - -static if(PNG_TEXT_SUPPORTED){ -/* png_get_text also returns the number of text chunks in *num_text */ -uint png_get_text - (png_const_structp png_ptr, png_const_infop info_ptr, - png_textp *text_ptr, int *num_text); -} - -/* Note while png_set_text() will accept a structure whose text, - * language, and translated keywords are NULL pointers, the structure - * returned by png_get_text will always contain regular - * zero-terminated C strings. They might be empty strings but - * they will never be NULL pointers. - */ - -static if(PNG_TEXT_SUPPORTED){ -void png_set_text - (png_structp png_ptr, png_infop info_ptr, - png_const_textp text_ptr, int num_text); -} - -static if(PNG_tIME_SUPPORTED){ -uint png_get_tIME - (png_const_structp png_ptr, png_infop info_ptr, png_timep *mod_time); -} - -static if(PNG_tIME_SUPPORTED){ -void png_set_tIME - (png_structp png_ptr, png_infop info_ptr, png_const_timep mod_time); -} - -static if(PNG_tRNS_SUPPORTED){ -uint png_get_tRNS - (png_const_structp png_ptr, png_infop info_ptr, - png_bytep *trans_alpha, int *num_trans, png_color_16p *trans_color); -} - -static if(PNG_tRNS_SUPPORTED){ -void png_set_tRNS - (png_structp png_ptr, png_infop info_ptr, - png_const_bytep trans_alpha, int num_trans, - png_const_color_16p trans_color); -} - -static if(PNG_sCAL_SUPPORTED){ -png_uint_32 png_get_sCAL - (png_const_structp png_ptr, png_const_infop info_ptr, - int *unit, double *width, double *height); -static if(PNG_FLOATING_ARITHMETIC_SUPPORTED){ -/* NOTE: this API is currently implemented using floating point arithmetic, - * consequently it can only be used on systems with floating point support. - * In any case the range of values supported by png_fixed_point is small and it - * is highly recommended that png_get_sCAL_s be used instead. - */ -uint png_get_sCAL_fixed - (png_structp png_ptr, png_const_infop info_ptr, int *unit, - png_fixed_point *width, - png_fixed_point *height); -} -uint png_get_sCAL_s - (png_const_structp png_ptr, png_const_infop info_ptr, - int *unit, png_charpp swidth, png_charpp sheight); - -void png_set_sCAL - (png_structp png_ptr, png_infop info_ptr, - int unit, double width, double height); -void png_set_sCAL_fixed (png_structp png_ptr, - png_infop info_ptr, int unit, png_fixed_point width, - png_fixed_point height); -void png_set_sCAL_s - (png_structp png_ptr, png_infop info_ptr, - int unit, png_const_charp swidth, png_const_charp sheight); -} /* PNG_sCAL_SUPPORTED */ - -static if(PNG_HANDLE_AS_UNKNOWN_SUPPORTED){ -/* Provide a list of chunks and how they are to be handled, if the built-in - handling or default unknown chunk handling is not desired. Any chunks not - listed will be handled in the default manner. The IHDR and IEND chunks - must not be listed. Because this turns off the default handling for chunks - that would otherwise be recognized the behavior of libpng transformations may - well become incorrect! - keep = 0: PNG_HANDLE_CHUNK_AS_DEFAULT: follow default behavior - = 1: PNG_HANDLE_CHUNK_NEVER: do not keep - = 2: PNG_HANDLE_CHUNK_IF_SAFE: keep only if safe-to-copy - = 3: PNG_HANDLE_CHUNK_ALWAYS: keep even if unsafe-to-copy -*/ -void png_set_keep_unknown_chunks - (png_structp png_ptr, int keep, - png_const_bytep chunk_list, int num_chunks); - -/* The handling code is returned; the result is therefore true (non-zero) if - * special handling is required, false for the default handling. - */ -int png_handle_as_unknown(png_structp png_ptr, - png_const_bytep chunk_name); -} -static if(PNG_UNKNOWN_CHUNKS_SUPPORTED){ -void png_set_unknown_chunks(png_structp png_ptr, - png_infop info_ptr, png_const_unknown_chunkp unknowns, - int num_unknowns); -void png_set_unknown_chunk_location - (png_structp png_ptr, png_infop info_ptr, int chunk, int location); -int png_get_unknown_chunks(png_const_structp png_ptr, - png_const_infop info_ptr, png_unknown_chunkpp entries); -} - -/* Png_free_data() will turn off the "valid" flag for anything it frees. - * If you need to turn it off for a chunk that your application has freed, - * you can use png_set_invalid(png_ptr, info_ptr, PNG_INFO_CHNK); - */ -void png_set_invalid - (png_structp png_ptr, png_infop info_ptr, int mask); - -static if(PNG_INFO_IMAGE_SUPPORTED){ -/* The "params" pointer is currently not used and is for future expansion. */ -void png_read_png(png_structp png_ptr, png_infop info_ptr, - int transforms, png_voidp params); -void png_write_png(png_structp png_ptr, png_infop info_ptr, - int transforms, png_voidp params); -} - -png_const_charp png_get_copyright - (png_const_structp png_ptr); -png_const_charp png_get_header_ver - (png_const_structp png_ptr); -png_const_charp png_get_header_version - (png_const_structp png_ptr); -png_const_charp png_get_libpng_ver - (png_const_structp png_ptr); - -static if(PNG_MNG_FEATURES_SUPPORTED){ -uint png_permit_mng_features(png_structp png_ptr, - uint mng_features_permitted); -} - -/* For use in png_set_keep_unknown, added to version 1.2.6 */ -enum PNG_HANDLE_CHUNK_AS_DEFAULT = 0; -enum PNG_HANDLE_CHUNK_NEVER = 1; -enum PNG_HANDLE_CHUNK_IF_SAFE = 2; -enum PNG_HANDLE_CHUNK_ALWAYS = 3; - -/* Strip the prepended error numbers ("#nnn ") from error and warning - * messages before passing them to the error or warning handler. - */ -static if(PNG_ERROR_NUMBERS_SUPPORTED){ -void png_set_strip_error_numbers - (png_structp png_ptr, - uint strip_mode); -} - -/* Added in libpng-1.2.6 */ -static if(PNG_SET_USER_LIMITS_SUPPORTED){ -void png_set_user_limits(png_structp png_ptr, - uint user_width_max, uint user_height_max); -uint png_get_user_width_max - (png_const_structp png_ptr); -uint png_get_user_height_max - (png_const_structp png_ptr); -/* Added in libpng-1.4.0 */ -void png_set_chunk_cache_max(png_structp png_ptr, - uint user_chunk_cache_max); -uint png_get_chunk_cache_max - (png_const_structp png_ptr); -/* Added in libpng-1.4.1 */ -void png_set_chunk_malloc_max(png_structp png_ptr, - png_alloc_size_t user_chunk_cache_max); -png_alloc_size_t png_get_chunk_malloc_max - (png_const_structp png_ptr); -} - -static if(PNG_INCH_CONVERSIONS_SUPPORTED){ -uint png_get_pixels_per_inch - (png_const_structp png_ptr, png_const_infop info_ptr); - -uint png_get_x_pixels_per_inch - (png_const_structp png_ptr, png_const_infop info_ptr); - -uint png_get_y_pixels_per_inch - (png_const_structp png_ptr, png_const_infop info_ptr); - -float png_get_x_offset_inches - (png_const_structp png_ptr, png_const_infop info_ptr); -static if(PNG_FIXED_POINT_SUPPORTED){ /* otherwise not implemented. */ -png_fixed_point png_get_x_offset_inches_fixed - (png_structp png_ptr, png_const_infop info_ptr); -} - -float png_get_y_offset_inches(png_const_structp png_ptr, - png_const_infop info_ptr); -static if(PNG_FIXED_POINT_SUPPORTED){ /* otherwise not implemented. */ -png_fixed_point png_get_y_offset_inches_fixed - (png_structp png_ptr, png_const_infop info_ptr); -} - -static if(PNG_pHYs_SUPPORTED){ -uint png_get_pHYs_dpi(png_const_structp png_ptr, - png_const_infop info_ptr, uint *res_x, uint *res_y, - int *unit_type); -} /* PNG_pHYs_SUPPORTED */ -} /* PNG_INCH_CONVERSIONS_SUPPORTED */ - -/* Added in libpng-1.4.0 */ -static if(PNG_IO_STATE_SUPPORTED){ -uint png_get_io_state(png_structp png_ptr); - -png_const_bytep png_get_io_chunk_name - (png_structp png_ptr); -uint png_get_io_chunk_type - (png_const_structp png_ptr); - -/* The flags returned by png_get_io_state() are the following: */ -enum PNG_IO_NONE = 0x0000; /* no I/O at this moment */ -enum PNG_IO_READING = 0x0001; /* currently reading */ -enum PNG_IO_WRITING = 0x0002; /* currently writing */ -enum PNG_IO_SIGNATURE = 0x0010; /* currently at the file signature */ -enum PNG_IO_CHUNK_HDR = 0x0020; /* currently at the chunk header */ -enum PNG_IO_CHUNK_DATA = 0x0040; /* currently at the chunk data */ -enum PNG_IO_CHUNK_CRC = 0x0080; /* currently at the chunk crc */ -enum PNG_IO_MASK_OP = 0x000f; /* current operation: reading/writing */ -enum PNG_IO_MASK_LOC = 0x00f0; /* current location: sig/hdr/data/crc */ -} /* ?PNG_IO_STATE_SUPPORTED */ - -/* Interlace support. The following macros are always defined so that if - * libpng interlace handling is turned off the macros may be used to handle - * interlaced images within the application. - */ -enum PNG_INTERLACE_ADAM7_PASSES = 7; - -/* Two macros to return the first row and first column of the original, - * full, image which appears in a given pass. 'pass' is in the range 0 - * to 6 and the result is in the range 0 to 7. - */ -auto PNG_PASS_START_ROW(T)(T pass) { return (((1&~(pass))<<(3-((pass)>>1)))&7); } -auto PNG_PASS_START_COL(T)(T pass) { return (((1& (pass))<<(3-(((pass)+1)>>1)))&7); } - -/* A macro to return the offset between pixels in the output row for a pair of - * pixels in the input - effectively the inverse of the 'COL_SHIFT' macro that - * follows. Note that ROW_OFFSET is the offset from one row to the next whereas - * COL_OFFSET is from one column to the next, within a row. - */ -auto PNG_PASS_ROW_OFFSET(T)(T pass) { return ((pass)>2?(8>>(((pass)-1)>>1)):8); } -auto PNG_PASS_COL_OFFSET(T)(T pass) { return (1<<((7-(pass))>>1)); } - -/* Two macros to help evaluate the number of rows or columns in each - * pass. This is expressed as a shift - effectively log2 of the number or - * rows or columns in each 8x8 tile of the original image. - */ -auto PNG_PASS_ROW_SHIFT(T)(T pass) { return ((pass)>2?(8-(pass))>>1:3); } -auto PNG_PASS_COL_SHIFT(T)(T pass) { return ((pass)>1?(7-(pass))>>1:3); } - -/* Hence two macros to determine the number of rows or columns in a given - * pass of an image given its height or width. In fact these macros may - * return non-zero even though the sub-image is empty, because the other - * dimension may be empty for a small image. - */ -auto PNG_PASS_ROWS(S,T)(S height, T pass) { return (((height)+(((1<>PNG_PASS_ROW_SHIFT(pass)); } -auto PNG_PASS_COLS(S,T)(S width, T pass) { return (((width)+(((1<>PNG_PASS_COL_SHIFT(pass)); } - -/* For the reader row callbacks (both progressive and sequential) it is - * necessary to find the row in the output image given a row in an interlaced - * image, so two more macros: - */ -auto PNG_ROW_FROM_PASS_ROW(S,T)(S yIn, T pass) { return - (((yIn)<>(((7-(off))-(pass))<<2)) & 0xF) | - ((0x01145AF0>>(((7-(off))-(pass))<<2)) & 0xF0)); } - -auto PNG_ROW_IN_INTERLACE_PASS(T)(y, pass) { return - ((PNG_PASS_MASK(pass,0) >> ((y)&7)) & 1); } -auto PNG_COL_IN_INTERLACE_PASS(T)(x, pass) { return - ((PNG_PASS_MASK(pass,1) >> ((x)&7)) & 1); } - -static if(PNG_READ_COMPOSITE_NODIV_SUPPORTED){ -/* With these routines we avoid an integer divide, which will be slower on - * most machines. However, it does take more operations than the corresponding - * divide method, so it may be slower on a few RISC systems. There are two - * shifts (by 8 or 16 bits) and an addition, versus a single integer divide. - * - * Note that the rounding factors are NOT supposed to be the same! 128 and - * 32768 are correct for the NODIV code; 127 and 32767 are correct for the - * standard method. - * - * [Optimized code by Greg Roelofs and Mark Adler...blame us for bugs. :-) ] - */ - - /* fg and bg should be in `gamma 1.0' space; alpha is the opacity */ - -static assert(0); - -}else{ /* Standard method using integer division */ - - auto png_composite(T)(out T composite, png_uint_16 fg, png_uint_16 alpha, png_uint_16 bg) { - return (composite) = cast(png_byte)(((fg) * (alpha) + - (bg) * (255 - (alpha)) + - 127) / 255); } - - auto png_composite_16(T)(out T composite, uint fg, uint alpha, uint bg) { - return (composite) = cast(png_uint_16)(((fg) * (alpha) + - (bg)*(65535 - (alpha)) + - 32767) / 65535); } -} /* PNG_READ_COMPOSITE_NODIV_SUPPORTED */ - -static if(PNG_READ_INT_FUNCTIONS_SUPPORTED){ -uint png_get_uint_32(png_const_bytep buf); -png_uint_16 png_get_uint_16(png_const_bytep buf); -png_int_32 png_get_int_32(png_const_bytep buf); -} - -uint png_get_uint_31(png_structp png_ptr, - png_const_bytep buf); -/* No png_get_int_16 -- may be added if there's a real need for it. */ - -/* Place a 32-bit number into a buffer in PNG byte order (big-endian). */ -static if(PNG_WRITE_INT_FUNCTIONS_SUPPORTED){ -void png_save_uint_32(png_bytep buf, uint i); -} -static if(PNG_SAVE_INT_32_SUPPORTED){ -void png_save_int_32(png_bytep buf, png_int_32 i); -} - -/* Place a 16-bit number into a buffer in PNG byte order. - * The parameter is declared unsigned int, not png_uint_16, - * just to avoid potential problems on pre-ANSI C compilers. - */ -static if(PNG_WRITE_INT_FUNCTIONS_SUPPORTED){ -void png_save_uint_16(png_bytep buf, uint i); -/* No png_save_int_16 -- may be added if there's a real need for it. */ -} - -version(PNG_USE_READ_MACROS){ -/* Inline macros to do direct reads of bytes from the input buffer. - * The png_get_int_32() routine assumes we are using two's complement - * format for negative values, which is almost certainly true. - */ -auto png_get_uint_32(png_const_bytep buf) pure { return - ((cast(uint)(*(buf)) << 24) + - (cast(uint)(*((buf) + 1)) << 16) + - (cast(uint)(*((buf) + 2)) << 8) + - (cast(uint)(*((buf) + 3)))); } - - /* From libpng-1.4.0 until 1.4.4, the png_get_uint_16 macro (but not the - * function) incorrectly returned a value of type uint. - */ - auto png_get_uint_16(png_const_bytep buf) pure { return - (cast(png_uint_16) - ((cast(uint)(*(buf)) << 8) + - (cast(uint)(*((buf) + 1))))); } - - auto png_get_int_32(T)(png_const_bytep buf) pure { return - (cast(png_int_32)((*(buf) & 0x80) - ? -(cast(png_int_32)((png_get_uint_32(buf) ^ 0xffffffffL) + 1)) - : cast(png_int_32)png_get_uint_32(buf))); } -} - -static if(PNG_READ_CHECK_FOR_INVALID_INDEX_SUPPORTED || - PNG_WRITE_CHECK_FOR_INVALID_INDEX_SUPPORTED){ -void png_set_check_for_invalid_index(png_structp png_ptr, int allowed); -} - -/* Maintainer: Put new public prototypes here ^, in libpng.3, and project - * defs - */ - -/* The last ordinal number (this is the *last* one already used; the next - * one to use is one more than this.) Maintainer, remember to add an entry to - * scripts/symbols.def as well. - */ -// PNG_EXPORT_LAST_ORDINAL(234); - -}//extern (C) - -} /* PNG_VERSION_INFO_ONLY */ -/* Do not put anything past this line */ diff --git a/3rdparty/libpng/source/libpng/pngconf.d b/3rdparty/libpng/source/libpng/pngconf.d deleted file mode 100644 index 85e3eceb..00000000 --- a/3rdparty/libpng/source/libpng/pngconf.d +++ /dev/null @@ -1,100 +0,0 @@ -module libpng.pngconf; -/* pngconf.h - machine configurable file for libpng - * - * libpng version 1.5.14 - January 24, 2013 - * - * Copyright (c) 1998-2013 Glenn Randers-Pehrson - * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) - * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) - * - * This code is released under the libpng license. - * For conditions of distribution and use, see the disclaimer - * and license in png.h - * - */ - -/* Any machine specific code is near the front of this file, so if you - * are configuring libpng for a machine, you may want to read the section - * starting here down to where it starts to typedef png_color, png_text, - * and png_info. - */ - - -/* For png_FILE_p - this provides the standard definition of a - * FILE - */ -import core.stdc.stdio : FILE; - -public: - -/* Some typedefs to get us started. These should be safe on most of the - * common platforms. The typedefs should be at least as large as the - * numbers suggest (a png_uint_32 must be at least 32 bits long), but they - * don't have to be exactly that size. Some compilers dislike passing - * unsigned shorts as function parameters, so you may be better off using - * unsigned int for png_uint_16. - */ - -alias uint png_uint_32; -alias int png_int_32; -alias ushort png_uint_16; -alias short png_int_16; -alias ubyte png_byte; - -alias size_t png_size_t; -//#define png_sizeof(x) (sizeof (x)) - -/* Typedef for floating-point numbers that are converted - * to fixed-point with a multiple of 100,000, e.g., gamma - */ -alias png_int_32 png_fixed_point; - -/* Add typedefs for pointers */ -alias void * png_voidp; -alias const(void) * png_const_voidp; -alias png_byte * png_bytep; -alias const(png_byte) * png_const_bytep; -alias png_uint_32 * png_uint_32p; -alias const(png_uint_32) * png_const_uint_32p; -alias png_int_32 * png_int_32p; -alias const(png_int_32) * png_const_int_32p; -alias png_uint_16 * png_uint_16p; -alias const(png_uint_16) * png_const_uint_16p; -alias png_int_16 * png_int_16p; -alias const(png_int_16) * png_const_int_16p; -alias char * png_charp; -alias const(char) * png_const_charp; -alias png_fixed_point * png_fixed_point_p; -alias const(png_fixed_point) * png_const_fixed_point_p; -alias png_size_t * png_size_tp; -alias const(png_size_t) * png_const_size_tp; - -alias FILE * png_FILE_p; - -alias double * png_doublep; -alias const(double) * png_const_doublep; - -/* Pointers to pointers; i.e. arrays */ -alias png_byte * * png_bytepp; -alias png_uint_32 * * png_uint_32pp; -alias png_int_32 * * png_int_32pp; -alias png_uint_16 * * png_uint_16pp; -alias png_int_16 * * png_int_16pp; -alias const(char) * * png_const_charpp; -alias char * * png_charpp; -alias png_fixed_point * * png_fixed_point_pp; -alias double * * png_doublepp; - -/* Pointers to pointers to pointers; i.e., pointer to array */ -alias char * * * png_charppp; - -/* png_alloc_size_t is guaranteed to be no smaller than png_size_t, - * and no smaller than png_uint_32. Casts from png_size_t or png_uint_32 - * to png_alloc_size_t are not necessary; in fact, it is recommended - * not to use them at all so that the compiler can complain when something - * turns out to be problematic. - * Casts in the other direction (from png_alloc_size_t to png_size_t or - * png_uint_32) should be explicitly applied; however, we do not expect - * to encounter practical situations that require such conversions. - */ -alias png_size_t png_alloc_size_t; diff --git a/3rdparty/libpng/source/libpng/pnglibconf.d b/3rdparty/libpng/source/libpng/pnglibconf.d deleted file mode 100644 index dfbcdfa4..00000000 --- a/3rdparty/libpng/source/libpng/pnglibconf.d +++ /dev/null @@ -1,180 +0,0 @@ -module libpng.pnglibconf; -/* pnglibconf.h - library build configuration */ - -/* libpng version 1.5.14 - January 24, 2013 */ - -/* Copyright (c) 1998-2011 Glenn Randers-Pehrson */ - -/* This code is released under the libpng license. */ -/* For conditions of distribution and use, see the disclaimer */ -/* and license in png.h */ - -/* pnglibconf.h */ -/* Machine generated file: DO NOT EDIT */ -/* Derived from: scripts/pnglibconf.dfa */ - - -/* settings */ -enum PNG_COST_SHIFT = 3; -enum PNG_GAMMA_THRESHOLD_FIXED = 5000; -enum PNG_QUANTIZE_BLUE_BITS = 5; -enum PNG_WEIGHT_SHIFT = 8; -enum PNG_API_RULE = 0; -//#define PNG_CALLOC_SUPPORTED -enum PNG_ZBUF_SIZE = 8192; -enum PNG_QUANTIZE_GREEN_BITS = 5; -enum PNG_sCAL_PRECISION = 5; -enum PNG_QUANTIZE_RED_BITS = 5; -enum PNG_DEFAULT_READ_MACROS = 1; -enum PNG_MAX_GAMMA_8 = 11; -/* end of settings */ -/* options */ -enum PNG_IO_STATE_SUPPORTED = 1; -enum PNG_BENIGN_ERRORS_SUPPORTED = 1; -enum PNG_WRITE_SUPPORTED = 1; -enum PNG_EASY_ACCESS_SUPPORTED = 1; -enum PNG_INFO_IMAGE_SUPPORTED = 1; -enum PNG_TIME_RFC1123_SUPPORTED = 1; -enum PNG_WRITE_FILTER_SUPPORTED = 1; -enum PNG_FIXED_POINT_SUPPORTED = 1; -enum PNG_READ_SUPPORTED = 1; -enum PNG_WRITE_OPTIMIZE_CMF_SUPPORTED = 1; -enum PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED = 1; -enum PNG_WRITE_FLUSH_SUPPORTED = 1; -enum PNG_WRITE_INTERLACING_SUPPORTED = 1; -enum PNG_WRITE_TRANSFORMS_SUPPORTED = 1; -enum PNG_READ_UNKNOWN_CHUNKS_SUPPORTED = 1; -enum PNG_INCH_CONVERSIONS_SUPPORTED = 1; -enum PNG_USER_MEM_SUPPORTED = 1; -enum PNG_SETJMP_SUPPORTED = 1; -enum PNG_WARNINGS_SUPPORTED = 1; -enum PNG_FLOATING_POINT_SUPPORTED = 1; -enum PNG_WRITE_CUSTOMIZE_ZTXT_COMPRESSION_SUPPORTED = 1; -enum PNG_READ_QUANTIZE_SUPPORTED = 1; -enum PNG_READ_16BIT_SUPPORTED = 1; -enum PNG_ALIGN_MEMORY_SUPPORTED = 1; -enum PNG_ERROR_NUMBERS_SUPPORTED = 0; -enum PNG_CHECK_FOR_INVALID_INDEX_SUPPORTED = 1; -enum PNG_SEQUENTIAL_READ_SUPPORTED = 1; -enum PNG_BUILD_GRAYSCALE_PALETTE_SUPPORTED = 1; -enum PNG_WRITE_SHIFT_SUPPORTED = 1; -enum PNG_ERROR_TEXT_SUPPORTED = 1; -enum PNG_WRITE_FILLER_SUPPORTED = 1; -enum PNG_WRITE_WEIGHTED_FILTER_SUPPORTED = 1; -enum PNG_SAFE_LIMITS_SUPPORTED = 0; -enum PNG_WRITE_16BIT_SUPPORTED = 1; -enum PNG_WRITE_SWAP_ALPHA_SUPPORTED = 1; -enum PNG_POINTER_INDEXING_SUPPORTED = 1; -enum PNG_FLOATING_ARITHMETIC_SUPPORTED = 1; -enum PNG_WRITE_CHECK_FOR_INVALID_INDEX_SUPPORTED = 1; -enum PNG_MNG_FEATURES_SUPPORTED = 1; -enum PNG_STDIO_SUPPORTED = 1; -enum PNG_WRITE_INT_FUNCTIONS_SUPPORTED = 1; -enum PNG_WRITE_PACKSWAP_SUPPORTED = 1; -enum PNG_READ_INTERLACING_SUPPORTED = 1; -enum PNG_READ_COMPOSITE_NODIV_SUPPORTED = 0;/// -enum PNG_PROGRESSIVE_READ_SUPPORTED = 1; -enum PNG_READ_INT_FUNCTIONS_SUPPORTED = 1; -enum PNG_HANDLE_AS_UNKNOWN_SUPPORTED = 1; -enum PNG_WRITE_INVERT_SUPPORTED = 1; -enum PNG_WRITE_PACK_SUPPORTED = 1; -enum PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED = 1; -enum PNG_16BIT_SUPPORTED = 1; -enum PNG_READ_CHECK_FOR_INVALID_INDEX_SUPPORTED = 1; -enum PNG_WRITE_cHRM_SUPPORTED = 1; -enum PNG_READ_ANCILLARY_CHUNKS_SUPPORTED = 1; -enum PNG_WRITE_BGR_SUPPORTED = 1; -enum PNG_WRITE_sBIT_SUPPORTED = 1; -enum PNG_READ_sBIT_SUPPORTED = 1; -enum PNG_READ_TRANSFORMS_SUPPORTED = 1; -enum PNG_READ_EXPAND_16_SUPPORTED = 1; -enum PNG_WRITE_SWAP_SUPPORTED = 1; -enum PNG_READ_SWAP_SUPPORTED = 1; -enum PNG_WRITE_oFFs_SUPPORTED = 1; -enum PNG_READ_oFFs_SUPPORTED = 1; -enum PNG_WRITE_USER_TRANSFORM_SUPPORTED = 1; -enum PNG_WRITE_tIME_SUPPORTED = 1; -enum PNG_WRITE_INVERT_ALPHA_SUPPORTED = 1; -enum PNG_READ_tIME_SUPPORTED = 1; -enum PNG_READ_PACKSWAP_SUPPORTED = 1; -enum PNG_USER_LIMITS_SUPPORTED = 1; -enum PNG_READ_GRAY_TO_RGB_SUPPORTED = 1; -enum PNG_READ_STRIP_16_TO_8_SUPPORTED = 1; -enum PNG_READ_SCALE_16_TO_8_SUPPORTED = 1; -enum PNG_READ_USER_CHUNKS_SUPPORTED = 1; -enum PNG_READ_OPT_PLTE_SUPPORTED = 1; -enum PNG_UNKNOWN_CHUNKS_SUPPORTED = 1; -enum PNG_WRITE_gAMA_SUPPORTED = 1; -enum PNG_SET_USER_LIMITS_SUPPORTED = 1; -enum PNG_WRITE_iCCP_SUPPORTED = 1; -enum PNG_READ_iCCP_SUPPORTED = 1; -enum PNG_READ_SHIFT_SUPPORTED = 1; -enum PNG_SET_CHUNK_MALLOC_LIMIT_SUPPORTED = 1; -enum PNG_READ_EXPAND_SUPPORTED = 1; -enum PNG_WRITE_iTXt_SUPPORTED = 1; -enum PNG_READ_iTXt_SUPPORTED = 1; -enum PNG_READ_SWAP_ALPHA_SUPPORTED = 1; -enum PNG_CONSOLE_IO_SUPPORTED = 1; -enum PNG_sBIT_SUPPORTED = 1; -enum PNG_WRITE_sRGB_SUPPORTED = 1; -enum PNG_READ_sRGB_SUPPORTED = 1; -enum PNG_READ_ALPHA_MODE_SUPPORTED = 1; -enum PNG_WRITE_sCAL_SUPPORTED = 1; -enum PNG_READ_sCAL_SUPPORTED = 1; -enum PNG_USER_CHUNKS_SUPPORTED = 1; -enum PNG_oFFs_SUPPORTED = 1; -enum PNG_READ_GAMMA_SUPPORTED = 1; -enum PNG_WRITE_pHYs_SUPPORTED = 1; -enum PNG_WRITE_tRNS_SUPPORTED = 1; -enum PNG_READ_pHYs_SUPPORTED = 1; -enum PNG_READ_tRNS_SUPPORTED = 1; -enum PNG_READ_RGB_TO_GRAY_SUPPORTED = 1; -enum PNG_tIME_SUPPORTED = 0;// -enum PNG_WRITE_bKGD_SUPPORTED = 1; -enum PNG_READ_bKGD_SUPPORTED = 1; -enum PNG_WRITE_zTXt_SUPPORTED = 1; -enum PNG_WRITE_pCAL_SUPPORTED = 1; -enum PNG_READ_zTXt_SUPPORTED = 1; -enum PNG_READ_pCAL_SUPPORTED = 1; -enum PNG_WRITE_hIST_SUPPORTED = 1; -enum PNG_READ_hIST_SUPPORTED = 1; -enum PNG_WRITE_sPLT_SUPPORTED = 1; -enum PNG_READ_sPLT_SUPPORTED = 1; -enum PNG_READ_INVERT_ALPHA_SUPPORTED = 1; -enum PNG_iCCP_SUPPORTED = 1; -enum PNG_CONVERT_tIME_SUPPORTED = 1; -enum PNG_READ_FILLER_SUPPORTED = 1; -enum PNG_READ_USER_TRANSFORM_SUPPORTED = 1; -enum PNG_READ_PACK_SUPPORTED = 1; -enum PNG_READ_BACKGROUND_SUPPORTED = 1; -enum PNG_iTXt_SUPPORTED = 1; -enum PNG_READ_cHRM_SUPPORTED = 1; -enum PNG_USER_TRANSFORM_INFO_SUPPORTED = 1; -enum PNG_sRGB_SUPPORTED = 1; -enum PNG_SET_CHUNK_CACHE_LIMIT_SUPPORTED = 1; -enum PNG_USER_TRANSFORM_PTR_SUPPORTED = 1; -enum PNG_sCAL_SUPPORTED = 1; -enum PNG_READ_BGR_SUPPORTED = 1; -enum PNG_READ_INVERT_SUPPORTED = 1; -enum PNG_READ_COMPRESSED_TEXT_SUPPORTED = 1; -enum PNG_pHYs_SUPPORTED = 1; -enum PNG_tRNS_SUPPORTED = 1; -enum PNG_bKGD_SUPPORTED = 1; -enum PNG_pCAL_SUPPORTED = 1; -enum PNG_zTXt_SUPPORTED = 1; -enum PNG_READ_TEXT_SUPPORTED = 1; -enum PNG_hIST_SUPPORTED = 1; -enum PNG_READ_STRIP_ALPHA_SUPPORTED = 1; -enum PNG_WRITE_COMPRESSED_TEXT_SUPPORTED = 1; -enum PNG_sPLT_SUPPORTED = 1; -enum PNG_READ_gAMA_SUPPORTED = 1; -enum PNG_SAVE_INT_32_SUPPORTED = 1; -enum PNG_cHRM_SUPPORTED = 1; -enum PNG_CHECK_cHRM_SUPPORTED = 1; -enum PNG_gAMA_SUPPORTED = 1; -enum PNG_READ_tEXt_SUPPORTED = 1; -enum PNG_WRITE_TEXT_SUPPORTED = 1; -enum PNG_TEXT_SUPPORTED = 1; -enum PNG_WRITE_tEXt_SUPPORTED = 1; -enum PNG_tEXt_SUPPORTED = 1; -/* end of options */