|
From: Emilien K. <cur...@us...> - 2005-01-07 22:10:53
|
Update of /cvsroot/wxdevcenter/StdPlugin/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27644/src Modified Files: BitmapCtrl.cpp BitmapDocView.cpp Log Message: Passage de wxImage vers wxBitmap pour le stockage interne des images. Début du tracé à main levé Index: BitmapCtrl.cpp =================================================================== RCS file: /cvsroot/wxdevcenter/StdPlugin/src/BitmapCtrl.cpp,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** BitmapCtrl.cpp 7 Jan 2005 17:41:44 -0000 1.4 --- BitmapCtrl.cpp 7 Jan 2005 22:10:42 -0000 1.5 *************** *** 44,48 **** wxControl(parent, id, pos, size, style), wxExtendedMouseInterface(), ! m_Image(48,48), m_iZoom(0), m_bExtraScroll(false), --- 44,48 ---- wxControl(parent, id, pos, size, style), wxExtendedMouseInterface(), ! m_Bmp(48,48), m_iZoom(0), m_bExtraScroll(false), *************** *** 60,67 **** // Attache un image au controle. ! void BitmapCtrl::SetImage(const wxImage& img) { ! m_Image = img; ! SetVirtualSize(m_Image.GetWidth(), m_Image.GetHeight()); Refresh(); } --- 60,67 ---- // Attache un image au controle. ! void BitmapCtrl::SetBitmap(const wxBitmap& Bmp) { ! m_Bmp = Bmp; ! SetVirtualSize(m_Bmp.GetWidth(), m_Bmp.GetHeight()); Refresh(); } *************** *** 84,89 **** void BitmapCtrl::OnDraw(wxDC* pDC) { ! wxSize sz(m_Image.GetWidth()*ZoomToScale(), m_Image.GetHeight()*ZoomToScale()); ! wxBitmap bmp = m_Image.Scale(sz.x, sz.y); pDC->DrawBitmap(bmp, m_ptOrigin.x - GetScrollPos(wxHORIZONTAL), m_ptOrigin.y - GetScrollPos(wxVERTICAL)); } --- 84,89 ---- void BitmapCtrl::OnDraw(wxDC* pDC) { ! wxSize sz(m_Bmp.GetWidth()*ZoomToScale(), m_Bmp.GetHeight()*ZoomToScale()); ! wxBitmap bmp = m_Bmp.ConvertToImage().Scale(sz.x, sz.y); pDC->DrawBitmap(bmp, m_ptOrigin.x - GetScrollPos(wxHORIZONTAL), m_ptOrigin.y - GetScrollPos(wxVERTICAL)); } *************** *** 112,116 **** } else ! szv = wxSize(m_Image.GetWidth(), m_Image.GetHeight()); wxSize szc = GetClientSize(); --- 112,116 ---- } else ! szv = wxSize(m_Bmp.GetWidth(), m_Bmp.GetHeight()); wxSize szc = GetClientSize(); *************** *** 165,169 **** { wxSize szc = GetClientSize(); ! wxPoint pt(m_Image.GetWidth()*ZoomToScale(), m_Image.GetHeight()*ZoomToScale()); pt.x = -(szc.x - pt.x)/2; --- 165,169 ---- { wxSize szc = GetClientSize(); ! wxPoint pt(m_Bmp.GetWidth()*ZoomToScale(), m_Bmp.GetHeight()*ZoomToScale()); pt.x = -(szc.x - pt.x)/2; *************** *** 288,292 **** iPos = (iOrient==wxVERTICAL)?GetVirtualSize().y:GetVirtualSize().x; else ! iPos = (iOrient==wxVERTICAL)?m_Image.GetHeight():m_Image.GetWidth(); } else if(event.GetEventType()==wxEVT_SCROLLWIN_THUMBTRACK) --- 288,292 ---- iPos = (iOrient==wxVERTICAL)?GetVirtualSize().y:GetVirtualSize().x; else ! iPos = (iOrient==wxVERTICAL)?m_Bmp.GetHeight():m_Bmp.GetWidth(); } else if(event.GetEventType()==wxEVT_SCROLLWIN_THUMBTRACK) Index: BitmapDocView.cpp =================================================================== RCS file: /cvsroot/wxdevcenter/StdPlugin/src/BitmapDocView.cpp,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** BitmapDocView.cpp 7 Jan 2005 17:41:44 -0000 1.2 --- BitmapDocView.cpp 7 Jan 2005 22:10:42 -0000 1.3 *************** *** 12,15 **** --- 12,17 ---- #include <wxDevCenter/DocManager.h> + #include <wx/dcmemory.h> + using namespace wxDevCenter; *************** *** 30,35 **** bool BitmapDocument::LoadDocument(wxDevCenter::Archive *ar) { ! if(!m_Image.LoadFile((wxInputStream&)*ar)) wxMessageBox(WXDC_BITMAP_ERROR_LOAD); return true; } --- 32,42 ---- bool BitmapDocument::LoadDocument(wxDevCenter::Archive *ar) { ! wxImage Img; ! if(!Img.LoadFile((wxInputStream&)*ar)) ! { wxMessageBox(WXDC_BITMAP_ERROR_LOAD); + return false; + } + m_Bmp = wxBitmap(Img); return true; } *************** *** 45,49 **** } ! if(!m_Image.SaveFile((wxOutputStream&)*ar, type)) { wxMessageBox(WXDC_BITMAP_ERROR_SAVE); --- 52,58 ---- } ! wxImage Img = m_Bmp.ConvertToImage(); ! ! if(!Img.SaveFile((wxOutputStream&)*ar, type)) { wxMessageBox(WXDC_BITMAP_ERROR_SAVE); *************** *** 56,64 **** void BitmapDocument::SetPixel(wxPoint pt, wxColour col) { ! m_Image.SetRGB(pt.x, pt.y, col.Red(), col.Green(), col.Blue()); UpdateAllViews(NULL); } // Revoie le type de bitmap depuis l'extension d'un fichier. --- 65,91 ---- void BitmapDocument::SetPixel(wxPoint pt, wxColour col) { ! wxMemoryDC dc; ! dc.SelectObject(m_Bmp); ! ! wxPen pen(col); ! dc.SetPen(pen); ! dc.DrawPoint(pt); ! UpdateAllViews(NULL); } + // Dessine un trait. + void BitmapDocument::DrawLine(wxPoint ptFrom, wxPoint ptTo, wxColour col) + { + wxMemoryDC dc; + dc.SelectObject(m_Bmp); + + wxPen pen(col); + dc.SetPen(pen); + dc.DrawLine(ptFrom, ptTo); + + UpdateAllViews(NULL); + } // Revoie le type de bitmap depuis l'extension d'un fichier. *************** *** 114,117 **** --- 141,146 ---- EVT_EXTMOUSE_LEFT_MOVE_DRAG(ID_BITMAP_CTRL, BitmapView::OnLeftDrag) + EVT_EXTMOUSE_LEFT_BEGIN_DRAG(ID_BITMAP_CTRL, BitmapView::OnLeftDragStart) + EVT_EXTMOUSE_LEFT_END_DRAG(ID_BITMAP_CTRL, BitmapView::OnLeftDragEnd) EVT_COMMAND_RANGE(ID_COLOR_PALETTE_START, ID_COLOR_PALETTE_END, wxEVT_COMMAND_LEFT_CLICK, BitmapView::OnColorPaletteLeftClick) *************** *** 124,139 **** EVT_TEXT(ID_COLOR_SLIDER_GREEN, BitmapView::OnSliderSpinTextChanged) EVT_TEXT(ID_COLOR_SLIDER_BLUE, BitmapView::OnSliderSpinTextChanged) END_EVENT_TABLE() - /** Interception d'un drag gauche.*/ - void BitmapView::OnLeftDrag(wxExtendedMouseEvent& event) - { - GetDocument()->SetPixel( m_pBitmapCtrl->ClientToBitmap(event.GetToPos()) , wxColour(0, 0, 0)); - wxLogDebug("BitmapView::OnLeftDrag (%d,%d)-(%d,%d)", event.GetFromPos().x, event.GetFromPos().y, - event.GetToPos().x, event.GetToPos().y); - } BitmapView::BitmapView(): ! View() { wxMenu *pMenu; --- 153,164 ---- EVT_TEXT(ID_COLOR_SLIDER_GREEN, BitmapView::OnSliderSpinTextChanged) EVT_TEXT(ID_COLOR_SLIDER_BLUE, BitmapView::OnSliderSpinTextChanged) + + EVT_ERASE_BACKGROUND(BitmapView::OnEraseBackground) END_EVENT_TABLE() BitmapView::BitmapView(): ! View(), ! m_BVD(BVD_NONE) { wxMenu *pMenu; *************** *** 146,149 **** --- 171,176 ---- bool BitmapView::OnCreate() { + SetWindowStyleFlag(GetWindowStyleFlag()|wxCLIP_CHILDREN); + m_pBitmapCtrl = new BitmapCtrl(this, ID_BITMAP_CTRL, wxDefaultPosition, wxDefaultSize, 0); wxSizer *pSizer = new wxBoxSizer(wxHORIZONTAL); *************** *** 161,164 **** --- 188,228 ---- } + int g_NbDefaultColor = 8*11; + wxColor g_DefaultPalette[WXDC_BITMAP_PALETTE_SIZE] = { + wxColour(000, 000, 000), wxColour(128, 000, 000), wxColour(000, 128, 000), wxColour(128, 128, 000), + wxColour(000, 000, 128), wxColour(128, 000, 128), wxColour(000, 128, 128), wxColour(192, 192, 192), + + wxColour(128, 128, 128), wxColour(255, 000, 000), wxColour(000, 255, 000), wxColour(255, 255, 000), + wxColour(000, 000, 255), wxColour(255, 000, 255), wxColour(000, 255, 255), wxColour(255, 255, 255), + + wxColour( 38, 38, 38), wxColour( 76, 76, 76), wxColour(102, 102, 102), wxColour(128, 128, 128), + wxColour(153, 153, 153), wxColour(178, 178, 178), wxColour(204, 204, 204), wxColour(230, 230, 230), + + wxColour( 76, 000, 000), wxColour(127, 000, 000), wxColour(178, 000, 000), wxColour(229, 000, 000), + wxColour(255, 25, 25), wxColour(255, 76, 76), wxColour(255, 127, 127), wxColour(255, 178, 178), + + wxColour( 76, 57, 000), wxColour(127, 95, 000), wxColour(178, 133, 000), wxColour(229, 172, 000), + wxColour(255, 197, 25), wxColour(255, 210, 76), wxColour(255, 223, 127), wxColour(255, 255, 178), + + wxColour( 38, 76, 000), wxColour( 63, 127, 000), wxColour( 89, 178, 102), wxColour(114, 229, 000), + wxColour(140, 255, 025), wxColour(165, 255, 076), wxColour(191, 255, 127), wxColour(216, 255, 178), + + wxColour(000, 76, 19), wxColour(000, 127, 31), wxColour(000, 178, 44), wxColour(000, 229, 57), + wxColour( 25, 255, 82), wxColour( 76, 255, 121), wxColour(127, 255, 159), wxColour(178, 255, 197), + + wxColour(000, 76, 76), wxColour(000, 127, 127), wxColour(000, 178, 178), wxColour(000, 229, 229), + wxColour( 25, 255, 255), wxColour( 76, 255, 255), wxColour(127, 255, 255), wxColour(178, 255, 255), + + wxColour(000, 19, 76), wxColour(000, 31, 127), wxColour(000, 44, 178), wxColour(000, 57, 229), + wxColour( 25, 82, 255), wxColour( 76, 121, 255), wxColour(127, 159, 255), wxColour(178, 197, 255), + + wxColour( 38, 000, 76), wxColour( 63, 000, 127), wxColour( 89, 000, 178), wxColour(114, 000, 228), + wxColour(140, 25, 255), wxColour(165, 76, 255), wxColour(191, 127, 255), wxColour(216, 178, 255), + + wxColour( 76, 000, 57), wxColour(127, 000, 95), wxColour(178, 000, 133), wxColour(229, 000, 172), + wxColour(255, 25, 197), wxColour(255, 76, 210), wxColour(255, 127, 223), wxColour(255, 178, 235) + }; + + // Création de la barre de controle. wxPanel* BitmapView::CreateControlPanel() *************** *** 169,173 **** // Liste de couleurs ! pHSizer = new wxGridSizer(WXDC_BITMAP_PALETTE_WIDTH, WXDC_BITMAP_PALETTE_HEIGHT, 0, 0); for(int i=0; i<WXDC_BITMAP_PALETTE_SIZE; i++) { --- 233,237 ---- // Liste de couleurs ! pHSizer = new wxGridSizer(WXDC_BITMAP_PALETTE_HEIGHT, WXDC_BITMAP_PALETTE_WIDTH, 0, 0); for(int i=0; i<WXDC_BITMAP_PALETTE_SIZE; i++) { *************** *** 175,178 **** --- 239,244 ---- pHSizer->Add(m_pColourArray[i], 1, wxGROW); pHSizer->SetItemMinSize(i, 16, 16); + if(i<g_NbDefaultColor) + m_pColourArray[i]->SetColour(g_DefaultPalette[i]); } pGlobalSizer->Add(pHSizer, 0, wxGROW); *************** *** 232,236 **** void BitmapView::OnUpdate(View* WXUNUSED(pSender), unsigned int WXUNUSED(nUpdateCode), void* WXUNUSED(pUpdateInfo)) { ! m_pBitmapCtrl->SetImage(GetDocument()->GetImage()); } --- 298,302 ---- void BitmapView::OnUpdate(View* WXUNUSED(pSender), unsigned int WXUNUSED(nUpdateCode), void* WXUNUSED(pUpdateInfo)) { ! m_pBitmapCtrl->SetBitmap(GetDocument()->GetBitmap()); } *************** *** 325,328 **** --- 391,424 ---- } + // Intercepte la peinture du fond pour empecher le flicking. + void BitmapView::OnEraseBackground(wxEraseEvent& WXUNUSED(event)) + { + } + + + /** Interception d'un drag gauche.*/ + void BitmapView::OnLeftDrag(wxExtendedMouseEvent& event) + { + wxPoint pt = m_pBitmapCtrl->ClientToBitmap(event.GetToPos()); + + if(m_BVD == BVD_HANDDRAW) + { + GetDocument()->DrawLine(m_pt, pt, m_pColourLeftButton->GetColour()); + m_pt = pt; + } + } + + // Interception d'un début de drag gauche. + void BitmapView::OnLeftDragStart(wxExtendedMouseEvent& event) + { + m_BVD = BVD_HANDDRAW; + m_pt = m_pBitmapCtrl->ClientToBitmap(event.GetFromPos()); + } + + // Interception d'une fin de drag gauche. + void BitmapView::OnLeftDragEnd(wxExtendedMouseEvent& WXUNUSED(event)) + { + m_BVD = BVD_NONE; + } ////////////////////////////////////////////////////////////////////// |