mirror of
https://github.com/Heretek-AI/GDevelop.git
synced 2026-07-23 18:45:48 -04:00
114 lines
3.4 KiB
C++
114 lines
3.4 KiB
C++
#include "TileSetPanel.h"
|
|
|
|
#include <iostream>
|
|
|
|
TileSetPanel::TileSetPanel(wxWindow* parent, wxWindowID id, const wxPoint &pos, const wxSize &size, long style) :
|
|
wxScrolledWindow(parent, id, pos, size, style),
|
|
m_tileSetBitmap(NULL),
|
|
m_columns(0),
|
|
m_rows(0),
|
|
m_tileSize(0, 0),
|
|
m_tileMargins(0, 0),
|
|
m_selectedCol(-1),
|
|
m_selectedRow(-1)
|
|
{
|
|
Connect(wxEVT_LEFT_DOWN, wxMouseEventHandler(TileSetPanel::OnLeftButtonPressed), NULL, this);
|
|
}
|
|
|
|
TileSetPanel::~TileSetPanel()
|
|
{
|
|
|
|
}
|
|
|
|
void TileSetPanel::SetTileSet(wxBitmap *tileSetBitmap)
|
|
{
|
|
m_tileSetBitmap = tileSetBitmap;
|
|
|
|
if(m_tileSetBitmap)
|
|
{
|
|
SetScrollbars(1, 1, m_tileSetBitmap->GetWidth(), m_tileSetBitmap->GetHeight());
|
|
}
|
|
}
|
|
|
|
void TileSetPanel::SetTileCount(int columns, int rows)
|
|
{
|
|
m_columns = columns;
|
|
m_rows = rows;
|
|
}
|
|
|
|
void TileSetPanel::SetTileSize(wxSize tileSize)
|
|
{
|
|
m_tileSize = tileSize;
|
|
}
|
|
|
|
void TileSetPanel::SetTileMargins(wxSize tileMargins)
|
|
{
|
|
m_tileMargins = tileMargins;
|
|
}
|
|
|
|
void TileSetPanel::Update()
|
|
{
|
|
Refresh();
|
|
}
|
|
|
|
void TileSetPanel::OnDraw(wxDC& dc)
|
|
{
|
|
if(m_tileSetBitmap)
|
|
{
|
|
//Draw the bitmap
|
|
dc.DrawBitmap(*m_tileSetBitmap, 0, 0, false);
|
|
|
|
wxPoint minPos = GetViewStart();
|
|
int width, height;
|
|
GetVirtualSize(&width, &height);
|
|
wxPoint maxPos = minPos + wxPoint(width, height);
|
|
|
|
//Draw the lines
|
|
dc.SetPen(wxPen(wxColor(128, 128, 128, 128), 1));
|
|
for(int row = 1; row < m_rows; row++)
|
|
{
|
|
dc.DrawLine(minPos.x, row * m_tileSize.GetHeight() + (row - 1) * m_tileMargins.GetHeight(),
|
|
maxPos.x, row * m_tileSize.GetHeight() + (row - 1) * m_tileMargins.GetHeight());
|
|
|
|
dc.DrawLine(minPos.x, row * m_tileSize.GetHeight() + (row) * m_tileMargins.GetHeight() - 1,
|
|
maxPos.x, row * m_tileSize.GetHeight() + (row) * m_tileMargins.GetHeight() - 1);
|
|
|
|
for(int col = 1; col < m_columns; col++)
|
|
{
|
|
dc.DrawLine(col * m_tileSize.GetWidth() + (col - 1) * m_tileMargins.GetWidth(), minPos.y,
|
|
col * m_tileSize.GetWidth() + (col - 1) * m_tileMargins.GetWidth(), maxPos.y);
|
|
|
|
dc.DrawLine(col * m_tileSize.GetWidth() + (col) * m_tileMargins.GetWidth() - 1, minPos.y,
|
|
col * m_tileSize.GetWidth() + (col) * m_tileMargins.GetWidth() - 1, maxPos.y);
|
|
}
|
|
}
|
|
|
|
//Draw the selection
|
|
if(m_selectedRow != -1 && m_selectedCol != -1)
|
|
{
|
|
dc.SetPen(wxPen(wxColor(0, 0, 255, 255), 4));
|
|
dc.SetBrush(*wxTRANSPARENT_BRUSH);
|
|
dc.DrawRectangle(GetPositionOfTile(m_selectedCol, m_selectedRow), m_tileSize);
|
|
}
|
|
}
|
|
}
|
|
|
|
void TileSetPanel::OnLeftButtonPressed(wxMouseEvent& event)
|
|
{
|
|
wxPoint mousePos = CalcUnscrolledPosition(event.GetPosition());
|
|
|
|
//Select the tile
|
|
GetTileAt(mousePos, m_selectedCol, m_selectedRow);
|
|
Refresh();
|
|
}
|
|
|
|
wxPoint TileSetPanel::GetPositionOfTile(int column, int row)
|
|
{
|
|
return wxPoint(column *(m_tileSize.GetWidth() + m_tileMargins.GetWidth()), row * (m_tileSize.GetHeight() + m_tileMargins.GetHeight()));
|
|
}
|
|
|
|
void TileSetPanel::GetTileAt(wxPoint position, int &tileCol, int &tileRow)
|
|
{
|
|
tileCol = (int)(position.x / (m_tileSize.GetWidth() + m_tileMargins.GetWidth()));
|
|
tileRow = (int)(position.y / (m_tileSize.GetHeight() + m_tileMargins.GetHeight()));
|
|
} |