utility.cpp 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. namespace hiro {
  2. static auto CalculateAlignment(Alignment alignment) -> signed {
  3. signed result = 0;
  4. if(alignment.horizontal() < 0.333) result |= Qt::AlignLeft;
  5. else if(alignment.horizontal() > 0.666) result |= Qt::AlignRight;
  6. else result |= Qt::AlignCenter;
  7. if(alignment.vertical() < 0.333) result |= Qt::AlignTop;
  8. else if(alignment.vertical() > 0.666) result |= Qt::AlignBottom;
  9. else result |= Qt::AlignVCenter;
  10. return result;
  11. }
  12. static auto CreateBrush(Color color) -> QBrush {
  13. return color ? QColor(color.red(), color.green(), color.blue()) : QBrush();
  14. }
  15. static auto CreateColor(Color color, QColor fallback = {}) -> QColor {
  16. return color ? QColor(color.red(), color.green(), color.blue()) : fallback;
  17. }
  18. static auto CreateIcon(const image& icon, bool scale = false) -> QIcon {
  19. if(!icon) return QIcon();
  20. auto qtBuffer = icon;
  21. qtBuffer.transform();
  22. if(scale) qtBuffer.scale(16, 16, Interpolation::Linear);
  23. QImage qtImage(qtBuffer.data(), qtBuffer.width(), qtBuffer.height(), QImage::Format_ARGB32);
  24. return QIcon(QPixmap::fromImage(qtImage));
  25. }
  26. static auto DropPaths(QDropEvent* event) -> vector<string> {
  27. QList<QUrl> urls = event->mimeData()->urls();
  28. if(urls.size() == 0) return {};
  29. vector<string> paths;
  30. for(auto n : range(urls.size())) {
  31. string path{urls[n].path().toUtf8().constData()};
  32. if(!path) continue;
  33. if(directory::exists(path) && !path.endsWith("/")) path.append("/");
  34. paths.append(path);
  35. }
  36. return paths;
  37. }
  38. /*
  39. static auto GetDisplacement(Sizable* sizable) -> Position {
  40. Position position;
  41. while(sizable->state.parent) {
  42. Position displacement = sizable->state.parent->p.displacement();
  43. position.x += displacement.x;
  44. position.y += displacement.y;
  45. sizable = sizable->state.parent;
  46. }
  47. return position;
  48. }
  49. */
  50. /*
  51. static auto GetParentWidgetLayout(Sizable* sizable) -> Layout* {
  52. while(sizable) {
  53. if(sizable->state.parent && dynamic_cast<TabFrame*>(sizable->state.parent)) return (Layout*)sizable;
  54. sizable = sizable->state.parent;
  55. }
  56. return nullptr;
  57. }
  58. */
  59. /*
  60. static auto GetParentWidget(Sizable* sizable) -> Widget* {
  61. while(sizable) {
  62. if(sizable->state.parent && dynamic_cast<TabFrame*>(sizable->state.parent)) return (Widget*)sizable->state.parent;
  63. sizable = sizable->state.parent;
  64. }
  65. return nullptr;
  66. }
  67. */
  68. /*
  69. static auto Keysym(int keysym) -> Keyboard::Keycode {
  70. switch(keysym) {
  71. case XK_Escape: return Keyboard::Keycode::Escape;
  72. case XK_F1: return Keyboard::Keycode::F1;
  73. case XK_F2: return Keyboard::Keycode::F2;
  74. case XK_F3: return Keyboard::Keycode::F3;
  75. case XK_F4: return Keyboard::Keycode::F4;
  76. case XK_F5: return Keyboard::Keycode::F5;
  77. case XK_F6: return Keyboard::Keycode::F6;
  78. case XK_F7: return Keyboard::Keycode::F7;
  79. case XK_F8: return Keyboard::Keycode::F8;
  80. case XK_F9: return Keyboard::Keycode::F9;
  81. case XK_F10: return Keyboard::Keycode::F10;
  82. case XK_F11: return Keyboard::Keycode::F11;
  83. case XK_F12: return Keyboard::Keycode::F12;
  84. case XK_Print: return Keyboard::Keycode::PrintScreen;
  85. //Keyboard::Keycode::SysRq
  86. case XK_Scroll_Lock: return Keyboard::Keycode::ScrollLock;
  87. case XK_Pause: return Keyboard::Keycode::Pause;
  88. //Keyboard::Keycode::Break
  89. case XK_Insert: return Keyboard::Keycode::Insert;
  90. case XK_Delete: return Keyboard::Keycode::Delete;
  91. case XK_Home: return Keyboard::Keycode::Home;
  92. case XK_End: return Keyboard::Keycode::End;
  93. case XK_Prior: return Keyboard::Keycode::PageUp;
  94. case XK_Next: return Keyboard::Keycode::PageDown;
  95. case XK_Up: return Keyboard::Keycode::Up;
  96. case XK_Down: return Keyboard::Keycode::Down;
  97. case XK_Left: return Keyboard::Keycode::Left;
  98. case XK_Right: return Keyboard::Keycode::Right;
  99. case XK_grave: return Keyboard::Keycode::Grave;
  100. case XK_1: return Keyboard::Keycode::Number1;
  101. case XK_2: return Keyboard::Keycode::Number2;
  102. case XK_3: return Keyboard::Keycode::Number3;
  103. case XK_4: return Keyboard::Keycode::Number4;
  104. case XK_5: return Keyboard::Keycode::Number5;
  105. case XK_6: return Keyboard::Keycode::Number6;
  106. case XK_7: return Keyboard::Keycode::Number7;
  107. case XK_8: return Keyboard::Keycode::Number8;
  108. case XK_9: return Keyboard::Keycode::Number9;
  109. case XK_0: return Keyboard::Keycode::Number0;
  110. case XK_minus: return Keyboard::Keycode::Minus;
  111. case XK_equal: return Keyboard::Keycode::Equal;
  112. case XK_BackSpace: return Keyboard::Keycode::Backspace;
  113. case XK_asciitilde: return Keyboard::Keycode::Tilde;
  114. case XK_exclam: return Keyboard::Keycode::Exclamation;
  115. case XK_at: return Keyboard::Keycode::At;
  116. case XK_numbersign: return Keyboard::Keycode::Pound;
  117. case XK_dollar: return Keyboard::Keycode::Dollar;
  118. case XK_percent: return Keyboard::Keycode::Percent;
  119. case XK_asciicircum: return Keyboard::Keycode::Power;
  120. case XK_ampersand: return Keyboard::Keycode::Ampersand;
  121. case XK_asterisk: return Keyboard::Keycode::Asterisk;
  122. case XK_parenleft: return Keyboard::Keycode::ParenthesisLeft;
  123. case XK_parenright: return Keyboard::Keycode::ParenthesisRight;
  124. case XK_underscore: return Keyboard::Keycode::Underscore;
  125. case XK_plus: return Keyboard::Keycode::Plus;
  126. case XK_bracketleft: return Keyboard::Keycode::BracketLeft;
  127. case XK_bracketright: return Keyboard::Keycode::BracketRight;
  128. case XK_backslash: return Keyboard::Keycode::Backslash;
  129. case XK_semicolon: return Keyboard::Keycode::Semicolon;
  130. case XK_apostrophe: return Keyboard::Keycode::Apostrophe;
  131. case XK_comma: return Keyboard::Keycode::Comma;
  132. case XK_period: return Keyboard::Keycode::Period;
  133. case XK_slash: return Keyboard::Keycode::Slash;
  134. case XK_braceleft: return Keyboard::Keycode::BraceLeft;
  135. case XK_braceright: return Keyboard::Keycode::BraceRight;
  136. case XK_bar: return Keyboard::Keycode::Pipe;
  137. case XK_colon: return Keyboard::Keycode::Colon;
  138. case XK_quotedbl: return Keyboard::Keycode::Quote;
  139. case XK_less: return Keyboard::Keycode::CaretLeft;
  140. case XK_greater: return Keyboard::Keycode::CaretRight;
  141. case XK_question: return Keyboard::Keycode::Question;
  142. case XK_Tab: return Keyboard::Keycode::Tab;
  143. case XK_Caps_Lock: return Keyboard::Keycode::CapsLock;
  144. case XK_Return: return Keyboard::Keycode::Return;
  145. case XK_Shift_L: return Keyboard::Keycode::ShiftLeft;
  146. case XK_Shift_R: return Keyboard::Keycode::ShiftRight;
  147. case XK_Control_L: return Keyboard::Keycode::ControlLeft;
  148. case XK_Control_R: return Keyboard::Keycode::ControlRight;
  149. case XK_Super_L: return Keyboard::Keycode::SuperLeft;
  150. case XK_Super_R: return Keyboard::Keycode::SuperRight;
  151. case XK_Alt_L: return Keyboard::Keycode::AltLeft;
  152. case XK_Alt_R: return Keyboard::Keycode::AltRight;
  153. case XK_space: return Keyboard::Keycode::Space;
  154. case XK_Menu: return Keyboard::Keycode::Menu;
  155. case XK_A: return Keyboard::Keycode::A;
  156. case XK_B: return Keyboard::Keycode::B;
  157. case XK_C: return Keyboard::Keycode::C;
  158. case XK_D: return Keyboard::Keycode::D;
  159. case XK_E: return Keyboard::Keycode::E;
  160. case XK_F: return Keyboard::Keycode::F;
  161. case XK_G: return Keyboard::Keycode::G;
  162. case XK_H: return Keyboard::Keycode::H;
  163. case XK_I: return Keyboard::Keycode::I;
  164. case XK_J: return Keyboard::Keycode::J;
  165. case XK_K: return Keyboard::Keycode::K;
  166. case XK_L: return Keyboard::Keycode::L;
  167. case XK_M: return Keyboard::Keycode::M;
  168. case XK_N: return Keyboard::Keycode::N;
  169. case XK_O: return Keyboard::Keycode::O;
  170. case XK_P: return Keyboard::Keycode::P;
  171. case XK_Q: return Keyboard::Keycode::Q;
  172. case XK_R: return Keyboard::Keycode::R;
  173. case XK_S: return Keyboard::Keycode::S;
  174. case XK_T: return Keyboard::Keycode::T;
  175. case XK_U: return Keyboard::Keycode::U;
  176. case XK_V: return Keyboard::Keycode::V;
  177. case XK_W: return Keyboard::Keycode::W;
  178. case XK_X: return Keyboard::Keycode::X;
  179. case XK_Y: return Keyboard::Keycode::Y;
  180. case XK_Z: return Keyboard::Keycode::Z;
  181. case XK_a: return Keyboard::Keycode::a;
  182. case XK_b: return Keyboard::Keycode::b;
  183. case XK_c: return Keyboard::Keycode::c;
  184. case XK_d: return Keyboard::Keycode::d;
  185. case XK_e: return Keyboard::Keycode::e;
  186. case XK_f: return Keyboard::Keycode::f;
  187. case XK_g: return Keyboard::Keycode::g;
  188. case XK_h: return Keyboard::Keycode::h;
  189. case XK_i: return Keyboard::Keycode::i;
  190. case XK_j: return Keyboard::Keycode::j;
  191. case XK_k: return Keyboard::Keycode::k;
  192. case XK_l: return Keyboard::Keycode::l;
  193. case XK_m: return Keyboard::Keycode::m;
  194. case XK_n: return Keyboard::Keycode::n;
  195. case XK_o: return Keyboard::Keycode::o;
  196. case XK_p: return Keyboard::Keycode::p;
  197. case XK_q: return Keyboard::Keycode::q;
  198. case XK_r: return Keyboard::Keycode::r;
  199. case XK_s: return Keyboard::Keycode::s;
  200. case XK_t: return Keyboard::Keycode::t;
  201. case XK_u: return Keyboard::Keycode::u;
  202. case XK_v: return Keyboard::Keycode::v;
  203. case XK_w: return Keyboard::Keycode::w;
  204. case XK_x: return Keyboard::Keycode::x;
  205. case XK_y: return Keyboard::Keycode::y;
  206. case XK_z: return Keyboard::Keycode::z;
  207. case XK_Num_Lock: return Keyboard::Keycode::NumLock;
  208. case XK_KP_Divide: return Keyboard::Keycode::Divide;
  209. case XK_KP_Multiply: return Keyboard::Keycode::Multiply;
  210. case XK_KP_Subtract: return Keyboard::Keycode::Subtract;
  211. case XK_KP_Add: return Keyboard::Keycode::Add;
  212. case XK_KP_Enter: return Keyboard::Keycode::Enter;
  213. case XK_KP_Decimal: return Keyboard::Keycode::Point;
  214. case XK_KP_1: return Keyboard::Keycode::Keypad1;
  215. case XK_KP_2: return Keyboard::Keycode::Keypad2;
  216. case XK_KP_3: return Keyboard::Keycode::Keypad3;
  217. case XK_KP_4: return Keyboard::Keycode::Keypad4;
  218. case XK_KP_5: return Keyboard::Keycode::Keypad5;
  219. case XK_KP_6: return Keyboard::Keycode::Keypad6;
  220. case XK_KP_7: return Keyboard::Keycode::Keypad7;
  221. case XK_KP_8: return Keyboard::Keycode::Keypad8;
  222. case XK_KP_9: return Keyboard::Keycode::Keypad9;
  223. case XK_KP_0: return Keyboard::Keycode::Keypad0;
  224. case XK_KP_Home: return Keyboard::Keycode::KeypadHome;
  225. case XK_KP_End: return Keyboard::Keycode::KeypadEnd;
  226. case XK_KP_Page_Up: return Keyboard::Keycode::KeypadPageUp;
  227. case XK_KP_Page_Down: return Keyboard::Keycode::KeypadPageDown;
  228. case XK_KP_Up: return Keyboard::Keycode::KeypadUp;
  229. case XK_KP_Down: return Keyboard::Keycode::KeypadDown;
  230. case XK_KP_Left: return Keyboard::Keycode::KeypadLeft;
  231. case XK_KP_Right: return Keyboard::Keycode::KeypadRight;
  232. case XK_KP_Begin: return Keyboard::Keycode::KeypadCenter;
  233. case XK_KP_Insert: return Keyboard::Keycode::KeypadInsert;
  234. case XK_KP_Delete: return Keyboard::Keycode::KeypadDelete;
  235. }
  236. return Keyboard::Keycode::None;
  237. }
  238. */
  239. }