|
From: Emilien K. <cur...@us...> - 2005-01-10 15:19:14
|
Update of /cvsroot/wxdevcenter/StdPlugin/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9423/src Modified Files: BitmapDocView.cpp Log Message: Dessin du rectangle, du Roundedrectangle et de l'ellipse. Prise en compte du crayon (largeur et style) ainsi que du pinceau. Index: BitmapDocView.cpp =================================================================== RCS file: /cvsroot/wxdevcenter/StdPlugin/src/BitmapDocView.cpp,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** BitmapDocView.cpp 8 Jan 2005 17:49:13 -0000 1.6 --- BitmapDocView.cpp 10 Jan 2005 15:18:56 -0000 1.7 *************** *** 80,89 **** // Dessine un trait. ! void BitmapDocument::DrawLine(wxPoint ptFrom, wxPoint ptTo, wxColour col) { { // Local wxMemoryDC wxMemoryDC dc; dc.SelectObject(m_Bmp); - wxPen pen(col); dc.SetPen(pen); dc.DrawLine(ptFrom, ptTo); --- 80,88 ---- // Dessine un trait. ! void BitmapDocument::DrawLine(wxPoint ptFrom, wxPoint ptTo, const wxPen &pen) { { // Local wxMemoryDC wxMemoryDC dc; dc.SelectObject(m_Bmp); dc.SetPen(pen); dc.DrawLine(ptFrom, ptTo); *************** *** 94,97 **** --- 93,142 ---- } + // Dessine un rectangle. + void BitmapDocument::DrawRect(wxPoint ptFrom, wxPoint ptTo, const wxPen &pen, const wxBrush &brush) + { + { // Local wxMemoryDC + wxMemoryDC dc; + dc.SelectObject(m_Bmp); + dc.SetPen(pen); + dc.SetBrush(brush); + dc.DrawRectangle(wxRect(ptFrom, ptTo)); + } + + wxRect r(ptFrom, ptTo); + UpdateAllViews(NULL, 1, &r); + } + + // Dessine un rectangle arrondi. + void BitmapDocument::DrawRoundedRect(wxPoint ptFrom, wxPoint ptTo, const wxPen &pen, const wxBrush &brush) + { + { // Local wxMemoryDC + wxMemoryDC dc; + dc.SelectObject(m_Bmp); + dc.SetPen(pen); + dc.SetBrush(brush); + wxRect r(ptFrom, ptTo); + dc.DrawRoundedRectangle(r.x, r.y, r.width, r.height, 20); + } + + wxRect r(ptFrom, ptTo); + UpdateAllViews(NULL, 1, &r); + } + + // Dessine une ellipse. + void BitmapDocument::DrawEllipse(wxPoint ptFrom, wxPoint ptTo, const wxPen &pen, const wxBrush &brush) + { + { // Local wxMemoryDC + wxMemoryDC dc; + dc.SelectObject(m_Bmp); + dc.SetPen(pen); + dc.SetBrush(brush); + dc.DrawEllipse(wxRect(ptFrom, ptTo)); + } + + wxRect r(ptFrom, ptTo); + UpdateAllViews(NULL, 1, &r); + } + // Revoie le type de bitmap depuis l'extension d'un fichier. int BitmapDocument::GetBitmapType(wxDevCenter::FilePath strFile) *************** *** 126,129 **** --- 171,175 ---- #define ID_PANEL_CTRL 102 #define ID_TOOL_CTRL 103 + #define ID_PEN_CTRL 104 #define ID_TOOL_NONE 200 *************** *** 139,142 **** --- 185,198 ---- #define ID_TOOL_LAST ID_TOOL_RRECT + #define ID_PEN_SIZE 250 + #define ID_PEN_SOLID 260 + #define ID_PEN_TRANSPARENT 261 + #define ID_PEN_DOT 262 + #define ID_PEN_LONG_DASH 263 + #define ID_PEN_SHORT_DASH 264 + #define ID_PEN_DOT_DASH 265 + + #define ID_PEN_STYLE_FIRST ID_PEN_SOLID + #define ID_PEN_STYLE_LAST ID_PEN_DOT_DASH #define ID_COLOR_CURSOR_LEFT 301 *************** *** 173,184 **** EVT_TEXT(ID_COLOR_SLIDER_BLUE, BitmapView::OnSliderSpinTextChanged) - EVT_UPDATE_UI_RANGE(ID_TOOL_FIRST, ID_TOOL_LAST, BitmapView::OnUpdateTools) EVT_TOOL_RANGE(ID_TOOL_FIRST, ID_TOOL_LAST, BitmapView::OnTool) EVT_ERASE_BACKGROUND(BitmapView::OnEraseBackground) END_EVENT_TABLE() BitmapView::BitmapView(): View(), --- 229,244 ---- EVT_TEXT(ID_COLOR_SLIDER_BLUE, BitmapView::OnSliderSpinTextChanged) EVT_UPDATE_UI_RANGE(ID_TOOL_FIRST, ID_TOOL_LAST, BitmapView::OnUpdateTools) EVT_TOOL_RANGE(ID_TOOL_FIRST, ID_TOOL_LAST, BitmapView::OnTool) + EVT_UPDATE_UI_RANGE(ID_PEN_STYLE_FIRST, ID_PEN_STYLE_LAST, BitmapView::OnUpdatePenStyle) + EVT_TOOL_RANGE(ID_PEN_STYLE_FIRST, ID_PEN_STYLE_LAST, BitmapView::OnPenStyle) + EVT_TEXT(ID_PEN_SIZE, BitmapView::OnPenSizeChange) + EVT_ERASE_BACKGROUND(BitmapView::OnEraseBackground) END_EVENT_TABLE() + BitmapView::BitmapView(): View(), *************** *** 205,210 **** pToolSizer->Add(pPanel, 0, wxGROW); pToolSizer->SetItemMinSize((size_t)0, 172, -1); pToolSizer->Add(CreateToolBar(), 0, wxGROW); ! pToolSizer->SetItemMinSize((size_t)1, 172, -1); pGlobalSizer->Add(pToolSizer, 0, wxGROW); --- 265,275 ---- pToolSizer->Add(pPanel, 0, wxGROW); pToolSizer->SetItemMinSize((size_t)0, 172, -1); + pToolSizer->Add(CreateToolBar(), 0, wxGROW); ! pToolSizer->SetItemMinSize((size_t)1, 172, 48); ! ! pToolSizer->Add(CreatePenBar(), 0, wxGROW); ! pToolSizer->SetItemMinSize((size_t)2, 172, -1); ! pGlobalSizer->Add(pToolSizer, 0, wxGROW); *************** *** 212,216 **** SetSizerAndFit(pGlobalSizer); ! SetActiveColorCtrl(m_pColourLeftButton); return true; --- 277,284 ---- SetSizerAndFit(pGlobalSizer); ! ! SetRightColor(wxColour(255, 255, 255)); ! SetLeftColor(wxColour(0, 0, 0)); ! return true; *************** *** 433,436 **** --- 501,505 ---- m_pColourLeftButton->SetColour(col); SetActiveColorCtrl(m_pColourLeftButton); + m_Pen.SetColour(col); } *************** *** 440,443 **** --- 509,513 ---- m_pColourRightButton->SetColour(col); SetActiveColorCtrl(m_pColourRightButton); + m_Brush.SetColour(col); } *************** *** 472,476 **** ! /** Interception d'un drag gauche.*/ void BitmapView::OnLeftDrag(wxExtendedMouseEvent& event) { --- 542,625 ---- ! ! // Création de la barre de pinceau. ! wxPanel* BitmapView::CreatePenBar() ! { ! wxPanel *pPanel = new wxPanel(this, ID_PEN_CTRL); ! wxSizer *pGlobalSizer = new wxBoxSizer(wxVERTICAL); ! ! m_pPenSize = new wxSliderSpinCtrl(pPanel, ID_PEN_SIZE, 1, 1, 100); ! pGlobalSizer->Add(m_pPenSize, 0, wxGROW|wxALL, 2); ! ! wxToolBar *pTB = new wxToolBar(pPanel, ID_PEN_CTRL, wxDefaultPosition, wxDefaultSize, wxTB_VERTICAL|wxNO_BORDER); ! pTB->SetToolBitmapSize(wxSize(96, 15)); ! wxBitmap bmp; ! bmp = wxGetApp().LoadAppBitmap("bmp/SOLID.PNG", wxBITMAP_TYPE_PNG); ! pTB->AddTool(ID_PEN_SOLID, "Solid", bmp, "Solid pen", wxITEM_CHECK); ! bmp = wxGetApp().LoadAppBitmap("bmp/TRANSPARENT.PNG", wxBITMAP_TYPE_PNG); ! pTB->AddTool(ID_PEN_TRANSPARENT, "Transparent", bmp, "Transparent pen", wxITEM_CHECK); ! bmp = wxGetApp().LoadAppBitmap("bmp/DOT.PNG", wxBITMAP_TYPE_PNG); ! pTB->AddTool(ID_PEN_DOT, "Dot", bmp, "Dot pen", wxITEM_CHECK); ! bmp = wxGetApp().LoadAppBitmap("bmp/LONG_DASH.PNG", wxBITMAP_TYPE_PNG); ! pTB->AddTool(ID_PEN_LONG_DASH, "Long dash", bmp, "Long dash pen", wxITEM_CHECK); ! bmp = wxGetApp().LoadAppBitmap("bmp/SHORT_DASH.PNG", wxBITMAP_TYPE_PNG); ! pTB->AddTool(ID_PEN_SHORT_DASH, "Short dash", bmp, "Short dash pen", wxITEM_CHECK); ! bmp = wxGetApp().LoadAppBitmap("bmp/DOT_DASH.PNG", wxBITMAP_TYPE_PNG); ! pTB->AddTool(ID_PEN_DOT_DASH, "Dot...dash", bmp, "Dot...dash pen", wxITEM_CHECK); ! pTB->Realize(); ! pGlobalSizer->Add(pTB, 1, wxGROW); ! ! pPanel->SetSizer(pGlobalSizer); ! ! return pPanel; ! } ! ! // Interception de la sélection d'un outil. ! void BitmapView::OnPenStyle(wxCommandEvent& event) ! { ! m_iPenType = event.GetId() - ID_PEN_STYLE_FIRST; ! ! switch(m_iPenType) ! { ! case 0: ! m_Pen.SetStyle(wxSOLID); ! break; ! case 1: ! m_Pen.SetStyle(wxTRANSPARENT); ! break; ! case 2: ! m_Pen.SetStyle(wxDOT); ! break; ! case 3: ! m_Pen.SetStyle(wxLONG_DASH); ! break; ! case 4: ! m_Pen.SetStyle(wxSHORT_DASH); ! break; ! case 5: ! m_Pen.SetStyle(wxDOT_DASH); ! break; ! default: ! m_Pen.SetStyle(wxSOLID); ! break; ! } ! } ! ! // Interception de l'update des outils. ! void BitmapView::OnUpdatePenStyle(wxUpdateUIEvent& event) ! { ! event.Check(m_iPenType == (event.GetId()- ID_PEN_STYLE_FIRST)); ! } ! ! // Intercepte le changement de taille de trait. ! void BitmapView::OnPenSizeChange(wxCommandEvent& WXUNUSED(event)) ! { ! m_Pen.SetWidth(m_pPenSize->GetValue()); ! } ! ! ! ! ! // Interception d'un drag gauche. void BitmapView::OnLeftDrag(wxExtendedMouseEvent& event) { *************** *** 482,486 **** if(pt !=wxDefaultPosition) { ! GetDocument()->DrawLine(m_pt, pt, m_pColourLeftButton->GetColour()); m_pt = pt; } --- 631,635 ---- if(pt !=wxDefaultPosition) { ! GetDocument()->DrawLine(m_pt, pt, m_Pen); m_pt = pt; } *************** *** 492,501 **** wxMemoryDC dc; dc.SelectObject(m_pBitmapCtrl->Bitmap()); ! wxPen pen(m_pColourLeftButton->GetColour()); ! dc.SetPen(pen); dc.DrawLine(m_pt, pt); } m_pBitmapCtrl->Refresh(); break; } } --- 641,686 ---- wxMemoryDC dc; dc.SelectObject(m_pBitmapCtrl->Bitmap()); ! dc.SetPen(m_Pen); dc.DrawLine(m_pt, pt); } m_pBitmapCtrl->Refresh(); break; + case BVD_RECT: + m_pBitmapCtrl->RestoreBitmapRect(); + m_pBitmapCtrl->SaveBitmapRect(wxRect(m_pt, pt)); + { + wxMemoryDC dc; + dc.SelectObject(m_pBitmapCtrl->Bitmap()); + dc.SetPen(m_Pen); + dc.SetBrush(m_Brush); + dc.DrawRectangle(wxRect(m_pt, pt)); + } + m_pBitmapCtrl->Refresh(); + break; + case BVD_RRECT: + m_pBitmapCtrl->RestoreBitmapRect(); + m_pBitmapCtrl->SaveBitmapRect(wxRect(m_pt, pt)); + { + wxMemoryDC dc; + dc.SelectObject(m_pBitmapCtrl->Bitmap()); + dc.SetPen(m_Pen); + dc.SetBrush(m_Brush); + wxRect r(m_pt, pt); + dc.DrawRoundedRectangle(r.x, r.y, r.width, r.height, 20); + } + m_pBitmapCtrl->Refresh(); + break; + case BVD_ELLIPSE: + m_pBitmapCtrl->RestoreBitmapRect(); + m_pBitmapCtrl->SaveBitmapRect(wxRect(m_pt, pt)); + { + wxMemoryDC dc; + dc.SelectObject(m_pBitmapCtrl->Bitmap()); + dc.SetPen(m_Pen); + dc.SetBrush(m_Brush); + dc.DrawEllipse(wxRect(m_pt, pt)); + } + m_pBitmapCtrl->Refresh(); + break; } } *************** *** 508,511 **** --- 693,699 ---- case BVD_HANDDRAW: case BVD_LINE: + case BVD_RECT: + case BVD_RRECT: + case BVD_ELLIPSE: m_pBitmapCtrl->ClearSaveBitmap(); m_pt = m_pBitmapCtrl->ClientToBitmap(event.GetFromPos()); *************** *** 525,529 **** case BVD_LINE: m_pBitmapCtrl->RestoreBitmapRect(); ! GetDocument()->DrawLine(m_pBitmapCtrl->ClientToBitmap(event.GetFromPos()), m_pBitmapCtrl->ClientToBitmap(event.GetToPos()), m_pColourLeftButton->GetColour()); m_pt = wxDefaultPosition; break; --- 713,732 ---- case BVD_LINE: m_pBitmapCtrl->RestoreBitmapRect(); ! GetDocument()->DrawLine(m_pBitmapCtrl->ClientToBitmap(event.GetFromPos()), m_pBitmapCtrl->ClientToBitmap(event.GetToPos()), m_Pen); ! m_pt = wxDefaultPosition; ! break; ! case BVD_RECT: ! m_pBitmapCtrl->RestoreBitmapRect(); ! GetDocument()->DrawRect(m_pBitmapCtrl->ClientToBitmap(event.GetFromPos()), m_pBitmapCtrl->ClientToBitmap(event.GetToPos()), m_Pen, m_Brush); ! m_pt = wxDefaultPosition; ! break; ! case BVD_RRECT: ! m_pBitmapCtrl->RestoreBitmapRect(); ! GetDocument()->DrawRoundedRect(m_pBitmapCtrl->ClientToBitmap(event.GetFromPos()), m_pBitmapCtrl->ClientToBitmap(event.GetToPos()), m_Pen, m_Brush); ! m_pt = wxDefaultPosition; ! break; ! case BVD_ELLIPSE: ! m_pBitmapCtrl->RestoreBitmapRect(); ! GetDocument()->DrawEllipse(m_pBitmapCtrl->ClientToBitmap(event.GetFromPos()), m_pBitmapCtrl->ClientToBitmap(event.GetToPos()), m_Pen, m_Brush); m_pt = wxDefaultPosition; break; |