bsnes/hiro/qt/utility.cpp

267 lines
10 KiB
C++
Raw Normal View History

namespace hiro {
static auto CalculateAlignment(Alignment alignment) -> signed {
signed result = 0;
if(alignment.horizontal() < 0.333) result |= Qt::AlignLeft;
else if(alignment.horizontal() > 0.666) result |= Qt::AlignRight;
else result |= Qt::AlignCenter;
if(alignment.vertical() < 0.333) result |= Qt::AlignTop;
else if(alignment.vertical() > 0.666) result |= Qt::AlignBottom;
else result |= Qt::AlignVCenter;
return result;
}
static auto CreateBrush(Color color) -> QBrush {
return color ? QColor(color.red(), color.green(), color.blue()) : QBrush();
}
static auto CreateIcon(const nall::image& icon, bool scale = false) -> QIcon {
if(!icon) return QIcon();
auto qtBuffer = icon;
qtBuffer.transform();
if(scale) qtBuffer.scale(16, 16, Interpolation::Linear);
QImage qtImage(qtBuffer.data(), qtBuffer.width(), qtBuffer.height(), QImage::Format_ARGB32);
return QIcon(QPixmap::fromImage(qtImage));
}
Update to v094r43 release. byuu says: Updated to compile with all of the new hiro changes. My next step is to write up hiro API documentation, and move the API from alpha (constantly changing) to beta (rarely changing), in preparation for the first stable release (backward-compatible changes only.) Added "--fullscreen" command-line option. I like this over a configuration file option. Lets you use the emulator in both modes without having to modify the config file each time. Also enhanced the command-line game loading. You can now use any of these methods: higan /path/to/game-folder.sfc higan /path/to/game-folder.sfc/ higan /path/to/game-folder.sfc/program.rom The idea is to support launchers that insist on loading files only. Technically, the file can be any name (manifest.bml also works); the only criteria is that the file actually exists and is a file, and not a directory. This is a requirement to support the first version (a directory lacking the trailing / identifier), because I don't want my nall::string class to query the file system to determine if the string is an actual existing file or directory for its pathname() / dirname() functions. Anyway, every game folder I've made so far has program.rom, and that's very unlikely to change, so this should be fine. Now, of course, if you drop a regular "game.sfc" file on the emulator, it won't even try to load it, unless it's in a folder that ends in .fc, .sfc, etc. In which case, it'll bail out immediately by being unable to produce a manifest for what is obviously not really a game folder.
2015-08-30 02:08:26 +00:00
static auto CreateImage(const Image& image, bool scale = false) -> QIcon {
if(!image) return QIcon();
QImage qtImage((const uint8_t*)image.data(), image.width(), image.height(), QImage::Format_ARGB32);
return QIcon(QPixmap::fromImage(qtImage));
}
static auto DropPaths(QDropEvent* event) -> lstring {
QList<QUrl> urls = event->mimeData()->urls();
if(urls.size() == 0) return {};
lstring paths;
for(auto n : range(urls.size())) {
string path{urls[n].path().toUtf8().constData()};
if(!path) continue;
if(directory::exists(path) && !path.endsWith("/")) path.append("/");
paths.append(path);
}
return paths;
}
/*
static auto GetDisplacement(Sizable* sizable) -> Position {
Position position;
while(sizable->state.parent) {
Position displacement = sizable->state.parent->p.displacement();
position.x += displacement.x;
position.y += displacement.y;
sizable = sizable->state.parent;
}
return position;
}
*/
/*
static auto GetParentWidgetLayout(Sizable* sizable) -> Layout* {
while(sizable) {
if(sizable->state.parent && dynamic_cast<TabFrame*>(sizable->state.parent)) return (Layout*)sizable;
sizable = sizable->state.parent;
}
return nullptr;
}
*/
/*
static auto GetParentWidget(Sizable* sizable) -> Widget* {
while(sizable) {
if(sizable->state.parent && dynamic_cast<TabFrame*>(sizable->state.parent)) return (Widget*)sizable->state.parent;
sizable = sizable->state.parent;
}
return nullptr;
}
*/
/*
static auto Keysym(int keysym) -> Keyboard::Keycode {
switch(keysym) {
case XK_Escape: return Keyboard::Keycode::Escape;
case XK_F1: return Keyboard::Keycode::F1;
case XK_F2: return Keyboard::Keycode::F2;
case XK_F3: return Keyboard::Keycode::F3;
case XK_F4: return Keyboard::Keycode::F4;
case XK_F5: return Keyboard::Keycode::F5;
case XK_F6: return Keyboard::Keycode::F6;
case XK_F7: return Keyboard::Keycode::F7;
case XK_F8: return Keyboard::Keycode::F8;
case XK_F9: return Keyboard::Keycode::F9;
case XK_F10: return Keyboard::Keycode::F10;
case XK_F11: return Keyboard::Keycode::F11;
case XK_F12: return Keyboard::Keycode::F12;
case XK_Print: return Keyboard::Keycode::PrintScreen;
//Keyboard::Keycode::SysRq
case XK_Scroll_Lock: return Keyboard::Keycode::ScrollLock;
case XK_Pause: return Keyboard::Keycode::Pause;
//Keyboard::Keycode::Break
case XK_Insert: return Keyboard::Keycode::Insert;
case XK_Delete: return Keyboard::Keycode::Delete;
case XK_Home: return Keyboard::Keycode::Home;
case XK_End: return Keyboard::Keycode::End;
case XK_Prior: return Keyboard::Keycode::PageUp;
case XK_Next: return Keyboard::Keycode::PageDown;
case XK_Up: return Keyboard::Keycode::Up;
case XK_Down: return Keyboard::Keycode::Down;
case XK_Left: return Keyboard::Keycode::Left;
case XK_Right: return Keyboard::Keycode::Right;
case XK_grave: return Keyboard::Keycode::Grave;
case XK_1: return Keyboard::Keycode::Number1;
case XK_2: return Keyboard::Keycode::Number2;
case XK_3: return Keyboard::Keycode::Number3;
case XK_4: return Keyboard::Keycode::Number4;
case XK_5: return Keyboard::Keycode::Number5;
case XK_6: return Keyboard::Keycode::Number6;
case XK_7: return Keyboard::Keycode::Number7;
case XK_8: return Keyboard::Keycode::Number8;
case XK_9: return Keyboard::Keycode::Number9;
case XK_0: return Keyboard::Keycode::Number0;
case XK_minus: return Keyboard::Keycode::Minus;
case XK_equal: return Keyboard::Keycode::Equal;
case XK_BackSpace: return Keyboard::Keycode::Backspace;
case XK_asciitilde: return Keyboard::Keycode::Tilde;
case XK_exclam: return Keyboard::Keycode::Exclamation;
case XK_at: return Keyboard::Keycode::At;
case XK_numbersign: return Keyboard::Keycode::Pound;
case XK_dollar: return Keyboard::Keycode::Dollar;
case XK_percent: return Keyboard::Keycode::Percent;
case XK_asciicircum: return Keyboard::Keycode::Power;
case XK_ampersand: return Keyboard::Keycode::Ampersand;
case XK_asterisk: return Keyboard::Keycode::Asterisk;
case XK_parenleft: return Keyboard::Keycode::ParenthesisLeft;
case XK_parenright: return Keyboard::Keycode::ParenthesisRight;
case XK_underscore: return Keyboard::Keycode::Underscore;
case XK_plus: return Keyboard::Keycode::Plus;
case XK_bracketleft: return Keyboard::Keycode::BracketLeft;
case XK_bracketright: return Keyboard::Keycode::BracketRight;
case XK_backslash: return Keyboard::Keycode::Backslash;
case XK_semicolon: return Keyboard::Keycode::Semicolon;
case XK_apostrophe: return Keyboard::Keycode::Apostrophe;
case XK_comma: return Keyboard::Keycode::Comma;
case XK_period: return Keyboard::Keycode::Period;
case XK_slash: return Keyboard::Keycode::Slash;
case XK_braceleft: return Keyboard::Keycode::BraceLeft;
case XK_braceright: return Keyboard::Keycode::BraceRight;
case XK_bar: return Keyboard::Keycode::Pipe;
case XK_colon: return Keyboard::Keycode::Colon;
case XK_quotedbl: return Keyboard::Keycode::Quote;
case XK_less: return Keyboard::Keycode::CaretLeft;
case XK_greater: return Keyboard::Keycode::CaretRight;
case XK_question: return Keyboard::Keycode::Question;
case XK_Tab: return Keyboard::Keycode::Tab;
case XK_Caps_Lock: return Keyboard::Keycode::CapsLock;
case XK_Return: return Keyboard::Keycode::Return;
case XK_Shift_L: return Keyboard::Keycode::ShiftLeft;
case XK_Shift_R: return Keyboard::Keycode::ShiftRight;
case XK_Control_L: return Keyboard::Keycode::ControlLeft;
case XK_Control_R: return Keyboard::Keycode::ControlRight;
case XK_Super_L: return Keyboard::Keycode::SuperLeft;
case XK_Super_R: return Keyboard::Keycode::SuperRight;
case XK_Alt_L: return Keyboard::Keycode::AltLeft;
case XK_Alt_R: return Keyboard::Keycode::AltRight;
case XK_space: return Keyboard::Keycode::Space;
case XK_Menu: return Keyboard::Keycode::Menu;
case XK_A: return Keyboard::Keycode::A;
case XK_B: return Keyboard::Keycode::B;
case XK_C: return Keyboard::Keycode::C;
case XK_D: return Keyboard::Keycode::D;
case XK_E: return Keyboard::Keycode::E;
case XK_F: return Keyboard::Keycode::F;
case XK_G: return Keyboard::Keycode::G;
case XK_H: return Keyboard::Keycode::H;
case XK_I: return Keyboard::Keycode::I;
case XK_J: return Keyboard::Keycode::J;
case XK_K: return Keyboard::Keycode::K;
case XK_L: return Keyboard::Keycode::L;
case XK_M: return Keyboard::Keycode::M;
case XK_N: return Keyboard::Keycode::N;
case XK_O: return Keyboard::Keycode::O;
case XK_P: return Keyboard::Keycode::P;
case XK_Q: return Keyboard::Keycode::Q;
case XK_R: return Keyboard::Keycode::R;
case XK_S: return Keyboard::Keycode::S;
case XK_T: return Keyboard::Keycode::T;
case XK_U: return Keyboard::Keycode::U;
case XK_V: return Keyboard::Keycode::V;
case XK_W: return Keyboard::Keycode::W;
case XK_X: return Keyboard::Keycode::X;
case XK_Y: return Keyboard::Keycode::Y;
case XK_Z: return Keyboard::Keycode::Z;
case XK_a: return Keyboard::Keycode::a;
case XK_b: return Keyboard::Keycode::b;
case XK_c: return Keyboard::Keycode::c;
case XK_d: return Keyboard::Keycode::d;
case XK_e: return Keyboard::Keycode::e;
case XK_f: return Keyboard::Keycode::f;
case XK_g: return Keyboard::Keycode::g;
case XK_h: return Keyboard::Keycode::h;
case XK_i: return Keyboard::Keycode::i;
case XK_j: return Keyboard::Keycode::j;
case XK_k: return Keyboard::Keycode::k;
case XK_l: return Keyboard::Keycode::l;
case XK_m: return Keyboard::Keycode::m;
case XK_n: return Keyboard::Keycode::n;
case XK_o: return Keyboard::Keycode::o;
case XK_p: return Keyboard::Keycode::p;
case XK_q: return Keyboard::Keycode::q;
case XK_r: return Keyboard::Keycode::r;
case XK_s: return Keyboard::Keycode::s;
case XK_t: return Keyboard::Keycode::t;
case XK_u: return Keyboard::Keycode::u;
case XK_v: return Keyboard::Keycode::v;
case XK_w: return Keyboard::Keycode::w;
case XK_x: return Keyboard::Keycode::x;
case XK_y: return Keyboard::Keycode::y;
case XK_z: return Keyboard::Keycode::z;
case XK_Num_Lock: return Keyboard::Keycode::NumLock;
case XK_KP_Divide: return Keyboard::Keycode::Divide;
case XK_KP_Multiply: return Keyboard::Keycode::Multiply;
case XK_KP_Subtract: return Keyboard::Keycode::Subtract;
case XK_KP_Add: return Keyboard::Keycode::Add;
case XK_KP_Enter: return Keyboard::Keycode::Enter;
case XK_KP_Decimal: return Keyboard::Keycode::Point;
case XK_KP_1: return Keyboard::Keycode::Keypad1;
case XK_KP_2: return Keyboard::Keycode::Keypad2;
case XK_KP_3: return Keyboard::Keycode::Keypad3;
case XK_KP_4: return Keyboard::Keycode::Keypad4;
case XK_KP_5: return Keyboard::Keycode::Keypad5;
case XK_KP_6: return Keyboard::Keycode::Keypad6;
case XK_KP_7: return Keyboard::Keycode::Keypad7;
case XK_KP_8: return Keyboard::Keycode::Keypad8;
case XK_KP_9: return Keyboard::Keycode::Keypad9;
case XK_KP_0: return Keyboard::Keycode::Keypad0;
case XK_KP_Home: return Keyboard::Keycode::KeypadHome;
case XK_KP_End: return Keyboard::Keycode::KeypadEnd;
case XK_KP_Page_Up: return Keyboard::Keycode::KeypadPageUp;
case XK_KP_Page_Down: return Keyboard::Keycode::KeypadPageDown;
case XK_KP_Up: return Keyboard::Keycode::KeypadUp;
case XK_KP_Down: return Keyboard::Keycode::KeypadDown;
case XK_KP_Left: return Keyboard::Keycode::KeypadLeft;
case XK_KP_Right: return Keyboard::Keycode::KeypadRight;
case XK_KP_Begin: return Keyboard::Keycode::KeypadCenter;
case XK_KP_Insert: return Keyboard::Keycode::KeypadInsert;
case XK_KP_Delete: return Keyboard::Keycode::KeypadDelete;
}
return Keyboard::Keycode::None;
}
*/
}