Enlightenment CVS committal

Author  : doursse
Project : e17
Module  : libs/evas

Dir     : e17/libs/evas/src/modules/engines/software_16_wince


Modified Files:
        Evas_Engine_Software_16_WinCE.h Makefile.am evas_engine.c 
        evas_engine.h evas_wince_ddraw_buffer.cpp 
        evas_wince_fb_buffer.c evas_wince_gapi_buffer.c 


Log Message:
 * request the size in the engine info
 * add a ressource file that set the video management
   as non legacy. It forces device that are in vga to
   run in vga and not in qvga with gapi
 * use c++ calls to display error messages in evas_wince_ddraw.cpp.
   It removes a problem during linking with some versions of cegcc
 * minor fixing / formatting

===================================================================
RCS file: 
/cvs/e/e17/libs/evas/src/modules/engines/software_16_wince/Evas_Engine_Software_16_WinCE.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- Evas_Engine_Software_16_WinCE.h     23 May 2008 18:26:41 -0000      1.2
+++ Evas_Engine_Software_16_WinCE.h     17 Jul 2008 23:08:29 -0000      1.3
@@ -15,6 +15,8 @@
 
    struct {
       HWND  window;
+      int   width;
+      int   height;
       int   backend; /* 0: auto, 1: raw, 2: gapi, 3: ddraw */
       int   rotation;
    } info;
===================================================================
RCS file: 
/cvs/e/e17/libs/evas/src/modules/engines/software_16_wince/Makefile.am,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- Makefile.am 25 May 2008 17:37:24 -0000      1.4
+++ Makefile.am 17 Jul 2008 23:08:29 -0000      1.5
@@ -9,6 +9,9 @@
 -I$(top_srcdir)/src/modules/engines/software_16 \
 @FREETYPE_CFLAGS@
 
+.rc.lo:
+       $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --tag=RC --mode=compile 
$(RC) $(RCFLAGS) $< -o $@
+
 if BUILD_ENGINE_SOFTWARE_16_WINCE
 
 pkgdir = $(libdir)/evas/modules/engines/software_16_wince/$(MODULE_ARCH)
@@ -20,7 +23,8 @@
 evas_engine.c \
 evas_wince_fb_buffer.c \
 evas_wince_gapi_buffer.c \
-evas_wince_ddraw_buffer.cpp
+evas_wince_ddraw_buffer.cpp \
+evas_wince_gapi.rc
 
 module_la_CFLAGS = @WIN32_CFLAGS@
 module_la_LIBADD = $(top_builddir)/src/lib/libevas.la
===================================================================
RCS file: 
/cvs/e/e17/libs/evas/src/modules/engines/software_16_wince/evas_engine.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -3 -r1.5 -r1.6
--- evas_engine.c       6 Jun 2008 12:14:01 -0000       1.5
+++ evas_engine.c       17 Jul 2008 23:08:29 -0000      1.6
@@ -136,7 +136,6 @@
         im->cache_entry.flags.alpha = 0;
         evas_cache_image_surface_alloc(&im->cache_entry, w, h);
 
-
        re->tmp_out = im;
      }
 }
@@ -178,7 +177,7 @@
           {
            case 1: /* FB */
               re->backend = EVAS_ENGINE_WINCE_FB;
-              re->backend_priv = 
evas_software_wince_fb_init(info->info.window);
+              re->backend_priv = 
evas_software_wince_fb_init(info->info.window, info->info.width, 
info->info.height);
               if (!re->backend_priv)
                 {
                    free(re);
@@ -192,7 +191,7 @@
               break;
            case 2: /* GAPI */
               re->backend = EVAS_ENGINE_WINCE_GAPI;
-              re->backend_priv = 
evas_software_wince_gapi_init(info->info.window);
+              re->backend_priv = 
evas_software_wince_gapi_init(info->info.window, info->info.width, 
info->info.height);
               if (!re->backend_priv)
                 {
                    free(re);
@@ -206,7 +205,7 @@
               break;
            case 3: /* DirectDraw */
               re->backend = EVAS_ENGINE_WINCE_DDRAW;
-              re->backend_priv = 
evas_software_wince_ddraw_init(info->info.window);
+              re->backend_priv = 
evas_software_wince_ddraw_init(info->info.window, info->info.width, 
info->info.height);
               if (!re->backend_priv)
                 {
                    free(re);
@@ -239,7 +238,7 @@
           {
            case 1: /* FB */
               re->backend = EVAS_ENGINE_WINCE_FB;
-              re->backend_priv = 
evas_software_wince_fb_init(info->info.window);
+              re->backend_priv = 
evas_software_wince_fb_init(info->info.window, info->info.width, 
info->info.height);
               if (!re->backend_priv)
                 {
                    free(re);
@@ -253,7 +252,7 @@
               break;
            case 2: /* GAPI */
               re->backend = EVAS_ENGINE_WINCE_GAPI;
-              re->backend_priv = 
evas_software_wince_gapi_init(info->info.window);
+              re->backend_priv = 
evas_software_wince_gapi_init(info->info.window, info->info.width, 
info->info.height);
               if (!re->backend_priv)
                 {
                    free(re);
@@ -267,7 +266,7 @@
               break;
            case 3: /* DirectDraw */
               re->backend = EVAS_ENGINE_WINCE_DDRAW;
-              re->backend_priv = 
evas_software_wince_ddraw_init(info->info.window);
+              re->backend_priv = 
evas_software_wince_ddraw_init(info->info.window, info->info.width, 
info->info.height);
               if (!re->backend_priv)
                 {
                    free(re);
===================================================================
RCS file: 
/cvs/e/e17/libs/evas/src/modules/engines/software_16_wince/evas_engine.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- evas_engine.h       25 May 2008 17:37:24 -0000      1.2
+++ evas_engine.h       17 Jul 2008 23:08:29 -0000      1.3
@@ -2,7 +2,9 @@
 #define __EVAS_ENGINE_H__
 
 
+#define WIN32_LEAN_AND_MEAN
 #include <windows.h>
+#undef WIN32_LEAN_AND_MEAN
 
 #include "evas_common_soft16.h"
 
@@ -18,7 +20,9 @@
 
 /* Raw FrameBuffer */
 
-void             *evas_software_wince_fb_init (HWND window);
+void             *evas_software_wince_fb_init (HWND window,
+                                               int  width,
+                                               int  height);
 FB_Output_Buffer *evas_software_wince_fb_output_buffer_new (void *priv,
                                                             int   width,
                                                             int   height);
@@ -31,10 +35,12 @@
 
 /* GAPI */
 
-void             *evas_software_wince_gapi_init (HWND window);
+void             *evas_software_wince_gapi_init (HWND window,
+                                                 int  width,
+                                                 int  height);
 FB_Output_Buffer *evas_software_wince_gapi_output_buffer_new (void *priv,
-                                                            int   width,
-                                                            int   height);
+                                                              int   width,
+                                                              int   height);
 void              evas_software_wince_gapi_shutdown(void *priv);
 void              evas_software_wince_gapi_output_buffer_free 
(FB_Output_Buffer *fbob);
 void              evas_software_wince_gapi_output_buffer_paste 
(FB_Output_Buffer *fbob);
@@ -53,10 +59,12 @@
 #endif
 
 
-void             *evas_software_wince_ddraw_init (HWND window);
+void             *evas_software_wince_ddraw_init (HWND window,
+                                                  int  width,
+                                                  int  height);
 FB_Output_Buffer *evas_software_wince_ddraw_output_buffer_new (void *priv,
-                                                            int   width,
-                                                            int   height);
+                                                               int   width,
+                                                               int   height);
 void              evas_software_wince_ddraw_shutdown(void *priv);
 void              evas_software_wince_ddraw_output_buffer_free 
(FB_Output_Buffer *fbob);
 void              evas_software_wince_ddraw_output_buffer_paste 
(FB_Output_Buffer *fbob);
===================================================================
RCS file: 
/cvs/e/e17/libs/evas/src/modules/engines/software_16_wince/evas_wince_ddraw_buffer.cpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- evas_wince_ddraw_buffer.cpp 6 Jun 2008 12:14:01 -0000       1.2
+++ evas_wince_ddraw_buffer.cpp 17 Jul 2008 23:08:29 -0000      1.3
@@ -1,3 +1,9 @@
+
+#include <iostream>
+
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+#undef WIN32_LEAN_AND_MEAN
 #include <ddraw.h>
 
 #include "evas_common.h"
@@ -21,7 +27,9 @@
 };
 
 void *
-evas_software_wince_ddraw_init (HWND window)
+evas_software_wince_ddraw_init(HWND window,
+                               int  width,
+                               int  height)
 {
    DDSURFACEDESC                 surface_desc;
    Evas_Engine_WinCE_DDraw_Priv *priv;
@@ -34,28 +42,28 @@
    priv->module = LoadLibrary(L"ddraw.dll");
    if (!priv->module)
      {
-        fprintf (stderr, "[Evas] [Engine] [WinCE DDraw] Can not load 
ddraw.dll\n");
+        std::cerr << "[Evas] [Engine] [WinCE DDraw] Can not load ddraw.dll" << 
std::endl;
         goto free_priv;
      }
 
    lib_DirectDrawCreate = (fct_DirectDrawCreate)GetProcAddress(priv->module, 
L"DirectDrawCreate");
    if (!lib_DirectDrawCreate)
      {
-        fprintf (stderr, "[Evas] [Engine] [WinCE DDraw] Can not initialize 
DirectDraw\n");
+        std::cerr << "[Evas] [Engine] [WinCE DDraw] Can not initialize 
DirectDraw" << std::endl;
         goto free_lib;
      }
 
    res = lib_DirectDrawCreate(NULL, (IUnknown**)&priv->object, NULL);
    if (FAILED(res))
      {
-        fprintf (stderr, "[Evas] [Engine] [WinCE DDraw] Can not create 
DirectDraw object\n");
+        std::cerr << "[Evas] [Engine] [WinCE DDraw] Can not create DirectDraw 
object" << std::endl;
         goto free_lib;
      }
 
-   res = priv->object->SetCooperativeLevel(window, DDSCL_FULLSCREEN);
+   res = priv->object->SetCooperativeLevel(window, DDSCL_EXCLUSIVE | 
DDSCL_FULLSCREEN);
    if (FAILED(res))
      {
-        fprintf (stderr, "[Evas] [Engine] [WinCE DDraw] Can not set window to 
fullscreen\n");
+        std::cerr<< "[Evas] [Engine] [WinCE DDraw] Can not set window to 
fullscreen" << std::endl;
         goto release_object;
      }
 
@@ -67,16 +75,16 @@
    res = priv->object->CreateSurface(&surface_desc, &priv->surface, NULL);
    if (FAILED(res))
      {
-        fprintf (stderr, "[Evas] [Engine] [WinCE DDraw] Can not create 
surface\n");
+        std::cerr << "[Evas] [Engine] [WinCE DDraw] Can not create surface" << 
std::endl;
         goto release_object;
      }
 
    memset(&surface_desc, 0, sizeof(surface_desc));
    surface_desc.dwSize = sizeof(surface_desc);
-   res = priv->surface->Lock(0, &surface_desc, DDLOCK_WAITNOTBUSY, 0);
+   res = priv->surface->Lock(NULL, &surface_desc, DDLOCK_READONLY, NULL);
    if (FAILED(res))
      {
-        fprintf (stderr, "[Evas] [Engine] [WinCE DDraw] Can not lock 
surface\n");
+        std::cerr << "[Evas] [Engine] [WinCE DDraw] Can not lock surface" << 
std::endl;
         goto release_surface;
      }
 
@@ -84,10 +92,19 @@
    priv->height = surface_desc.dwHeight;
    priv->stride = surface_desc.lPitch / 2;
 
+   if ((priv->width != width) ||
+       (priv->height != height))
+     {
+        std::cerr << "[Evas] [Engine] [WinCE DDraw] Size mismatch" << 
std::endl;
+        std::cerr << "[Evas] [Engine] [WinCE DDraw] asked: " << width << "x" 
<< height << std::endl;
+        std::cerr << "[Evas] [Engine] [WinCE DDraw] got  : " << priv->width << 
"x" << priv->height << std::endl;
+        goto release_surface;
+     }
+
    res = priv->surface->Unlock(NULL);
    if (FAILED(res))
      {
-        fprintf (stderr, "[Evas] [Engine] [WinCE DDraw] Can not unlock 
surface\n");
+        std::cerr << "[Evas] [Engine] [WinCE DDraw] Can not unlock surface" << 
std::endl;
         goto release_surface;
      }
 
@@ -160,7 +177,7 @@
 
    memset(&surface_desc, 0, sizeof(surface_desc));
    surface_desc.dwSize = sizeof(surface_desc);
-   res = priv->surface->Lock(0, &surface_desc, DDLOCK_WAITNOTBUSY, 0);
+   res = priv->surface->Lock(NULL, &surface_desc, DDLOCK_WRITEONLY, NULL);
    if (FAILED(res))
      return;
 
===================================================================
RCS file: 
/cvs/e/e17/libs/evas/src/modules/engines/software_16_wince/evas_wince_fb_buffer.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- evas_wince_fb_buffer.c      6 Jun 2008 12:14:01 -0000       1.4
+++ evas_wince_fb_buffer.c      17 Jul 2008 23:08:29 -0000      1.5
@@ -40,8 +40,32 @@
    void *buffer;
 };
 
+static int
+_evas_software_wince_gxinfo_init(HDC dc, int *width, int *height, void 
**buffer)
+{
+   GXDeviceInfo gxInfo = { 0 };
+   int          result;
+
+   gxInfo.Version = 100;
+   result = ExtEscape(dc, GETGXINFO, 0, NULL, sizeof(gxInfo),
+                      (char *) &gxInfo);
+   if (result <= 0)
+     {
+        fprintf (stderr, "[Evas] [Engine] [WinCE FB] ExtEscape() with 
GETGXINFO failed\n");
+        return 0;
+     }
+
+   *width = gxInfo.cyHeight;
+   *height = gxInfo.cxWidth;
+   *buffer = gxInfo.pvFrameBuffer;
+
+   return 1;
+}
+
 void *
-evas_software_wince_fb_init (HWND   window)
+evas_software_wince_fb_init(HWND window,
+                            int  width,
+                            int  height)
 {
    WCHAR                      oemstr[100];
    RawFrameBufferInfo         rfbi;
@@ -68,23 +92,23 @@
         (oemstr[13] == '3') &&
         (oemstr[14] == '9')))
      {
-        GXDeviceInfo gxInfo = { 0 };
-        int          result;
-
-        gxInfo.Version = 100;
-        result = ExtEscape(dc, GETGXINFO, 0, NULL, sizeof(gxInfo),
-                           (char *) &gxInfo);
-        if (result <= 0)
+       if (!_evas_software_wince_gxinfo_init(dc, &priv->width, &priv->height, 
&priv->buffer))
           {
-             fprintf (stderr, "[Evas] [Engine] [WinCE FB] [Ipaq] ExtEscape() 
failed\n");
              ReleaseDC(window, dc);
              free(priv);
              return NULL;
           }
 
-        priv->width = gxInfo.cyHeight;
-        priv->height = gxInfo.cxWidth;
-        priv->buffer = gxInfo.pvFrameBuffer;
+       if ((priv->width != width) ||
+           (priv->height != height))
+         {
+            fprintf (stderr, "[Evas] [Engine] [WinCE FB] Size mismatch\n");
+            fprintf (stderr, "[Evas] [Engine] [WinCE FB] asked: %dx%d\n", 
width, height);
+            fprintf (stderr, "[Evas] [Engine] [WinCE FB] got  : %dx%d\n", 
priv->width, priv->height);
+            ReleaseDC(window, dc);
+            free(priv);
+            return NULL;
+         }
 
         ReleaseDC(window, dc);
 
@@ -95,15 +119,33 @@
        (rfbi.wBPP != 16) ||
        (rfbi.wFormat != 1))
      {
-        fprintf (stderr, "[Evas] [Engine] [WinCE FB] ExtEscape() failed\n");
+        fprintf (stderr, "[Evas] [Engine] [WinCE FB] ExtEscape() with 
GETRAWFRAMEBUFFER failed\n");
+        fprintf (stderr, "[Evas] [Engine] [WinCE FB] trying ExtEscape() with 
GETGXINFO\n");
+        if (!_evas_software_wince_gxinfo_init(dc, &priv->width, &priv->height, 
&priv->buffer))
+          {
+             ReleaseDC(window, dc);
+             free(priv);
+             return NULL;
+          }
+
         ReleaseDC(window, dc);
-        free(priv);
-        return NULL;
+        return priv;
      }
 
   priv->width = rfbi.cxPixels;
   priv->height = rfbi.cyPixels;
   priv->buffer = rfbi.pFramePointer;
+
+  if ((priv->width != width) ||
+      (priv->height != height))
+    {
+       fprintf (stderr, "[Evas] [Engine] [WinCE FB] Size mismatch\n");
+       fprintf (stderr, "[Evas] [Engine] [WinCE FB] asked: %dx%d\n", width, 
height);
+       fprintf (stderr, "[Evas] [Engine] [WinCE FB] got  : %dx%d\n", 
priv->width, priv->height);
+       ReleaseDC(window, dc);
+       free(priv);
+       return NULL;
+    }
 
   ReleaseDC(window, dc);
 
===================================================================
RCS file: 
/cvs/e/e17/libs/evas/src/modules/engines/software_16_wince/evas_wince_gapi_buffer.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -3 -r1.10 -r1.11
--- evas_wince_gapi_buffer.c    6 Jun 2008 12:14:01 -0000       1.10
+++ evas_wince_gapi_buffer.c    17 Jul 2008 23:08:29 -0000      1.11
@@ -85,9 +85,11 @@
 };
 
 void *
-evas_software_wince_gapi_init (HWND window)
+evas_software_wince_gapi_init(HWND window,
+                              int  width,
+                              int  height)
 {
-    WCHAR                       oemstr[100];
+   WCHAR                        oemstr[100];
    _GAPI_Display_Properties     prop;
    HMODULE                      gapi_lib;
    Evas_Engine_WinCE_GAPI_Priv *priv;
@@ -242,6 +244,15 @@
         priv->height = prop.cyHeight;
         priv->stride = prop.cbyPitch;
         priv->buffer = NULL;
+     }
+
+   if ((priv->width != width) ||
+       (priv->height != height))
+     {
+        fprintf (stderr, "[Evas] [Engine] [WinCE GAPI] Size mismatch\n");
+        fprintf (stderr, "[Evas] [Engine] [WinCE GAPI] asked: %dx%d\n", width, 
height);
+        fprintf (stderr, "[Evas] [Engine] [WinCE GAPI] got  : %dx%d\n", 
priv->width, priv->height);
+        goto close_display;
      }
 
    return priv;



-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to