Skip to content

Commit

Permalink
Merge pull request #1932 from matthew-brett/run-time-tcl-tk
Browse files Browse the repository at this point in the history
RF: run-time loading of Tcl / Tk functions
  • Loading branch information
wiredfool committed Jun 11, 2016
2 parents ebd3c35 + 4bc75e4 commit eb28cc9
Show file tree
Hide file tree
Showing 5 changed files with 469 additions and 140 deletions.
20 changes: 20 additions & 0 deletions PIL/_tkinter_finder.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
""" Find compiled module linking to Tcl / Tk libraries
"""
import sys

if sys.version_info[0] > 2:
from tkinter import _tkinter as tk
else:
from Tkinter import tkinter as tk

if hasattr(sys, 'pypy_find_executable'):
# Tested with packages at https://bitbucket.org/pypy/pypy/downloads.
# PyPies 1.6, 2.0 do not have tkinter built in. PyPy3-2.3.1 gives an
# OSError trying to import tkinter. Otherwise:
try: # PyPy 5.1, 4.0.0, 2.6.1, 2.6.0
TKINTER_LIB = tk.tklib_cffi.__file__
except AttributeError:
# PyPy3 2.4, 2.1-beta1; PyPy 2.5.1, 2.5.0, 2.4.0, 2.3, 2.2, 2.1
TKINTER_LIB = tk.tkffi.verifier.modulefilename
else:
TKINTER_LIB = tk.__file__
146 changes: 146 additions & 0 deletions Tk/_tkmini.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
/* Small excerpts from the Tcl / Tk 8.6 headers
*
* License terms copied from:
* http://www.tcl.tk/software/tcltk/license.html
* as of 20 May 2016.
*
* Copyright (c) 1987-1994 The Regents of the University of California.
* Copyright (c) 1993-1996 Lucent Technologies.
* Copyright (c) 1994-1998 Sun Microsystems, Inc.
* Copyright (c) 1998-2000 by Scriptics Corporation.
* Copyright (c) 2002 by Kevin B. Kenny. All rights reserved.
*
* This software is copyrighted by the Regents of the University
* of California, Sun Microsystems, Inc., Scriptics Corporation,
* and other parties. The following terms apply to all files
* associated with the software unless explicitly disclaimed in
* individual files.
*
* The authors hereby grant permission to use, copy, modify,
* distribute, and license this software and its documentation
* for any purpose, provided that existing copyright notices are
* retained in all copies and that this notice is included
* verbatim in any distributions. No written agreement, license,
* or royalty fee is required for any of the authorized uses.
* Modifications to this software may be copyrighted by their
* authors and need not follow the licensing terms described
* here, provided that the new terms are clearly indicated on
* the first page of each file where they apply.
*
* IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO
* ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR
* CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS
* SOFTWARE, ITS DOCUMENTATION, OR ANY DERIVATIVES THEREOF, EVEN
* IF THE AUTHORS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH
* DAMAGE.
*
* THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
* PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON
* AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO
* OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES,
* ENHANCEMENTS, OR MODIFICATIONS.
*
* GOVERNMENT USE: If you are acquiring this software on behalf
* of the U.S. government, the Government shall have only
* "Restricted Rights" in the software and related documentation
* as defined in the Federal Acquisition Regulations (FARs) in
* Clause 52.227.19 (c) (2). If you are acquiring the software
* on behalf of the Department of Defense, the software shall be
* classified as "Commercial Computer Software" and the
* Government shall have only "Restricted Rights" as defined in
* Clause 252.227-7013 (c) (1) of DFARs. Notwithstanding the
* foregoing, the authors grant the U.S. Government and others
* acting in its behalf permission to use and distribute the
* software in accordance with the terms specified in this
* license
*/

/*
* Unless otherwise noted, these definitions are stable from Tcl / Tk 8.4
* through Tck / Tk master as of 21 May 2016
*/

#ifdef __cplusplus
extern "C" {
#endif

/* Tcl header excerpts */
#define TCL_OK 0
#define TCL_ERROR 1

/*
* Users of versions of Tcl >= 8.6 encouraged to treat Tcl_Interp as an opaque
* pointer. The following definition results when TCL_NO_DEPRECATED defined.
*/
typedef struct Tcl_Interp Tcl_Interp;

typedef struct Tcl_Command_ *Tcl_Command;
typedef void *ClientData;

typedef int (Tcl_CmdProc) (ClientData clientData, Tcl_Interp
*interp, int argc, const char *argv[]);
typedef void (Tcl_CmdDeleteProc) (ClientData clientData);

/* Typedefs derived from function signatures in Tcl header */
/* Tcl_CreateCommand */
typedef Tcl_Command (*Tcl_CreateCommand_t)(Tcl_Interp *interp,
const char *cmdName, Tcl_CmdProc *proc,
ClientData clientData,
Tcl_CmdDeleteProc *deleteProc);
/* Tcl_AppendResult */
typedef void (*Tcl_AppendResult_t) (Tcl_Interp *interp, ...);

/* Tk header excerpts */

/*
* The following values control how blocks are combined into photo
* images when the alpha component of a pixel is not 255, a.k.a. the
* compositing rule.
*/

#define TK_PHOTO_COMPOSITE_OVERLAY 0
#define TK_PHOTO_COMPOSITE_SET 1

typedef struct Tk_Window_ *Tk_Window;

typedef void *Tk_PhotoHandle;

typedef struct Tk_PhotoImageBlock
{
unsigned char *pixelPtr;
int width;
int height;
int pitch;
int pixelSize;
int offset[4];
} Tk_PhotoImageBlock;

/* Typedefs derived from function signatures in Tk header */
/* Tk_PhotoPutBlock for Tk <= 8.4 */
typedef void (*Tk_PhotoPutBlock_84_t) (Tk_PhotoHandle handle,
Tk_PhotoImageBlock *blockPtr, int x, int y,
int width, int height, int compRule);
/* Tk_PhotoPutBlock for Tk >= 8.5 */
typedef int (*Tk_PhotoPutBlock_85_t) (Tcl_Interp * interp,
Tk_PhotoHandle handle,
Tk_PhotoImageBlock * blockPtr, int x, int y,
int width, int height, int compRule);
/* Tk_PhotoSetSize for Tk <= 8.4 */
typedef void (*Tk_PhotoSetSize_84_t) (Tk_PhotoHandle handle,
int width, int height);
/* Tk_FindPhoto */
typedef Tk_PhotoHandle (*Tk_FindPhoto_t) (Tcl_Interp *interp,
const char *imageName);
/* Tk_PhotoGetImage */
typedef int (*Tk_PhotoGetImage_t) (Tk_PhotoHandle handle,
Tk_PhotoImageBlock * blockPtr);

/*
* end block for C++
*/

#ifdef __cplusplus
}
#endif
Loading

0 comments on commit eb28cc9

Please sign in to comment.