colrdlgg.cpp
来自「A*算法 A*算法 A*算法 A*算法A*算法A*算法」· C++ 代码 · 共 602 行 · 第 1/2 页
CPP
602 行
SetAutoLayout( true );
SetSizer( topSizer );
topSizer->SetSizeHints( this );
topSizer->Fit( this );
Centre( wxBOTH );
wxEndBusyCursor();
}
void wxGenericColourDialog::InitializeColours(void)
{
size_t i;
for (i = 0; i < WXSIZEOF(wxColourDialogNames); i++)
{
wxColour col = wxTheColourDatabase->Find(wxColourDialogNames[i]);
if (col.Ok())
standardColours[i].Set(col.Red(), col.Green(), col.Blue());
else
standardColours[i].Set(0, 0, 0);
}
for (i = 0; i < WXSIZEOF(customColours); i++)
{
wxColour c = colourData.GetCustomColour(i);
if (c.Ok())
customColours[i] = colourData.GetCustomColour(i);
else
customColours[i] = wxColour(255, 255, 255);
}
wxColour curr = colourData.GetColour();
if ( curr.Ok() )
{
bool initColourFound = false;
for (i = 0; i < WXSIZEOF(wxColourDialogNames); i++)
{
if ( standardColours[i] == curr && !initColourFound )
{
whichKind = 1;
colourSelection = i;
initColourFound = true;
break;
}
}
if ( !initColourFound )
{
for ( i = 0; i < WXSIZEOF(customColours); i++ )
{
if ( customColours[i] == curr )
{
whichKind = 2;
colourSelection = i;
break;
}
}
}
colourData.m_dataColour.Set( curr.Red(), curr.Green(), curr.Blue() );
}
else
{
whichKind = 1;
colourSelection = 0;
colourData.m_dataColour.Set( 0, 0, 0 );
}
}
void wxGenericColourDialog::PaintBasicColours(wxDC& dc)
{
dc.BeginDrawing();
int i;
for (i = 0; i < 6; i++)
{
int j;
for (j = 0; j < 8; j++)
{
int ptr = i*8 + j;
int x = (j*(smallRectangleSize.x+gridSpacing) + standardColoursRect.x);
int y = (i*(smallRectangleSize.y+gridSpacing) + standardColoursRect.y);
dc.SetPen(*wxBLACK_PEN);
wxBrush brush(standardColours[ptr], wxSOLID);
dc.SetBrush(brush);
dc.DrawRectangle( x, y, smallRectangleSize.x, smallRectangleSize.y);
}
}
dc.EndDrawing();
}
void wxGenericColourDialog::PaintCustomColours(wxDC& dc)
{
dc.BeginDrawing();
int i;
for (i = 0; i < 2; i++)
{
int j;
for (j = 0; j < 8; j++)
{
int ptr = i*8 + j;
int x = (j*(smallRectangleSize.x+gridSpacing)) + customColoursRect.x;
int y = (i*(smallRectangleSize.y+gridSpacing)) + customColoursRect.y;
dc.SetPen(*wxBLACK_PEN);
wxBrush brush(customColours[ptr], wxSOLID);
dc.SetBrush(brush);
dc.DrawRectangle( x, y, smallRectangleSize.x, smallRectangleSize.y);
}
}
dc.EndDrawing();
}
void wxGenericColourDialog::PaintHighlight(wxDC& dc, bool draw)
{
if ( colourSelection < 0 )
return;
dc.BeginDrawing();
// Number of pixels bigger than the standard rectangle size
// for drawing a highlight
int deltaX = 2;
int deltaY = 2;
if (whichKind == 1)
{
// Standard colours
int y = (int)(colourSelection / 8);
int x = (int)(colourSelection - (y*8));
x = (x*(smallRectangleSize.x + gridSpacing) + standardColoursRect.x) - deltaX;
y = (y*(smallRectangleSize.y + gridSpacing) + standardColoursRect.y) - deltaY;
if (draw)
dc.SetPen(*wxBLACK_PEN);
else
dc.SetPen(*wxLIGHT_GREY_PEN);
dc.SetBrush(*wxTRANSPARENT_BRUSH);
dc.DrawRectangle( x, y, (smallRectangleSize.x + (2*deltaX)), (smallRectangleSize.y + (2*deltaY)));
}
else
{
// User-defined colours
int y = (int)(colourSelection / 8);
int x = (int)(colourSelection - (y*8));
x = (x*(smallRectangleSize.x + gridSpacing) + customColoursRect.x) - deltaX;
y = (y*(smallRectangleSize.y + gridSpacing) + customColoursRect.y) - deltaY;
if (draw)
dc.SetPen(*wxBLACK_PEN);
else
dc.SetPen(*wxLIGHT_GREY_PEN);
dc.SetBrush(*wxTRANSPARENT_BRUSH);
dc.DrawRectangle( x, y, (smallRectangleSize.x + (2*deltaX)), (smallRectangleSize.y + (2*deltaY)));
}
dc.EndDrawing();
}
void wxGenericColourDialog::PaintCustomColour(wxDC& dc)
{
dc.BeginDrawing();
dc.SetPen(*wxBLACK_PEN);
wxBrush *brush = new wxBrush(colourData.m_dataColour, wxSOLID);
dc.SetBrush(*brush);
dc.DrawRectangle( singleCustomColourRect.x, singleCustomColourRect.y,
customRectangleSize.x, customRectangleSize.y);
dc.SetBrush(wxNullBrush);
delete brush;
dc.EndDrawing();
}
void wxGenericColourDialog::OnBasicColourClick(int which)
{
wxClientDC dc(this);
PaintHighlight(dc, false);
whichKind = 1;
colourSelection = which;
#if wxUSE_SLIDER
redSlider->SetValue( standardColours[colourSelection].Red() );
greenSlider->SetValue( standardColours[colourSelection].Green() );
blueSlider->SetValue( standardColours[colourSelection].Blue() );
#endif // wxUSE_SLIDER
colourData.m_dataColour.Set(standardColours[colourSelection].Red(),
standardColours[colourSelection].Green(),
standardColours[colourSelection].Blue());
PaintCustomColour(dc);
PaintHighlight(dc, true);
}
void wxGenericColourDialog::OnCustomColourClick(int which)
{
wxClientDC dc(this);
PaintHighlight(dc, false);
whichKind = 2;
colourSelection = which;
#if wxUSE_SLIDER
redSlider->SetValue( customColours[colourSelection].Red() );
greenSlider->SetValue( customColours[colourSelection].Green() );
blueSlider->SetValue( customColours[colourSelection].Blue() );
#endif // wxUSE_SLIDER
colourData.m_dataColour.Set(customColours[colourSelection].Red(),
customColours[colourSelection].Green(),
customColours[colourSelection].Blue());
PaintCustomColour(dc);
PaintHighlight(dc, true);
}
/*
void wxGenericColourDialog::OnOk(void)
{
Show(false);
}
void wxGenericColourDialog::OnCancel(void)
{
colourDialogCancelled = true;
Show(false);
}
*/
void wxGenericColourDialog::OnAddCustom(wxCommandEvent& WXUNUSED(event))
{
wxClientDC dc(this);
if (whichKind != 2)
{
PaintHighlight(dc, false);
whichKind = 2;
colourSelection = 0;
PaintHighlight(dc, true);
}
customColours[colourSelection].Set(colourData.m_dataColour.Red(),
colourData.m_dataColour.Green(),
colourData.m_dataColour.Blue());
colourData.SetCustomColour(colourSelection, customColours[colourSelection]);
PaintCustomColours(dc);
}
#if wxUSE_SLIDER
void wxGenericColourDialog::OnRedSlider(wxCommandEvent& WXUNUSED(event))
{
if (!redSlider)
return;
wxClientDC dc(this);
colourData.m_dataColour.Set((unsigned char)redSlider->GetValue(), colourData.m_dataColour.Green(), colourData.m_dataColour.Blue());
PaintCustomColour(dc);
}
void wxGenericColourDialog::OnGreenSlider(wxCommandEvent& WXUNUSED(event))
{
if (!greenSlider)
return;
wxClientDC dc(this);
colourData.m_dataColour.Set(colourData.m_dataColour.Red(), (unsigned char)greenSlider->GetValue(), colourData.m_dataColour.Blue());
PaintCustomColour(dc);
}
void wxGenericColourDialog::OnBlueSlider(wxCommandEvent& WXUNUSED(event))
{
if (!blueSlider)
return;
wxClientDC dc(this);
colourData.m_dataColour.Set(colourData.m_dataColour.Red(), colourData.m_dataColour.Green(), (unsigned char)blueSlider->GetValue());
PaintCustomColour(dc);
}
#endif // wxUSE_SLIDER
#endif // wxUSE_COLOURDLG && !defined(__WXGTK20__)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?