mirror of
https://github.com/amyinspace/MagicSetEditor2.git
synced 2026-06-10 13:06:59 -04:00
101 lines
3.9 KiB
C++
101 lines
3.9 KiB
C++
//+----------------------------------------------------------------------------+
|
|
//| Description: Magic Set Editor - Program to make Magic (tm) cards |
|
|
//| Copyright: (C) 2001 - 2017 Twan van Laarhoven and Sean Hunt |
|
|
//| License: GNU General Public License 2 or later (see file COPYING) |
|
|
//+----------------------------------------------------------------------------+
|
|
|
|
// ----------------------------------------------------------------------------- : Includes
|
|
|
|
#include <util/prec.hpp>
|
|
#include <gui/icon_menu.hpp>
|
|
#include <gui/util.hpp>
|
|
|
|
// ----------------------------------------------------------------------------- : generateDisabledImage
|
|
|
|
// Generate an image to use for the disabled state of menu items
|
|
Image generateDisabledImage(const Image& imgIn) {
|
|
// Some system colors
|
|
Color trans(1,2,3); // mask color used by bitmaps as 'transparent'
|
|
Color light = wxSystemSettings::GetColour(wxSYS_COLOUR_3DHIGHLIGHT);
|
|
Color shadow = wxSystemSettings::GetColour(wxSYS_COLOUR_3DSHADOW);
|
|
// generate disabled bitmap
|
|
Image imgOut(16, 16);
|
|
imgOut.SetMaskColour(1,2,3);
|
|
Byte *in = imgIn.GetData(), *out = imgOut.GetData();
|
|
// For each pixel...
|
|
for (int y = 0 ; y < 16 ; ++y) {
|
|
for (int x = 0 ; x < 16 ; ++x) {
|
|
// is the pixel mask color or white?
|
|
Color in1 = trans, in2 = trans;
|
|
if (x<15 && y<15) in1 = Color(in[0], in[1], in[2]);
|
|
// and the pixel to the left+up?
|
|
if (x>0 && y>0 ) in2 = Color(in[0 - 3*17], in[1 - 3*17], in[2 - 3*17]);
|
|
// determine output color
|
|
Color col;
|
|
if (in1 != trans && in1 != light) col = shadow;
|
|
else if (in2 != trans && in2 != light) col = light;
|
|
else col = trans;
|
|
out[0] = col.Red();
|
|
out[1] = col.Green();
|
|
out[2] = col.Blue();
|
|
in += 3;
|
|
out += 3;
|
|
}
|
|
}
|
|
return imgOut;
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------- : set_menu_item_image
|
|
|
|
void set_menu_item_image(wxMenuItem* item, const String& resource) {
|
|
// load bitmap
|
|
Bitmap bitmap = load_resource_tool_image(resource);
|
|
#if defined(__WXMSW__)
|
|
// make greyed bitmap
|
|
bitmap = bitmap.GetSubBitmap(wxRect(0,0,16,16));
|
|
Image disabledImage = generateDisabledImage(bitmap.ConvertToImage());
|
|
item->SetBitmaps(bitmap, bitmap);
|
|
item->SetDisabledBitmap(disabledImage);
|
|
#else
|
|
// Check items can't have bitmaps :(
|
|
if (item->GetKind() == wxITEM_NORMAL) {
|
|
item->SetBitmap(bitmap);
|
|
}
|
|
#endif
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------- : IconMenu
|
|
|
|
void IconMenu::Append(int id, const String& resource, const String& text, const String& help, wxItemKind kind, wxMenu* submenu) {
|
|
// create menu, load icon
|
|
wxMenuItem* item = new wxMenuItem(this, id, text, help, kind, submenu);
|
|
set_menu_item_image(item, resource);
|
|
// add to menu
|
|
wxMenu::Append(item);
|
|
}
|
|
|
|
void IconMenu::Append(int id, const String& text, const String& help, wxItemKind kind, wxMenu* submenu) {
|
|
wxMenuItem* item = new wxMenuItem (this, id, text, help, kind, submenu);
|
|
item->SetBitmap(wxNullBitmap);
|
|
wxMenu::Append(item);
|
|
}
|
|
|
|
void IconMenu::Append(wxMenuItem* item) {
|
|
item->SetBitmap(wxNullBitmap);
|
|
wxMenu::Append(item);
|
|
}
|
|
|
|
void IconMenu::Insert(size_t pos, int id, const String& resource, const String& text, const String& help, wxItemKind kind, wxMenu* submenu) {
|
|
// create menu, load icon
|
|
wxMenuItem* item = new wxMenuItem(this, id, text, help, kind, submenu);
|
|
set_menu_item_image(item, resource);
|
|
// add to menu
|
|
wxMenu::Insert(pos,item);
|
|
}
|
|
|
|
void IconMenu::Insert(size_t pos, int id, const String& text, const String& help, wxItemKind kind, wxMenu* submenu) {
|
|
wxMenuItem* item = new wxMenuItem (this, id, text, help, kind, submenu);
|
|
item->SetBitmap(wxNullBitmap);
|
|
wxMenu::Insert(pos, item);
|
|
}
|