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 // For compilers that support precompilation, includes "wx.h". 
  13 #include "wx/wxprec.h" 
  19 #if wxUSE_COLOURDLG && defined(__WXGTK20__) 
  21 #include "wx/colordlg.h" 
  27 #include "wx/gtk/private.h" 
  29 IMPLEMENT_DYNAMIC_CLASS(wxColourDialog
, wxDialog
) 
  31 wxColourDialog::wxColourDialog(wxWindow 
*parent
, wxColourData 
*data
) 
  36 bool wxColourDialog::Create(wxWindow 
*parent
, wxColourData 
*data
) 
  41     wxString 
title(_("Choose colour")); 
  42     m_widget 
= gtk_color_selection_dialog_new(wxGTK_CONV(title
)); 
  46         GtkWindow
* gtk_parent 
= GTK_WINDOW( gtk_widget_get_toplevel(parent
->m_widget
) ); 
  47         gtk_window_set_transient_for(GTK_WINDOW(m_widget
), 
  51     GtkColorSelection 
*sel 
= 
  52         GTK_COLOR_SELECTION(GTK_COLOR_SELECTION_DIALOG(m_widget
)->colorsel
); 
  53     gtk_color_selection_set_has_palette(sel
, true); 
  58 int wxColourDialog::ShowModal() 
  62     gint result 
= gtk_dialog_run(GTK_DIALOG(m_widget
)); 
  63     gtk_widget_hide(m_widget
); 
  68             wxFAIL_MSG(_T("unexpected GtkColorSelectionDialog return code")); 
  71         case GTK_RESPONSE_CANCEL
: 
  72         case GTK_RESPONSE_DELETE_EVENT
: 
  73         case GTK_RESPONSE_CLOSE
: 
  82 void wxColourDialog::ColourDataToDialog() 
  84     GtkColorSelection 
*sel 
= 
  85         GTK_COLOR_SELECTION(GTK_COLOR_SELECTION_DIALOG(m_widget
)->colorsel
); 
  87     if (m_data
.GetColour().Ok()) 
  89         gtk_color_selection_set_current_color(sel
, 
  90                                               m_data
.GetColour().GetColor()); 
  97     for (unsigned i 
= 0; i 
< 16; i
++) 
  99         wxColour c 
= m_data
.GetCustomColour(i
); 
 102             colors
[n_colors
] = *c
.GetColor(); 
 107     wxGtkString 
pal(gtk_color_selection_palette_to_string(colors
, n_colors
)); 
 109     GtkSettings 
*settings 
= gtk_widget_get_settings(GTK_WIDGET(sel
)); 
 110     g_object_set(settings
, "gtk-color-palette", pal
.c_str(), NULL
); 
 113 void wxColourDialog::DialogToColourData() 
 115     GtkColorSelection 
*sel 
= 
 116         GTK_COLOR_SELECTION(GTK_COLOR_SELECTION_DIALOG(m_widget
)->colorsel
); 
 119     gtk_color_selection_get_current_color(sel
, &clr
); 
 120     m_data
.SetColour(wxColour(clr
.red 
>> 8, clr
.green 
>> 8, clr
.blue 
>> 8)); 
 122     // Extract custom palette: 
 124     GtkSettings 
*settings 
= gtk_widget_get_settings(GTK_WIDGET(sel
)); 
 126     g_object_get(settings
, "gtk-color-palette", &pal
, NULL
); 
 130     if (gtk_color_selection_palette_from_string(pal
, &colors
, &n_colors
)) 
 132         for (int i 
= 0; i 
< wxMin(n_colors
, 16); i
++) 
 134             m_data
.SetCustomColour(i
, wxColour(colors
[i
].red 
>> 8, 
 135                                                colors
[i
].green 
>> 8, 
 136                                                colors
[i
].blue 
>> 8)); 
 144 #endif // wxUSE_COLOURDLG && defined(__WXGTK20__)