1 /////////////////////////////////////////////////////////////////////////////
2 // Name: gtk/colordlg.cpp
3 // Purpose: Native wxColourDialog for GTK+
4 // Author: Vaclav Slavik
8 // Copyright: (c) Vaclav Slavik, 2004
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
12 #if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
13 #pragma implementation "colordlg.h"
16 // For compilers that support precompilation, includes "wx.h".
17 #include "wx/wxprec.h"
23 #if wxUSE_COLOURDLG && defined(__WXGTK20__)
25 #include "wx/colordlg.h"
31 #include "wx/gtk/private.h"
33 IMPLEMENT_DYNAMIC_CLASS(wxColourDialog
, wxDialog
)
35 wxColourDialog::wxColourDialog(wxWindow
*parent
, wxColourData
*data
)
40 bool wxColourDialog::Create(wxWindow
*parent
, wxColourData
*data
)
45 wxString
title(_("Choose colour"));
46 m_widget
= gtk_color_selection_dialog_new(wxGTK_CONV(title
));
49 gtk_window_set_transient_for(GTK_WINDOW(m_widget
),
50 GTK_WINDOW(parent
->m_widget
));
52 GtkColorSelection
*sel
=
53 GTK_COLOR_SELECTION(GTK_COLOR_SELECTION_DIALOG(m_widget
)->colorsel
);
54 gtk_color_selection_set_has_palette(sel
, true);
59 int wxColourDialog::ShowModal()
63 gint result
= gtk_dialog_run(GTK_DIALOG(m_widget
));
64 gtk_widget_hide(m_widget
);
69 wxFAIL_MSG(_T("unexpected GtkColorSelectionDialog return code"));
72 case GTK_RESPONSE_CANCEL
:
73 case GTK_RESPONSE_DELETE_EVENT
:
74 case GTK_RESPONSE_CLOSE
:
83 void wxColourDialog::ColourDataToDialog()
85 GtkColorSelection
*sel
=
86 GTK_COLOR_SELECTION(GTK_COLOR_SELECTION_DIALOG(m_widget
)->colorsel
);
88 if (m_data
.GetColour().Ok())
90 gtk_color_selection_set_current_color(sel
,
91 m_data
.GetColour().GetColor());
98 for (unsigned i
= 0; i
< 16; i
++)
100 wxColour c
= m_data
.GetCustomColour(i
);
103 colors
[n_colors
] = *c
.GetColor();
108 gchar
*pal
= gtk_color_selection_palette_to_string(colors
, n_colors
);
110 GtkSettings
*settings
= gtk_widget_get_settings(GTK_WIDGET(sel
));
111 g_object_set(settings
, "gtk-color-palette", pal
, NULL
);
116 void wxColourDialog::DialogToColourData()
118 GtkColorSelection
*sel
=
119 GTK_COLOR_SELECTION(GTK_COLOR_SELECTION_DIALOG(m_widget
)->colorsel
);
122 gtk_color_selection_get_current_color(sel
, &clr
);
123 m_data
.SetColour(wxColour(clr
.red
>> 8, clr
.green
>> 8, clr
.blue
>> 8));
125 // Extract custom palette:
127 GtkSettings
*settings
= gtk_widget_get_settings(GTK_WIDGET(sel
));
129 g_object_get(settings
, "gtk-color-palette", &pal
, NULL
);
133 if (gtk_color_selection_palette_from_string(pal
, &colors
, &n_colors
))
135 for (int i
= 0; i
< wxMin(n_colors
, 16); i
++)
137 m_data
.SetCustomColour(i
, wxColour(colors
[i
].red
>> 8,
138 colors
[i
].green
>> 8,
139 colors
[i
].blue
>> 8));
147 #endif // wxUSE_COLOURDLG && defined(__WXGTK20__)