]> git.saurik.com Git - wxWidgets.git/blame - src/mac/display.cpp
Fixed DDE memory leaks.
[wxWidgets.git] / src / mac / display.cpp
CommitLineData
a536e411
JS
1/////////////////////////////////////////////////////////////////////////////
2// Name: display.cpp
3// Purpose: Mac implementation of wxDisplay class
4// Author: Brian Victor
5// Modified by: Royce Mitchell III
6// Created: 06/21/02
7// RCS-ID: $Id$
8// Copyright: (c) wxWindows team
9// Licence: wxWindows licence
10/////////////////////////////////////////////////////////////////////////////
11
12#ifdef __GNUG__
13 #pragma implementation "display.h"
14#endif
15
16// For compilers that support precompilation, includes "wx.h".
17#include "wx/wxprec.h"
18
19#ifdef __BORLANDC__
20 #pragma hdrstop
21#endif
22
23#if wxUSE_DISPLAY
24
25#ifndef WX_PRECOMP
26 #include "wx/dynarray.h"
27#endif
28
29#ifdef __DARWIN__
30 #include <Carbon/Carbon.h>
31#else
32 #include <Displays.h>
33 #include <Quickdraw.h>
34#endif
35
36#include "wx/display.h"
37#include "wx/gdicmn.h"
38#include "wx/string.h"
39
40// ----------------------------------------------------------------------------
41// private classes
42// ----------------------------------------------------------------------------
43
44class wxDisplayMacPriv
45{
46public:
e40298d5 47 GDHandle m_hndl;
a536e411
JS
48};
49
50size_t wxDisplayBase::GetCount()
51{
52 GDHandle hndl;
53 size_t num = 0;
54 hndl = DMGetFirstScreenDevice(true);
55 while(hndl)
56 {
57 num++;
58 hndl = DMGetNextScreenDevice(hndl, true);
59 }
60 return num;
61}
62
63int wxDisplayBase::GetFromPoint(const wxPoint &p)
64{
65 GDHandle hndl;
66 size_t num = 0;
67 hndl = DMGetFirstScreenDevice(true);
68 while(hndl)
69 {
70 Rect screenrect = (*hndl)->gdRect;
71 if (p.x >= screenrect.left &&
72 p.x <= screenrect.right &&
73 p.y >= screenrect.top &&
74 p.y <= screenrect.bottom)
75 {
76 return num;
77 }
78 num++;
79 hndl = DMGetNextScreenDevice(hndl, true);
80 }
81 return -1;
82}
83
84wxDisplay::wxDisplay(size_t index) : wxDisplayBase ( index ),
85 m_priv ( new wxDisplayMacPriv() )
86{
87 GDHandle hndl;
88 hndl = DMGetFirstScreenDevice(true);
89 m_priv->m_hndl = NULL;
90 while(hndl)
91 {
92 if (index == 0)
93 {
94 m_priv->m_hndl = hndl;
95 }
96 index--;
97 hndl = DMGetNextScreenDevice(hndl, true);
98 }
99}
100
101wxRect wxDisplay::GetGeometry() const
102{
103 if (!(m_priv)) return wxRect(0, 0, 0, 0);
104 if (!(m_priv->m_hndl)) return wxRect(0, 0, 0, 0);
105 Rect screenrect = (*(m_priv->m_hndl))->gdRect;
106 return wxRect( screenrect.left, screenrect.top,
107 screenrect.right - screenrect.left, screenrect.bottom - screenrect.top);
108}
109
110int wxDisplay::GetDepth() const
111{
112 if (!(m_priv)) return 0;
113 if (!(m_priv->m_hndl)) return 0;
114
115 // This cryptic looking code is based on Apple's sample code:
116 // http://developer.apple.com/samplecode/Sample_Code/Graphics_2D/GDevVideo/Gen.cp.htm
117 return ((*(*(m_priv->m_hndl))->gdPMap)->pixelSize) & 0x0000FFFF;
118}
119
120wxString wxDisplay::GetName() const
121{
122 // Macs don't name their displays...
1e1cc1ce
DS
123 return wxEmptyString;
124}
125
126 wxArrayVideoModes
127 wxDisplay::GetModes(const wxVideoMode& mode) const
128{
129 // Not implemented
130 return wxArrayVideoModes();
131}
132
133wxVideoMode wxDisplay::GetCurrentMode() const
134{
135 // Not implemented
136 return wxVideoMode();
137}
138
139bool wxDisplay::ChangeMode(const wxVideoMode& mode)
140{
141 // Not implemented
142 return false;
a536e411
JS
143}
144
145wxDisplay::~wxDisplay()
146{
147 if ( m_priv )
148 {
149 delete m_priv;
150 m_priv = 0;
151 }
152}
153
154#endif // wxUSE_DISPLAY