Factor out text measurement from wxDC and wxWindow into wxTextMeasure.
[wxWidgets.git] / include / wx / gtk / private / textmeasure.h
1 ///////////////////////////////////////////////////////////////////////////////
2 // Name: wx/gtk/private/textmeasure.h
3 // Purpose: wxGTK-specific declaration of wxTextMeasure class
4 // Author: Manuel Martin
5 // Created: 2012-19-05
6 // Copyright: (c) 1997-2012 wxWidgets team
7 // Licence: wxWindows licence
8 ///////////////////////////////////////////////////////////////////////////////
9
10 #ifndef _WX_GTK_PRIVATE_TEXTMEASURE_H_
11 #define _WX_GTK_PRIVATE_TEXTMEASURE_H_
12
13 // ----------------------------------------------------------------------------
14 // wxTextMeasure
15 // ----------------------------------------------------------------------------
16
17 class WXDLLIMPEXP_FWD_CORE wxWindowDCImpl;
18
19 class wxTextMeasure : public wxTextMeasureBase
20 {
21 public:
22 wxTextMeasure(const wxDC *dc, const wxFont *font)
23 : wxTextMeasureBase(dc, font)
24 {
25 Init();
26 }
27
28 wxTextMeasure(const wxWindow *win, const wxFont *font)
29 : wxTextMeasureBase(win, font)
30 {
31 Init();
32 }
33
34 protected:
35 // Common part of both ctors.
36 void Init();
37
38 virtual void BeginMeasuring();
39 virtual void EndMeasuring();
40
41 virtual void DoGetTextExtent(const wxString& string,
42 wxCoord *width,
43 wxCoord *height,
44 wxCoord *descent = NULL,
45 wxCoord *externalLeading = NULL);
46
47 virtual bool DoGetPartialTextExtents(const wxString& text,
48 wxArrayInt& widths,
49 double scaleX);
50
51
52 // This class is only used for DC text measuring with GTK+ 2 as GTK+ 3 uses
53 // Cairo and not Pango for this. However it's still used even with GTK+ 3
54 // for window text measuring, so the context and the layout are still
55 // needed.
56 #ifndef __WXGTK3__
57 wxWindowDCImpl *m_wdc;
58 #endif // GTK+ < 3
59 PangoContext *m_context;
60 PangoLayout *m_layout;
61
62 wxDECLARE_NO_COPY_CLASS(wxTextMeasure);
63 };
64
65 #endif // _WX_GTK_PRIVATE_TEXTMEASURE_H_