diff libinterp/corefcn/display.cc @ 18932:edc4791fbcb2

avoid some old-style cast warnings * cdisplay.h, cdisplay.c: New files. Compile C code and headers with C compiler. * corefcn/module.mk: Include them in the appropriate lists. * display.cc (display_info::init): Call new octave_get_display_info function.
author John W. Eaton <jwe@octave.org>
date Thu, 17 Jul 2014 11:19:21 -0400
parents 870f3e12e163
children
line wrap: on
line diff
--- a/libinterp/corefcn/display.cc	Thu Jul 17 10:27:24 2014 -0400
+++ b/libinterp/corefcn/display.cc	Thu Jul 17 11:19:21 2014 -0400
@@ -24,143 +24,28 @@
 #include <config.h>
 #endif
 
-#include <cstdlib>
-
-#if defined (OCTAVE_USE_WINDOWS_API)
-#include <windows.h>
-#elif defined (HAVE_FRAMEWORK_CARBON)
-#include <Carbon/Carbon.h>
-#elif defined (HAVE_X_WINDOWS)
-#include <X11/Xlib.h>
-#endif
-
 #include "singleton-cleanup.h"
 
+#include "cdisplay.h"
 #include "display.h"
 #include "error.h"
 
 display_info *display_info::instance = 0;
 
-#if defined (HAVE_FRAMEWORK_CARBON) && ! defined (HAVE_CARBON_CGDISPLAYBITSPERPIXEL)
-// FIXME: This will only work for MacOS > 10.5. For earlier versions
-// this code is not needed (use CGDisplayBitsPerPixel instead).
-size_t DisplayBitsPerPixel (CGDirectDisplayID display)
-{
-  CGDisplayModeRef mode = CGDisplayCopyDisplayMode (display);
-  CFStringRef pixelEncoding = CGDisplayModeCopyPixelEncoding (mode);
-
-  if (CFStringCompare (pixelEncoding, CFSTR (IO32BitDirectPixels), 0) == 0)
-    return 32;
-  else if (CFStringCompare (pixelEncoding, CFSTR (IO16BitDirectPixels), 0) == 0)
-    return 16;
-  else
-    return 8;
-}
-#endif
-
 void
 display_info::init (bool query)
 {
   if (query)
     {
-#if defined (OCTAVE_USE_WINDOWS_API)
-
-      HDC hdc = GetDC (0);
-
-      if (hdc)
-        {
-          dp = GetDeviceCaps (hdc, BITSPIXEL);
-
-          ht = GetDeviceCaps (hdc, VERTRES);
-          wd = GetDeviceCaps (hdc, HORZRES);
-
-          double ht_mm = GetDeviceCaps (hdc, VERTSIZE);
-          double wd_mm = GetDeviceCaps (hdc, HORZSIZE);
-
-          rx = wd * 25.4 / wd_mm;
-          ry = ht * 25.4 / ht_mm;
-
-          dpy_avail = true;
-        }
-      else
-        err_msg = "no graphical display found";
-
-#elif defined (HAVE_FRAMEWORK_CARBON)
+      int avail = 0;
 
-      CGDirectDisplayID display = CGMainDisplayID ();
-
-      if (display)
-        {
-#  if defined (HAVE_CARBON_CGDISPLAYBITSPERPIXEL)
-          // For MacOS < 10.7 use the line below
-          dp = CGDisplayBitsPerPixel (display);
-#  else
-          // For MacOS > 10.5 use the line below
-          dp = DisplayBitsPerPixel (display);
-#  endif
-
-          ht = CGDisplayPixelsHigh (display);
-          wd = CGDisplayPixelsWide (display);
-
-          CGSize sz_mm = CGDisplayScreenSize (display);
-          // For MacOS >= 10.6, CGSize is a struct keeping 2 CGFloat values,
-          // but the CGFloat typedef is not present on older systems,
-          // so use double instead.
-          double ht_mm = sz_mm.height;
-          double wd_mm = sz_mm.width;
-
-          rx = wd * 25.4 / wd_mm;
-          ry = ht * 25.4 / ht_mm;
+      const char *msg = octave_get_display_info (&ht, &wd, &dp, &rx, &ry,
+                                                 &avail);
 
-          dpy_avail = true;
-        }
-      else
-        err_msg = "no graphical display found";
-
-#elif defined (HAVE_X_WINDOWS)
-
-      const char *display_name = getenv ("DISPLAY");
-
-      if (display_name && *display_name)
-        {
-          Display *display = XOpenDisplay (display_name);
-
-          if (display)
-            {
-              Screen *screen = DefaultScreenOfDisplay (display);
-
-              if (screen)
-                {
-                  dp = DefaultDepthOfScreen (screen);
-
-                  ht = HeightOfScreen (screen);
-                  wd = WidthOfScreen (screen);
+      dpy_avail = avail;
 
-                  int screen_number = XScreenNumberOfScreen (screen);
-
-                  double ht_mm = DisplayHeightMM (display, screen_number);
-                  double wd_mm = DisplayWidthMM (display, screen_number);
-
-                  rx = wd * 25.4 / wd_mm;
-                  ry = ht * 25.4 / ht_mm;
-                }
-              else
-                err_msg = "X11 display has no default screen";
-
-              XCloseDisplay (display);
-
-              dpy_avail = true;
-            }
-          else
-            err_msg = "unable to open X11 DISPLAY";
-        }
-      else
-        err_msg = "X11 DISPLAY environment variable not set";
-#else
-
-      err_msg = "no graphical display found";
-
-#endif
+      if (msg)
+        err_msg = msg;
     }
 }