Files
GDevelop/IDE/wxSFMLCanvas.cpp
T
Florian 9203fab207 Initial import
git-svn-id: svn://localhost@6 8062f311-0dae-4547-b526-b8ab9ac864a5
2010-01-24 19:15:15 +00:00

160 lines
5.4 KiB
C++

////////////////////////////////////////////////////////////
// Headers
////////////////////////////////////////////////////////////
#include "wxSFMLCanvas.hpp"
// Platform-specific includes
#ifdef __WXGTK__
#include <gdk/gdkx.h>
#include <gtk/gtk.h>
#include <wx/gtk/win_gtk.h>
#endif
#include <iostream>
////////////////////////////////////////////////////////////
// Event table
////////////////////////////////////////////////////////////
BEGIN_EVENT_TABLE(wxSFMLCanvas, wxControl)
EVT_IDLE(wxSFMLCanvas::OnIdle)
EVT_PAINT(wxSFMLCanvas::OnPaint)
EVT_ERASE_BACKGROUND(wxSFMLCanvas::OnEraseBackground)
EVT_LEFT_DOWN( wxSFMLCanvas::OnLeftDown)
EVT_LEFT_UP( wxSFMLCanvas::OnLeftUp)
EVT_LEFT_DCLICK( wxSFMLCanvas::OnLeftDClick)
EVT_RIGHT_DOWN( wxSFMLCanvas::OnRightDown)
EVT_RIGHT_UP( wxSFMLCanvas::OnRightUp)
EVT_RIGHT_DCLICK( wxSFMLCanvas::OnRightDClick)
EVT_MIDDLE_UP( wxSFMLCanvas::OnMiddleUp)
EVT_MIDDLE_DOWN( wxSFMLCanvas::OnMiddleDown)
EVT_MOTION( wxSFMLCanvas::OnMotion)
EVT_MOUSEWHEEL( wxSFMLCanvas::OnMouseWheel)
EVT_KEY_DOWN( wxSFMLCanvas::OnKey)
END_EVENT_TABLE()
////////////////////////////////////////////////////////////
/// Construct the wxSFMLCanvas
////////////////////////////////////////////////////////////
wxSFMLCanvas::wxSFMLCanvas(wxWindow* Parent, wxWindowID Id, const wxPoint& Position, const wxSize& Size, long Style) :
wxControl(Parent, Id, Position, Size, Style)
{
#ifdef __WXGTK__
// GTK implementation requires to go deeper to find the low-level X11 identifier of the widget
gtk_widget_realize(m_wxwindow);
gtk_widget_set_double_buffered(m_wxwindow, false);
GdkWindow* Win = GTK_PIZZA(m_wxwindow)->bin_window;
XFlush(GDK_WINDOW_XDISPLAY(Win));
sf::RenderWindow::Create(GDK_WINDOW_XWINDOW(Win));
#else
// Tested under Windows XP only (should work with X11 and other Windows versions - no idea about MacOS)
sf::RenderWindow::Create(GetHandle());
#endif
}
////////////////////////////////////////////////////////////
/// Destructor
////////////////////////////////////////////////////////////
wxSFMLCanvas::~wxSFMLCanvas()
{
// Nothing to do...
}
////////////////////////////////////////////////////////////
/// Notification for the derived class that moment is good
/// for doing its update and drawing stuff
////////////////////////////////////////////////////////////
void wxSFMLCanvas::OnUpdate()
{
// Nothing to do by default...
}
////////////////////////////////////////////////////////////
/// Called when the control is idle - we can refresh our
/// SFML window
////////////////////////////////////////////////////////////
void wxSFMLCanvas::OnIdle(wxIdleEvent&)
{
// Send a paint message when the control is idle, to ensure maximum framerate
Refresh();
}
////////////////////////////////////////////////////////////
/// Called when the control is repainted - we can display our
/// SFML window
////////////////////////////////////////////////////////////
void wxSFMLCanvas::OnPaint(wxPaintEvent&)
{
// Make sure the control is able to be repainted
wxPaintDC Dc(this);
// Let the derived class do its specific stuff
OnUpdate();
// Display on screen
/*Display();*/
}
////////////////////////////////////////////////////////////
/// Called when the control needs to draw its background
////////////////////////////////////////////////////////////
void wxSFMLCanvas::OnEraseBackground(wxEraseEvent&)
{
// Don't do anything. We intercept this event in order to prevent the
// parent class to draw the background before repainting the window,
// which would cause some flickering
}
////////////////////////////////////////////////////////////
/// Clic sur le control.
////////////////////////////////////////////////////////////
void wxSFMLCanvas::OnLeftDown(wxMouseEvent &event){}
void wxSFMLCanvas::OnLeftUp(wxMouseEvent &event) {}
void wxSFMLCanvas::OnLeftDClick(wxMouseEvent &event){}
////////////////////////////////////////////////////////////
/// Mouvement de souris
////////////////////////////////////////////////////////////
void wxSFMLCanvas::OnMotion(wxMouseEvent &event){}
void wxSFMLCanvas::OnRightDown(wxMouseEvent &event) {}
void wxSFMLCanvas::OnRightUp(wxMouseEvent &event) {}
void wxSFMLCanvas::OnRightDClick(wxMouseEvent &event) {}
void wxSFMLCanvas::OnMiddleDown(wxMouseEvent &event) {}
void wxSFMLCanvas::OnMiddleUp(wxMouseEvent &event) {}
////////////////////////////////////////////////////////////
/// Appuie touche pour le control
////////////////////////////////////////////////////////////
void wxSFMLCanvas::OnKey(wxKeyEvent& evt)
{
// Don't do anything. We intercept this event in order to prevent the
// parent class to draw the background before repainting the window,
// which would cause some flickering
evt.StopPropagation();
}
////////////////////////////////////////////////////////////
/// Rotation molette
////////////////////////////////////////////////////////////
void wxSFMLCanvas::OnMouseWheel(wxMouseEvent& event)
{
// Don't do anything. We intercept this event in order to prevent the
// parent class to draw the background before repainting the window,
// which would cause some flickering
}