bsnes/hiro/qt/utility.cpp

238 lines
9.6 KiB
C++
Raw Normal View History

namespace phoenix {
static QIcon CreateIcon(const nall::image& image, bool scale = false) {
Update to v094r09 release. byuu says: This will easily be the biggest diff in the history of higan. And not in a good way. * target-higan and target-loki have been blown away completely * nall and ruby massively updated * phoenix replaced with hiro (pretty near a total rewrite) * target-higan restarted using hiro (just a window for now) * all emulation cores updated to compile again * installation changed to not require root privileges (installs locally) For the foreseeable future (maybe even permanently?), the new higan UI will only build under Linux/BSD with GTK+ 2.20+. Probably the most likely route for Windows/OS X will be to try and figure out how to build hiro/GTK on those platforms, as awful as that would be. The other alternative would be to produce new UIs for those platforms ... which would actually be a good opportunity to make something much more user friendly. Being that I just started on this a few hours ago, that means that for at least a few weeks, don't expect to be able to actually play any games. Right now, you can pretty much just compile the binary and that's it. It's quite possible that some nall changes didn't produce compilation errors, but will produce runtime errors. So until the UI can actually load games, we won't know if anything is broken. But we should mostly be okay. It was mostly just trim<1> -> trim changes, moving to Hash::SHA256 (much cleaner), and patching some reckless memory copy functions enough to compile. Progress isn't going to be like it was before: I'm now dividing my time much thinner between studying and other hobbies. My aim this time is not to produce a binary for everyone to play games on. Rather, it's to keep the emulator alive. I want to be able to apply critical patches again. And I would also like the base of the emulator to live on, for use in other emulator frontends that utilize higan.
2015-02-26 10:10:46 +00:00
if(image.empty()) return QIcon();
nall::image qtBuffer = image;
qtBuffer.transform(0, 32, 255u << 24, 255u << 16, 255u << 8, 255u << 0);
if(scale) qtBuffer.scale(16, 16, Interpolation::Linear);
QImage qtImage(qtBuffer.data, qtBuffer.width, qtBuffer.height, QImage::Format_ARGB32);
return QIcon(QPixmap::fromImage(qtImage));
}
static lstring DropPaths(QDropEvent* event) {
QList<QUrl> urls = event->mimeData()->urls();
if(urls.size() == 0) return {};
lstring paths;
for(unsigned n = 0; n < urls.size(); n++) {
string path = urls[n].path().toUtf8().constData();
if(path.empty()) continue;
if(directory::exists(path) && !path.endsWith("/")) path.append("/");
paths.append(path);
}
return paths;
}
static Position GetDisplacement(Sizable* sizable) {
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 Layout* GetParentWidgetLayout(Sizable* sizable) {
while(sizable) {
if(sizable->state.parent && dynamic_cast<TabFrame*>(sizable->state.parent)) return (Layout*)sizable;
sizable = sizable->state.parent;
}
return nullptr;
}
static Widget* GetParentWidget(Sizable* sizable) {
while(sizable) {
if(sizable->state.parent && dynamic_cast<TabFrame*>(sizable->state.parent)) return (Widget*)sizable->state.parent;
sizable = sizable->state.parent;
}
return nullptr;
}
static Keyboard::Keycode Keysym(int keysym) {
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;
}
}