Skip to content
Browse files

In .:

2008-01-23  Geoff Norton  <gnorton@novell.com>

	* 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.


svn path=/trunk/libgdiplus/; revision=93657
  • Loading branch information...
1 parent dd78ea0 commit 107405cacd97fa1dfae5c914d8c668315070f2f1 Geoff Norton committed Jan 23, 2008
Showing with 105 additions and 6 deletions.
  1. +9 −0 src/ChangeLog
  2. +2 −0 src/Makefile.am
  3. +54 −0 src/carbon-private.c
  4. +30 −0 src/carbon-private.h
  5. +9 −5 src/general.c
  6. +1 −1 src/graphics.c
View
9 src/ChangeLog
@@ -1,3 +1,12 @@
+2008-01-23 Geoff Norton <gnorton@novell.com>
+
+ * 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 <gnorton@novell.com>
* graphics-private.h: Revert the CAIRO_AA change as it caused
View
2 src/Makefile.am
@@ -12,6 +12,8 @@ libgdiplus_la_SOURCES = \
brush.h \
brush-private.h \
cairo-embed.h \
+ carbon-private.c \
+ carbon-private.h \
codecs.h \
codecs-private.h \
customlinecap.c \
View
54 src/carbon-private.c
@@ -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 <gnorton@novell.com>
+ */
+
+#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
View
30 src/carbon-private.h
@@ -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 (gnorton@novell.com)
+ *
+ * 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
View
14 src/general.c
@@ -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,12 +126,14 @@ gdip_get_display_dpi ()
Display* display;
if (dpis == 0) {
- char *val;
+#if __APPLE__
+ float h_dpi, v_dpi;
+ gdip_get_display_dpi_carbon (&h_dpi, &v_dpi);
- if (getenv ("MONO_MWF_USE_CARBON_BACKEND") != NULL) {
- dpis = 96.0f;
- return dpis;
- }
+ dpis = h_dpi;
+ return dpis;
+#else
+ char *val;
display = XOpenDisplay (0);
/* If the display is openable lets try to read dpi from it; otherwise use a default of 96.0f */
@@ -145,6 +148,7 @@ gdip_get_display_dpi ()
} else {
dpis = 96.0f;
}
+#endif
}
return dpis;
View
2 src/graphics.c
@@ -256,7 +256,7 @@ GdipCreateFromHWND (void *hwnd, GpGraphics **graphics)
#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;

0 comments on commit 107405c

Please sign in to comment.
Something went wrong with that request. Please try again.