1 /////////////////////////////////////////////////////////////////////////////
2 // Name: src/dfb/utils.cpp
3 // Purpose: Miscellaneous utility functions and classes
4 // Author: Vaclav Slavik
7 // Copyright: (c) 2006 REA Elektronik GmbH
8 // Licence: wxWindows licence
9 /////////////////////////////////////////////////////////////////////////////
11 // For compilers that support precompilation, includes "wx.h".
12 #include "wx/wxprec.h"
19 #include "wx/apptrait.h"
20 #include "wx/unix/execute.h"
26 #include "wx/dfb/private.h"
27 #include <directfb_version.h>
29 // ----------------------------------------------------------------------------
31 // ----------------------------------------------------------------------------
33 wxPortId
wxGUIAppTraits::GetToolkitVersion(int *verMaj
, int *verMin
) const
35 if ( verMaj
) *verMaj
= DIRECTFB_MAJOR_VERSION
;
36 if ( verMin
) *verMaj
= DIRECTFB_MINOR_VERSION
;
41 // ----------------------------------------------------------------------------
42 // display characteristics
43 // ----------------------------------------------------------------------------
45 bool wxColourDisplay()
47 #warning "FIXME: wxColourDisplay"
53 return wxTheApp
->GetDisplayMode().bpp
;
56 void wxDisplaySize(int *width
, int *height
)
58 wxVideoMode
mode(wxTheApp
->GetDisplayMode());
59 if ( width
) *width
= mode
.w
;
60 if ( height
) *height
= mode
.h
;
63 void wxDisplaySizeMM(int *width
, int *height
)
65 // FIXME: there's no way to get physical resolution using the DirectDB
66 // API, we hardcode a commonly used value of 72dpi
68 #define PX_TO_MM(x) (int(((x) / DPI) * inches2mm))
70 wxDisplaySize(width
, height
);
71 if ( width
) *width
= PX_TO_MM(*width
);
72 if ( height
) *height
= PX_TO_MM(*height
);
78 void wxClientDisplayRect(int *x
, int *y
, int *width
, int *height
)
80 // return desktop dimensions minus any panels, menus, trays:
83 wxDisplaySize(width
, height
);
86 //-----------------------------------------------------------------------------
87 // surface manipulation helpers
88 //-----------------------------------------------------------------------------
90 IDirectFBSurfacePtr
wxDfbCloneSurface(const IDirectFBSurfacePtr
& s
,
91 wxDfbCloneSurfaceMode mode
)
96 DFBSurfaceDescription desc
;
97 desc
.flags
= (DFBSurfaceDescriptionFlags
)(
98 DSDESC_CAPS
| DSDESC_WIDTH
| DSDESC_HEIGHT
| DSDESC_PIXELFORMAT
);
99 s
->GetCapabilities(s
, &desc
.caps
);
100 s
->GetSize(s
, &desc
.width
, &desc
.height
);
101 s
->GetPixelFormat(s
, &desc
.pixelformat
);
103 IDirectFBPtr
dfb(wxTheApp
->GetDirectFBInterface());
105 IDirectFBSurfacePtr snew
;
106 if ( !DFB_CALL( dfb
->CreateSurface(dfb
, &desc
, &snew
) ) )
109 IDirectFBPalettePtr pal
;
110 if ( s
->GetPalette(s
, &pal
) == DFB_OK
)
112 if ( !DFB_CALL( snew
->SetPalette(snew
, pal
) ) )
116 if ( mode
== wxDfbCloneSurface_CopyPixels
)
118 if ( !DFB_CALL( snew
->SetBlittingFlags(snew
, DSBLIT_NOFX
) ) )
120 if ( !DFB_CALL( snew
->Blit(snew
, s
, NULL
, 0, 0) ) )
127 int wxDfbGetSurfaceDepth(const IDirectFBSurfacePtr
& s
)
129 wxCHECK_MSG( s
, -1, _T("invalid surface") );
131 DFBSurfacePixelFormat format
= DSPF_UNKNOWN
;
133 if ( !DFB_CALL( s
->GetPixelFormat(s
, &format
) ) )
136 return DFB_BITS_PER_PIXEL(format
);
139 IDirectFBDisplayLayerPtr
wxDfbGetDisplayLayer()
141 IDirectFBPtr
dfb(wxTheApp
->GetDirectFBInterface());
143 IDirectFBDisplayLayerPtr layer
;
144 if ( !DFB_CALL( dfb
->GetDisplayLayer(dfb
, DLID_PRIMARY
, &layer
) ) )
150 IDirectFBSurfacePtr
wxDfbGetPrimarySurface()
152 IDirectFBDisplayLayerPtr
layer(wxDfbGetDisplayLayer());
153 IDirectFBSurfacePtr surface
;
154 DFB_CALL( layer
->GetSurface(layer
, &surface
) );
159 //-----------------------------------------------------------------------------
161 //-----------------------------------------------------------------------------
163 void wxGetMousePosition(int *x
, int *y
)
165 IDirectFBDisplayLayerPtr
layer(wxDfbGetDisplayLayer());
166 DFB_CALL( layer
->GetCursorPosition(layer
, x
, y
) );
169 wxPoint
wxGetMousePosition()
172 wxGetMousePosition(&pt
.x
, &pt
.y
);
176 //-----------------------------------------------------------------------------
178 //-----------------------------------------------------------------------------
180 bool wxGetKeyState(wxKeyCode key
)
182 wxASSERT_MSG(key
!= WXK_LBUTTON
&& key
!= WXK_RBUTTON
&& key
!= WXK_MBUTTON
,
183 _T("can't use wxGetKeyState() for mouse buttons"));
185 return false; // FIXME
188 //----------------------------------------------------------------------------
190 //----------------------------------------------------------------------------
196 int wxAddProcessCallback(wxEndProcessData
*proc_data
, int fd
)
198 wxFAIL_MSG( _T("wxAddProcessCallback not implemented") );