]> git.saurik.com Git - wxWidgets.git/blobdiff - demos/forty/canvas.cpp
use MSWAlwaysDrawBg() to fix the problem with black background; rewrote/cleaned up...
[wxWidgets.git] / demos / forty / canvas.cpp
index 81e7985234fa46c35d79f9c6b5c9d54952559e66..013576c088f3f3d8164a27463bed29e8e7cf8eed 100644 (file)
@@ -6,9 +6,9 @@
 // Created:     21/07/97
 // RCS-ID:      $Id$
 // Copyright:   (c) 1993-1998 Chris Breeze
-// Licence:    wxWindows licence
+// Licence:     wxWindows licence
 //---------------------------------------------------------------------------
-// Last modified: 22nd July 1998 - ported to wxWindows 2.0
+// Last modified: 22nd July 1998 - ported to wxWidgets 2.0
 /////////////////////////////////////////////////////////////////////////////
 
 #ifdef __GNUG__
@@ -38,36 +38,36 @@ BEGIN_EVENT_TABLE(FortyCanvas, wxScrolledWindow)
     EVT_MOUSE_EVENTS(FortyCanvas::OnMouseEvent)
 END_EVENT_TABLE()
 
-FortyCanvas::FortyCanvas(wxWindow* parent, int x, int y, int w, int h) :
-       wxScrolledWindow(parent, -1, wxPoint(x, y), wxSize(w, h)),
-       m_helpingHand(TRUE),
-       m_rightBtnUndo(TRUE),
-       m_playerDialog(0),
-       m_leftBtnDown(FALSE)
+FortyCanvas::FortyCanvas(wxWindow* parent, const wxPoint& pos, const wxSize& size) :
+             wxScrolledWindow(parent, wxID_ANY, pos, size),
+             m_helpingHand(true),
+             m_rightBtnUndo(true),
+             m_playerDialog(0),
+             m_leftBtnDown(false)
 {
 #ifdef __WXGTK__
-       m_font = wxTheFontList->FindOrCreateFont(12, wxROMAN, wxNORMAL, wxNORMAL);
+    m_font = wxTheFontList->FindOrCreateFont(12, wxROMAN, wxNORMAL, wxNORMAL);
 #else
-       m_font = wxTheFontList->FindOrCreateFont(10, wxSWISS, wxNORMAL, wxNORMAL);
+    m_font = wxTheFontList->FindOrCreateFont(10, wxSWISS, wxNORMAL, wxNORMAL);
 #endif
-       SetBackgroundColour(FortyApp::BackgroundColour());
+    SetBackgroundColour(FortyApp::BackgroundColour());
 
-       m_handCursor = new wxCursor(wxCURSOR_HAND);
-       m_arrowCursor = new wxCursor(wxCURSOR_ARROW);
+    m_handCursor = new wxCursor(wxCURSOR_HAND);
+    m_arrowCursor = new wxCursor(wxCURSOR_ARROW);
 
-       wxString name = wxTheApp->GetAppName();
-       if (name.Length() <= 0) name = "forty";
-       m_scoreFile = new ScoreFile(name);
-       m_game = new Game(0, 0, 0);
-       m_game->Deal();
+    wxString name = wxTheApp->GetAppName();
+    if (name.Length() <= 0) name = _T("forty");
+    m_scoreFile = new ScoreFile(name);
+    m_game = new Game(0, 0, 0);
+    m_game->Deal();
 }
 
 
 FortyCanvas::~FortyCanvas()
 {
-       UpdateScores();
-       delete m_game;
-       delete m_scoreFile;
+    UpdateScores();
+    delete m_game;
+    delete m_scoreFile;
     delete m_handCursor;
     delete m_arrowCursor;
 }
@@ -78,79 +78,79 @@ Write the current player's score back to the score file
 */
 void FortyCanvas::UpdateScores()
 {
-       if (m_player.Length() > 0 && m_scoreFile && m_game)
-       {
-               m_scoreFile->WritePlayersScore(
-                               m_player,
-                               m_game->GetNumWins(),
-                               m_game->GetNumGames(),
-                               m_game->GetScore()
-                               );
-       }
+    if (m_player.Length() > 0 && m_scoreFile && m_game)
+    {
+        m_scoreFile->WritePlayersScore(
+            m_player,
+            m_game->GetNumWins(),
+            m_game->GetNumGames(),
+            m_game->GetScore()
+        );
+    }
 }
 
 
 void FortyCanvas::OnDraw(wxDC& dc)
 {
-       dc.SetFont(* m_font);
-       m_game->Redraw(dc);
+    dc.SetFont(* m_font);
+    m_game->Redraw(dc);
 #if 0
-       // if player name not set (and selection dialog is not displayed)
-       // then ask the player for their name
-       if (m_player.Length() == 0 && !m_playerDialog)
-       {
-               m_playerDialog = new PlayerSelectionDialog(this, m_scoreFile);
-               m_playerDialog->ShowModal();
-               m_player = m_playerDialog->GetPlayersName();
-               if (m_player.Length() > 0)
-               {
-                       // user entered a name - lookup their score
-                       int wins, games, score;
-                       m_scoreFile->ReadPlayersScore(m_player, wins, games, score);
-                       m_game->NewPlayer(wins, games, score);
-                       m_game->DisplayScore(dc);
-                       m_playerDialog->Destroy();
-                       m_playerDialog = 0;
-                        Refresh(false);
-               }
-               else
-               {
-                       // user cancelled the dialog - exit the app
-                       ((wxFrame*)GetParent())->Close(TRUE);
-               }
-       }
+    // if player name not set (and selection dialog is not displayed)
+    // then ask the player for their name
+    if (m_player.Length() == 0 && !m_playerDialog)
+    {
+        m_playerDialog = new PlayerSelectionDialog(this, m_scoreFile);
+        m_playerDialog->ShowModal();
+        m_player = m_playerDialog->GetPlayersName();
+        if (m_player.Length() > 0)
+        {
+            // user entered a name - lookup their score
+            int wins, games, score;
+            m_scoreFile->ReadPlayersScore(m_player, wins, games, score);
+            m_game->NewPlayer(wins, games, score);
+            m_game->DisplayScore(dc);
+            m_playerDialog->Destroy();
+            m_playerDialog = 0;
+            Refresh(false);
+        }
+        else
+        {
+            // user cancelled the dialog - exit the app
+            ((wxFrame*)GetParent())->Close(true);
+        }
+    }
 #endif
 }
 
 void FortyCanvas::ShowPlayerDialog()
 {
-       // if player name not set (and selection dialog is not displayed)
-       // then ask the player for their name
-       if (m_player.Length() == 0 && !m_playerDialog)
-       {
-               m_playerDialog = new PlayerSelectionDialog(this, m_scoreFile);
-               m_playerDialog->ShowModal();
-               m_player = m_playerDialog->GetPlayersName();
-               if (m_player.Length() > 0)
-               {
-                       // user entered a name - lookup their score
-                       int wins, games, score;
-                       m_scoreFile->ReadPlayersScore(m_player, wins, games, score);
-                       m_game->NewPlayer(wins, games, score);
+    // if player name not set (and selection dialog is not displayed)
+    // then ask the player for their name
+    if (m_player.Length() == 0 && !m_playerDialog)
+    {
+        m_playerDialog = new PlayerSelectionDialog(this, m_scoreFile);
+        m_playerDialog->ShowModal();
+        m_player = m_playerDialog->GetPlayersName();
+        if (m_player.Length() > 0)
+        {
+            // user entered a name - lookup their score
+            int wins, games, score;
+            m_scoreFile->ReadPlayersScore(m_player, wins, games, score);
+            m_game->NewPlayer(wins, games, score);
                         
-                        wxClientDC dc(this);
-                        dc.SetFont(* m_font);
-                       m_game->DisplayScore(dc);
-                       m_playerDialog->Destroy();
-                       m_playerDialog = 0;
-                        Refresh(false);
-               }
-               else
-               {
-                       // user cancelled the dialog - exit the app
-                       ((wxFrame*)GetParent())->Close(TRUE);
-               }
+            wxClientDC dc(this);
+            dc.SetFont(* m_font);
+            m_game->DisplayScore(dc);
+            m_playerDialog->Destroy();
+            m_playerDialog = 0;
+            Refresh(false);
         }
+        else
+        {
+            // user cancelled the dialog - exit the app
+            ((wxFrame*)GetParent())->Close(true);
+        }
+    }
 }
         
 /*
@@ -158,113 +158,113 @@ Called when the main frame is closed
 */
 bool FortyCanvas::OnCloseCanvas()
 {
-       if (m_game->InPlay() &&
-               wxMessageBox("Are you sure you want to\nabandon the current game?",
-                       "Warning", wxYES_NO | wxICON_QUESTION) == wxNO)
-       {
-        return FALSE;
-       }
-       return TRUE;
+    if (m_game->InPlay() &&
+        wxMessageBox(_T("Are you sure you want to\nabandon the current game?"),
+            _T("Warning"), wxYES_NO | wxICON_QUESTION) == wxNO)
+    {
+        return false;
+    }
+    return true;
 }
 
 void FortyCanvas::OnMouseEvent(wxMouseEvent& event)
 {
-       int mouseX = (int)event.GetX();
-       int mouseY = (int)event.GetY();
+    int mouseX = (int)event.GetX();
+    int mouseY = (int)event.GetY();
 
-       wxClientDC dc(this); 
-       PrepareDC(dc);
-       dc.SetFont(* m_font);
+    wxClientDC dc(this); 
+    PrepareDC(dc);
+    dc.SetFont(* m_font);
 
-       if (event.LeftDClick())
-       {
-               if (m_leftBtnDown)
-               {
-                       m_leftBtnDown = FALSE;
-                       ReleaseMouse();
-                       m_game->LButtonUp(dc, mouseX, mouseY);
-               }
-               m_game->LButtonDblClk(dc, mouseX, mouseY);
-       }
-       else if (event.LeftDown())
-       {
-               if (!m_leftBtnDown)
-               {
-                       m_leftBtnDown = TRUE;
-                       CaptureMouse();
-                       m_game->LButtonDown(dc, mouseX, mouseY);
-               }
-       }
-       else if (event.LeftUp())
-       {
-               if (m_leftBtnDown)
-               {
-                       m_leftBtnDown = FALSE;
-                       ReleaseMouse();
-                       m_game->LButtonUp(dc, mouseX, mouseY);
-               }
-       }
-       else if (event.RightDown() && !event.LeftIsDown())
-       {
-               // only allow right button undo if m_rightBtnUndo is TRUE
-               if (m_rightBtnUndo)
-               {
-                       if (event.ControlDown() || event.ShiftDown())
-                       {
-                               m_game->Redo(dc);
-                       }
-                       else
-                       {
-                               m_game->Undo(dc);
-                       }
-               }
-       }
-       else if (event.Dragging())
-       {
-               m_game->MouseMove(dc, mouseX, mouseY);
-       }
+    if (event.LeftDClick())
+    {
+        if (m_leftBtnDown)
+        {
+            m_leftBtnDown = false;
+            ReleaseMouse();
+            m_game->LButtonUp(dc, mouseX, mouseY);
+        }
+        m_game->LButtonDblClk(dc, mouseX, mouseY);
+    }
+    else if (event.LeftDown())
+    {
+        if (!m_leftBtnDown)
+        {
+            m_leftBtnDown = true;
+            CaptureMouse();
+            m_game->LButtonDown(dc, mouseX, mouseY);
+        }
+    }
+    else if (event.LeftUp())
+    {
+        if (m_leftBtnDown)
+        {
+            m_leftBtnDown = false;
+            ReleaseMouse();
+            m_game->LButtonUp(dc, mouseX, mouseY);
+        }
+    }
+    else if (event.RightDown() && !event.LeftIsDown())
+    {
+        // only allow right button undo if m_rightBtnUndo is true
+        if (m_rightBtnUndo)
+        {
+            if (event.ControlDown() || event.ShiftDown())
+            {
+                m_game->Redo(dc);
+            }
+            else
+            {
+                m_game->Undo(dc);
+            }
+        }
+    }
+    else if (event.Dragging())
+    {
+        m_game->MouseMove(dc, mouseX, mouseY);
+    }
 
-       if (!event.LeftIsDown())
-       {
-               SetCursorStyle(mouseX, mouseY);
-       }
+    if (!event.LeftIsDown())
+    {
+        SetCursorStyle(mouseX, mouseY);
+    }
 }
 
 void FortyCanvas::SetCursorStyle(int x, int y)
 {
-       // Only set cursor to a hand if 'helping hand' is enabled and
-       // the card under the cursor can go somewhere 
-       if (m_game->CanYouGo(x, y) && m_helpingHand)
-       {
-               SetCursor(* m_handCursor);
-       }
-       else
-       {
-               SetCursor(* m_arrowCursor);
-       }
+    // Only set cursor to a hand if 'helping hand' is enabled and
+    // the card under the cursor can go somewhere 
+    if (m_game->CanYouGo(x, y) && m_helpingHand)
+    {
+        SetCursor(* m_handCursor);
+    }
+    else
+    {
+        SetCursor(* m_arrowCursor);
+    }
 
 }
 
 void FortyCanvas::NewGame()
 {
-       m_game->Deal();
-       Refresh();
+    m_game->Deal();
+    Refresh();
 }
 
 void FortyCanvas::Undo()
 {
-       wxClientDC dc(this); 
-       PrepareDC(dc);
-       dc.SetFont(* m_font);
-       m_game->Undo(dc);
+    wxClientDC dc(this); 
+    PrepareDC(dc);
+    dc.SetFont(* m_font);
+    m_game->Undo(dc);
 }
 
 void FortyCanvas::Redo()
 {
-       wxClientDC dc(this); 
-       PrepareDC(dc);
-       dc.SetFont(* m_font);
-       m_game->Redo(dc);
+    wxClientDC dc(this); 
+    PrepareDC(dc);
+    dc.SetFont(* m_font);
+    m_game->Redo(dc);
 }
 
 void FortyCanvas::LayoutGame()