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__)