GBAWidget.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. // Copyright 2021 Dolphin Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #pragma once
  4. #include <memory>
  5. #include <optional>
  6. #include <span>
  7. #include <string>
  8. #include <string_view>
  9. #include <vector>
  10. #include <QImage>
  11. #include <QPoint>
  12. #include <QWidget>
  13. #include "Common/CommonTypes.h"
  14. #include "Core/HW/GBACore.h"
  15. class QCloseEvent;
  16. class QContextMenuEvent;
  17. class QDragEnterEvent;
  18. class QDropEvent;
  19. class QMouseEvent;
  20. class QPaintEvent;
  21. namespace NetPlay
  22. {
  23. struct PadDetails;
  24. } // namespace NetPlay
  25. class GBAWidget : public QWidget
  26. {
  27. Q_OBJECT
  28. public:
  29. explicit GBAWidget(std::weak_ptr<HW::GBA::Core> core, const HW::GBA::CoreInfo& info,
  30. const std::optional<NetPlay::PadDetails>& netplay_pad);
  31. ~GBAWidget() override;
  32. void GameChanged(const HW::GBA::CoreInfo& info);
  33. void SetVideoBuffer(std::span<const u32> video_buffer);
  34. void SetVolume(int volume);
  35. void VolumeDown();
  36. void VolumeUp();
  37. bool IsMuted();
  38. void ToggleMute();
  39. void ToggleDisconnect();
  40. void LoadROM();
  41. void UnloadROM();
  42. void PromptForEReaderCards();
  43. void ResetCore();
  44. void DoState(bool export_state);
  45. void ImportExportSave(bool export_save);
  46. void Resize(int scale);
  47. bool IsBorderless() const;
  48. void SetBorderless(bool enable);
  49. bool IsAlwaysOnTop() const;
  50. void SetAlwaysOnTop(bool enable);
  51. private:
  52. void UpdateTitle();
  53. void UpdateVolume();
  54. static Qt::WindowFlags LoadWindowFlags(int device_number);
  55. void LoadSettings();
  56. void SaveSettings();
  57. bool CanControlCore();
  58. bool CanResetCore();
  59. void closeEvent(QCloseEvent* event) override;
  60. void contextMenuEvent(QContextMenuEvent* event) override;
  61. void mouseDoubleClickEvent(QMouseEvent* event) override;
  62. void mousePressEvent(QMouseEvent* event) override;
  63. void mouseReleaseEvent(QMouseEvent* event) override;
  64. void mouseMoveEvent(QMouseEvent* event) override;
  65. void paintEvent(QPaintEvent* event) override;
  66. void dragEnterEvent(QDragEnterEvent* event) override;
  67. void dropEvent(QDropEvent* event) override;
  68. std::weak_ptr<HW::GBA::Core> m_core;
  69. HW::GBA::CoreInfo m_core_info;
  70. QImage m_last_frame;
  71. QImage m_previous_frame;
  72. int m_local_pad;
  73. bool m_is_local_pad;
  74. std::string m_netplayer_name;
  75. int m_volume;
  76. bool m_muted;
  77. bool m_force_disconnect;
  78. bool m_moving;
  79. QPoint m_move_pos;
  80. bool m_interframe_blending;
  81. };
  82. class GBAWidgetController : public QObject
  83. {
  84. Q_OBJECT
  85. public:
  86. explicit GBAWidgetController() = default;
  87. ~GBAWidgetController() override;
  88. void Create(std::weak_ptr<HW::GBA::Core> core, const HW::GBA::CoreInfo& info);
  89. void GameChanged(const HW::GBA::CoreInfo& info);
  90. void FrameEnded(std::span<const u32> video_buffer);
  91. private:
  92. GBAWidget* m_widget{};
  93. };