Author: gnorton
Date: 2008-01-23 09:03:35 -0500 (Wed, 23 Jan 2008)
New Revision: 93657

Added:
   trunk/libgdiplus/src/carbon-private.c
   trunk/libgdiplus/src/carbon-private.h
Modified:
   trunk/libgdiplus/src/ChangeLog
   trunk/libgdiplus/src/Makefile.am
   trunk/libgdiplus/src/general.c
   trunk/libgdiplus/src/graphics.c
Log:
In .:
2008-01-23  Geoff Norton  <[EMAIL PROTECTED]>

        * Makefile.am: Add carbon-private.* to the build.
        * general.c: Use gdip_get_display_dpi_carbon to get dpi on the mac
        * graphics.c: Rename GdipCreateFromQuartz_macosx to
        GdipCreateFromContext_macosx
        * carbon-private.c: A mac specific implementation to get the
        horizontal and vertical dpi of a display.



Modified: trunk/libgdiplus/src/ChangeLog
===================================================================
--- trunk/libgdiplus/src/ChangeLog      2008-01-23 14:03:22 UTC (rev 93656)
+++ trunk/libgdiplus/src/ChangeLog      2008-01-23 14:03:35 UTC (rev 93657)
@@ -1,3 +1,12 @@
+2008-01-23  Geoff Norton  <[EMAIL PROTECTED]>
+
+       * Makefile.am: Add carbon-private.* to the build.
+       * general.c: Use gdip_get_display_dpi_carbon to get dpi on the mac
+       * graphics.c: Rename GdipCreateFromQuartz_macosx to
+       GdipCreateFromContext_macosx
+       * carbon-private.c: A mac specific implementation to get the
+       horizontal and vertical dpi of a display.
+
 2007-12-22  Geoff Norton  <[EMAIL PROTECTED]>
 
        * graphics-private.h:  Revert the CAIRO_AA change as it caused

Modified: trunk/libgdiplus/src/Makefile.am
===================================================================
--- trunk/libgdiplus/src/Makefile.am    2008-01-23 14:03:22 UTC (rev 93656)
+++ trunk/libgdiplus/src/Makefile.am    2008-01-23 14:03:35 UTC (rev 93657)
@@ -12,6 +12,8 @@
        brush.h                         \
        brush-private.h                 \
        cairo-embed.h                   \
+       carbon-private.c                \
+       carbon-private.h                \
        codecs.h                        \
        codecs-private.h                \
        customlinecap.c                 \

Added: trunk/libgdiplus/src/carbon-private.c
===================================================================
--- trunk/libgdiplus/src/carbon-private.c       2008-01-23 14:03:22 UTC (rev 
93656)
+++ trunk/libgdiplus/src/carbon-private.c       2008-01-23 14:03:35 UTC (rev 
93657)
@@ -0,0 +1,54 @@
+/*
+ * carbon-private.c
+ * 
+ * Copyright (C) 2008 Novell, Inc (http://www.novell.com)
+ * 
+ * Permission is hereby granted, free of charge, to any person obtaining a 
copy of this software 
+ * and associated documentation files (the "Software"), to deal in the 
Software without restriction, 
+ * including without limitation the rights to use, copy, modify, merge, 
publish, distribute, sublicense, 
+ * and/or sell copies of the Software, and to permit persons to whom the 
Software is furnished to do so, 
+ * subject to the following conditions:
+ * 
+ * The above copyright notice and this permission notice shall be included in 
all copies or substantial 
+ * portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
IMPLIED, INCLUDING BUT 
+ * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR 
PURPOSE AND NONINFRINGEMENT. 
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 
DAMAGES OR OTHER LIABILITY, 
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF 
OR IN CONNECTION WITH THE SOFTWARE 
+ * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ * 
+ * Authors:
+ *   Geoff Norton  <[EMAIL PROTECTED]>
+ */
+
+#ifdef __APPLE__
+#include <Carbon/Carbon.h>
+#include <IOKit/graphics/IOGraphicsLib.h>
+
+static inline int gdip_get_int_from_dict_for_key (CFDictionaryRef dict, 
CFStringRef key) {
+       CFNumberRef value = CFDictionaryGetValue (dict, key);
+       int ret = 0;
+
+       if (value == NULL)
+               return 0;
+
+       CFNumberGetValue (value, kCFNumberIntType, &ret);
+
+       return ret;
+}
+
+void gdip_get_display_dpi_carbon (float *h_dpi, float *v_dpi) {
+       CFDictionaryRef mode_dict = CGDisplayCurrentMode (kCGDirectMainDisplay);
+       io_connect_t display_port = CGDisplayIOServicePort 
(kCGDirectMainDisplay);
+       CFDictionaryRef display_dict = IOCreateDisplayInfoDictionary 
(display_port, 0);
+       const float mmpi = 25.4;
+       float h_size = (float) gdip_get_int_from_dict_for_key (display_dict, 
CFSTR (kDisplayHorizontalImageSize)) / mmpi;
+       float v_size = (float) gdip_get_int_from_dict_for_key (display_dict, 
CFSTR (kDisplayVerticalImageSize)) / mmpi;
+
+       *h_dpi = (float) gdip_get_int_from_dict_for_key (mode_dict, 
kCGDisplayWidth) / h_size; 
+       *v_dpi = (float) gdip_get_int_from_dict_for_key (mode_dict, 
kCGDisplayHeight) / v_size; 
+
+       CFRelease (display_dict);
+}
+#endif

Added: trunk/libgdiplus/src/carbon-private.h
===================================================================
--- trunk/libgdiplus/src/carbon-private.h       2008-01-23 14:03:22 UTC (rev 
93656)
+++ trunk/libgdiplus/src/carbon-private.h       2008-01-23 14:03:35 UTC (rev 
93657)
@@ -0,0 +1,30 @@
+/*
+ * Permission is hereby granted, free of charge, to any person obtaining a 
copy of this software
+ * and associated documentation files (the "Software"), to deal in the 
Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, 
publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the 
Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in 
all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
IMPLIED, INCLUDING BUT
+ * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR 
PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 
DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF 
OR IN CONNECTION WITH THE SOFTWARE
+ * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Authors:
+ *     Geoff Norton ([EMAIL PROTECTED])
+ *
+ * Copyright (C) 2008 Novell, Inc (http://www.novell.com)
+ */
+
+#ifndef __CARBON_PRIVATE_H__
+#define __CARBON_PRIVATE_H__
+
+#ifdef __APPLE__
+void gdip_get_display_dpi_carbon (float *h_dpi, float *v_dpi);
+#endif
+
+#endif

Modified: trunk/libgdiplus/src/general.c
===================================================================
--- trunk/libgdiplus/src/general.c      2008-01-23 14:03:22 UTC (rev 93656)
+++ trunk/libgdiplus/src/general.c      2008-01-23 14:03:35 UTC (rev 93657)
@@ -29,6 +29,7 @@
 #include "codecs-private.h"
 #include "graphics-private.h"
 #include "font-private.h"
+#include "carbon-private.h"
 
 /* large table to avoid a division and three multiplications when 
premultiplying alpha into R, G and B */
 #include "alpha-premul-table.inc"
@@ -125,13 +126,15 @@
        Display* display;
 
        if (dpis == 0) {
+#if __APPLE__
+               float h_dpi, v_dpi;
+               gdip_get_display_dpi_carbon (&h_dpi, &v_dpi);
+
+               dpis = h_dpi;
+               return dpis;
+#else
                char *val;
 
-               if (getenv ("MONO_MWF_USE_CARBON_BACKEND") != NULL) {
-                       dpis = 96.0f;
-                       return dpis;
-               }
-
                display = XOpenDisplay (0);
                /* If the display is openable lets try to read dpi from it; 
otherwise use a default of 96.0f */
                if (display) {
@@ -145,6 +148,7 @@
                } else {
                        dpis = 96.0f;
                }
+#endif
        }
 
        return dpis;

Modified: trunk/libgdiplus/src/graphics.c
===================================================================
--- trunk/libgdiplus/src/graphics.c     2008-01-23 14:03:22 UTC (rev 93656)
+++ trunk/libgdiplus/src/graphics.c     2008-01-23 14:03:35 UTC (rev 93657)
@@ -256,7 +256,7 @@
 #ifdef CAIRO_HAS_QUARTZ_SURFACE
 // coverity[+alloc : arg-*3]
 GpStatus
-GdipCreateFromQuartz_macosx (void *ctx, int width, int height, GpGraphics 
**graphics)
+GdipCreateFromContext_macosx (void *ctx, int width, int height, GpGraphics 
**graphics)
 {
        cairo_surface_t *surface;
 

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to