Hello Pierre-Alain,

  since when are we adding major new features to release branches?

best regards
marcus

Tuesday, April 17, 2007, 5:31:45 PM, you wrote:

> pajoye          Tue Apr 17 15:31:45 2007 UTC

>   Modified files:              (Branch: PHP_5_2)
>     /php-src/ext/gd     config.w32 gd.c php_gd.h 
>   Log:
>   - MFH: add imagegrabwindow and imagegrabscreen (win32 only) [DOC]
>     capture a window using its handle or a full screen
>   
> http://cvs.php.net/viewvc.cgi/php-src/ext/gd/config.w32?r1=1.10.4.3&r2=1.10.4.4&diff_format=u
> Index: php-src/ext/gd/config.w32
> diff -u php-src/ext/gd/config.w32:1.10.4.3 php-src/ext/gd/config.w32:1.10.4.4
> --- php-src/ext/gd/config.w32:1.10.4.3  Wed Apr 11 11:44:20 2007
> +++ php-src/ext/gd/config.w32   Tue Apr 17 15:31:45 2007
> @@ -1,4 +1,4 @@
> -// $Id: config.w32,v 1.10.4.3 2007/04/11 11:44:20 pajoye Exp $
> +// $Id: config.w32,v 1.10.4.4 2007/04/17 15:31:45 pajoye Exp $
>  // vim:ft=javascript
>  
>  ARG_WITH("gd", "Bundled GD support", "yes,shared");
> @@ -24,6 +24,9 @@
>                         CHECK_LIB("zlib.lib", "gd", PHP_GD);
>                 }
>  
> +               CHECK_LIB("User32.lib", "gd", PHP_GD);
> +               CHECK_LIB("Gdi32.lib", "gd", PHP_GD);
> +
>                 EXTENSION("gd", "gd.c gdttf.c", null, "-Iext/gd/libgd", 
> "php_gd2.dll");
>                 ADD_SOURCES("ext/gd/libgd", "gd2copypal.c gd_arc_f_buggy.c 
> gd.c \
>                         gdcache.c gdfontg.c gdfontl.c gdfontmb.c gdfonts.c 
> gdfontt.c \
> http://cvs.php.net/viewvc.cgi/php-src/ext/gd/gd.c?r1=1.312.2.20.2.20&r2=1.312.2.20.2.21&diff_format=u
> Index: php-src/ext/gd/gd.c
> diff -u php-src/ext/gd/gd.c:1.312.2.20.2.20 
> php-src/ext/gd/gd.c:1.312.2.20.2.21
> --- php-src/ext/gd/gd.c:1.312.2.20.2.20       Fri Apr  6 15:38:35 2007
> +++ php-src/ext/gd/gd.c       Tue Apr 17 15:31:45 2007
> @@ -18,7 +18,7 @@
>     +----------------------------------------------------------------------+
>   */
>  
> -/* $Id: gd.c,v 1.312.2.20.2.20 2007/04/06 15:38:35 pajoye Exp $ */
> +/* $Id: gd.c,v 1.312.2.20.2.21 2007/04/17 15:31:45 pajoye Exp $ */
>  
>  /* gd 1.2 is copyright 1994, 1995, Quest Protein Database Center,
>     Cold Spring Harbor Labs. */
> @@ -52,6 +52,9 @@
>  #ifdef PHP_WIN32
>  # include <io.h>
>  # include <fcntl.h>
> +#include <windows.h>
> +#include <Winuser.h>
> +#include <Wingdi.h>
>  #endif
>  
>  #if HAVE_LIBGD
> @@ -314,6 +317,18 @@
>  ZEND_END_ARG_INFO()
>  #endif
>  
> +#ifdef PHP_WIN32
> +static
> +ZEND_BEGIN_ARG_INFO(arginfo_imagegrabwindow, 0, 0, 1)
> +       ZEND_ARG_INFO(0, handle)
> +       ZEND_ARG_INFO(0, client_area)
> +ZEND_END_ARG_INFO()
> +
> +static
> +ZEND_BEGIN_ARG_INFO(arginfo_imagegrabscreen, 0)
> +ZEND_END_ARG_INFO()
> +#endif
> +
>  #ifdef HAVE_GD_BUNDLED
>  static
>  ZEND_BEGIN_ARG_INFO_EX(arginfo_imagerotate, 0, 0, 3)
> @@ -1020,6 +1035,11 @@
>         PHP_FE(imagecopyresampled,                                        
> arginfo_imagecopyresampled)
>  #endif
>  
> +#ifdef PHP_WIN32
> +       PHP_FE(imagegrabwindow,                                           
> arginfo_imagegrabwindow)
> +       PHP_FE(imagegrabscreen,                                           
> arginfo_imagegrabscreen)
> +#endif
> +
>  #ifdef HAVE_GD_BUNDLED
>         PHP_FE(imagerotate,                                               
> arginfo_imagerotate)
>         PHP_FE(imageantialias,                                            
> arginfo_imageantialias)
> @@ -2069,6 +2089,155 @@
>  /* }}} */
>  #endif
>  
> +#ifdef PHP_WIN32
> +/* {{{ proto resource imagegrabwindow(int window_handle [, int client_area])
> +   Grab a window or its client area using a windows handle (HWND property in 
> COM instance) */
> +PHP_FUNCTION(imagegrabwindow)
> +{
> +       HWND window;
> +       long client_area = 0;
> +       RECT rc = {0};
> +       RECT rc_win = {0};
> +       int Width, Height;
> +       HDC             hdc;
> +       HDC memDC;
> +       HBITMAP memBM;
> +       HBITMAP hOld;
> +       HINSTANCE handle;
> +       long lwindow_handle;
> +       typedef BOOL (WINAPI *tPrintWindow)(HWND, HDC,UINT);
> +       tPrintWindow pPrintWindow = 0;
> +       gdImagePtr im;
> +
> +       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|l",
> &lwindow_handle, &client_area) == FAILURE) {
> +               RETURN_FALSE;
> +       }
> +
> +       window = (HWND) lwindow_handle;
> +
> +       if (!IsWindow(window)) {
> +               php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Invalid window 
> handle");
> +               RETURN_FALSE;
> +       }
> +
> +       hdc             = GetDC(0);
> +
> +       if (client_area) {
> +               GetClientRect(window, &rc);
> +               Width = rc.right;
> +               Height = rc.bottom;
> +       } else {
> +               GetWindowRect(window, &rc);
> +               Width   = rc.right - rc.left;
> +               Height  = rc.bottom - rc.top;
> +       }
> +
> +       Width           = (Width/4)*4;
> +
> +       memDC   = CreateCompatibleDC(hdc);
> +       memBM   = CreateCompatibleBitmap(hdc, Width, Height);
> +       hOld    = (HBITMAP) SelectObject (memDC, memBM);
> +
> +
> +       handle = LoadLibrary("User32.dll");
> +       if ( handle == 0 ) {
> +               goto clean;
> +       }
> +       pPrintWindow = (tPrintWindow) GetProcAddress(handle, "PrintWindow");
> +
> +       if ( pPrintWindow )  {
> +               pPrintWindow(window, memDC, (UINT) client_area);
> +       } else {
> +               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Windows API too 
> old");
> +               RETURN_FALSE;
> +               goto clean;
> +       }
> +
> +       FreeLibrary(handle);
> +
> +       im = gdImageCreateTrueColor(Width, Height);
> +       if (im) {
> +               int x,y;
> +               for (y=0; y <= Height; y++) {
> +                       for (x=0; x <= Width; x++) {
> +                               int c = GetPixel(memDC, x,y);
> +                               gdImageSetPixel(im, x, y,
> gdTrueColor(GetRValue(c), GetGValue(c), GetBValue(c)));
> +                       }
> +               }
> +       }
> +
> +clean:
> +       SelectObject(memDC,hOld);
> +       DeleteObject(memBM);
> +       DeleteDC(memDC);
> +       ReleaseDC( 0, hdc );
> +
> +       if (!im) {
> +               RETURN_FALSE;
> +       } else {
> +               ZEND_REGISTER_RESOURCE(return_value, im, le_gd);
> +       }
> +}
> +/* }}} */
> +
> +/* {{{ proto resource imagegrabscreen(int window_handle [, int client_area])
> +   Grab a screenshot */
> +PHP_FUNCTION(imagegrabscreen)
> +{
> +       HWND window = GetDesktopWindow();
> +       RECT rc = {0};
> +       int Width, Height;
> +       HDC             hdc;
> +       HDC memDC;
> +       HBITMAP memBM;
> +       HBITMAP hOld;
> +       HINSTANCE handle;
> +       long lwindow_handle;
> +       typedef BOOL (WINAPI *tPrintWindow)(HWND, HDC,UINT);
> +       tPrintWindow pPrintWindow = 0;
> +       gdImagePtr im;
> +       hdc             = GetDC(0);
> +
> +       if (!hdc) {
> +               RETURN_FALSE;
> +       }
> +
> +       GetWindowRect(window, &rc);
> +       Width   = rc.right - rc.left;
> +       Height  = rc.bottom - rc.top;
> +
> +       Width           = (Width/4)*4;
> +
> +       memDC   = CreateCompatibleDC(hdc);
> +       memBM   = CreateCompatibleBitmap(hdc, Width, Height);
> +       hOld    = (HBITMAP) SelectObject (memDC, memBM);
> +       BitBlt( memDC, 0, 0, Width, Height , hdc, rc.left, rc.top , SRCCOPY );
> +
> +       im = gdImageCreateTrueColor(Width, Height);
> +       if (im) {
> +               int x,y;
> +               for (y=0; y <= Height; y++) {
> +                       for (x=0; x <= Width; x++) {
> +                               int c = GetPixel(memDC, x,y);
> +                               gdImageSetPixel(im, x, y,
> gdTrueColor(GetRValue(c), GetGValue(c), GetBValue(c)));
> +                       }
> +               }
> +       }
> +
> +       SelectObject(memDC,hOld);
> +       DeleteObject(memBM);
> +       DeleteDC(memDC);
> +       ReleaseDC( 0, hdc );
> +
> +       if (!im) {
> +               RETURN_FALSE;
> +       } else {
> +               ZEND_REGISTER_RESOURCE(return_value, im, le_gd);
> +       }
> +}
> +/* }}} */
> +#endif PHP_WIN32
> +
>  #ifdef HAVE_GD_BUNDLED
>  /* {{{ proto resource imagerotate(resource src_im, float angle, int bgdcolor 
> [, int ignoretransparent])
>     Rotate an image using a custom angle */
> http://cvs.php.net/viewvc.cgi/php-src/ext/gd/php_gd.h?r1=1.59.2.3.2.4&r2=1.59.2.3.2.5&diff_format=u
> Index: php-src/ext/gd/php_gd.h
> diff -u php-src/ext/gd/php_gd.h:1.59.2.3.2.4 
> php-src/ext/gd/php_gd.h:1.59.2.3.2.5
> --- php-src/ext/gd/php_gd.h:1.59.2.3.2.4        Wed Apr  4 01:58:24 2007
> +++ php-src/ext/gd/php_gd.h     Tue Apr 17 15:31:45 2007
> @@ -17,7 +17,7 @@
>     +----------------------------------------------------------------------+
>  */
>  
> -/* $Id: php_gd.h,v 1.59.2.3.2.4 2007/04/04 01:58:24 pajoye Exp $ */
> +/* $Id: php_gd.h,v 1.59.2.3.2.5 2007/04/17 15:31:45 pajoye Exp $ */
>  
>  #ifndef PHP_GD_H
>  #define PHP_GD_H
> @@ -114,6 +114,11 @@
>  PHP_FUNCTION(imagecopyresampled);
>  #endif
>  
> +#ifdef PHP_WIN32
> +PHP_FUNCTION(imagegrabwindow);
> +PHP_FUNCTION(imagegrabscreen);
> +#endif
> +
>  #ifdef HAVE_GD_BUNDLED
>  PHP_FUNCTION(imagerotate);
>  PHP_FUNCTION(imageantialias);




Best regards,
 Marcus

Reply via email to