]> Shamusworld >> Repos - ttedit/blob - src/toolwindow.cpp
453296490827ea2a41e35383e94475b3e6da21a7
[ttedit] / src / toolwindow.cpp
1 //\r
2 // TOOLWINDOW.CPP - Tool Palette window\r
3 // by James L. Hammons\r
4 // (C) 2008 Underground Software\r
5 //\r
6 // JLH = James L. Hammons <jlhamm@acm.org>\r
7 //\r
8 // Who  When        What\r
9 // ---  ----------  -------------------------------------------------------------\r
10 // JLH  08/28/2008  Created this file\r
11 //\r
12 \r
13 // FIXED:\r
14 //\r
15 // STILL TO BE DONE:\r
16 //\r
17 //\r
18 \r
19 // Uncomment this for debugging...\r
20 #define DEBUG\r
21 #define DEBUGFOO            // Various tool debugging...\r
22 #define DEBUGTP                         // Toolpalette debugging...\r
23 \r
24 #include "toolwindow.h"\r
25 #include "types.h"\r
26 \r
27 // Pixmap resources\r
28 \r
29 #include "res/toolpal1.xpm"                                             // Docs say this is portable... Let's see!\r
30 \r
31 \r
32 BEGIN_EVENT_TABLE(ToolWindow, wxFrame)\r
33         EVT_PAINT(ToolWindow::OnPaint)\r
34 END_EVENT_TABLE()\r
35 \r
36 \r
37 ToolWindow::ToolWindow(wxFrame * parent, const wxString &title, const wxPoint &pos,\r
38         const wxSize &size, long style): wxFrame(parent, -1, title, pos, size, style),\r
39         bmp(NULL), prevTool(TOOLNone)\r
40 {\r
41         bmp = new wxBitmap(toolpal1_xpm);\r
42 \r
43         // Set up sizes\r
44 \r
45         sizeTPBM.x = bmp->GetWidth(), sizeTPBM.y = bmp->GetHeight();\r
46         sizeStamp.x = sizeTPBM.x / 4, sizeStamp.y = sizeTPBM.y / 2;\r
47 \r
48         SetSize(0, 0, sizeTPBM.x, sizeTPBM.y);\r
49         Show(false);\r
50 }\r
51 \r
52 ToolWindow::~ToolWindow()\r
53 {\r
54         if (bmp)\r
55                 delete bmp;\r
56 }\r
57 \r
58 void ToolWindow::OnPaint(wxPaintEvent &e)\r
59 {\r
60         wxPaintDC dc(this);\r
61 \r
62         wxMemoryDC memDC;\r
63         memDC.SelectObject(*bmp);\r
64         dc.Blit(0, 0, sizeTPBM.x, sizeTPBM.y, &memDC, 0, 0, wxCOPY);\r
65 \r
66         if (prevTool != -1)\r
67         {\r
68             //need ul corner of bitmap, ul corner of dest, width/height\r
69                 wxPoint pt(sizeStamp.x * (prevTool & 0x03), sizeStamp.y * (prevTool >> 2));\r
70                 dc.Blit(pt.x, pt.y, sizeStamp.x, sizeStamp.y, &memDC, pt.x, pt.y, wxSRC_INVERT);\r
71         }\r
72 \r
73         memDC.SelectObject(wxNullBitmap);\r
74 }\r
75 \r
76 //\r
77 // Find which tool we're pointing at\r
78 //\r
79 ToolType ToolWindow::FindSelectedTool(void)\r
80 {\r
81         // Get mouse coords relative to the tool palette window\r
82         wxPoint pt = ScreenToClient(wxGetMousePosition());\r
83 \r
84         // Divide mouse coords by the bitmap stamp size to find which one is pointed to\r
85         uint32 x = (uint32)pt.x / sizeStamp.x, y = (uint32)pt.y / sizeStamp.y;\r
86 \r
87         // Preset failure into newTool, in case no new tool is selected\r
88         ToolType newTool = TOOLNone;\r
89 \r
90         // NOTE: This works because x and y are UNSIGNED\r
91         if (x < 4 && y < 2)\r
92                 newTool = (ToolType)((y * 4) + x);\r
93 \r
94         return newTool;\r
95 }\r