├── .gitignore ├── .gitmodules ├── CMakeLists.txt ├── CMakeSettings.json ├── Readme.md ├── certificate.csr ├── certificate.pem ├── deps ├── CMakeLists.txt └── tc_signaling_sdk │ ├── CMakeLists.txt │ ├── sig_sdk_abs_router.h │ ├── sig_sdk_apis.h │ ├── sig_sdk_base_processor.cc │ ├── sig_sdk_base_processor.h │ ├── sig_sdk_context.cpp │ ├── sig_sdk_context.h │ ├── sig_sdk_events.h │ ├── sig_sdk_maker.cpp │ ├── sig_sdk_maker.h │ ├── sig_sdk_message.h │ ├── sig_sdk_params.h │ ├── sig_sdk_ws_processor.cpp │ ├── sig_sdk_ws_processor.h │ ├── sig_sdk_ws_router.cpp │ └── sig_sdk_ws_router.h ├── docs ├── Readme_CN.md └── images │ ├── GammaRay.png │ ├── android_1.png │ ├── android_2.png │ ├── android_3.png │ ├── android_4.png │ ├── android_5.jpg │ ├── android_7.jpg │ ├── android_8.jpg │ ├── android_9.jpg │ ├── android_prepare_1.jpg │ ├── android_prepare_2.jpg │ ├── client_add_remote.png │ ├── client_file_transfer.png │ ├── client_main.png │ ├── srv_add_game.png │ ├── srv_main.png │ ├── srv_settings.png │ ├── srv_steam.png │ ├── test1.gif │ ├── test2.gif │ └── test3.gif ├── env_settings.cmake ├── icon.ico ├── icon.rc ├── install.py ├── main.cpp ├── package ├── config │ └── config.xml ├── package_rel_debug.bat ├── package_release.bat ├── packages │ └── com.rgaa.gammaray │ │ ├── data │ │ └── README.txt │ │ └── meta │ │ ├── installscript.qs │ │ └── package.xml └── readme.md ├── private.key ├── pub_rel-debug.bat ├── pub_release.bat ├── res.qrc ├── resources ├── font.qrc ├── font │ ├── Font Awesome Cheatsheet.png │ ├── LOVE-Queen-2.ttf │ ├── blade.ttf │ ├── fontawesome-webfont.ttf │ └── matrix.ttf ├── icons │ ├── 1.png │ ├── 10.png │ ├── 11.png │ ├── 12.png │ ├── 13.png │ ├── 14.png │ ├── 15.png │ ├── 16.png │ ├── 17.png │ ├── 18.png │ ├── 19.png │ ├── 2.png │ ├── 20.png │ ├── 21.png │ ├── 22.png │ ├── 23.png │ ├── 24.png │ ├── 25.png │ ├── 26.png │ ├── 27.png │ ├── 28.png │ ├── 29.png │ ├── 3.png │ ├── 30.png │ ├── 4.png │ ├── 5.png │ ├── 6.png │ ├── 7.png │ ├── 8.png │ ├── 9.png │ ├── ic_empty.svg │ ├── ic_game_controller.svg │ ├── ic_network.svg │ ├── ic_port.svg │ ├── ic_renderer.svg │ ├── ic_server.svg │ ├── ic_service.svg │ ├── ic_spectrum.svg │ ├── logo_android.png │ └── logo_windows.png ├── image │ ├── bc_icon.png │ ├── bc_icon_raw.png │ ├── btn_close.png │ ├── btn_ok.png │ ├── dota2_cache.jpg │ ├── empty.svg │ ├── ic_agree.svg │ ├── ic_arrow_right_1.svg │ ├── ic_arrow_right_2.svg │ ├── ic_audio_off.svg │ ├── ic_audio_on.svg │ ├── ic_check.svg │ ├── ic_clipboard_off.svg │ ├── ic_clipboard_on.svg │ ├── ic_close.svg │ ├── ic_close_notification.svg │ ├── ic_computer.svg │ ├── ic_control.svg │ ├── ic_debug_off.svg │ ├── ic_debug_on.svg │ ├── ic_decline.svg │ ├── ic_desktop.svg │ ├── ic_expand.svg │ ├── ic_file_transfer.svg │ ├── ic_fullscreen.svg │ ├── ic_fullscreen_exit.svg │ ├── ic_information.svg │ ├── ic_loading_bg.svg │ ├── ic_mail.svg │ ├── ic_minimize.svg │ ├── ic_mode.svg │ ├── ic_open_notification.svg │ ├── ic_settings.svg │ ├── ic_stream.svg │ ├── ic_transfer.png │ ├── ic_transfer.svg │ ├── ic_vert_dots.svg │ ├── ic_vert_dots_hover.svg │ ├── ic_vert_dots_pressed.svg │ ├── ic_volume_off.svg │ ├── ic_volume_on.svg │ ├── logo_server.png │ ├── logo_text.png │ ├── msg_error.png │ ├── msg_info.png │ ├── msg_question.png │ ├── tc_icon.png │ ├── tc_icon_raw.png │ ├── test_cover.jpg │ └── windows.svg ├── main.qrc ├── qss.qrc ├── qss │ ├── lightblue.css │ └── lightblue │ │ ├── add_bottom.png │ │ ├── add_left.png │ │ ├── add_right.png │ │ ├── add_top.png │ │ ├── arrow_bottom.png │ │ ├── arrow_left.png │ │ ├── arrow_right.png │ │ ├── arrow_top.png │ │ ├── branch_close.png │ │ ├── branch_open.png │ │ ├── calendar_nextmonth.png │ │ ├── calendar_prevmonth.png │ │ ├── checkbox_checked.png │ │ ├── checkbox_checked_disable.png │ │ ├── checkbox_parcial.png │ │ ├── checkbox_parcial_disable.png │ │ ├── checkbox_unchecked.png │ │ ├── checkbox_unchecked_disable.png │ │ ├── menu_checked.png │ │ ├── radiobutton_checked.png │ │ ├── radiobutton_checked_disable.png │ │ ├── radiobutton_unchecked.png │ │ └── radiobutton_unchecked_disable.png ├── qt_material │ ├── LICENSE │ ├── README.md │ ├── fonts │ │ └── roboto │ │ │ ├── LICENSE │ │ │ ├── Roboto-Black.ttf │ │ │ ├── Roboto-BlackItalic.ttf │ │ │ ├── Roboto-Bold.ttf │ │ │ ├── Roboto-BoldItalic.ttf │ │ │ ├── Roboto-Italic.ttf │ │ │ ├── Roboto-Light.ttf │ │ │ ├── Roboto-LightItalic.ttf │ │ │ ├── Roboto-Medium.ttf │ │ │ ├── Roboto-MediumItalic.ttf │ │ │ ├── Roboto-Regular.ttf │ │ │ ├── Roboto-Thin.ttf │ │ │ ├── Roboto-ThinItalic.ttf │ │ │ ├── RobotoCondensed-Bold.ttf │ │ │ ├── RobotoCondensed-BoldItalic.ttf │ │ │ ├── RobotoCondensed-Italic.ttf │ │ │ ├── RobotoCondensed-Light.ttf │ │ │ ├── RobotoCondensed-LightItalic.ttf │ │ │ └── RobotoCondensed-Regular.ttf │ ├── logo │ │ ├── logo.svg │ │ └── logo_frame.svg │ ├── material.css.template │ ├── material.json │ ├── material_icon.svg │ ├── resources │ │ ├── base.svg │ │ ├── branch-closed.svg │ │ ├── branch-end.svg │ │ ├── branch-more.svg │ │ ├── branch-open.svg │ │ ├── checkbox_checked.svg │ │ ├── checkbox_checked_invert.svg │ │ ├── checkbox_indeterminate.svg │ │ ├── checkbox_indeterminate_invert.svg │ │ ├── checkbox_unchecked.svg │ │ ├── checkbox_unchecked_invert.svg │ │ ├── checklist.svg │ │ ├── checklist_indeterminate.svg │ │ ├── checklist_indeterminate_invert.svg │ │ ├── checklist_invert.svg │ │ ├── close.svg │ │ ├── downarrow.svg │ │ ├── downarrow2.svg │ │ ├── float.svg │ │ ├── leftarrow.svg │ │ ├── leftarrow2.svg │ │ ├── radiobutton_checked.svg │ │ ├── radiobutton_checked_invert.svg │ │ ├── radiobutton_unchecked.svg │ │ ├── radiobutton_unchecked_invert.svg │ │ ├── rightarrow.svg │ │ ├── rightarrow2.svg │ │ ├── sizegrip.svg │ │ ├── slider.svg │ │ ├── splitter-horizontal.svg │ │ ├── splitter-vertical.svg │ │ ├── tab_close.svg │ │ ├── toolbar-handle-horizontal.svg │ │ ├── toolbar-handle-vertical.svg │ │ ├── uparrow.svg │ │ ├── uparrow2.svg │ │ └── vline.svg │ └── themes │ │ ├── dark_amber.xml │ │ ├── dark_blue.xml │ │ ├── dark_cyan.xml │ │ ├── dark_lightgreen.xml │ │ ├── dark_pink.xml │ │ ├── dark_purple.xml │ │ ├── dark_red.xml │ │ ├── dark_teal.xml │ │ ├── dark_yellow.xml │ │ ├── light_amber.xml │ │ ├── light_blue.xml │ │ ├── light_cyan.xml │ │ ├── light_cyan_500.xml │ │ ├── light_lightgreen.xml │ │ ├── light_pink.xml │ │ ├── light_purple.xml │ │ ├── light_red.xml │ │ ├── light_teal.xml │ │ └── light_yellow.xml ├── tc_icon.png └── tc_icon_raw.png ├── src ├── CMakeLists.txt ├── app_colors.cpp ├── app_colors.h ├── client │ ├── CMakeLists.txt │ ├── ct_app_message.h │ ├── ct_application.cpp │ ├── ct_application.h │ ├── ct_audio_player.cpp │ ├── ct_audio_player.h │ ├── ct_client_context.cpp │ ├── ct_client_context.h │ ├── ct_clipboard_manager.cpp │ ├── ct_clipboard_manager.h │ ├── ct_director.cpp │ ├── ct_director.h │ ├── ct_main.cpp │ ├── ct_main_progress.cpp │ ├── ct_main_progress.h │ ├── ct_main_ws.cpp │ ├── ct_opengl_api.h │ ├── ct_opengl_image_reader.cpp │ ├── ct_opengl_image_reader.h │ ├── ct_opengl_video_widget.cpp │ ├── ct_opengl_video_widget.h │ ├── ct_qt_key_converter.cpp │ ├── ct_qt_key_converter.h │ ├── ct_renderer.cpp │ ├── ct_renderer.h │ ├── ct_settings.cpp │ ├── ct_settings.h │ ├── ct_shader_program.cpp │ ├── ct_shader_program.h │ ├── ct_sprite.cpp │ ├── ct_sprite.h │ ├── ct_video_widget_event.cpp │ ├── ct_video_widget_event.h │ ├── ct_video_widget_shaders.h │ ├── ct_workspace.cpp │ ├── ct_workspace.h │ ├── db │ │ ├── stream_db_manager.cpp │ │ ├── stream_db_manager.h │ │ ├── stream_item.cpp │ │ └── stream_item.h │ ├── icon.ico │ ├── icon.rc │ ├── resources.qrc │ ├── resources │ │ ├── font.qrc │ │ ├── font │ │ │ ├── Archaic1897-2.ttf │ │ │ ├── Font Awesome Cheatsheet.png │ │ │ ├── blade.ttf │ │ │ ├── fontawesome-webfont.ttf │ │ │ └── quixotic-1.otf │ │ ├── image │ │ │ ├── bc_icon.png │ │ │ ├── bc_icon_raw.png │ │ │ ├── btn_close.png │ │ │ ├── btn_ok.png │ │ │ ├── dota2_cache.jpg │ │ │ ├── empty.svg │ │ │ ├── ic_agree.svg │ │ │ ├── ic_arrow_right_1.svg │ │ │ ├── ic_arrow_right_2.svg │ │ │ ├── ic_audio_off.svg │ │ │ ├── ic_audio_on.svg │ │ │ ├── ic_check.svg │ │ │ ├── ic_clipboard_off.svg │ │ │ ├── ic_clipboard_on.svg │ │ │ ├── ic_close.svg │ │ │ ├── ic_close_notification.svg │ │ │ ├── ic_computer.svg │ │ │ ├── ic_control.svg │ │ │ ├── ic_debug_off.svg │ │ │ ├── ic_debug_on.svg │ │ │ ├── ic_decline.svg │ │ │ ├── ic_desktop.svg │ │ │ ├── ic_expand.svg │ │ │ ├── ic_file_transfer.svg │ │ │ ├── ic_fullscreen.svg │ │ │ ├── ic_fullscreen_exit.svg │ │ │ ├── ic_information.svg │ │ │ ├── ic_loading_bg.svg │ │ │ ├── ic_mail.svg │ │ │ ├── ic_minimize.svg │ │ │ ├── ic_mode.svg │ │ │ ├── ic_open_notification.svg │ │ │ ├── ic_settings.svg │ │ │ ├── ic_stream.svg │ │ │ ├── ic_transfer.png │ │ │ ├── ic_transfer.svg │ │ │ ├── ic_vert_dots.svg │ │ │ ├── ic_vert_dots_hover.svg │ │ │ ├── ic_vert_dots_pressed.svg │ │ │ ├── ic_volume_off.svg │ │ │ ├── ic_volume_on.svg │ │ │ ├── logo_text.png │ │ │ ├── msg_error.png │ │ │ ├── msg_info.png │ │ │ ├── msg_question.png │ │ │ ├── tc_icon.png │ │ │ ├── tc_icon_raw.png │ │ │ ├── test_cover.jpg │ │ │ └── windows.svg │ │ └── main.qrc │ ├── transfer │ │ ├── file_transfer.cpp │ │ ├── file_transfer.h │ │ ├── file_transfer_events.h │ │ ├── file_writer.cpp │ │ ├── file_writer.h │ │ ├── fs_file.cpp │ │ ├── fs_file.h │ │ ├── fs_folder.cpp │ │ ├── fs_folder.h │ │ ├── fs_object.cpp │ │ └── fs_object.h │ └── ui │ │ ├── about_content.cpp │ │ ├── about_content.h │ │ ├── app_color_theme.cpp │ │ ├── app_color_theme.h │ │ ├── app_content.cpp │ │ ├── app_content.h │ │ ├── app_menu.cpp │ │ ├── app_menu.h │ │ ├── app_stream_list.cpp │ │ ├── app_stream_list.h │ │ ├── background_widget.cpp │ │ ├── background_widget.h │ │ ├── base_widget.cpp │ │ ├── base_widget.h │ │ ├── computer_icon.cpp │ │ ├── computer_icon.h │ │ ├── create_stream_dialog.cpp │ │ ├── create_stream_dialog.h │ │ ├── debug_panel.cpp │ │ ├── debug_panel.h │ │ ├── float_3rd_resolution_panel.cpp │ │ ├── float_3rd_resolution_panel.h │ │ ├── float_3rd_scale_panel.cpp │ │ ├── float_3rd_scale_panel.h │ │ ├── float_button.cpp │ │ ├── float_button.h │ │ ├── float_button_state_indicator.cpp │ │ ├── float_button_state_indicator.h │ │ ├── float_controller.cpp │ │ ├── float_controller.h │ │ ├── float_controller_panel.cpp │ │ ├── float_controller_panel.h │ │ ├── float_icon.cpp │ │ ├── float_icon.h │ │ ├── float_notification_handle.cpp │ │ ├── float_notification_handle.h │ │ ├── float_sub_control_panel.cpp │ │ ├── float_sub_control_panel.h │ │ ├── float_sub_display_panel.cpp │ │ ├── float_sub_display_panel.h │ │ ├── float_sub_mode_panel.cpp │ │ ├── float_sub_mode_panel.h │ │ ├── key_state_panel.cpp │ │ ├── key_state_panel.h │ │ ├── message_dialog.cpp │ │ ├── message_dialog.h │ │ ├── multi_display_mode_widget.cpp │ │ ├── multi_display_mode_widget.h │ │ ├── no_margin_layout.cpp │ │ ├── no_margin_layout.h │ │ ├── notification_item.cpp │ │ ├── notification_item.h │ │ ├── notification_panel.cpp │ │ ├── notification_panel.h │ │ ├── round_rect_widget.cpp │ │ ├── round_rect_widget.h │ │ ├── settings_content.cpp │ │ ├── settings_content.h │ │ ├── stream_content.cpp │ │ ├── stream_content.h │ │ ├── stream_item_widget.cpp │ │ ├── stream_item_widget.h │ │ ├── switch_button.cpp │ │ ├── switch_button.h │ │ └── widget_helper.h ├── render │ ├── CMakeLists.txt │ ├── app.cpp │ ├── app.h │ ├── app │ │ ├── CMakeLists.txt │ │ ├── app_manager.cpp │ │ ├── app_manager.h │ │ ├── app_manager_factory.cpp │ │ ├── app_manager_factory.h │ │ ├── app_manager_linux.cpp │ │ ├── app_manager_linux.h │ │ ├── app_messages.h │ │ ├── app_shared_info.cpp │ │ ├── app_shared_info.h │ │ ├── app_timer.cpp │ │ ├── app_timer.h │ │ ├── clipboard_manager.cpp │ │ ├── clipboard_manager.h │ │ ├── encoder_thread.cpp │ │ ├── encoder_thread.h │ │ ├── monitor_refresher.cpp │ │ ├── monitor_refresher.h │ │ ├── steam_game.cpp │ │ ├── steam_game.h │ │ ├── video_frame_carrier.cpp │ │ ├── video_frame_carrier.h │ │ └── win │ │ │ ├── app_manager_win.cpp │ │ │ ├── app_manager_win.h │ │ │ ├── dx_address_loader.cpp │ │ │ ├── dx_address_loader.h │ │ │ ├── win_event_replayer.cpp │ │ │ └── win_event_replayer.h │ ├── app_global_messages.h │ ├── certificate.pem │ ├── context.cpp │ ├── context.h │ ├── ipc │ │ ├── host_ipc_manager.cpp │ │ └── host_ipc_manager.h │ ├── network │ │ ├── app_server.cpp │ │ ├── app_server.h │ │ ├── connection.cpp │ │ ├── connection.h │ │ ├── http_handler.cpp │ │ ├── http_handler.h │ │ ├── message_processor.cpp │ │ ├── message_processor.h │ │ ├── net_message_maker.cpp │ │ ├── net_message_maker.h │ │ ├── network_factory.h │ │ ├── render_service_client.cpp │ │ ├── render_service_client.h │ │ ├── server_cast.cpp │ │ ├── server_cast.h │ │ ├── ws_ipc_router.cpp │ │ ├── ws_ipc_router.h │ │ ├── ws_media_router.cpp │ │ ├── ws_media_router.h │ │ ├── ws_panel_client.cpp │ │ ├── ws_panel_client.h │ │ └── ws_router.h │ ├── plugin_interface │ │ ├── CMakeLists.txt │ │ ├── gr_audio_encoder_plugin.cpp │ │ ├── gr_audio_encoder_plugin.h │ │ ├── gr_data_consumer_plugin.cpp │ │ ├── gr_data_consumer_plugin.h │ │ ├── gr_data_provider_plugin.cpp │ │ ├── gr_data_provider_plugin.h │ │ ├── gr_frame_processor_plugin.cpp │ │ ├── gr_frame_processor_plugin.h │ │ ├── gr_monitor_capture_plugin.cpp │ │ ├── gr_monitor_capture_plugin.h │ │ ├── gr_net_plugin.cpp │ │ ├── gr_net_plugin.h │ │ ├── gr_plugin_context.cpp │ │ ├── gr_plugin_context.h │ │ ├── gr_plugin_events.h │ │ ├── gr_plugin_interface.cpp │ │ ├── gr_plugin_interface.h │ │ ├── gr_plugin_settings_info.h │ │ ├── gr_stream_plugin.cpp │ │ ├── gr_stream_plugin.h │ │ ├── gr_video_encoder_plugin.cpp │ │ └── gr_video_encoder_plugin.h │ ├── plugins │ │ ├── CMakeLists.txt │ │ ├── ReadMe.md │ │ ├── amf_encoder │ │ │ ├── CMakeLists.txt │ │ │ ├── ReadMe.md │ │ │ ├── amf │ │ │ │ ├── common │ │ │ │ │ ├── AMFFactory.cpp │ │ │ │ │ ├── AMFFactory.h │ │ │ │ │ ├── AMFMath.h │ │ │ │ │ ├── AMFSTL.cpp │ │ │ │ │ ├── AMFSTL.h │ │ │ │ │ ├── ByteArray.h │ │ │ │ │ ├── CurrentTimeImpl.cpp │ │ │ │ │ ├── CurrentTimeImpl.h │ │ │ │ │ ├── DataStream.h │ │ │ │ │ ├── DataStreamFactory.cpp │ │ │ │ │ ├── DataStreamFile.cpp │ │ │ │ │ ├── DataStreamFile.h │ │ │ │ │ ├── DataStreamMemory.cpp │ │ │ │ │ ├── DataStreamMemory.h │ │ │ │ │ ├── IOCapsImpl.cpp │ │ │ │ │ ├── IOCapsImpl.h │ │ │ │ │ ├── InterfaceImpl.h │ │ │ │ │ ├── ObservableImpl.h │ │ │ │ │ ├── PropertyStorageExImpl.cpp │ │ │ │ │ ├── PropertyStorageExImpl.h │ │ │ │ │ ├── PropertyStorageImpl.h │ │ │ │ │ ├── Thread.cpp │ │ │ │ │ ├── Thread.h │ │ │ │ │ ├── TraceAdapter.cpp │ │ │ │ │ ├── TraceAdapter.h │ │ │ │ │ └── Windows │ │ │ │ │ │ └── ThreadWindows.cpp │ │ │ │ └── include │ │ │ │ │ ├── components │ │ │ │ │ ├── Ambisonic2SRenderer.h │ │ │ │ │ ├── AudioCapture.h │ │ │ │ │ ├── Capture.h │ │ │ │ │ ├── ChromaKey.h │ │ │ │ │ ├── ColorSpace.h │ │ │ │ │ ├── Component.h │ │ │ │ │ ├── ComponentCaps.h │ │ │ │ │ ├── CursorCapture.h │ │ │ │ │ ├── DisplayCapture.h │ │ │ │ │ ├── FFMPEGAudioConverter.h │ │ │ │ │ ├── FFMPEGAudioDecoder.h │ │ │ │ │ ├── FFMPEGAudioEncoder.h │ │ │ │ │ ├── FFMPEGComponents.h │ │ │ │ │ ├── FFMPEGFileDemuxer.h │ │ │ │ │ ├── FFMPEGFileMuxer.h │ │ │ │ │ ├── FFMPEGVideoDecoder.h │ │ │ │ │ ├── HQScaler.h │ │ │ │ │ ├── MediaSource.h │ │ │ │ │ ├── PreAnalysis.h │ │ │ │ │ ├── PreProcessing.h │ │ │ │ │ ├── VideoCapture.h │ │ │ │ │ ├── VideoConverter.h │ │ │ │ │ ├── VideoDecoderUVD.h │ │ │ │ │ ├── VideoEncoderHEVC.h │ │ │ │ │ ├── VideoEncoderVCE.h │ │ │ │ │ ├── VideoStitch.h │ │ │ │ │ └── ZCamLiveStream.h │ │ │ │ │ └── core │ │ │ │ │ ├── AudioBuffer.h │ │ │ │ │ ├── Buffer.h │ │ │ │ │ ├── Compute.h │ │ │ │ │ ├── ComputeFactory.h │ │ │ │ │ ├── Context.h │ │ │ │ │ ├── CurrentTime.h │ │ │ │ │ ├── D3D12AMF.h │ │ │ │ │ ├── Data.h │ │ │ │ │ ├── Debug.h │ │ │ │ │ ├── Dump.h │ │ │ │ │ ├── Factory.h │ │ │ │ │ ├── Interface.h │ │ │ │ │ ├── Plane.h │ │ │ │ │ ├── Platform.h │ │ │ │ │ ├── PropertyStorage.h │ │ │ │ │ ├── PropertyStorageEx.h │ │ │ │ │ ├── Result.h │ │ │ │ │ ├── Surface.h │ │ │ │ │ ├── Trace.h │ │ │ │ │ ├── Variant.h │ │ │ │ │ ├── Version.h │ │ │ │ │ └── VulkanAMF.h │ │ │ ├── amf_encoder_defs.h │ │ │ ├── amf_encoder_plugin.cpp │ │ │ ├── amf_encoder_plugin.h │ │ │ ├── d3d_texture_debug.cpp │ │ │ ├── d3d_texture_debug.h │ │ │ ├── encode_debug_callback.h │ │ │ ├── plugin_amf_encoder.dll.toml │ │ │ ├── shared │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── d3drender.cpp │ │ │ │ ├── d3drender.h │ │ │ │ ├── ipctools.cpp │ │ │ │ ├── ipctools.h │ │ │ │ ├── sharedstate.h │ │ │ │ ├── systemtime.cpp │ │ │ │ ├── systemtime.h │ │ │ │ ├── threadtools.cpp │ │ │ │ └── threadtools.h │ │ │ ├── video_encoder_vce.cpp │ │ │ └── video_encoder_vce.h │ │ ├── dda_capture │ │ │ ├── CMakeLists.txt │ │ │ ├── ReadMe.md │ │ │ ├── cursor_capture.cpp │ │ │ ├── cursor_capture.h │ │ │ ├── dda_capture.cpp │ │ │ ├── dda_capture.h │ │ │ ├── dda_capture_plugin.cpp │ │ │ ├── dda_capture_plugin.h │ │ │ ├── desktop_capture.cpp │ │ │ ├── desktop_capture.h │ │ │ ├── monitor_util.h │ │ │ └── plugin_dda_capture.dll.toml │ │ ├── ffmpeg_encoder │ │ │ ├── CMakeLists.txt │ │ │ ├── ReadMe.md │ │ │ ├── ffmpeg_encoder.cpp │ │ │ ├── ffmpeg_encoder.h │ │ │ ├── ffmpeg_encoder_defs.h │ │ │ ├── ffmpeg_encoder_plugin.cpp │ │ │ ├── ffmpeg_encoder_plugin.h │ │ │ └── plugin_ffmpeg_encoder.dll.toml │ │ ├── file_transfer │ │ │ ├── CMakeLists.txt │ │ │ ├── ReadMe.md │ │ │ ├── file_transfer_plugin.cpp │ │ │ ├── file_transfer_plugin.h │ │ │ └── plugin_file_transfer.dll.toml │ │ ├── frame_debugger │ │ │ ├── CMakeLists.txt │ │ │ ├── ReadMe.md │ │ │ ├── frame_debugger_plugin.cpp │ │ │ ├── frame_debugger_plugin.h │ │ │ └── plugin_frame_debugger.dll.toml │ │ ├── frame_resizer │ │ │ ├── CMakeLists.txt │ │ │ ├── ReadMe.md │ │ │ ├── Utilities.h │ │ │ ├── frame_render.cpp │ │ │ ├── frame_render.h │ │ │ ├── frame_resizer_plugin.cpp │ │ │ ├── frame_resizer_plugin.h │ │ │ ├── pixel_shader.h │ │ │ ├── plugin_frame_resizer.dll.toml │ │ │ ├── resize_common_types.h │ │ │ └── vertex_shader.h │ │ ├── media_recorder │ │ │ ├── CMakeLists.txt │ │ │ ├── ReadMe.md │ │ │ ├── media_recorder_plugin.cpp │ │ │ ├── media_recorder_plugin.h │ │ │ └── plugin_media_recorder.dll.toml │ │ ├── mock_video_stream │ │ │ ├── CMakeLists.txt │ │ │ ├── ReadMe.md │ │ │ ├── mock_video_stream_plugin.cpp │ │ │ ├── mock_video_stream_plugin.h │ │ │ └── plugin_mock_video_stream.dll.toml │ │ ├── net_relay │ │ │ ├── CMakeLists.txt │ │ │ ├── README.md │ │ │ ├── plugin_net_relay.dll.toml │ │ │ ├── relay_plugin.cpp │ │ │ └── relay_plugin.h │ │ ├── net_rtc │ │ │ ├── CMakeLists.txt │ │ │ ├── ReadMe.md │ │ │ ├── desktop_capture.cpp │ │ │ ├── desktop_capture.h │ │ │ ├── desktop_capture_source.cpp │ │ │ ├── desktop_capture_source.h │ │ │ ├── i420_creator.cpp │ │ │ ├── i420_creator.h │ │ │ ├── peer_callback.cpp │ │ │ ├── peer_callback.h │ │ │ ├── plugin_net_rtc.dll.toml │ │ │ ├── rtc_plugin.cpp │ │ │ ├── rtc_plugin.h │ │ │ ├── rtc_server.cpp │ │ │ ├── rtc_server.h │ │ │ ├── video_source_mock.cpp │ │ │ ├── video_source_mock.h │ │ │ └── webrtc_helper.h │ │ ├── net_udp │ │ │ ├── CMakeLists.txt │ │ │ ├── ReadMe.md │ │ │ ├── plugin_net_udp.dll.toml │ │ │ ├── udp_plugin.cpp │ │ │ └── udp_plugin.h │ │ ├── net_ws │ │ │ ├── CMakeLists.txt │ │ │ ├── ReadMe.md │ │ │ ├── http_handler.cpp │ │ │ ├── http_handler.h │ │ │ ├── plugin_net_ws.dll.toml │ │ │ ├── ws_plugin.cpp │ │ │ ├── ws_plugin.h │ │ │ ├── ws_plugin_router.cpp │ │ │ ├── ws_plugin_router.h │ │ │ ├── ws_server.cpp │ │ │ └── ws_server.h │ │ ├── nvenc_encoder │ │ │ ├── CMakeLists.txt │ │ │ ├── ReadMe.md │ │ │ ├── nvenc_encoder_defs.h │ │ │ ├── nvenc_encoder_plugin.cpp │ │ │ ├── nvenc_encoder_plugin.h │ │ │ ├── nvenc_video_encoder.cpp │ │ │ ├── nvenc_video_encoder.h │ │ │ ├── nvencoder │ │ │ │ └── 12 │ │ │ │ │ ├── CMakeLists.txt │ │ │ │ │ ├── NvCodecUtils.h │ │ │ │ │ ├── NvEncoder.cpp │ │ │ │ │ ├── NvEncoder.h │ │ │ │ │ ├── NvEncoderD3D11.cpp │ │ │ │ │ ├── NvEncoderD3D11.h │ │ │ │ │ └── nvEncodeAPI.h │ │ │ └── plugin_nvenc_encoder.dll.toml │ │ ├── obj_detector │ │ │ ├── CMakeLists.txt │ │ │ ├── ReadMe.md │ │ │ ├── obj_detector_plugin.cpp │ │ │ ├── obj_detector_plugin.h │ │ │ └── plugin_obj_detector.dll.toml │ │ ├── opus_encoder │ │ │ ├── CMakeLists.txt │ │ │ ├── ReadMe.md │ │ │ ├── opus_encoder_plugin.cpp │ │ │ ├── opus_encoder_plugin.h │ │ │ └── plugin_opus_encoder.dll.toml │ │ ├── plugin_event_router.cpp │ │ ├── plugin_event_router.h │ │ ├── plugin_ids.h │ │ ├── plugin_manager.cpp │ │ ├── plugin_manager.h │ │ ├── plugin_net_event_router.cpp │ │ ├── plugin_net_event_router.h │ │ ├── plugin_stream_event_router.cpp │ │ ├── plugin_stream_event_router.h │ │ └── was_audio_capture │ │ │ ├── CMakeLists.txt │ │ │ ├── ReadMe.md │ │ │ ├── audio_capture.h │ │ │ ├── plugin_was_audio_capture.dll.toml │ │ │ ├── was_audio_capture_plugin.cpp │ │ │ ├── was_audio_capture_plugin.h │ │ │ ├── wasapi_audio_capture.cpp │ │ │ └── wasapi_audio_capture.h │ ├── private.key │ ├── render_main.cpp │ ├── settings.toml │ ├── settings │ │ ├── CMakeLists.txt │ │ ├── settings.cpp │ │ └── settings.h │ ├── statistics.cpp │ └── statistics.h ├── render_panel │ ├── CMakeLists.txt │ ├── db │ │ ├── db_game.cpp │ │ ├── db_game.h │ │ ├── db_game_manager.cpp │ │ └── db_game_manager.h │ ├── gr_app_messages.h │ ├── gr_application.cpp │ ├── gr_application.h │ ├── gr_context.cpp │ ├── gr_context.h │ ├── gr_render_controller.cpp │ ├── gr_render_controller.h │ ├── gr_resources.cpp │ ├── gr_resources.h │ ├── gr_run_game_manager.cpp │ ├── gr_run_game_manager.h │ ├── gr_running_pipe.cpp │ ├── gr_running_pipe.h │ ├── gr_settings.cpp │ ├── gr_settings.h │ ├── gr_statistics.cpp │ ├── gr_statistics.h │ ├── gr_system_monitor.cpp │ ├── gr_system_monitor.h │ ├── gr_workspace.cpp │ ├── gr_workspace.h │ ├── network │ │ ├── apis.h │ │ ├── gr_service_client.cpp │ │ ├── gr_service_client.h │ │ ├── http_handler.cpp │ │ ├── http_handler.h │ │ ├── udp_broadcaster.cpp │ │ ├── udp_broadcaster.h │ │ ├── ws_panel_server.cpp │ │ ├── ws_panel_server.h │ │ ├── ws_sig_client.cpp │ │ └── ws_sig_client.h │ ├── transfer │ │ ├── file_transfer.cpp │ │ └── file_transfer.h │ └── ui │ │ ├── add_game_panel.cpp │ │ ├── add_game_panel.h │ │ ├── effect_widget.h │ │ ├── game_info_preview.cpp │ │ ├── game_info_preview.h │ │ ├── qt_circle.cpp │ │ ├── qt_circle.h │ │ ├── qt_vertical.cpp │ │ ├── qt_vertical.h │ │ ├── rn_app.cpp │ │ ├── rn_app.h │ │ ├── rn_empty.cpp │ │ ├── rn_empty.h │ │ ├── st_about_me.cpp │ │ ├── st_about_me.h │ │ ├── st_client.cpp │ │ ├── st_client.h │ │ ├── st_general.cpp │ │ ├── st_general.h │ │ ├── st_network.cpp │ │ ├── st_network.h │ │ ├── stat_chart.cpp │ │ ├── stat_chart.h │ │ ├── tab_base.cpp │ │ ├── tab_base.h │ │ ├── tab_game.cpp │ │ ├── tab_game.h │ │ ├── tab_server.cpp │ │ ├── tab_server.h │ │ ├── tab_server_status.cpp │ │ ├── tab_server_status.h │ │ ├── tab_settings.cpp │ │ └── tab_settings.h ├── service │ ├── CMakeLists.txt │ ├── render_manager.cpp │ ├── render_manager.h │ ├── service.cpp │ ├── service.h │ ├── service_context.cpp │ ├── service_context.h │ ├── service_main.cpp │ ├── service_main.h │ ├── service_manager.cpp │ ├── service_manager.h │ ├── service_manager_main.cpp │ ├── service_messages.h │ ├── service_msg_server.cpp │ └── service_msg_server.h ├── tests │ ├── CMakeLists.txt │ ├── test_db.cpp │ ├── test_process.cpp │ └── test_resolutions.cpp ├── theme │ ├── QmlStyleUrlInterceptor.cpp │ ├── QmlStyleUrlInterceptor.h │ ├── QtAdvancedStylesheet.cpp │ ├── QtAdvancedStylesheet.h │ └── acss_globals.h └── uninstall │ ├── CMakeLists.txt │ ├── shadow_deleter.cpp │ └── uninstall_main.cpp └── translation ├── GammaRay_en_US.ts └── GammaRay_zh_CN.ts /.gitignore: -------------------------------------------------------------------------------- 1 | .idea/* 2 | cmake-build-debug/* 3 | cmake-build-relwithdebinfo/* 4 | cmake-build-release/* 5 | .vs/* 6 | out/* -------------------------------------------------------------------------------- /CMakeSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "configurations": [ 3 | { 4 | "name": "x64-Debug", 5 | "generator": "Ninja", 6 | "configurationType": "Debug", 7 | "inheritEnvironments": [ "msvc_x64_x64" ], 8 | "buildRoot": "${projectDir}\\out\\build\\${name}", 9 | "installRoot": "${projectDir}\\out\\install\\${name}", 10 | "cmakeCommandArgs": "", 11 | "buildCommandArgs": "", 12 | "ctestCommandArgs": "" 13 | }, 14 | { 15 | "name": "x64-RelDebug", 16 | "generator": "Ninja", 17 | "configurationType": "RelWithDebInfo", 18 | "buildRoot": "${projectDir}\\out\\build\\${name}", 19 | "installRoot": "${projectDir}\\out\\install\\${name}", 20 | "cmakeCommandArgs": "", 21 | "buildCommandArgs": "", 22 | "ctestCommandArgs": "", 23 | "inheritEnvironments": [ "msvc_x64_x64" ], 24 | "variables": [] 25 | } 26 | ] 27 | } -------------------------------------------------------------------------------- /certificate.csr: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE REQUEST----- 2 | MIICijCCAXICAQAwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUx 3 | ITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDCCASIwDQYJKoZIhvcN 4 | AQEBBQADggEPADCCAQoCggEBAM1Wgb9YG/jMrkdXmHpVPKFMjLFZyVQRDrJJbDr7 5 | zna3Wzz6ZODthrLB8sUYQzNbk7mJHhU1OMBQWmtfqnKGkO2iDqVR0MBjNcuy8ivu 6 | t0TwXK68LMbHppxfsRsZatDc10l887Y9Uk8b6jOxdPahP2nqiUWl7SJ4EiJ635OR 7 | MEC7o7mGoXeBnDwJWtv1V9rQUdtUpoMC/uPNdcJPuhnHWCALHGy4/vaFbqjcbwOy 8 | aV/OzCylZsOpKS8b5gTB/11KFQxH0g0a5Qp+WNg6OWx9hN9KitaEpjtJo/xFF3Pr 9 | zpa97LJMwSfA0VNWAPjZKGHJIt/I9uAabekX9Comb226iVkCAwEAAaAAMA0GCSqG 10 | SIb3DQEBCwUAA4IBAQCLOmtyUjABZ3Zuox45UGP6K2wto0W0zAQmv4ylzbweWFVN 11 | 7AAoqDVh9wXNEI210PWIKY/SoC3KOjHVUrlIcGAhvYaj0Bg9eaINwAU509YJK908 12 | 2PNDozDdzNhm+2KsVyX8KUBd13hKGyPTYes08DhOwiITH1+cDcOtoFBwlwhN7QSC 13 | pG1Nu9furK5+eBiNLm98sDfH/WquM5IxirLDQNMGtPoFvjrn2kBhtpFl5ZvEv9/v 14 | eSjIrgH/C+U2Qf94YfC5NG0oZUcoMKhjo4kTBLGc5nwWtBUYcXXykm7vOFcJvnGy 15 | Di8f3geiEwivGwMbyXIh3VQzWHHNp/Zp8bPK3sR4 16 | -----END CERTIFICATE REQUEST----- 17 | -------------------------------------------------------------------------------- /deps/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_subdirectory(tc_3rdparty) 2 | add_subdirectory(tc_capture_new) 3 | add_subdirectory(tc_encoder_new) 4 | add_subdirectory(tc_message_new) 5 | add_subdirectory(tc_common_new) 6 | add_subdirectory(tc_opus_codec_new) 7 | add_subdirectory(tc_steam_manager_new) 8 | add_subdirectory(tc_controller) 9 | add_subdirectory(tc_client_sdk_new) 10 | add_subdirectory(tc_qt_widget) 11 | add_subdirectory(tc_signaling_sdk) 12 | add_subdirectory(tc_manager_client) 13 | add_subdirectory(tc_relay_client) -------------------------------------------------------------------------------- /deps/tc_signaling_sdk/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | project(tc_signaling_sdk) 2 | 3 | add_library(${PROJECT_NAME} 4 | sig_sdk_ws_processor.cpp 5 | sig_sdk_maker.cpp 6 | sig_sdk_base_processor.cc 7 | sig_sdk_ws_router.cpp 8 | sig_sdk_context.cpp 9 | ) 10 | 11 | -------------------------------------------------------------------------------- /deps/tc_signaling_sdk/sig_sdk_apis.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA 3 | // 4 | #pragma once 5 | #include 6 | 7 | // for websocket connection 8 | const std::string kApiWsSig = "/ws_sig"; 9 | 10 | // for http 11 | const std::string kSigApiPing = "/ping"; 12 | const std::string kSigApiReqClientId = "/request/client/id"; 13 | const std::string kSigApiReqClientStatus = "/req/client/status"; 14 | -------------------------------------------------------------------------------- /deps/tc_signaling_sdk/sig_sdk_events.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA 3 | // 4 | 5 | #ifndef TC_WEBRTC_SIG_EVENTS_H 6 | #define TC_WEBRTC_SIG_EVENTS_H 7 | 8 | #include 9 | #include 10 | 11 | #include "sig_sdk_message.h" 12 | 13 | namespace tc 14 | { 15 | 16 | class SigEvtOnConnect { 17 | public: 18 | bool connected_; 19 | }; 20 | 21 | class SigEvtOnDisconnect { 22 | public: 23 | 24 | }; 25 | 26 | class SigEvtTimer1S { 27 | public: 28 | 29 | }; 30 | 31 | class SigEvtTimer2S { 32 | public: 33 | 34 | }; 35 | 36 | class SigEvtTimer5S { 37 | 38 | }; 39 | 40 | // data channel 发送的消息 41 | class SigEvtControl { 42 | public: 43 | int peer_id_; 44 | std::string event_; 45 | std::string token_; 46 | }; 47 | 48 | } 49 | #endif //TC_WEBRTC_SIG_EVENTS_H 50 | -------------------------------------------------------------------------------- /deps/tc_signaling_sdk/sig_sdk_params.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA 3 | // 4 | 5 | #pragma once 6 | #include 7 | 8 | namespace tc 9 | { 10 | 11 | class SignalingParam { 12 | public: 13 | std::string host_{}; 14 | int port_{}; 15 | std::string path_{}; 16 | }; 17 | 18 | } -------------------------------------------------------------------------------- /deps/tc_signaling_sdk/sig_sdk_ws_processor.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA 3 | // 4 | #pragma once 5 | 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include "sig_sdk_base_processor.h" 12 | 13 | namespace tc 14 | { 15 | 16 | class SigSdkContext; 17 | class MessageNotifier; 18 | 19 | class SigSdkWsProcessor : public SigSdkBaseProcessor { 20 | public: 21 | 22 | static std::shared_ptr Make(const std::shared_ptr& ctx); 23 | 24 | explicit SigSdkWsProcessor(const std::shared_ptr& ctx); 25 | ~SigSdkWsProcessor(); 26 | void Start(const SignalingParam& param) override; 27 | void Stop() override; 28 | 29 | private: 30 | 31 | }; 32 | 33 | } 34 | 35 | -------------------------------------------------------------------------------- /deps/tc_signaling_sdk/sig_sdk_ws_router.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA 3 | // 4 | #pragma once 5 | 6 | #include "sig_sdk_abs_router.h" 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include "sig_sdk_message.h" 13 | #include "json/json.hpp" 14 | 15 | namespace tc 16 | { 17 | 18 | class SigSdkWsRouter : public SigSdkAbsRouter { 19 | public: 20 | explicit SigSdkWsRouter(const std::shared_ptr& ctx); 21 | void Init(const SignalingParam& params) override; 22 | void Start() override; 23 | void Exit() override; 24 | void SendSigMessage(const std::string& sig_name, const std::string& token, const std::string& msg) override; 25 | void SendHeartBeat() override; 26 | bool IsAlive() override; 27 | 28 | private: 29 | std::shared_ptr client_ = nullptr; 30 | uint64_t heart_beat_idx_ = 0; 31 | }; 32 | 33 | } -------------------------------------------------------------------------------- /docs/images/GammaRay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/docs/images/GammaRay.png -------------------------------------------------------------------------------- /docs/images/android_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/docs/images/android_1.png -------------------------------------------------------------------------------- /docs/images/android_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/docs/images/android_2.png -------------------------------------------------------------------------------- /docs/images/android_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/docs/images/android_3.png -------------------------------------------------------------------------------- /docs/images/android_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/docs/images/android_4.png -------------------------------------------------------------------------------- /docs/images/android_5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/docs/images/android_5.jpg -------------------------------------------------------------------------------- /docs/images/android_7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/docs/images/android_7.jpg -------------------------------------------------------------------------------- /docs/images/android_8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/docs/images/android_8.jpg -------------------------------------------------------------------------------- /docs/images/android_9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/docs/images/android_9.jpg -------------------------------------------------------------------------------- /docs/images/android_prepare_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/docs/images/android_prepare_1.jpg -------------------------------------------------------------------------------- /docs/images/android_prepare_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/docs/images/android_prepare_2.jpg -------------------------------------------------------------------------------- /docs/images/client_add_remote.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/docs/images/client_add_remote.png -------------------------------------------------------------------------------- /docs/images/client_file_transfer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/docs/images/client_file_transfer.png -------------------------------------------------------------------------------- /docs/images/client_main.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/docs/images/client_main.png -------------------------------------------------------------------------------- /docs/images/srv_add_game.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/docs/images/srv_add_game.png -------------------------------------------------------------------------------- /docs/images/srv_main.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/docs/images/srv_main.png -------------------------------------------------------------------------------- /docs/images/srv_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/docs/images/srv_settings.png -------------------------------------------------------------------------------- /docs/images/srv_steam.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/docs/images/srv_steam.png -------------------------------------------------------------------------------- /docs/images/test1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/docs/images/test1.gif -------------------------------------------------------------------------------- /docs/images/test2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/docs/images/test2.gif -------------------------------------------------------------------------------- /docs/images/test3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/docs/images/test3.gif -------------------------------------------------------------------------------- /env_settings.cmake: -------------------------------------------------------------------------------- 1 | set(VCPKG_ROOT C:/source/vcpkg) 2 | set(QT_ROOT D:/Qt6.8/6.8.0/msvc2022_64) 3 | set(VK_SDK C:/VulkanSDK/1.3.275.0/Include) 4 | 5 | set(TC_USE_FILE_TRANSMISSION OFF CACHE BOOL "Enable file transmission") 6 | set(TC_USE_VR_MANAGER OFF CACHE BOOL "Enable vr manager") -------------------------------------------------------------------------------- /icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/icon.ico -------------------------------------------------------------------------------- /icon.rc: -------------------------------------------------------------------------------- 1 | IDI_ICON1 ICON DISCARDABLE "icon.ico" -------------------------------------------------------------------------------- /package/config/config.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | GammaRay 4 | 1.2.0 5 | GammaRay 6 | RGAA 7 | 8 | GammaRay 9 | @ApplicationsDir@/RGAA/GammaRay 10 | 11 | -------------------------------------------------------------------------------- /package/package_rel_debug.bat: -------------------------------------------------------------------------------- 1 | rmdir /s /q packages\com.rgaa.gammaray\data 2 | 3 | python install.py rel-debug 4 | 5 | binarycreator.exe -c config/config.xml -p packages GammaRaySetup_DebugInfo.exe -v -------------------------------------------------------------------------------- /package/package_release.bat: -------------------------------------------------------------------------------- 1 | rmdir /s /q packages\com.rgaa.gammaray\data 2 | 3 | python install.py release 4 | 5 | binarycreator.exe -c config/config.xml -p packages GammaRaySetup.exe -v -------------------------------------------------------------------------------- /package/packages/com.rgaa.gammaray/data/README.txt: -------------------------------------------------------------------------------- 1 | GammaRay 2 | 3 | Stream your games and desktop to other devices, and replay gamepad/keyboard/mouse events in host PC 4 | 5 | https://github.com/RGAA-Software/GammaRay 6 | 7 | -------------------------------------------------------------------------------- /package/packages/com.rgaa.gammaray/meta/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | GammaRay 4 | Stream your games and desktop to other devices, and replay gamepad/keyboard/mouse events in host PC 5 | 1.2.0 6 | 2025-01-01 7 | true 8 | 9 | 10 | -------------------------------------------------------------------------------- /package/readme.md: -------------------------------------------------------------------------------- 1 | https://doc.qt.io/qtinstallerframework/ifw-overview.html 2 | https://doc.qt.io/qtinstallerframework/scripting-component.html 3 | https://doc.qt.io/qtinstallerframework/scripting-installer.html -------------------------------------------------------------------------------- /pub_rel-debug.bat: -------------------------------------------------------------------------------- 1 | python ./install.py rel-debug -------------------------------------------------------------------------------- /pub_release.bat: -------------------------------------------------------------------------------- 1 | python ./install.py release -------------------------------------------------------------------------------- /resources/font.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | font/fontawesome-webfont.ttf 4 | 5 | 6 | -------------------------------------------------------------------------------- /resources/font/Font Awesome Cheatsheet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/font/Font Awesome Cheatsheet.png -------------------------------------------------------------------------------- /resources/font/LOVE-Queen-2.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/font/LOVE-Queen-2.ttf -------------------------------------------------------------------------------- /resources/font/blade.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/font/blade.ttf -------------------------------------------------------------------------------- /resources/font/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/font/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /resources/font/matrix.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/font/matrix.ttf -------------------------------------------------------------------------------- /resources/icons/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/icons/1.png -------------------------------------------------------------------------------- /resources/icons/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/icons/10.png -------------------------------------------------------------------------------- /resources/icons/11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/icons/11.png -------------------------------------------------------------------------------- /resources/icons/12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/icons/12.png -------------------------------------------------------------------------------- /resources/icons/13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/icons/13.png -------------------------------------------------------------------------------- /resources/icons/14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/icons/14.png -------------------------------------------------------------------------------- /resources/icons/15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/icons/15.png -------------------------------------------------------------------------------- /resources/icons/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/icons/16.png -------------------------------------------------------------------------------- /resources/icons/17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/icons/17.png -------------------------------------------------------------------------------- /resources/icons/18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/icons/18.png -------------------------------------------------------------------------------- /resources/icons/19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/icons/19.png -------------------------------------------------------------------------------- /resources/icons/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/icons/2.png -------------------------------------------------------------------------------- /resources/icons/20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/icons/20.png -------------------------------------------------------------------------------- /resources/icons/21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/icons/21.png -------------------------------------------------------------------------------- /resources/icons/22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/icons/22.png -------------------------------------------------------------------------------- /resources/icons/23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/icons/23.png -------------------------------------------------------------------------------- /resources/icons/24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/icons/24.png -------------------------------------------------------------------------------- /resources/icons/25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/icons/25.png -------------------------------------------------------------------------------- /resources/icons/26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/icons/26.png -------------------------------------------------------------------------------- /resources/icons/27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/icons/27.png -------------------------------------------------------------------------------- /resources/icons/28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/icons/28.png -------------------------------------------------------------------------------- /resources/icons/29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/icons/29.png -------------------------------------------------------------------------------- /resources/icons/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/icons/3.png -------------------------------------------------------------------------------- /resources/icons/30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/icons/30.png -------------------------------------------------------------------------------- /resources/icons/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/icons/4.png -------------------------------------------------------------------------------- /resources/icons/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/icons/5.png -------------------------------------------------------------------------------- /resources/icons/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/icons/6.png -------------------------------------------------------------------------------- /resources/icons/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/icons/7.png -------------------------------------------------------------------------------- /resources/icons/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/icons/8.png -------------------------------------------------------------------------------- /resources/icons/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/icons/9.png -------------------------------------------------------------------------------- /resources/icons/ic_empty.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resources/icons/ic_network.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resources/icons/ic_port.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resources/icons/ic_renderer.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resources/icons/ic_server.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resources/icons/ic_service.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resources/icons/ic_spectrum.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resources/icons/logo_android.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/icons/logo_android.png -------------------------------------------------------------------------------- /resources/icons/logo_windows.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/icons/logo_windows.png -------------------------------------------------------------------------------- /resources/image/bc_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/image/bc_icon.png -------------------------------------------------------------------------------- /resources/image/bc_icon_raw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/image/bc_icon_raw.png -------------------------------------------------------------------------------- /resources/image/btn_close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/image/btn_close.png -------------------------------------------------------------------------------- /resources/image/btn_ok.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/image/btn_ok.png -------------------------------------------------------------------------------- /resources/image/dota2_cache.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/image/dota2_cache.jpg -------------------------------------------------------------------------------- /resources/image/empty.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resources/image/ic_agree.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resources/image/ic_arrow_right_1.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resources/image/ic_arrow_right_2.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resources/image/ic_audio_on.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resources/image/ic_check.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resources/image/ic_clipboard_off.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resources/image/ic_clipboard_on.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resources/image/ic_close.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resources/image/ic_close_notification.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resources/image/ic_computer.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resources/image/ic_control.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resources/image/ic_desktop.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resources/image/ic_expand.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resources/image/ic_file_transfer.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resources/image/ic_fullscreen.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resources/image/ic_fullscreen_exit.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resources/image/ic_mail.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resources/image/ic_minimize.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resources/image/ic_mode.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resources/image/ic_open_notification.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resources/image/ic_settings.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resources/image/ic_stream.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resources/image/ic_transfer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/image/ic_transfer.png -------------------------------------------------------------------------------- /resources/image/ic_vert_dots.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resources/image/ic_vert_dots_hover.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resources/image/ic_vert_dots_pressed.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resources/image/ic_volume_off.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resources/image/ic_volume_on.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resources/image/logo_server.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/image/logo_server.png -------------------------------------------------------------------------------- /resources/image/logo_text.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/image/logo_text.png -------------------------------------------------------------------------------- /resources/image/msg_error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/image/msg_error.png -------------------------------------------------------------------------------- /resources/image/msg_info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/image/msg_info.png -------------------------------------------------------------------------------- /resources/image/msg_question.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/image/msg_question.png -------------------------------------------------------------------------------- /resources/image/tc_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/image/tc_icon.png -------------------------------------------------------------------------------- /resources/image/tc_icon_raw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/image/tc_icon_raw.png -------------------------------------------------------------------------------- /resources/image/test_cover.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/image/test_cover.jpg -------------------------------------------------------------------------------- /resources/image/windows.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resources/main.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | image/btn_close.png 4 | image/btn_ok.png 5 | image/msg_error.png 6 | image/msg_info.png 7 | image/msg_question.png 8 | 9 | 10 | -------------------------------------------------------------------------------- /resources/qss/lightblue/add_bottom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/qss/lightblue/add_bottom.png -------------------------------------------------------------------------------- /resources/qss/lightblue/add_left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/qss/lightblue/add_left.png -------------------------------------------------------------------------------- /resources/qss/lightblue/add_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/qss/lightblue/add_right.png -------------------------------------------------------------------------------- /resources/qss/lightblue/add_top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/qss/lightblue/add_top.png -------------------------------------------------------------------------------- /resources/qss/lightblue/arrow_bottom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/qss/lightblue/arrow_bottom.png -------------------------------------------------------------------------------- /resources/qss/lightblue/arrow_left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/qss/lightblue/arrow_left.png -------------------------------------------------------------------------------- /resources/qss/lightblue/arrow_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/qss/lightblue/arrow_right.png -------------------------------------------------------------------------------- /resources/qss/lightblue/arrow_top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/qss/lightblue/arrow_top.png -------------------------------------------------------------------------------- /resources/qss/lightblue/branch_close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/qss/lightblue/branch_close.png -------------------------------------------------------------------------------- /resources/qss/lightblue/branch_open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/qss/lightblue/branch_open.png -------------------------------------------------------------------------------- /resources/qss/lightblue/calendar_nextmonth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/qss/lightblue/calendar_nextmonth.png -------------------------------------------------------------------------------- /resources/qss/lightblue/calendar_prevmonth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/qss/lightblue/calendar_prevmonth.png -------------------------------------------------------------------------------- /resources/qss/lightblue/checkbox_checked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/qss/lightblue/checkbox_checked.png -------------------------------------------------------------------------------- /resources/qss/lightblue/checkbox_checked_disable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/qss/lightblue/checkbox_checked_disable.png -------------------------------------------------------------------------------- /resources/qss/lightblue/checkbox_parcial.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/qss/lightblue/checkbox_parcial.png -------------------------------------------------------------------------------- /resources/qss/lightblue/checkbox_parcial_disable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/qss/lightblue/checkbox_parcial_disable.png -------------------------------------------------------------------------------- /resources/qss/lightblue/checkbox_unchecked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/qss/lightblue/checkbox_unchecked.png -------------------------------------------------------------------------------- /resources/qss/lightblue/checkbox_unchecked_disable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/qss/lightblue/checkbox_unchecked_disable.png -------------------------------------------------------------------------------- /resources/qss/lightblue/menu_checked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/qss/lightblue/menu_checked.png -------------------------------------------------------------------------------- /resources/qss/lightblue/radiobutton_checked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/qss/lightblue/radiobutton_checked.png -------------------------------------------------------------------------------- /resources/qss/lightblue/radiobutton_checked_disable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/qss/lightblue/radiobutton_checked_disable.png -------------------------------------------------------------------------------- /resources/qss/lightblue/radiobutton_unchecked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/qss/lightblue/radiobutton_unchecked.png -------------------------------------------------------------------------------- /resources/qss/lightblue/radiobutton_unchecked_disable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/qss/lightblue/radiobutton_unchecked_disable.png -------------------------------------------------------------------------------- /resources/qt_material/README.md: -------------------------------------------------------------------------------- 1 | # Qt-Material 2 | 3 | This stylesheet has ben copied from the [Qt-material](https://github.com/UN-GCPDS/qt-material) 4 | roject from [GCPDS](https://github.com/UN-GCPDS). File any pull requests for 5 | this stylesheet and any improvements or changes to the original project. -------------------------------------------------------------------------------- /resources/qt_material/fonts/roboto/Roboto-Black.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/qt_material/fonts/roboto/Roboto-Black.ttf -------------------------------------------------------------------------------- /resources/qt_material/fonts/roboto/Roboto-BlackItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/qt_material/fonts/roboto/Roboto-BlackItalic.ttf -------------------------------------------------------------------------------- /resources/qt_material/fonts/roboto/Roboto-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/qt_material/fonts/roboto/Roboto-Bold.ttf -------------------------------------------------------------------------------- /resources/qt_material/fonts/roboto/Roboto-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/qt_material/fonts/roboto/Roboto-BoldItalic.ttf -------------------------------------------------------------------------------- /resources/qt_material/fonts/roboto/Roboto-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/qt_material/fonts/roboto/Roboto-Italic.ttf -------------------------------------------------------------------------------- /resources/qt_material/fonts/roboto/Roboto-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/qt_material/fonts/roboto/Roboto-Light.ttf -------------------------------------------------------------------------------- /resources/qt_material/fonts/roboto/Roboto-LightItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/qt_material/fonts/roboto/Roboto-LightItalic.ttf -------------------------------------------------------------------------------- /resources/qt_material/fonts/roboto/Roboto-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/qt_material/fonts/roboto/Roboto-Medium.ttf -------------------------------------------------------------------------------- /resources/qt_material/fonts/roboto/Roboto-MediumItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/qt_material/fonts/roboto/Roboto-MediumItalic.ttf -------------------------------------------------------------------------------- /resources/qt_material/fonts/roboto/Roboto-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/qt_material/fonts/roboto/Roboto-Regular.ttf -------------------------------------------------------------------------------- /resources/qt_material/fonts/roboto/Roboto-Thin.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/qt_material/fonts/roboto/Roboto-Thin.ttf -------------------------------------------------------------------------------- /resources/qt_material/fonts/roboto/Roboto-ThinItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/qt_material/fonts/roboto/Roboto-ThinItalic.ttf -------------------------------------------------------------------------------- /resources/qt_material/fonts/roboto/RobotoCondensed-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/qt_material/fonts/roboto/RobotoCondensed-Bold.ttf -------------------------------------------------------------------------------- /resources/qt_material/fonts/roboto/RobotoCondensed-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/qt_material/fonts/roboto/RobotoCondensed-BoldItalic.ttf -------------------------------------------------------------------------------- /resources/qt_material/fonts/roboto/RobotoCondensed-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/qt_material/fonts/roboto/RobotoCondensed-Italic.ttf -------------------------------------------------------------------------------- /resources/qt_material/fonts/roboto/RobotoCondensed-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/qt_material/fonts/roboto/RobotoCondensed-Light.ttf -------------------------------------------------------------------------------- /resources/qt_material/fonts/roboto/RobotoCondensed-LightItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/qt_material/fonts/roboto/RobotoCondensed-LightItalic.ttf -------------------------------------------------------------------------------- /resources/qt_material/fonts/roboto/RobotoCondensed-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/qt_material/fonts/roboto/RobotoCondensed-Regular.ttf -------------------------------------------------------------------------------- /resources/qt_material/themes/dark_amber.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #ffd740 4 | #ffff74 5 | #232629 6 | #4f5b62 7 | #31363b 8 | #000000 9 | #ffffff 10 | 11 | -------------------------------------------------------------------------------- /resources/qt_material/themes/dark_blue.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #448aff 4 | #83b9ff 5 | #232629 6 | #4f5b62 7 | #31363b 8 | #000000 9 | #ffffff 10 | 11 | -------------------------------------------------------------------------------- /resources/qt_material/themes/dark_cyan.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #4dd0e1 4 | #88ffff 5 | #232629 6 | #4f5b62 7 | #31363b 8 | #000000 9 | #ffffff 10 | 11 | -------------------------------------------------------------------------------- /resources/qt_material/themes/dark_lightgreen.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #8bc34a 4 | #bef67a 5 | #232629 6 | #4f5b62 7 | #31363b 8 | #000000 9 | #ffffff 10 | 11 | -------------------------------------------------------------------------------- /resources/qt_material/themes/dark_pink.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #ff4081 4 | #ff79b0 5 | #232629 6 | #4f5b62 7 | #31363b 8 | #000000 9 | #ffffff 10 | 11 | -------------------------------------------------------------------------------- /resources/qt_material/themes/dark_purple.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #ab47bc 4 | #df78ef 5 | #232629 6 | #4f5b62 7 | #31363b 8 | #ffffff 9 | #ffffff 10 | 11 | -------------------------------------------------------------------------------- /resources/qt_material/themes/dark_red.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #ff1744 4 | #ff616f 5 | #232629 6 | #4f5b62 7 | #31363b 8 | #000000 9 | #ffffff 10 | 11 | -------------------------------------------------------------------------------- /resources/qt_material/themes/dark_teal.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #1de9b6 4 | #6effe8 5 | #232629 6 | #4f5b62 7 | #31363b 8 | #000000 9 | #ffffff 10 | 11 | -------------------------------------------------------------------------------- /resources/qt_material/themes/dark_yellow.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #ffff00 4 | #ffff5a 5 | #232629 6 | #4f5b62 7 | #31363b 8 | #000000 9 | #ffffff 10 | 11 | -------------------------------------------------------------------------------- /resources/qt_material/themes/light_amber.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #ffc400 4 | #fff64f 5 | #f5f5f5 6 | #e6e6e6 7 | #ffffff 8 | #3c3c3c 9 | #555555 10 | 11 | -------------------------------------------------------------------------------- /resources/qt_material/themes/light_blue.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #2979ff 4 | #75a7ff 5 | #f5f5f5 6 | #e6e6e6 7 | #ffffff 8 | #3c3c3c 9 | #555555 10 | 11 | -------------------------------------------------------------------------------- /resources/qt_material/themes/light_cyan.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #00e5ff 4 | #6effff 5 | #f5f5f5 6 | #e6e6e6 7 | #ffffff 8 | #3c3c3c 9 | #555555 10 | 11 | -------------------------------------------------------------------------------- /resources/qt_material/themes/light_cyan_500.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #00bcd4 4 | #62efff 5 | #f5f5f5 6 | #e6e6e6 7 | #ffffff 8 | #3c3c3c 9 | #555555 10 | 11 | -------------------------------------------------------------------------------- /resources/qt_material/themes/light_lightgreen.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #64dd17 4 | #9cff57 5 | #f5f5f5 6 | #e6e6e6 7 | #ffffff 8 | #3c3c3c 9 | #555555 10 | 11 | -------------------------------------------------------------------------------- /resources/qt_material/themes/light_pink.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #ff4081 4 | #ff79b0 5 | #f5f5f5 6 | #e6e6e6 7 | #ffffff 8 | #3c3c3c 9 | #555555 10 | 11 | -------------------------------------------------------------------------------- /resources/qt_material/themes/light_purple.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #e040fb 4 | #ff79ff 5 | #f5f5f5 6 | #e6e6e6 7 | #ffffff 8 | #3c3c3c 9 | #555555 10 | 11 | -------------------------------------------------------------------------------- /resources/qt_material/themes/light_red.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #ff1744 4 | #ff616f 5 | #f5f5f5 6 | #e6e6e6 7 | #ffffff 8 | #3c3c3c 9 | #555555 10 | 11 | -------------------------------------------------------------------------------- /resources/qt_material/themes/light_teal.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #1de9b6 4 | #6effe8 5 | #f5f5f5 6 | #e6e6e6 7 | #ffffff 8 | #3c3c3c 9 | #555555 10 | 11 | -------------------------------------------------------------------------------- /resources/qt_material/themes/light_yellow.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #ffea00 4 | #ffff56 5 | #f5f5f5 6 | #e6e6e6 7 | #ffffff 8 | #3c3c3c 9 | #555555 10 | 11 | -------------------------------------------------------------------------------- /resources/tc_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/tc_icon.png -------------------------------------------------------------------------------- /resources/tc_icon_raw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/resources/tc_icon_raw.png -------------------------------------------------------------------------------- /src/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_subdirectory(render_panel) 2 | 3 | set(MAIN_SRCS 4 | ${CMAKE_CURRENT_SOURCE_DIR}/app_colors.cpp 5 | ${CMAKE_CURRENT_SOURCE_DIR}/theme/QtAdvancedStylesheet.cpp 6 | ${PANEL_SRCS} 7 | PARENT_SCOPE 8 | ) 9 | 10 | add_subdirectory(render) 11 | -------------------------------------------------------------------------------- /src/app_colors.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 25/01/2025. 3 | // 4 | 5 | #include "app_colors.h" 6 | 7 | namespace tc 8 | { 9 | 10 | QColor AppColors::kTabBtnInActiveColor = QColor(0xeeeeee); 11 | 12 | QColor AppColors::kNormalColor = QColor(0x7350ce); 13 | QColor AppColors::kTabBtnNormalColor = QColor(0x486487); 14 | QColor AppColors::kTabBtnHoverColor = QColor(0x2979ff); 15 | QColor AppColors::kTabBtnPressedColor = QColor(0x286487); 16 | 17 | QColor AppColors::kWebWpColor = QColor(0xed5a65); 18 | QColor AppColors::kWebWpHoverColor = QColor(0xe3545e); 19 | QColor AppColors::kWebWpPressedColor = QColor(0xd94852); 20 | 21 | QColor AppColors::kVideoWpColor = QColor(0x2486b9); 22 | QColor AppColors::kVideoWpHoverColor = QColor(0x2581b1); 23 | QColor AppColors::kVideoWpPressedColor = QColor(0x1c79a9); 24 | 25 | } -------------------------------------------------------------------------------- /src/app_colors.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 25/01/2025. 3 | // 4 | 5 | #ifndef GAMMARAY_APP_COLORS_H 6 | #define GAMMARAY_APP_COLORS_H 7 | 8 | #include 9 | 10 | namespace tc 11 | { 12 | 13 | class AppColors { 14 | public: 15 | 16 | static QColor kTabBtnInActiveColor; 17 | 18 | static QColor kNormalColor; 19 | static QColor kTabBtnNormalColor; 20 | static QColor kTabBtnHoverColor; 21 | static QColor kTabBtnPressedColor; 22 | 23 | static QColor kWebWpColor; 24 | static QColor kWebWpHoverColor; 25 | static QColor kWebWpPressedColor; 26 | 27 | static QColor kVideoWpColor; 28 | static QColor kVideoWpHoverColor; 29 | static QColor kVideoWpPressedColor; 30 | 31 | }; 32 | 33 | } 34 | 35 | #endif //GAMMARAY_APP_COLORS_H 36 | -------------------------------------------------------------------------------- /src/client/ct_audio_player.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 2024/2/28. 3 | // 4 | 5 | #ifndef TC_CLIENT_PC_AUDIO_PLAYER_H 6 | #define TC_CLIENT_PC_AUDIO_PLAYER_H 7 | 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | 15 | namespace tc 16 | { 17 | 18 | class Data; 19 | 20 | class AudioPlayer { 21 | public: 22 | AudioPlayer(); 23 | ~AudioPlayer(); 24 | int Init(int freq/*samples eg: 48k*/, int channels); 25 | void Write(const char* data, int size); 26 | void Write(const std::shared_ptr& data); 27 | void AudioCallback(void* userdata, Uint8* stream, int len); 28 | 29 | private: 30 | std::queue pcm_queue_; 31 | std::mutex queue_mutex_; 32 | }; 33 | } 34 | 35 | #endif //TC_CLIENT_PC_AUDIO_PLAYER_H 36 | -------------------------------------------------------------------------------- /src/client/ct_clipboard_manager.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 16/08/2024. 3 | // 4 | 5 | #ifndef GAMMARAYPC_CLIPBOARD_H 6 | #define GAMMARAYPC_CLIPBOARD_H 7 | 8 | #include 9 | #include 10 | 11 | namespace tc 12 | { 13 | 14 | class ClientContext; 15 | 16 | class ClipboardManager : public QObject { 17 | public: 18 | explicit ClipboardManager(const std::shared_ptr& ctx); 19 | void Monitor(); 20 | void UpdateRemoteInfo(const QString& info); 21 | 22 | private: 23 | std::shared_ptr context_ = nullptr; 24 | QString remote_info_; 25 | }; 26 | 27 | } 28 | 29 | #endif //GAMMARAYPC_CLIPBOARD_H 30 | -------------------------------------------------------------------------------- /src/client/ct_director.cpp: -------------------------------------------------------------------------------- 1 | #include "client/ct_director.h" 2 | 3 | namespace tc 4 | { 5 | 6 | std::shared_ptr Director::Make(GLFuncs* funcs) { 7 | return std::make_shared(funcs); 8 | } 9 | 10 | Director::Director(GLFuncs* funcs) { 11 | this->funcs = funcs; 12 | } 13 | 14 | Director::~Director() { 15 | 16 | } 17 | 18 | void Director::Init(int width, int height) { 19 | this->width = width; 20 | this->height = height; 21 | 22 | float near_plane = 0.0f, far_plane = 100.0f; 23 | 24 | projection = glm::ortho(0.0f, this->width, 0.0f, this->height, near_plane, far_plane); 25 | view = glm::mat4(1.0f); 26 | } 27 | 28 | glm::mat4 Director::GetProjection() { 29 | return projection; 30 | } 31 | 32 | glm::mat4 Director::GetView() { 33 | return view; 34 | } 35 | 36 | GLFuncs* Director::Funcs() { 37 | return funcs; 38 | } 39 | 40 | } -------------------------------------------------------------------------------- /src/client/ct_director.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | #include 7 | #include 8 | #include 9 | 10 | #include "ct_opengl_api.h" 11 | 12 | namespace tc 13 | { 14 | class Director { 15 | public: 16 | static std::shared_ptr Make(GLFuncs*); 17 | 18 | explicit Director(GLFuncs* funcs); 19 | ~Director(); 20 | 21 | void Init(int width, int height); 22 | glm::mat4 GetProjection(); 23 | glm::mat4 GetView(); 24 | GLFuncs* Funcs(); 25 | 26 | private: 27 | glm::mat4 projection{}; 28 | glm::mat4 view{}; 29 | float width = 0.0f; 30 | float height = 0.0f; 31 | GLFuncs* funcs = nullptr; 32 | }; 33 | } -------------------------------------------------------------------------------- /src/client/ct_opengl_api.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | typedef QOpenGLFunctions_3_3_Core GLFuncs; -------------------------------------------------------------------------------- /src/client/ct_opengl_image_reader.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | 7 | namespace tc { 8 | 9 | class RawImage; 10 | 11 | class ImageReader { 12 | public: 13 | static std::shared_ptr ReadNV12(const std::string& path, int width, int height); 14 | static std::shared_ptr ReadRGBA(const std::string& path, int width, int height); 15 | static std::shared_ptr ReadI420(const std::string& path, int width, int height); 16 | }; 17 | 18 | } -------------------------------------------------------------------------------- /src/client/ct_qt_key_converter.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #ifdef WIN32 4 | #define WIN32_LEAN_AND_MEAN 5 | #include 6 | #endif 7 | #include 8 | #include 9 | 10 | #include 11 | #include 12 | 13 | namespace tc 14 | { 15 | //VK : https://learn.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes 16 | class QtKeyConverter { 17 | public: 18 | QtKeyConverter(); 19 | static std::map GetSysKeyStatus(); 20 | }; 21 | 22 | } 23 | -------------------------------------------------------------------------------- /src/client/ct_renderer.cpp: -------------------------------------------------------------------------------- 1 | #include "ct_renderer.h" 2 | 3 | #include "client/ct_director.h" 4 | 5 | namespace tc 6 | { 7 | 8 | Renderer::Renderer(const std::shared_ptr& director) { 9 | this->director = director; 10 | this->functions = director->Funcs(); 11 | } 12 | 13 | Renderer::~Renderer() { 14 | 15 | } 16 | 17 | void Renderer::Render(float delta) { 18 | 19 | } 20 | 21 | void Renderer::SetTargetSize(int width, int height) { 22 | this->width = width; 23 | this->height = height; 24 | } 25 | 26 | void Renderer::OnWindowResized(int width, int height) { 27 | window_width = width; 28 | window_height = height; 29 | } 30 | 31 | } -------------------------------------------------------------------------------- /src/client/ct_renderer.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | #include 7 | #include 8 | #include 9 | 10 | namespace tc 11 | { 12 | 13 | class Director; 14 | class ShaderProgram; 15 | 16 | class Renderer { 17 | public: 18 | explicit Renderer(const std::shared_ptr& director); 19 | virtual ~Renderer(); 20 | 21 | virtual void Render(float delta); 22 | void OnWindowResized(int width, int height); 23 | void SetTargetSize(int width, int height); 24 | 25 | protected: 26 | QOpenGLFunctions_3_3_Core* functions = nullptr; 27 | std::shared_ptr director = nullptr; 28 | std::shared_ptr shader_program = nullptr; 29 | glm::mat4 model{}; 30 | GLuint render_vao = 0; 31 | 32 | int width = 0; 33 | int height = 0; 34 | 35 | int window_width = 0; 36 | int window_height = 0; 37 | 38 | private: 39 | 40 | 41 | 42 | }; 43 | 44 | } -------------------------------------------------------------------------------- /src/client/db/stream_db_manager.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 2023-08-17. 3 | // 4 | 5 | #ifndef SAILFISH_CLIENT_PC_STREAMDBMANAGER_H 6 | #define SAILFISH_CLIENT_PC_STREAMDBMANAGER_H 7 | 8 | #include 9 | #include 10 | #include 11 | #include 12 | 13 | namespace tc 14 | { 15 | 16 | class StreamItem; 17 | 18 | class StreamDBManager { 19 | public: 20 | 21 | StreamDBManager(); 22 | ~StreamDBManager(); 23 | static std::string GenUUID(); 24 | void AddStream(StreamItem &stream); 25 | void UpdateStream(const StreamItem &stream); 26 | std::vector GetAllStreams(); 27 | void DeleteStream(int id); 28 | int RandomColor(); 29 | bool HasStream(const std::string& stream_id); 30 | 31 | private: 32 | 33 | void CreateTables(); 34 | 35 | private: 36 | 37 | std::any db_storage; 38 | 39 | }; 40 | 41 | } 42 | 43 | #endif //SAILFISH_CLIENT_PC_STREAMDBMANAGER_H 44 | -------------------------------------------------------------------------------- /src/client/db/stream_item.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 2023/8/14. 3 | // 4 | 5 | #include "stream_item.h" 6 | 7 | namespace tc 8 | { 9 | 10 | bool StreamItem::IsValid() const { 11 | return !stream_id.empty(); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /src/client/icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/src/client/icon.ico -------------------------------------------------------------------------------- /src/client/icon.rc: -------------------------------------------------------------------------------- 1 | IDI_ICON1 ICON "icon.ico" -------------------------------------------------------------------------------- /src/client/resources/font.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | font/fontawesome-webfont.ttf 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/client/resources/font/Archaic1897-2.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/src/client/resources/font/Archaic1897-2.ttf -------------------------------------------------------------------------------- /src/client/resources/font/Font Awesome Cheatsheet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/src/client/resources/font/Font Awesome Cheatsheet.png -------------------------------------------------------------------------------- /src/client/resources/font/blade.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/src/client/resources/font/blade.ttf -------------------------------------------------------------------------------- /src/client/resources/font/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/src/client/resources/font/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /src/client/resources/font/quixotic-1.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/src/client/resources/font/quixotic-1.otf -------------------------------------------------------------------------------- /src/client/resources/image/bc_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/src/client/resources/image/bc_icon.png -------------------------------------------------------------------------------- /src/client/resources/image/bc_icon_raw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/src/client/resources/image/bc_icon_raw.png -------------------------------------------------------------------------------- /src/client/resources/image/btn_close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/src/client/resources/image/btn_close.png -------------------------------------------------------------------------------- /src/client/resources/image/btn_ok.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/src/client/resources/image/btn_ok.png -------------------------------------------------------------------------------- /src/client/resources/image/dota2_cache.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/src/client/resources/image/dota2_cache.jpg -------------------------------------------------------------------------------- /src/client/resources/image/empty.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/client/resources/image/ic_agree.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/client/resources/image/ic_arrow_right_1.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/client/resources/image/ic_arrow_right_2.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/client/resources/image/ic_audio_on.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/client/resources/image/ic_check.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/client/resources/image/ic_clipboard_off.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/client/resources/image/ic_clipboard_on.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/client/resources/image/ic_close.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/client/resources/image/ic_close_notification.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/client/resources/image/ic_computer.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/client/resources/image/ic_control.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/client/resources/image/ic_desktop.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/client/resources/image/ic_expand.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/client/resources/image/ic_file_transfer.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/client/resources/image/ic_fullscreen.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/client/resources/image/ic_fullscreen_exit.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/client/resources/image/ic_mail.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/client/resources/image/ic_minimize.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/client/resources/image/ic_mode.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/client/resources/image/ic_open_notification.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/client/resources/image/ic_settings.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/client/resources/image/ic_stream.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/client/resources/image/ic_transfer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/src/client/resources/image/ic_transfer.png -------------------------------------------------------------------------------- /src/client/resources/image/ic_vert_dots.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/client/resources/image/ic_vert_dots_hover.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/client/resources/image/ic_vert_dots_pressed.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/client/resources/image/ic_volume_off.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/client/resources/image/ic_volume_on.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/client/resources/image/logo_text.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/src/client/resources/image/logo_text.png -------------------------------------------------------------------------------- /src/client/resources/image/msg_error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/src/client/resources/image/msg_error.png -------------------------------------------------------------------------------- /src/client/resources/image/msg_info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/src/client/resources/image/msg_info.png -------------------------------------------------------------------------------- /src/client/resources/image/msg_question.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/src/client/resources/image/msg_question.png -------------------------------------------------------------------------------- /src/client/resources/image/tc_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/src/client/resources/image/tc_icon.png -------------------------------------------------------------------------------- /src/client/resources/image/tc_icon_raw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/src/client/resources/image/tc_icon_raw.png -------------------------------------------------------------------------------- /src/client/resources/image/test_cover.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/src/client/resources/image/test_cover.jpg -------------------------------------------------------------------------------- /src/client/resources/image/windows.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/client/resources/main.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | image/btn_close.png 4 | image/btn_ok.png 5 | image/msg_error.png 6 | image/msg_info.png 7 | image/msg_question.png 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/client/transfer/file_writer.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 10/07/2024. 3 | // 4 | 5 | #include "file_writer.h" 6 | -------------------------------------------------------------------------------- /src/client/transfer/file_writer.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 10/07/2024. 3 | // 4 | 5 | #ifndef GAMMARAYPC_FILE_WRITER_H 6 | #define GAMMARAYPC_FILE_WRITER_H 7 | 8 | namespace tc 9 | { 10 | 11 | class FileWriter { 12 | public: 13 | }; 14 | 15 | } 16 | 17 | #endif //GAMMARAYPC_FILE_WRITER_H 18 | -------------------------------------------------------------------------------- /src/client/transfer/fs_file.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 8/08/2024. 3 | // 4 | 5 | #ifndef GAMMARAYPC_FS_FILE_H 6 | #define GAMMARAYPC_FS_FILE_H 7 | 8 | #include "tc_common_new/file.h" 9 | 10 | namespace tc 11 | { 12 | 13 | using SendTask = std::function; 14 | 15 | class FsFile { 16 | public: 17 | FsFile(const QString& path, int read_block_size); 18 | bool Send(SendTask && task); 19 | [[nodiscard]] bool IsOpen() const; 20 | 21 | private: 22 | std::string MakeTransferMessage(uint64_t offset, std::shared_ptr&& data) const; 23 | 24 | public: 25 | std::string file_id_; 26 | QString file_path_; 27 | QString file_name_; 28 | QString ref_path_; // xx/xx/xx.zip 29 | QString ref_folder_; // xx/xx/ 30 | QString base_folder_name_; 31 | std::shared_ptr file_ = nullptr; 32 | int read_block_size_ = 0; 33 | uint64_t file_size_ = -1; 34 | }; 35 | 36 | } 37 | 38 | #endif //GAMMARAYPC_FS_FILE_H 39 | -------------------------------------------------------------------------------- /src/client/transfer/fs_folder.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 8/08/2024. 3 | // 4 | 5 | #include "fs_folder.h" 6 | -------------------------------------------------------------------------------- /src/client/transfer/fs_folder.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 8/08/2024. 3 | // 4 | 5 | #ifndef GAMMARAYPC_FS_FOLDER_H 6 | #define GAMMARAYPC_FS_FOLDER_H 7 | 8 | namespace tc 9 | { 10 | 11 | class FsFolder { 12 | 13 | }; 14 | 15 | } 16 | 17 | #endif //GAMMARAYPC_FS_FOLDER_H 18 | -------------------------------------------------------------------------------- /src/client/transfer/fs_object.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 10/07/2024. 3 | // 4 | 5 | #ifndef GAMMARAYPC_FS_OBJECT_H 6 | #define GAMMARAYPC_FS_OBJECT_H 7 | 8 | #include "tc_common_new/file.h" 9 | #include "fs_file.h" 10 | #include 11 | 12 | namespace tc 13 | { 14 | class File; 15 | 16 | class FileSystemObject { 17 | public: 18 | explicit FileSystemObject(const QString& file_path, int read_block_size); 19 | bool IsFolder() const; 20 | 21 | public: 22 | // file 23 | std::shared_ptr fs_file_ = nullptr; 24 | 25 | // folder 26 | bool is_folder_ = false; 27 | std::vector> fs_files_; 28 | QString folder_path_; 29 | }; 30 | 31 | } 32 | #endif //GAMMARAYPC_FS_OBJECT_H 33 | -------------------------------------------------------------------------------- /src/client/ui/about_content.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 2024/5/21. 3 | // 4 | 5 | #include "about_content.h" 6 | 7 | namespace tc 8 | { 9 | 10 | AboutContent::AboutContent(const std::shared_ptr& ctx, QWidget* parent) : AppContent(ctx, parent) { 11 | 12 | } 13 | 14 | } -------------------------------------------------------------------------------- /src/client/ui/about_content.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 2024/5/21. 3 | // 4 | 5 | #ifndef GAMMARAYPC_ABOUT_CONTENT_H 6 | #define GAMMARAYPC_ABOUT_CONTENT_H 7 | 8 | #include "app_content.h" 9 | 10 | #include 11 | 12 | namespace tc 13 | { 14 | 15 | class ClientContext; 16 | class Settings; 17 | 18 | class AboutContent : public AppContent { 19 | public: 20 | AboutContent(const std::shared_ptr& ctx, QWidget* parent = nullptr); 21 | 22 | }; 23 | 24 | } 25 | 26 | #endif //GAMMARAYPC_ABOUT_CONTENT_H 27 | -------------------------------------------------------------------------------- /src/client/ui/app_color_theme.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 2023/8/16. 3 | // 4 | 5 | #include "app_color_theme.h" 6 | 7 | namespace tc 8 | { 9 | 10 | int AppColorTheme::kAppMenuItemBgNormalColor = 0xbbbbbb; 11 | int AppColorTheme::kAppMenuItemBgHoverColor = 0x2979ff; 12 | int AppColorTheme::kAppMenuItemBgPressColor = 0x2171cf; 13 | int AppColorTheme::kAppMenuItemFontNormalColor = 0x333333; 14 | int AppColorTheme::kAppMenuItemFontSelectedColor = 0x333333; 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/client/ui/app_color_theme.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 2023/8/16. 3 | // 4 | 5 | #ifndef SAILFISH_SERVER_APPCOLORTHEME_H 6 | #define SAILFISH_SERVER_APPCOLORTHEME_H 7 | 8 | 9 | namespace tc 10 | { 11 | 12 | class AppColorTheme { 13 | public: 14 | 15 | static int kAppMenuItemBgNormalColor; 16 | static int kAppMenuItemBgHoverColor; 17 | static int kAppMenuItemBgPressColor; 18 | static int kAppMenuItemFontNormalColor; 19 | static int kAppMenuItemFontSelectedColor; 20 | 21 | }; 22 | 23 | } 24 | 25 | #endif //SAILFISH_SERVER_APPCOLORTHEME_H 26 | -------------------------------------------------------------------------------- /src/client/ui/app_content.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 2023/8/16. 3 | // 4 | 5 | #include "app_content.h" 6 | 7 | #include "client/ct_settings.h" 8 | 9 | #include 10 | #include 11 | #include 12 | 13 | namespace tc 14 | { 15 | 16 | AppContent::AppContent(const std::shared_ptr& ctx, QWidget* parent) : RoundRectWidget(0xffffff, 0, parent) { 17 | context_ = ctx; 18 | settings_ = Settings::Instance(); 19 | } 20 | 21 | AppContent::~AppContent() = default; 22 | 23 | void AppContent::OnContentShow() { 24 | } 25 | 26 | void AppContent::OnContentHide() { 27 | } 28 | 29 | } -------------------------------------------------------------------------------- /src/client/ui/app_content.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 2023/8/16. 3 | // 4 | 5 | #ifndef SAILFISH_SERVER_APPCONTENT_H 6 | #define SAILFISH_SERVER_APPCONTENT_H 7 | 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | 15 | #include "round_rect_widget.h" 16 | 17 | namespace tc 18 | { 19 | 20 | class ClientContext; 21 | class Settings; 22 | 23 | class AppContent : public RoundRectWidget { 24 | public: 25 | explicit AppContent(const std::shared_ptr& ctx, QWidget* parent = nullptr); 26 | ~AppContent() override; 27 | 28 | virtual void OnContentShow(); 29 | virtual void OnContentHide(); 30 | 31 | protected: 32 | std::shared_ptr context_ = nullptr; 33 | Settings* settings_ = nullptr; 34 | }; 35 | 36 | } 37 | 38 | #endif //SAILFISH_SERVER_APPCONTENT_H 39 | -------------------------------------------------------------------------------- /src/client/ui/base_widget.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 3/07/2024. 3 | // 4 | 5 | #include "base_widget.h" 6 | #include "client/ct_client_context.h" 7 | 8 | namespace tc 9 | { 10 | 11 | BaseWidget::BaseWidget(const std::shared_ptr& ctx, QWidget* parent) : QWidget(parent), context_(ctx) { 12 | 13 | } 14 | 15 | void BaseWidget::CreateMsgListener() { 16 | msg_listener_ = context_->GetMessageNotifier()->CreateListener(); 17 | } 18 | 19 | void BaseWidget::SetOnClickListener(OnClickListener&& l) { 20 | click_listener_ = l; 21 | } 22 | 23 | void BaseWidget::Hide() { 24 | this->hide(); 25 | } 26 | 27 | void BaseWidget::Show() { 28 | this->show(); 29 | } 30 | 31 | } -------------------------------------------------------------------------------- /src/client/ui/debug_panel.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 12/08/2024. 3 | // 4 | 5 | #ifndef GAMMARAYPC_DEBUG_PANEL_H 6 | #define GAMMARAYPC_DEBUG_PANEL_H 7 | 8 | #include "base_widget.h" 9 | #include "tc_message.pb.h" 10 | 11 | namespace tc 12 | { 13 | 14 | class KeyStatePanel; 15 | class FloatIcon; 16 | 17 | class DebugPanel : public BaseWidget { 18 | public: 19 | explicit DebugPanel(const std::shared_ptr& ctx, QWidget* parent = nullptr); 20 | 21 | void resizeEvent(QResizeEvent *event) override; 22 | void paintEvent(QPaintEvent *event) override; 23 | 24 | void UpdateOnHeartBeat(const OnHeartBeat& hb); 25 | 26 | private: 27 | KeyStatePanel* key_state_panel_ = nullptr; 28 | FloatIcon* close_btn_ = nullptr; 29 | }; 30 | 31 | } 32 | 33 | #endif //GAMMARAYPC_DEBUG_PANEL_H 34 | -------------------------------------------------------------------------------- /src/client/ui/float_3rd_resolution_panel.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 17/08/2024. 3 | // 4 | 5 | #ifndef GAMMARAYPC_FLOAT_3RD_RESOLUTION_PANEL_H 6 | #define GAMMARAYPC_FLOAT_3RD_RESOLUTION_PANEL_H 7 | 8 | #include "base_widget.h" 9 | #include 10 | #include "client/ct_app_message.h" 11 | 12 | namespace tc 13 | { 14 | 15 | class Settings; 16 | class SwitchButton; 17 | class SingleSelectedList; 18 | 19 | class ThirdResolutionPanel : BaseWidget { 20 | public: 21 | explicit ThirdResolutionPanel(const std::shared_ptr& ctx, QWidget* parent = nullptr); 22 | void paintEvent(QPaintEvent *event) override; 23 | void Hide() override; 24 | void Show() override; 25 | void UpdateMonitor(const CaptureMonitorMessage::CaptureMonitor& m); 26 | private: 27 | void SelectCapturingMonitorSize(); 28 | 29 | private: 30 | Settings* settings_ = nullptr; 31 | SingleSelectedList* listview_ = nullptr; 32 | CaptureMonitorMessage::CaptureMonitor monitor_; 33 | }; 34 | 35 | } 36 | 37 | #endif 38 | -------------------------------------------------------------------------------- /src/client/ui/float_3rd_scale_panel.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 17/08/2024. 3 | // 4 | 5 | #ifndef GAMMARAYPC_FLOAT_3RD_SCALE_PANEL_H 6 | #define GAMMARAYPC_FLOAT_3RD_SCALE_PANEL_H 7 | 8 | #include "base_widget.h" 9 | #include 10 | #include "client/ct_settings.h" 11 | 12 | namespace tc 13 | { 14 | 15 | class Settings; 16 | class SingleSelectedList; 17 | 18 | class ThirdScalePanel : BaseWidget { 19 | public: 20 | explicit ThirdScalePanel(const std::shared_ptr& ctx, QWidget* parent = nullptr); 21 | void paintEvent(QPaintEvent *event) override; 22 | 23 | private: 24 | void UpdateScaleMode(ScaleMode mode); 25 | 26 | private: 27 | Settings* settings_ = nullptr; 28 | SingleSelectedList* listview_ = nullptr; 29 | }; 30 | 31 | } 32 | 33 | #endif 34 | -------------------------------------------------------------------------------- /src/client/ui/float_button_state_indicator.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 2/09/2024. 3 | // 4 | 5 | #ifndef GAMMARAYPC_FLOAT_BUTTON_STATE_INDICATOR_H 6 | #define GAMMARAYPC_FLOAT_BUTTON_STATE_INDICATOR_H 7 | 8 | #include "base_widget.h" 9 | #include "tc_message.pb.h" 10 | 11 | namespace tc 12 | { 13 | 14 | class ClientContext; 15 | class KeyStatePanel; 16 | class KeyItem; 17 | 18 | class FloatButtonStateIndicator : public BaseWidget { 19 | public: 20 | explicit FloatButtonStateIndicator(const std::shared_ptr& ctx, QWidget* parent = nullptr); 21 | void paintEvent(QPaintEvent *event) override; 22 | void UpdateOnHeartBeat(const OnHeartBeat& hb); 23 | int GetPressedCount(); 24 | 25 | private: 26 | KeyItem* alt_item_ = nullptr; 27 | KeyItem* shift_item_ = nullptr; 28 | KeyItem* control_item_ = nullptr; 29 | KeyItem* win_item_ = nullptr; 30 | }; 31 | 32 | } 33 | 34 | #endif //GAMMARAYPC_FLOAT_BUTTON_STATE_INDICATOR_H 35 | -------------------------------------------------------------------------------- /src/client/ui/float_icon.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 6/07/2024. 3 | // 4 | 5 | #ifndef GAMMARAYPC_FLOAT_ICON_H 6 | #define GAMMARAYPC_FLOAT_ICON_H 7 | 8 | #include "base_widget.h" 9 | 10 | namespace tc 11 | { 12 | 13 | class FloatIcon : public BaseWidget { 14 | public: 15 | explicit FloatIcon(const std::shared_ptr& ctx, QWidget* parent = nullptr); 16 | void paintEvent(QPaintEvent *event) override; 17 | void enterEvent(QEnterEvent *event) override; 18 | void leaveEvent(QEvent *event) override; 19 | void mousePressEvent(QMouseEvent *event) override; 20 | void mouseReleaseEvent(QMouseEvent *event) override; 21 | void SetIcons(const QString& normal_path, const QString& selected_path); 22 | void SwitchToNormalState(); 23 | void SwitchToSelectedState(); 24 | private: 25 | bool is_selected_ = false; 26 | QPixmap normal_pixmap_; 27 | QPixmap selected_pixmap_; 28 | bool enter_ = false; 29 | bool pressed_ = false; 30 | }; 31 | 32 | } 33 | 34 | #endif //GAMMARAYPC_FLOAT_ICON_H 35 | -------------------------------------------------------------------------------- /src/client/ui/float_sub_control_panel.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 17/08/2024. 3 | // 4 | 5 | #ifndef GAMMARAYPC_FLOAT_SUB_CONTROL_PANEL_H 6 | #define GAMMARAYPC_FLOAT_SUB_CONTROL_PANEL_H 7 | 8 | #include "base_widget.h" 9 | #include 10 | 11 | namespace tc 12 | { 13 | 14 | class SubControlPanel : BaseWidget { 15 | public: 16 | explicit SubControlPanel(const std::shared_ptr& ctx, QWidget* parent = nullptr); 17 | void paintEvent(QPaintEvent *event) override; 18 | 19 | private: 20 | void RequestCtrlAltDelete(); 21 | }; 22 | 23 | } 24 | 25 | #endif //GAMMARAYPC_FLOAT_SUB_CONTROL_PANEL_H 26 | -------------------------------------------------------------------------------- /src/client/ui/float_sub_display_panel.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 17/08/2024. 3 | // 4 | 5 | #ifndef GAMMARAYPC_FLOAT_SUB_DISPLAY_PANEL_H 6 | #define GAMMARAYPC_FLOAT_SUB_DISPLAY_PANEL_H 7 | 8 | #include "base_widget.h" 9 | #include 10 | #include "client/ct_app_message.h" 11 | 12 | namespace tc 13 | { 14 | 15 | enum SubDisplayType { 16 | kScale, 17 | kResolution, 18 | }; 19 | 20 | class SubDisplayPanel : BaseWidget { 21 | public: 22 | explicit SubDisplayPanel(const std::shared_ptr& ctx, QWidget* parent = nullptr); 23 | void paintEvent(QPaintEvent *event) override; 24 | void Show() override; 25 | void Hide() override; 26 | void UpdateMonitorInfo(const CaptureMonitorMessage& m); 27 | 28 | private: 29 | BaseWidget* GetSubPanel(const SubDisplayType& type); 30 | void HideAllSubPanels(); 31 | 32 | private: 33 | std::map sub_panels_; 34 | CaptureMonitorMessage monitors_; 35 | }; 36 | 37 | } 38 | 39 | #endif 40 | -------------------------------------------------------------------------------- /src/client/ui/float_sub_mode_panel.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 17/08/2024. 3 | // 4 | 5 | #ifndef GAMMARAYPC_FLOAT_SUB_MODE_PANEL_H 6 | #define GAMMARAYPC_FLOAT_SUB_MODE_PANEL_H 7 | 8 | #include "base_widget.h" 9 | #include 10 | 11 | namespace tc 12 | { 13 | 14 | class Settings; 15 | class SwitchButton; 16 | 17 | class SubModePanel : BaseWidget { 18 | public: 19 | explicit SubModePanel(const std::shared_ptr& ctx, QWidget* parent = nullptr); 20 | void paintEvent(QPaintEvent *event) override; 21 | 22 | private: 23 | Settings* settings_ = nullptr; 24 | SwitchButton* sb_work_ = nullptr; 25 | SwitchButton* sb_game_ = nullptr; 26 | }; 27 | 28 | } 29 | 30 | #endif //GAMMARAYPC_FLOAT_SUB_MODE_PANEL_H 31 | -------------------------------------------------------------------------------- /src/client/ui/no_margin_layout.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 2024-04-10. 3 | // 4 | 5 | #include "no_margin_layout.h" 6 | -------------------------------------------------------------------------------- /src/client/ui/no_margin_layout.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 2024-04-10. 3 | // 4 | 5 | #ifndef TC_SERVER_STEAM_NO_MARGIN_LAYOUT_H 6 | #define TC_SERVER_STEAM_NO_MARGIN_LAYOUT_H 7 | 8 | #include 9 | #include 10 | 11 | namespace tc 12 | { 13 | 14 | class NoMarginVLayout : public QVBoxLayout { 15 | public: 16 | NoMarginVLayout() : QVBoxLayout() { 17 | setSpacing(0); 18 | setContentsMargins(0,0,0,0); 19 | } 20 | }; 21 | 22 | class NoMarginHLayout : public QHBoxLayout { 23 | public: 24 | NoMarginHLayout() : QHBoxLayout() { 25 | setSpacing(0); 26 | setContentsMargins(0,0,0,0); 27 | } 28 | }; 29 | 30 | } 31 | #endif //TC_SERVER_STEAM_NO_MARGIN_LAYOUT_H 32 | -------------------------------------------------------------------------------- /src/client/ui/round_rect_widget.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 2023/8/30. 3 | // 4 | 5 | #include "round_rect_widget.h" 6 | #include 7 | 8 | namespace tc 9 | { 10 | 11 | RoundRectWidget::RoundRectWidget(int bg_color, int radius, QWidget *parent) : QWidget(parent) { 12 | this->bg_color_ = bg_color; 13 | this->radius_ = radius; 14 | } 15 | 16 | void RoundRectWidget::paintEvent(QPaintEvent *event) { 17 | QPainter painter(this); 18 | painter.setRenderHint(QPainter::Antialiasing); 19 | 20 | painter.setPen(Qt::NoPen); 21 | painter.setBrush(QBrush(QColor(bg_color_))); 22 | painter.drawRoundedRect(0, 0, this->width(), this->height(), radius_, radius_); 23 | } 24 | 25 | } -------------------------------------------------------------------------------- /src/client/ui/round_rect_widget.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 2023/8/30. 3 | // 4 | 5 | #ifndef SAILFISH_SERVER_ROUNDRECTWIDGET_H 6 | #define SAILFISH_SERVER_ROUNDRECTWIDGET_H 7 | 8 | #include 9 | 10 | namespace tc 11 | { 12 | 13 | class RoundRectWidget : public QWidget { 14 | public: 15 | RoundRectWidget(int bg_color, int radius, QWidget *parent = nullptr); 16 | void paintEvent(QPaintEvent *event) override; 17 | 18 | private: 19 | int bg_color_ = 0; 20 | int radius_ = 0; 21 | 22 | }; 23 | 24 | } 25 | 26 | #endif //SAILFISH_SERVER_ROUNDRECTWIDGET_H 27 | -------------------------------------------------------------------------------- /src/client/ui/settings_content.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 2023/8/16. 3 | // 4 | 5 | #ifndef SAILFISH_SERVER_SETTINGSCONTENT_H 6 | #define SAILFISH_SERVER_SETTINGSCONTENT_H 7 | 8 | #include "app_content.h" 9 | 10 | namespace tc 11 | { 12 | 13 | class ClientContext; 14 | class Settings; 15 | class MultiDisplayModeWidget; 16 | 17 | class SettingsContent : public AppContent { 18 | public: 19 | 20 | explicit SettingsContent(const std::shared_ptr& ctx, QWidget* parent = nullptr); 21 | ~SettingsContent() override; 22 | 23 | void OnContentShow() override; 24 | void OnContentHide() override; 25 | 26 | private: 27 | 28 | Settings* settings_ = nullptr; 29 | MultiDisplayModeWidget* combined_; 30 | MultiDisplayModeWidget* separated_; 31 | }; 32 | 33 | } 34 | 35 | #endif //SAILFISH_SERVER_INFORMATIONCONTENT_H 36 | -------------------------------------------------------------------------------- /src/client/ui/widget_helper.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 2024/3/8. 3 | // 4 | 5 | #ifndef TC_CLIENT_PC_WIDGET_HELPER_H 6 | #define TC_CLIENT_PC_WIDGET_HELPER_H 7 | 8 | #include 9 | #include 10 | 11 | namespace tc 12 | { 13 | 14 | class WidgetHelper { 15 | public: 16 | 17 | static void ClearMargin(QLayout* layout) { 18 | layout->setSpacing(0); 19 | layout->setContentsMargins(0,0,0,0); 20 | } 21 | 22 | static void AddShadow(QWidget* w, int color = 0xBBBBBB, int radius = 15) { 23 | auto ps = new QGraphicsDropShadowEffect(); 24 | ps->setBlurRadius(radius); 25 | ps->setOffset(0, 0); 26 | ps->setColor(color); 27 | w->setGraphicsEffect(ps); 28 | } 29 | 30 | }; 31 | 32 | } 33 | 34 | #endif //TC_CLIENT_PC_WIDGET_HELPER_H 35 | -------------------------------------------------------------------------------- /src/render/app/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core Core5Compat Widgets) 2 | find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core Core5Compat Widgets) 3 | 4 | if (WIN32) 5 | add_library(app_manager 6 | app_manager.cpp 7 | app_manager_factory.cpp 8 | app_timer.cpp 9 | app_shared_info.cpp 10 | steam_game.cpp 11 | clipboard_manager.cpp 12 | win/app_manager_win.cpp 13 | win/dx_address_loader.cpp 14 | win/win_event_replayer.cpp 15 | video_frame_carrier.cpp 16 | monitor_refresher.cpp 17 | ) 18 | target_link_libraries(app_manager tc_message frame_render libprotobuf) 19 | target_link_libraries(app_manager Qt6::Core Qt6::Core5Compat Qt6::Widgets) 20 | elseif (APPLE) 21 | 22 | elseif (UNIX) 23 | 24 | endif () -------------------------------------------------------------------------------- /src/render/app/app_manager.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 2023-12-20. 3 | // 4 | 5 | #include "app_manager.h" 6 | #include "context.h" 7 | #include "tc_common_new/log.h" 8 | #include "tc_steam_manager_new/steam_manager.h" 9 | 10 | namespace tc 11 | { 12 | 13 | AppManager::AppManager(const std::shared_ptr& ctx) { 14 | context_ = ctx; 15 | } 16 | 17 | AppManager::~AppManager() { 18 | 19 | } 20 | 21 | void AppManager::Init() { 22 | msg_listener_ = context_->GetMessageNotifier()->CreateListener(); 23 | } 24 | 25 | bool AppManager::StartProcess() { 26 | return true; 27 | } 28 | 29 | bool AppManager::StartProcessWithHook() { 30 | return true; 31 | } 32 | 33 | void AppManager::Exit() { 34 | 35 | } 36 | 37 | void AppManager::CloseCurrentApp() { 38 | 39 | } 40 | 41 | } -------------------------------------------------------------------------------- /src/render/app/app_manager.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 2023-12-20. 3 | // 4 | 5 | #ifndef TC_APPLICATION_APP_MANAGER_H 6 | #define TC_APPLICATION_APP_MANAGER_H 7 | 8 | #include 9 | 10 | #include "tc_capture_new/win/inject_params.h" 11 | 12 | namespace tc 13 | { 14 | 15 | class Context; 16 | class MessageListener; 17 | class SteamManager; 18 | 19 | class AppManager { 20 | public: 21 | 22 | explicit AppManager(const std::shared_ptr& ctx); 23 | virtual ~AppManager(); 24 | 25 | virtual void Init(); 26 | virtual bool StartProcess(); 27 | virtual bool StartProcessWithHook(); 28 | virtual void Exit(); 29 | virtual void* GetWindowHandle() = 0; 30 | virtual void CloseCurrentApp(); 31 | 32 | protected: 33 | std::shared_ptr context_ = nullptr; 34 | std::shared_ptr msg_listener_ = nullptr; 35 | }; 36 | 37 | } 38 | 39 | #endif //TC_APPLICATION_APP_MANAGER_H 40 | -------------------------------------------------------------------------------- /src/render/app/app_manager_factory.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 2023-12-22. 3 | // 4 | 5 | #include "app_manager_factory.h" 6 | 7 | #ifdef WIN32 8 | #include "app/win/app_manager_win.h" 9 | #else 10 | #include "app_manager_linux.h" 11 | #endif 12 | 13 | namespace tc 14 | { 15 | 16 | std::shared_ptr AppManagerFactory::Make(const std::shared_ptr& ctx) { 17 | #ifdef WIN32 18 | auto mgr = std::make_shared(ctx); 19 | mgr->Init(); 20 | return mgr; 21 | #else 22 | return nullptr; 23 | #endif 24 | } 25 | 26 | } -------------------------------------------------------------------------------- /src/render/app/app_manager_factory.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 2023-12-22. 3 | // 4 | 5 | #ifndef TC_APPLICATION_APP_MANAGER_FACTORY_H 6 | #define TC_APPLICATION_APP_MANAGER_FACTORY_H 7 | 8 | #include 9 | 10 | namespace tc 11 | { 12 | 13 | class Context; 14 | class AppManager; 15 | 16 | class AppManagerFactory { 17 | public: 18 | 19 | static std::shared_ptr Make(const std::shared_ptr& ctx); 20 | 21 | }; 22 | 23 | } 24 | 25 | #endif //TC_APPLICATION_APP_MANAGER_FACTORY_H 26 | -------------------------------------------------------------------------------- /src/render/app/app_manager_linux.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 2023-12-21. 3 | // 4 | 5 | #include "app_manager_linux.h" 6 | -------------------------------------------------------------------------------- /src/render/app/app_manager_linux.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 2023-12-21. 3 | // 4 | 5 | #ifndef TC_APPLICATION_APP_MANAGER_LINUX_H 6 | #define TC_APPLICATION_APP_MANAGER_LINUX_H 7 | 8 | 9 | class app_manager_linux { 10 | 11 | }; 12 | 13 | 14 | #endif //TC_APPLICATION_APP_MANAGER_LINUX_H 15 | -------------------------------------------------------------------------------- /src/render/app/app_timer.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 2024-02-05. 3 | // 4 | 5 | #ifndef TC_APPLICATION_APP_TIMER_H 6 | #define TC_APPLICATION_APP_TIMER_H 7 | 8 | #include 9 | #include 10 | #include 11 | #include 12 | 13 | namespace tc 14 | { 15 | 16 | class Context; 17 | 18 | enum AppTimerDuration { 19 | kTimerDuration1000 = 1000, 20 | kTimerDuration2000 = 2000, 21 | kTimerDuration100 = 100, 22 | kTimerDuration16 = 16, 23 | }; 24 | 25 | class AppTimer { 26 | public: 27 | 28 | explicit AppTimer(const std::shared_ptr& ctx); 29 | void StartTimers(); 30 | 31 | private: 32 | void NotifyTimeout(AppTimerDuration duration); 33 | 34 | private: 35 | std::shared_ptr context_ = nullptr; 36 | std::shared_ptr timer_ = nullptr; 37 | }; 38 | 39 | } 40 | 41 | #endif //TC_APPLICATION_APP_TIMER_H 42 | -------------------------------------------------------------------------------- /src/render/app/clipboard_manager.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 16/08/2024. 3 | // 4 | 5 | #ifndef GAMMARAYPC_CLIPBOARD_H 6 | #define GAMMARAYPC_CLIPBOARD_H 7 | 8 | #include 9 | #include 10 | 11 | namespace tc 12 | { 13 | 14 | class Context; 15 | 16 | class ClipboardManager : public QObject { 17 | public: 18 | explicit ClipboardManager(const std::shared_ptr& ctx); 19 | void Monitor(); 20 | void UpdateRemoteInfo(const QString& info); 21 | 22 | private: 23 | std::shared_ptr context_ = nullptr; 24 | QString remote_info_; 25 | }; 26 | 27 | } 28 | 29 | #endif //GAMMARAYPC_CLIPBOARD_H 30 | -------------------------------------------------------------------------------- /src/render/app/monitor_refresher.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 20/02/2025. 3 | // 4 | 5 | #ifndef GAMMARAY_MONITOR_REFRESHER_H 6 | #define GAMMARAY_MONITOR_REFRESHER_H 7 | 8 | #include 9 | #include 10 | 11 | namespace tc 12 | { 13 | 14 | class Context; 15 | class MessageListener; 16 | 17 | // Widget 18 | class MonitorRefreshWidget : public QWidget { 19 | public: 20 | explicit MonitorRefreshWidget(const std::shared_ptr& ctx, QWidget* parent); 21 | void paintEvent(QPaintEvent *event) override; 22 | 23 | private: 24 | std::shared_ptr context_ = nullptr; 25 | }; 26 | 27 | // Refresher 28 | class MonitorRefresher { 29 | public: 30 | explicit MonitorRefresher(const std::shared_ptr& ctx, QWidget* parent); 31 | 32 | private: 33 | std::shared_ptr context_ = nullptr; 34 | std::shared_ptr msg_listener_ = nullptr; 35 | }; 36 | 37 | } 38 | 39 | #endif //GAMMARAY_MONITOR_REFRESHER_H 40 | -------------------------------------------------------------------------------- /src/render/app/steam_game.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 2024/4/17. 3 | // 4 | 5 | #ifndef TC_APPLICATION_STEAM_GAME_H 6 | #define TC_APPLICATION_STEAM_GAME_H 7 | 8 | #include 9 | #include 10 | #include 11 | 12 | namespace tc 13 | { 14 | 15 | class Context; 16 | class SteamApp; 17 | 18 | // deprecated 19 | class SteamGame { 20 | public: 21 | 22 | explicit SteamGame(const std::shared_ptr& ctx); 23 | std::string GetSteamInstalledPath(); 24 | std::string GetSteamExePath(); 25 | std::string GetSteamCachePath(); 26 | std::vector> GetInstalledGames(); 27 | bool Ready(); 28 | void RequestSteamGames(); 29 | 30 | private: 31 | std::shared_ptr context_ = nullptr; 32 | std::string steam_installed_path_; 33 | std::string steam_exe_path_; 34 | std::string steam_cache_dir_; 35 | std::vector> games_; 36 | }; 37 | 38 | } 39 | 40 | #endif //TC_APPLICATION_STEAM_GAME_H 41 | -------------------------------------------------------------------------------- /src/render/app/win/dx_address_loader.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 2024/3/17. 3 | // 4 | 5 | #ifndef TC_APPLICATION_DX_ADDRESS_LOADER_H 6 | #define TC_APPLICATION_DX_ADDRESS_LOADER_H 7 | 8 | #include 9 | 10 | namespace tc 11 | { 12 | 13 | class AppSharedMessage; 14 | 15 | class DxAddressLoader { 16 | public: 17 | 18 | static std::shared_ptr LoadDxAddress(); 19 | 20 | }; 21 | 22 | } 23 | 24 | #endif //TC_APPLICATION_DX_ADDRESS_LOADER_H 25 | -------------------------------------------------------------------------------- /src/render/network/http_handler.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 2023/12/20. 3 | // 4 | 5 | #ifndef TC_APPLICATION_HTTP_HANDLER_H 6 | #define TC_APPLICATION_HTTP_HANDLER_H 7 | 8 | #include 9 | #include "tc_3rdparty/json/json.hpp" 10 | 11 | using namespace nlohmann; 12 | 13 | namespace tc 14 | { 15 | 16 | class Application; 17 | class Context; 18 | 19 | class HttpHandler { 20 | public: 21 | explicit HttpHandler(const std::shared_ptr& app); 22 | void HandlePing(http::web_request &req, http::web_response &rep); 23 | 24 | private: 25 | std::string WrapBasicInfo(int code, const std::string& msg, const std::string& data); 26 | std::string WrapBasicInfo(int code, const std::string& msg, const json& data); 27 | 28 | private: 29 | std::shared_ptr app_ = nullptr; 30 | 31 | }; 32 | 33 | } 34 | 35 | #endif //TC_APPLICATION_HTTP_HANDLER_H 36 | -------------------------------------------------------------------------------- /src/render/network/network_factory.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 2024/3/1. 3 | // 4 | 5 | #ifndef TC_APPLICATION_NETWORK_FACTORY_H 6 | #define TC_APPLICATION_NETWORK_FACTORY_H 7 | 8 | // DISABLED 9 | #if 0 10 | 11 | #include 12 | #include "connection.h" 13 | #include "app_server.h" 14 | 15 | namespace tc 16 | { 17 | 18 | class Application; 19 | 20 | class NetworkFactory { 21 | public: 22 | 23 | static std::shared_ptr MakeConnection(const std::shared_ptr& app) { 24 | return std::make_shared(app); 25 | } 26 | 27 | }; 28 | 29 | } 30 | #endif 31 | 32 | #endif //TC_APPLICATION_NETWORK_FACTORY_H 33 | -------------------------------------------------------------------------------- /src/render/network/server_cast.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 2024/3/15. 3 | // 4 | 5 | #include "server_cast.h" 6 | #include "tc_common_new/log.h" 7 | #include "context.h" 8 | 9 | namespace tc 10 | { 11 | 12 | std::shared_ptr ServerCast::Make(std::shared_ptr &ctx) { 13 | return std::make_shared(ctx); 14 | } 15 | 16 | ServerCast::ServerCast(const std::shared_ptr &ctx) : context_(ctx) { 17 | 18 | } 19 | 20 | void ServerCast::Start() { 21 | 22 | } 23 | 24 | void ServerCast::Stop() { 25 | 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /src/render/network/server_cast.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 2024/3/15. 3 | // 4 | 5 | #ifndef TC_APPLICATION_SERVER_CAST_H 6 | #define TC_APPLICATION_SERVER_CAST_H 7 | 8 | #include 9 | 10 | namespace tc 11 | { 12 | 13 | class Context; 14 | 15 | class ServerCast { 16 | public: 17 | 18 | static std::shared_ptr Make(std::shared_ptr& ctx); 19 | 20 | explicit ServerCast(const std::shared_ptr& ctx); 21 | void Start(); 22 | void Stop(); 23 | 24 | private: 25 | std::shared_ptr context_ = nullptr; 26 | 27 | }; 28 | 29 | } 30 | 31 | #endif //TC_APPLICATION_SERVER_CAST_H 32 | -------------------------------------------------------------------------------- /src/render/plugin_interface/gr_audio_encoder_plugin.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 7/12/2024. 3 | // 4 | 5 | #include "gr_audio_encoder_plugin.h" 6 | 7 | namespace tc 8 | { 9 | 10 | GrAudioEncoderPlugin::GrAudioEncoderPlugin() { 11 | 12 | } 13 | 14 | GrAudioEncoderPlugin::~GrAudioEncoderPlugin() { 15 | 16 | } 17 | 18 | bool GrAudioEncoderPlugin::OnCreate(const tc::GrPluginParam& param) { 19 | GrPluginInterface::OnCreate(param); 20 | 21 | return true; 22 | } 23 | 24 | bool GrAudioEncoderPlugin::OnDestroy() { 25 | 26 | return true; 27 | } 28 | 29 | void GrAudioEncoderPlugin::Encode(const std::shared_ptr& data, int sample, int channels, int bits) { 30 | 31 | } 32 | 33 | } -------------------------------------------------------------------------------- /src/render/plugin_interface/gr_audio_encoder_plugin.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 7/12/2024. 3 | // 4 | 5 | #ifndef GAMMARAY_GR_AUDIO_ENCODER_PLUGIN_H 6 | #define GAMMARAY_GR_AUDIO_ENCODER_PLUGIN_H 7 | 8 | #include "gr_plugin_interface.h" 9 | 10 | namespace tc 11 | { 12 | 13 | class Data; 14 | 15 | class GrAudioEncoderPlugin : public GrPluginInterface { 16 | public: 17 | GrAudioEncoderPlugin(); 18 | ~GrAudioEncoderPlugin() override; 19 | 20 | bool OnCreate(const tc::GrPluginParam& param) override; 21 | bool OnDestroy() override; 22 | 23 | virtual void Encode(const std::shared_ptr& data, int sample, int channels, int bits); 24 | 25 | }; 26 | 27 | } 28 | 29 | #endif //GAMMARAY_GR_AUDIO_ENCODER_PLUGIN_H 30 | -------------------------------------------------------------------------------- /src/render/plugin_interface/gr_data_consumer_plugin.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 23/02/2025. 3 | // 4 | 5 | #include "gr_data_consumer_plugin.h" 6 | -------------------------------------------------------------------------------- /src/render/plugin_interface/gr_data_consumer_plugin.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 23/02/2025. 3 | // 4 | 5 | #ifndef GAMMARAY_GR_DATA_CONSUMER_PLUGIN_H 6 | #define GAMMARAY_GR_DATA_CONSUMER_PLUGIN_H 7 | 8 | #include "gr_plugin_interface.h" 9 | 10 | namespace tc 11 | { 12 | 13 | class Message; 14 | 15 | class GrDataConsumerPlugin : public GrPluginInterface { 16 | public: 17 | virtual void OnMessage(const std::string& msg) = 0; 18 | virtual void OnMessage(const std::shared_ptr& msg) = 0; 19 | }; 20 | 21 | } 22 | 23 | #endif //GAMMARAY_GR_DATA_CONSUMER_PLUGIN_H 24 | -------------------------------------------------------------------------------- /src/render/plugin_interface/gr_data_provider_plugin.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 26/11/2024. 3 | // 4 | 5 | #include "gr_data_provider_plugin.h" 6 | 7 | namespace tc 8 | { 9 | 10 | GrDataProviderPlugin::GrDataProviderPlugin() { 11 | 12 | } 13 | 14 | GrDataProviderPlugin::~GrDataProviderPlugin() { 15 | 16 | } 17 | 18 | bool GrDataProviderPlugin::OnCreate(const tc::GrPluginParam& param) { 19 | GrPluginInterface::OnCreate(param); 20 | return true; 21 | } 22 | 23 | bool GrDataProviderPlugin::OnDestroy() { 24 | return true; 25 | } 26 | 27 | void GrDataProviderPlugin::StartProviding() { 28 | 29 | } 30 | 31 | void GrDataProviderPlugin::StopProviding() { 32 | 33 | } 34 | 35 | } -------------------------------------------------------------------------------- /src/render/plugin_interface/gr_data_provider_plugin.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 26/11/2024. 3 | // 4 | 5 | #ifndef GAMMARAY_GR_DATA_PROVIDER_PLUGIN_H 6 | #define GAMMARAY_GR_DATA_PROVIDER_PLUGIN_H 7 | 8 | #include "gr_plugin_interface.h" 9 | 10 | namespace tc 11 | { 12 | 13 | class GrDataProviderPlugin : public GrPluginInterface { 14 | public: 15 | GrDataProviderPlugin(); 16 | ~GrDataProviderPlugin() override; 17 | bool OnCreate(const tc::GrPluginParam& param) override; 18 | bool OnDestroy() override; 19 | virtual void StartProviding(); 20 | virtual void StopProviding(); 21 | }; 22 | 23 | } 24 | 25 | #endif //GAMMARAY_GR_DATA_PROVIDER_PLUGIN_H 26 | -------------------------------------------------------------------------------- /src/render/plugin_interface/gr_frame_processor_plugin.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 25/11/2024. 3 | // 4 | 5 | #include "gr_frame_processor_plugin.h" 6 | 7 | namespace tc 8 | { 9 | GrFrameProcessorPlugin::GrFrameProcessorPlugin() { 10 | 11 | } 12 | 13 | } -------------------------------------------------------------------------------- /src/render/plugin_interface/gr_frame_processor_plugin.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 25/11/2024. 3 | // 4 | 5 | #ifndef GAMMARAY_GR_FRAME_PROCESSOR_H 6 | #define GAMMARAY_GR_FRAME_PROCESSOR_H 7 | 8 | #include "gr_plugin_interface.h" 9 | #include 10 | #include 11 | 12 | using namespace Microsoft::WRL; 13 | 14 | namespace tc 15 | { 16 | 17 | enum class FrameProcessorType { 18 | kPrev, // before encode 19 | kPost, // maybe for debugging 20 | }; 21 | 22 | class GrFrameProcessorPlugin : public GrPluginInterface { 23 | public: 24 | GrFrameProcessorPlugin(); 25 | virtual ComPtr Process(ID3D11Texture2D* input, int target_width, int target_height) = 0; 26 | 27 | public: 28 | int priority_ = 0; 29 | FrameProcessorType processor_type_; 30 | }; 31 | 32 | } 33 | 34 | #endif //GAMMARAY_GR_FRAME_PROCESSOR_H 35 | -------------------------------------------------------------------------------- /src/render/plugin_interface/gr_plugin_context.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 19/11/2024. 3 | // 4 | 5 | #ifndef GAMMARAY_GR_PLUGIN_CONTEXT_H 6 | #define GAMMARAY_GR_PLUGIN_CONTEXT_H 7 | 8 | #include 9 | #include 10 | #include 11 | #include 12 | 13 | namespace asio2 14 | { 15 | class timer; 16 | } 17 | 18 | namespace tc 19 | { 20 | 21 | class Thread; 22 | 23 | class GrPluginContext : public QObject { 24 | public: 25 | explicit GrPluginContext(const std::string& plugin_name); 26 | ~GrPluginContext() override = default; 27 | 28 | void OnDestroy(); 29 | 30 | // tasks 31 | void PostWorkThread(std::function&& task); 32 | void PostUIThread(std::function&& task); 33 | 34 | // timer 35 | void StartTimer(int millis, std::function&& cbk); 36 | 37 | private: 38 | std::shared_ptr work_thread_ = nullptr; 39 | std::shared_ptr timer_ = nullptr; 40 | }; 41 | 42 | } 43 | 44 | #endif //GAMMARAY_GR_PLUGIN_CONTEXT_H 45 | -------------------------------------------------------------------------------- /src/render/plugin_interface/gr_plugin_settings_info.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 3/03/2025. 3 | // 4 | 5 | #ifndef GAMMARAY_GR_PLUGIN_SETTINGS_INFO_H 6 | #define GAMMARAY_GR_PLUGIN_SETTINGS_INFO_H 7 | 8 | #include 9 | 10 | namespace tc 11 | { 12 | 13 | class GrPluginSettingsInfo { 14 | public: 15 | // this device, device id 16 | std::string device_id_; 17 | // relay host 18 | std::string relay_host_; 19 | // relay port 20 | std::string relay_port_; 21 | }; 22 | 23 | } 24 | 25 | #endif //GAMMARAY_GR_PLUGIN_SETTINGS_INFO_H 26 | -------------------------------------------------------------------------------- /src/render/plugins/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_subdirectory(net_udp) 2 | add_subdirectory(net_rtc) 3 | add_subdirectory(net_ws) 4 | add_subdirectory(net_relay) 5 | add_subdirectory(media_recorder) 6 | add_subdirectory(obj_detector) 7 | add_subdirectory(ffmpeg_encoder) 8 | add_subdirectory(amf_encoder) 9 | add_subdirectory(frame_debugger) 10 | add_subdirectory(nvenc_encoder) 11 | add_subdirectory(dda_capture) 12 | add_subdirectory(frame_resizer) 13 | add_subdirectory(mock_video_stream) 14 | add_subdirectory(was_audio_capture) 15 | add_subdirectory(opus_encoder) 16 | add_subdirectory(file_transfer) 17 | 18 | if(TC_USE_VR_MANAGER) 19 | add_definitions(-DVR_MANAGER_ENABLED=1) 20 | add_subdirectory(tc_vr_plugin) 21 | endif () -------------------------------------------------------------------------------- /src/render/plugins/ReadMe.md: -------------------------------------------------------------------------------- 1 | #### About config toml 2 | > We supported to config 4 kinds of data type: integer, string, bool, double 3 | ```toml 4 | # string 5 | name = "RGAA" 6 | 7 | # integer 8 | age = 120 9 | 10 | # bool 11 | love-fishing = true 12 | 13 | # double 14 | code-lines = 100000000.5555555 15 | 16 | ``` -------------------------------------------------------------------------------- /src/render/plugins/amf_encoder/ReadMe.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/src/render/plugins/amf_encoder/ReadMe.md -------------------------------------------------------------------------------- /src/render/plugins/amf_encoder/amf_encoder_defs.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 19/11/2024. 3 | // 4 | 5 | #ifndef GAMMARAY_AMF_ENCODER_DEFS_H 6 | #define GAMMARAY_AMF_ENCODER_DEFS_H 7 | 8 | #include 9 | 10 | namespace tc 11 | { 12 | static const std::string kAmfPluginName = "Amf Encoder Plugin"; 13 | } 14 | 15 | #endif //GAMMARAY_FFMPEG_ENCODER_DEFS_H 16 | -------------------------------------------------------------------------------- /src/render/plugins/amf_encoder/d3d_texture_debug.cpp: -------------------------------------------------------------------------------- 1 | #include "d3d_texture_debug.h" 2 | 3 | #include "tc_common_new/log.h" 4 | #include "tc_common_new/win32/d3d_debug_helper.h" 5 | 6 | namespace tc 7 | { 8 | void D3DTextureDebug::SaveAsDDS(ID3D11DeviceContext* context, ID3D11Texture2D* texture, const std::string& name) { 9 | DebugOutDDS(texture, name); 10 | } 11 | 12 | void D3DTextureDebug::PrintTextureDesc(ID3D11Texture2D* texture) { 13 | D3D11_TEXTURE2D_DESC desc; 14 | texture->GetDesc(&desc); 15 | LOGI("-----------------ID3D11Texture2D Desc------------------"); 16 | LOGI("Width : {} , Height : {}, Format : {}", desc.Width, desc.Height, desc.Format); 17 | LOGI("MipLevels : {}, ArraySize : {}", desc.MipLevels, desc.ArraySize); 18 | LOGI("Usage : {}", desc.Usage); 19 | LOGI("BindFlags : {}", desc.BindFlags); 20 | LOGI("CPUAccessFlags : {}", desc.CPUAccessFlags); 21 | LOGI("MiscFlags : {}", desc.MiscFlags); 22 | LOGI("SampleDesc : {}, {}", desc.SampleDesc.Count, desc.SampleDesc.Quality); 23 | LOGI("-----------------ID3D11Texture2D Desc------------------ END"); 24 | } 25 | 26 | } -------------------------------------------------------------------------------- /src/render/plugins/amf_encoder/d3d_texture_debug.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | 7 | #include 8 | #include 9 | 10 | namespace tc 11 | { 12 | 13 | class D3DTextureDebug { 14 | public: 15 | 16 | static void SaveAsDDS(ID3D11DeviceContext* device, ID3D11Texture2D* texture, const std::string& name); 17 | static void PrintTextureDesc(ID3D11Texture2D* texture); 18 | }; 19 | 20 | } -------------------------------------------------------------------------------- /src/render/plugins/amf_encoder/encode_debug_callback.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "tc_common_new/data.h" 4 | #include 5 | 6 | typedef std::function data, uint64_t frame_idx, bool key)> EncodeDataCallback; 7 | typedef std::function InitEncoderCallback; 8 | -------------------------------------------------------------------------------- /src/render/plugins/amf_encoder/plugin_amf_encoder.dll.toml: -------------------------------------------------------------------------------- 1 | # 2 | author = "RGAA" 3 | 4 | # 5 | description = "This is Frame Debugger" 6 | 7 | # 8 | version_name = "1.2.0" 9 | 10 | # 11 | version_code = 120 12 | 13 | # 14 | enabled = true -------------------------------------------------------------------------------- /src/render/plugins/amf_encoder/shared/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.0) 2 | 3 | project(amf_encoder_shared VERSION 1.0.0) 4 | 5 | add_definitions(-D_MBCS) 6 | #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /GS /GL /W3 /Gy /Zc:wchar_t /Zi /Gm- /O2 /sdl /Zc:inline /fp:precise /errorReport:prompt /WX- /Zc:forScope /Gd /Oi /MD /FC /EHsc /nologo /diagnostics:classic ") 7 | 8 | aux_source_directory(. SHARED_SRCS) 9 | 10 | add_library(amf_encoder_shared ${SHARED_SRCS}) -------------------------------------------------------------------------------- /src/render/plugins/amf_encoder/shared/systemtime.h: -------------------------------------------------------------------------------- 1 | //===================== Copyright (c) Valve Corporation. All Rights Reserved. ====================== 2 | // 3 | // Functions for working with the system clock. 4 | // 5 | //================================================================================================== 6 | #pragma once 7 | 8 | #include 9 | 10 | namespace SystemTime 11 | { 12 | // Automatically invoked, but can be called to specify a common base ticks for synchronization between processes. 13 | void Init( uint64_t nBaseTicks = 0 ); 14 | 15 | // Returns the base ticks (for synchronizing with another process). 16 | uint64_t GetBaseTicks(); 17 | 18 | // Returns current system time in ticks. 19 | uint64_t GetInTicks(); 20 | 21 | // Returns current system time in seconds. 22 | double GetInSeconds(); 23 | 24 | // Converts ticks to seconds. 25 | double GetInSeconds( uint64_t nTicks ); 26 | } 27 | 28 | -------------------------------------------------------------------------------- /src/render/plugins/amf_encoder/shared/threadtools.h: -------------------------------------------------------------------------------- 1 | //===================== Copyright (c) Valve Corporation. All Rights Reserved. ====================== 2 | // 3 | // Helper classes for working with threads. 4 | // 5 | //================================================================================================== 6 | #pragma once 7 | 8 | //#include 9 | 10 | #include 11 | #define NOMINMAX 12 | #define WIN32_LEAN_AND_MEAN 13 | #include 14 | 15 | #define THREAD_PRIORITY_MOST_URGENT 15 16 | 17 | class CThread 18 | { 19 | public: 20 | CThread(); 21 | virtual ~CThread(); 22 | virtual bool Init() { return true; } 23 | virtual void Run() = 0; 24 | void Start(); 25 | void Join(); 26 | private: 27 | std::thread *m_pThread; 28 | }; 29 | 30 | class CThreadEvent 31 | { 32 | public: 33 | CThreadEvent( bool bManualReset = false ); 34 | ~CThreadEvent(); 35 | bool Wait( uint32_t nTimeoutMs = INFINITE ); 36 | bool Set(); 37 | bool Reset(); 38 | private: 39 | HANDLE m_hSyncObject; 40 | }; 41 | 42 | -------------------------------------------------------------------------------- /src/render/plugins/dda_capture/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | project(plugin_dda_capture) 2 | 3 | set(CMAKE_CXX_STANDARD 20) 4 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 5 | 6 | set(PLUGIN_SRCS 7 | ${CMAKE_CURRENT_SOURCE_DIR}/dda_capture_plugin.cpp 8 | ${CMAKE_CURRENT_SOURCE_DIR}/cursor_capture.cpp 9 | ${CMAKE_CURRENT_SOURCE_DIR}/dda_capture.cpp 10 | ${CMAKE_CURRENT_SOURCE_DIR}/desktop_capture.cpp 11 | ) 12 | 13 | add_library(${PROJECT_NAME} SHARED ${PLUGIN_SRCS}) 14 | target_link_libraries(${PROJECT_NAME} PRIVATE tc_common_new tc_steam_manager_new tc_message tc_plugin sqlite_orm winmm.lib SetupAPI.lib) -------------------------------------------------------------------------------- /src/render/plugins/dda_capture/ReadMe.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/src/render/plugins/dda_capture/ReadMe.md -------------------------------------------------------------------------------- /src/render/plugins/dda_capture/cursor_capture.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #define WIN32_LEAN_AND_MEAN 4 | #include 5 | #include 6 | #include 7 | 8 | namespace tc 9 | { 10 | class DDACapturePlugin; 11 | class CaptureCursorBitmap; 12 | 13 | class CursorCapture { 14 | public: 15 | explicit CursorCapture(DDACapturePlugin* plugin); 16 | void Capture(); 17 | 18 | private: 19 | static bool CaptureCursorIcon(CaptureCursorBitmap* data, HICON icon); 20 | 21 | private: 22 | DDACapturePlugin* plugin_ = nullptr; 23 | 24 | }; 25 | 26 | } 27 | -------------------------------------------------------------------------------- /src/render/plugins/dda_capture/desktop_capture.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 2024/1/18. 3 | // 4 | 5 | #include "desktop_capture.h" 6 | #include "tc_common_new/log.h" 7 | #include "plugin_interface/gr_plugin_events.h" 8 | #include 9 | #include "dda_capture_plugin.h" 10 | 11 | namespace tc 12 | { 13 | 14 | DesktopCapture::DesktopCapture(DDACapturePlugin* plugin, const CaptureMonitorInfo& my_monitor_info) { 15 | plugin_ = plugin; 16 | my_monitor_info_ = my_monitor_info; 17 | SetProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2); 18 | } 19 | 20 | void DesktopCapture::SetCaptureFps(int fps) { 21 | capture_fps_ = fps; 22 | } 23 | 24 | void DesktopCapture::RefreshScreen() { 25 | refresh_screen_ = true; 26 | } 27 | 28 | bool DesktopCapture::IsPrimaryMonitor() { 29 | return false; 30 | } 31 | 32 | } -------------------------------------------------------------------------------- /src/render/plugins/dda_capture/plugin_dda_capture.dll.toml: -------------------------------------------------------------------------------- 1 | # 2 | author = "RGAA" 3 | 4 | # 5 | description = "This is DDA Capture" 6 | 7 | # 8 | version_name = "1.2.0" 9 | 10 | # 11 | version_code = 120 12 | 13 | # 14 | enabled = true -------------------------------------------------------------------------------- /src/render/plugins/ffmpeg_encoder/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | project(plugin_ffmpeg_encoder) 2 | 3 | set(CMAKE_CXX_STANDARD 20) 4 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 5 | 6 | set(FFMPEG_LIB_PATH ${CMAKE_SOURCE_DIR}/deps/tc_3rdparty/ffmpeg/lib/x64) 7 | include_directories(${CMAKE_SOURCE_DIR}/deps/tc_3rdparty/ffmpeg/include) 8 | link_directories(${FFMPEG_LIB_PATH}) 9 | 10 | set(PLUGIN_SRCS 11 | ${CMAKE_CURRENT_SOURCE_DIR}/ffmpeg_encoder_plugin.cpp 12 | ${CMAKE_CURRENT_SOURCE_DIR}/ffmpeg_encoder.cpp 13 | ) 14 | 15 | add_library(${PROJECT_NAME} SHARED ${PLUGIN_SRCS}) 16 | target_link_libraries(${PROJECT_NAME} PRIVATE tc_common_new tc_steam_manager_new tc_message tc_plugin sqlite_orm winmm.lib SetupAPI.lib) 17 | target_link_libraries(${PROJECT_NAME} PRIVATE ${FFMPEG_LIB_PATH}/avcodec.lib ${FFMPEG_LIB_PATH}/avdevice.lib ${FFMPEG_LIB_PATH}/avfilter.lib 18 | ${FFMPEG_LIB_PATH}/avformat.lib ${FFMPEG_LIB_PATH}/avutil.lib ${FFMPEG_LIB_PATH}/swresample.lib ${FFMPEG_LIB_PATH}/swscale.lib 19 | ${FFMPEG_LIB_PATH}/postproc.lib tc_opus_codec_new yuv)#${FFMPEG_LIBRARIES} frame_render -------------------------------------------------------------------------------- /src/render/plugins/ffmpeg_encoder/ReadMe.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/src/render/plugins/ffmpeg_encoder/ReadMe.md -------------------------------------------------------------------------------- /src/render/plugins/ffmpeg_encoder/ffmpeg_encoder_defs.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 19/11/2024. 3 | // 4 | 5 | #ifndef GAMMARAY_FFMPEG_ENCODER_DEFS_H 6 | #define GAMMARAY_FFMPEG_ENCODER_DEFS_H 7 | 8 | #include 9 | 10 | namespace tc 11 | { 12 | static const std::string kFFmpegPluginName = "FFmpeg Encoder Plugin"; 13 | } 14 | 15 | #endif //GAMMARAY_FFMPEG_ENCODER_DEFS_H 16 | -------------------------------------------------------------------------------- /src/render/plugins/ffmpeg_encoder/plugin_ffmpeg_encoder.dll.toml: -------------------------------------------------------------------------------- 1 | # 2 | author = "RGAA" 3 | 4 | # 5 | description = "This is FFmpeg software encoder" 6 | 7 | # 8 | version_name = "1.2.0" 9 | 10 | # 11 | version_code = 120 12 | 13 | # 14 | enabled = true -------------------------------------------------------------------------------- /src/render/plugins/file_transfer/ReadMe.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/src/render/plugins/file_transfer/ReadMe.md -------------------------------------------------------------------------------- /src/render/plugins/file_transfer/file_transfer_plugin.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 15/11/2024. 3 | // 4 | 5 | #ifndef GAMMARAY_RTC_PLUGIN_H 6 | #define GAMMARAY_RTC_PLUGIN_H 7 | #include 8 | #include "plugin_interface/gr_data_consumer_plugin.h" 9 | 10 | namespace tc 11 | { 12 | 13 | class Message; 14 | class FileTransmitMsgInterface; 15 | 16 | class FileTransferPlugin : public GrDataConsumerPlugin { 17 | public: 18 | std::string GetPluginId() override; 19 | std::string GetPluginName() override; 20 | std::string GetVersionName() override; 21 | uint32_t GetVersionCode() override; 22 | 23 | virtual bool OnCreate(const GrPluginParam& param) override; 24 | 25 | void OnMessage(const std::string& msg) override; 26 | void OnMessage(const std::shared_ptr& msg) override; 27 | 28 | private: 29 | 30 | std::shared_ptr file_trans_msg_interface_ = nullptr; 31 | }; 32 | 33 | } 34 | 35 | extern "C" __declspec(dllexport) void* GetInstance(); 36 | 37 | #endif //GAMMARAY_UDP_PLUGIN_H 38 | -------------------------------------------------------------------------------- /src/render/plugins/file_transfer/plugin_file_transfer.dll.toml: -------------------------------------------------------------------------------- 1 | # 2 | author = "RGAA" 3 | 4 | # 5 | description = "This is File Transfer" 6 | 7 | # 8 | version_name = "1.2.0" 9 | 10 | # 11 | version_code = 120 12 | 13 | # 14 | enabled = true -------------------------------------------------------------------------------- /src/render/plugins/frame_debugger/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | project(plugin_frame_debugger) 2 | 3 | set(CMAKE_CXX_STANDARD 20) 4 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 5 | 6 | set(PLUGIN_SRCS 7 | ${CMAKE_CURRENT_SOURCE_DIR}/frame_debugger_plugin.cpp 8 | ) 9 | 10 | add_library(${PROJECT_NAME} SHARED ${PLUGIN_SRCS}) 11 | target_link_libraries(${PROJECT_NAME} PRIVATE tc_common_new tc_steam_manager_new tc_message tc_plugin sqlite_orm winmm.lib SetupAPI.lib) -------------------------------------------------------------------------------- /src/render/plugins/frame_debugger/ReadMe.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/src/render/plugins/frame_debugger/ReadMe.md -------------------------------------------------------------------------------- /src/render/plugins/frame_debugger/plugin_frame_debugger.dll.toml: -------------------------------------------------------------------------------- 1 | # 2 | author = "RGAA" 3 | 4 | # 5 | description = "This is Frame Debugger" 6 | 7 | # 8 | version_name = "1.2.0" 9 | 10 | # 11 | version_code = 120 12 | 13 | # 14 | enabled = true 15 | 16 | # 17 | save_encoded_video = false -------------------------------------------------------------------------------- /src/render/plugins/frame_resizer/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | project(plugin_frame_resizer) 2 | 3 | set(CMAKE_CXX_STANDARD 20) 4 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 5 | 6 | set(PLUGIN_SRCS 7 | ${CMAKE_CURRENT_SOURCE_DIR}/frame_resizer_plugin.cpp 8 | ${CMAKE_CURRENT_SOURCE_DIR}/frame_render.cpp 9 | ) 10 | 11 | add_library(${PROJECT_NAME} SHARED ${PLUGIN_SRCS}) 12 | target_link_libraries(${PROJECT_NAME} PRIVATE tc_common_new tc_steam_manager_new tc_message tc_plugin sqlite_orm winmm.lib SetupAPI.lib) -------------------------------------------------------------------------------- /src/render/plugins/frame_resizer/ReadMe.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/src/render/plugins/frame_resizer/ReadMe.md -------------------------------------------------------------------------------- /src/render/plugins/frame_resizer/frame_resizer_plugin.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 15/11/2024. 3 | // 4 | 5 | #ifndef GAMMARAY_MEDIA_RECORDER_PLUGIN_H 6 | #define GAMMARAY_MEDIA_RECORDER_PLUGIN_H 7 | 8 | #include "plugin_interface/gr_frame_processor_plugin.h" 9 | 10 | namespace tc 11 | { 12 | class FrameRender; 13 | 14 | class FrameResizerPlugin : public GrFrameProcessorPlugin { 15 | public: 16 | FrameResizerPlugin(); 17 | std::string GetPluginId() override; 18 | std::string GetPluginName() override; 19 | std::string GetVersionName() override; 20 | uint32_t GetVersionCode() override; 21 | void On1Second() override; 22 | ComPtr Process(ID3D11Texture2D* input, int target_width, int target_height) override; 23 | 24 | private: 25 | std::shared_ptr frame_render_ = nullptr; 26 | }; 27 | 28 | } 29 | 30 | extern "C" __declspec(dllexport) void* GetInstance(); 31 | 32 | #endif //GAMMARAY_UDP_PLUGIN_H 33 | -------------------------------------------------------------------------------- /src/render/plugins/frame_resizer/plugin_frame_resizer.dll.toml: -------------------------------------------------------------------------------- 1 | # 2 | author = "RGAA" 3 | 4 | # 5 | description = "This is Frame Resizer" 6 | 7 | # 8 | version_name = "1.2.0" 9 | 10 | # 11 | version_code = 120 12 | 13 | # 14 | enabled = true -------------------------------------------------------------------------------- /src/render/plugins/media_recorder/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | project(plugin_media_recorder) 2 | 3 | set(CMAKE_CXX_STANDARD 20) 4 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 5 | 6 | set(PLUGIN_SRCS 7 | ${CMAKE_CURRENT_SOURCE_DIR}/media_recorder_plugin.cpp 8 | ) 9 | 10 | add_library(${PROJECT_NAME} SHARED ${PLUGIN_SRCS}) 11 | target_link_libraries(${PROJECT_NAME} PRIVATE tc_common_new tc_steam_manager_new tc_message tc_plugin sqlite_orm winmm.lib SetupAPI.lib) -------------------------------------------------------------------------------- /src/render/plugins/media_recorder/ReadMe.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/src/render/plugins/media_recorder/ReadMe.md -------------------------------------------------------------------------------- /src/render/plugins/media_recorder/media_recorder_plugin.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // Created RGAA on 15/11/2024. 3 | // 4 | 5 | #include "media_recorder_plugin.h" 6 | #include "plugin_interface/gr_plugin_events.h" 7 | #include "render/plugins/plugin_ids.h" 8 | 9 | namespace tc 10 | { 11 | std::string MediaRecorderPlugin::GetPluginId() { 12 | return kMediaRecorderPluginId; 13 | } 14 | 15 | std::string MediaRecorderPlugin::GetPluginName() { 16 | return "Media Recorder Plugin"; 17 | } 18 | 19 | std::string MediaRecorderPlugin::GetVersionName() { 20 | return "1.1.0"; 21 | } 22 | 23 | uint32_t MediaRecorderPlugin::GetVersionCode() { 24 | return 110; 25 | } 26 | 27 | void MediaRecorderPlugin::On1Second() { 28 | 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /src/render/plugins/media_recorder/media_recorder_plugin.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 15/11/2024. 3 | // 4 | 5 | #ifndef GAMMARAY_MEDIA_RECORDER_PLUGIN_H 6 | #define GAMMARAY_MEDIA_RECORDER_PLUGIN_H 7 | 8 | #include "render/plugin_interface/gr_stream_plugin.h" 9 | 10 | namespace tc 11 | { 12 | 13 | class MediaRecorderPlugin : public GrStreamPlugin { 14 | public: 15 | std::string GetPluginId() override; 16 | std::string GetPluginName() override; 17 | std::string GetVersionName() override; 18 | uint32_t GetVersionCode() override; 19 | 20 | void On1Second() override; 21 | 22 | }; 23 | 24 | } 25 | 26 | extern "C" __declspec(dllexport) void* GetInstance(); 27 | 28 | void* GetInstance() { 29 | static tc::MediaRecorderPlugin plugin; 30 | return (void*)&plugin; 31 | } 32 | 33 | 34 | #endif //GAMMARAY_UDP_PLUGIN_H 35 | -------------------------------------------------------------------------------- /src/render/plugins/media_recorder/plugin_media_recorder.dll.toml: -------------------------------------------------------------------------------- 1 | # 2 | author = "RGAA" 3 | 4 | # 5 | description = "This is Media Recorder" 6 | 7 | # 8 | version_name = "1.2.0" 9 | 10 | # 11 | version_code = 120 12 | 13 | # 14 | enabled = true -------------------------------------------------------------------------------- /src/render/plugins/mock_video_stream/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | project(plugin_mock_video_stream) 2 | 3 | set(CMAKE_CXX_STANDARD 20) 4 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 5 | 6 | set(PLUGIN_SRCS 7 | ${CMAKE_CURRENT_SOURCE_DIR}/mock_video_stream_plugin.cpp 8 | ) 9 | 10 | add_library(${PROJECT_NAME} SHARED ${PLUGIN_SRCS}) 11 | target_link_libraries(${PROJECT_NAME} PRIVATE tc_common_new tc_steam_manager_new tc_message tc_plugin sqlite_orm winmm.lib SetupAPI.lib) 12 | target_link_libraries(${PROJECT_NAME} PRIVATE ${OpenCV_Libs}) -------------------------------------------------------------------------------- /src/render/plugins/mock_video_stream/ReadMe.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/src/render/plugins/mock_video_stream/ReadMe.md -------------------------------------------------------------------------------- /src/render/plugins/mock_video_stream/plugin_mock_video_stream.dll.toml: -------------------------------------------------------------------------------- 1 | # 2 | author = "RGAA" 3 | 4 | # 5 | description = "This is Mock Video Stream" 6 | 7 | # 8 | version_name = "1.2.0" 9 | 10 | # 11 | version_code = 120 12 | 13 | # 14 | enabled = true -------------------------------------------------------------------------------- /src/render/plugins/net_relay/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | project(plugin_net_relay) 2 | 3 | set(CMAKE_CXX_STANDARD 20) 4 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 5 | 6 | set(PLUGIN_SRCS 7 | ${CMAKE_CURRENT_SOURCE_DIR}/relay_plugin.cpp 8 | ) 9 | 10 | add_library(${PROJECT_NAME} SHARED ${PLUGIN_SRCS}) 11 | target_link_libraries(${PROJECT_NAME} PRIVATE tc_common_new tc_net_plugin tc_relay_client tc_message tc_relay_message libprotobuf) 12 | -------------------------------------------------------------------------------- /src/render/plugins/net_relay/README.md: -------------------------------------------------------------------------------- 1 | # tc_vr_plugin -------------------------------------------------------------------------------- /src/render/plugins/net_relay/plugin_net_relay.dll.toml: -------------------------------------------------------------------------------- 1 | # 2 | author = "RGAA" 3 | 4 | # 5 | description = "This is VR Manager" 6 | 7 | # 8 | version_name = "1.2.0" 9 | 10 | # 11 | version_code = 120 12 | 13 | # 14 | enabled = true -------------------------------------------------------------------------------- /src/render/plugins/net_rtc/ReadMe.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/src/render/plugins/net_rtc/ReadMe.md -------------------------------------------------------------------------------- /src/render/plugins/net_rtc/desktop_capture_source.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by hy on 20/07/2024. 3 | // 4 | 5 | #ifndef WEBRTC_CLIENT_DESKTOP_CAPTURE_SOURCE_H 6 | #define WEBRTC_CLIENT_DESKTOP_CAPTURE_SOURCE_H 7 | 8 | #include "webrtc_helper.h" 9 | 10 | #if 0 11 | namespace dl 12 | { 13 | 14 | class DesktopCaptureSource : public rtc::VideoSourceInterface { 15 | public: 16 | void AddOrUpdateSink(rtc::VideoSinkInterface *sink, const rtc::VideoSinkWants &wants) override; 17 | void RemoveSink(rtc::VideoSinkInterface *sink) override; 18 | void OnFrame(const webrtc::VideoFrame& frame); 19 | 20 | private: 21 | void UpdateVideoAdapter(); 22 | 23 | rtc::VideoBroadcaster broadcaster_; 24 | cricket::VideoAdapter video_adapter_; 25 | }; 26 | 27 | } 28 | #endif 29 | #endif //WEBRTC_CLIENT_DESKTOP_CAPTURE_SOURCE_H 30 | -------------------------------------------------------------------------------- /src/render/plugins/net_rtc/i420_creator.h: -------------------------------------------------------------------------------- 1 | #ifndef I420_CREATOR_H_ 2 | #define I420_CREATOR_H_ 3 | 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | 10 | namespace tc 11 | { 12 | 13 | class I420Creator { 14 | public: 15 | using I420Frame = std::shared_ptr>; 16 | using I420FrameObserver = std::function; 17 | public: 18 | explicit I420Creator(I420FrameObserver &&observer) 19 | : observer_(observer) {}; 20 | 21 | ~I420Creator(); 22 | 23 | void set_resolution(int w, int h) { 24 | w_ = w; 25 | h_ = h; 26 | } 27 | 28 | void run(int fps = 30); 29 | 30 | private: 31 | //I420Frame process(); 32 | I420Frame ReadI420File(); 33 | 34 | int w_ = 0; 35 | int h_ = 0; 36 | I420FrameObserver observer_; 37 | bool running_ = false; 38 | std::thread thread_; 39 | 40 | I420Frame i420_frame_ = nullptr; 41 | }; 42 | 43 | } 44 | 45 | #endif 46 | -------------------------------------------------------------------------------- /src/render/plugins/net_rtc/plugin_net_rtc.dll.toml: -------------------------------------------------------------------------------- 1 | # 2 | author = "RGAA" 3 | 4 | # 5 | description = "This is Net RTC" 6 | 7 | # 8 | version_name = "1.2.0" 9 | 10 | # 11 | version_code = 120 12 | 13 | # 14 | enabled = true -------------------------------------------------------------------------------- /src/render/plugins/net_rtc/rtc_plugin.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // Created RGAA on 15/11/2024. 3 | // 4 | 5 | #include "rtc_plugin.h" 6 | #include "render/plugins/plugin_ids.h" 7 | #include "video_source_mock.h" 8 | 9 | namespace tc 10 | { 11 | 12 | std::string RtcPlugin::GetPluginId() { 13 | return kNetRtcPluginId; 14 | } 15 | 16 | std::string RtcPlugin::GetPluginName() { 17 | return "RTC Plugin"; 18 | } 19 | 20 | std::string RtcPlugin::GetVersionName() { 21 | return "1.0.2"; 22 | } 23 | 24 | uint32_t RtcPlugin::GetVersionCode() { 25 | // test // 26 | auto mock = std::make_shared(); 27 | // test // 28 | return 102; 29 | } 30 | 31 | void RtcPlugin::PostProtoMessage(const std::string& msg) { 32 | 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /src/render/plugins/net_rtc/rtc_plugin.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 15/11/2024. 3 | // 4 | 5 | #ifndef GAMMARAY_RTC_PLUGIN_H 6 | #define GAMMARAY_RTC_PLUGIN_H 7 | 8 | #include "plugin_interface/gr_net_plugin.h" 9 | 10 | namespace tc 11 | { 12 | 13 | class RtcPlugin : public GrNetPlugin { 14 | public: 15 | std::string GetPluginId() override; 16 | std::string GetPluginName() override; 17 | std::string GetVersionName() override; 18 | uint32_t GetVersionCode() override; 19 | void PostProtoMessage(const std::string &msg) override; 20 | }; 21 | 22 | } 23 | 24 | extern "C" __declspec(dllexport) void* GetInstance(); 25 | 26 | void* GetInstance() { 27 | static tc::RtcPlugin plugin; 28 | return (void*)&plugin; 29 | } 30 | 31 | 32 | #endif //GAMMARAY_UDP_PLUGIN_H 33 | -------------------------------------------------------------------------------- /src/render/plugins/net_rtc/video_source_mock.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // Created by hy on 2024/4/26. 3 | // 4 | 5 | #include "video_source_mock.h" 6 | -------------------------------------------------------------------------------- /src/render/plugins/net_udp/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | project(plugin_net_udp) 2 | 3 | set(CMAKE_CXX_STANDARD 20) 4 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 5 | 6 | set(PLUGIN_SRCS 7 | ${CMAKE_CURRENT_SOURCE_DIR}/udp_plugin.cpp 8 | ) 9 | 10 | add_library(${PROJECT_NAME} SHARED ${PLUGIN_SRCS}) 11 | target_link_libraries(${PROJECT_NAME} PRIVATE tc_common_new tc_net_plugin) -------------------------------------------------------------------------------- /src/render/plugins/net_udp/ReadMe.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/src/render/plugins/net_udp/ReadMe.md -------------------------------------------------------------------------------- /src/render/plugins/net_udp/plugin_net_udp.dll.toml: -------------------------------------------------------------------------------- 1 | # 2 | author = "RGAA" 3 | 4 | # 5 | description = "This is Net UDP" 6 | 7 | # 8 | version_name = "1.2.0" 9 | 10 | # 11 | version_code = 120 12 | 13 | # 14 | enabled = true 15 | 16 | listen-port = 0 -------------------------------------------------------------------------------- /src/render/plugins/net_ws/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | project(plugin_net_ws) 2 | 3 | set(CMAKE_CXX_STANDARD 20) 4 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 5 | 6 | set(PLUGIN_SRCS 7 | ${CMAKE_CURRENT_SOURCE_DIR}/ws_plugin.cpp 8 | ${CMAKE_CURRENT_SOURCE_DIR}/ws_server.cpp 9 | ${CMAKE_CURRENT_SOURCE_DIR}/ws_plugin_router.cpp 10 | ${CMAKE_CURRENT_SOURCE_DIR}/http_handler.cpp 11 | ) 12 | 13 | add_library(${PROJECT_NAME} SHARED ${PLUGIN_SRCS}) 14 | target_link_libraries(${PROJECT_NAME} PRIVATE tc_common_new tc_net_plugin libprotobuf tc_message) -------------------------------------------------------------------------------- /src/render/plugins/net_ws/ReadMe.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/src/render/plugins/net_ws/ReadMe.md -------------------------------------------------------------------------------- /src/render/plugins/net_ws/http_handler.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 2023/12/20. 3 | // 4 | 5 | #ifndef TC_APPLICATION_HTTP_HANDLER_H 6 | #define TC_APPLICATION_HTTP_HANDLER_H 7 | 8 | #include 9 | #include "tc_3rdparty/json/json.hpp" 10 | 11 | using namespace nlohmann; 12 | 13 | namespace tc 14 | { 15 | 16 | class WsPlugin; 17 | 18 | class HttpHandler { 19 | public: 20 | explicit HttpHandler(WsPlugin* plugin); 21 | void HandlePing(http::web_request &req, http::web_response &rep); 22 | 23 | private: 24 | std::string WrapBasicInfo(int code, const std::string& msg, const std::string& data); 25 | std::string WrapBasicInfo(int code, const std::string& msg, const json& data); 26 | 27 | private: 28 | WsPlugin* plugin_ = nullptr; 29 | 30 | }; 31 | 32 | } 33 | 34 | #endif //TC_APPLICATION_HTTP_HANDLER_H 35 | -------------------------------------------------------------------------------- /src/render/plugins/net_ws/plugin_net_ws.dll.toml: -------------------------------------------------------------------------------- 1 | # 2 | author = "RGAA" 3 | 4 | # 5 | description = "This is Net Websocket" 6 | 7 | # 8 | version_name = "1.2.0" 9 | 10 | # 11 | version_code = 120 12 | 13 | # 14 | enabled = true 15 | 16 | # listen port 17 | #listen-port = 20371 18 | listen-port = 0 -------------------------------------------------------------------------------- /src/render/plugins/nvenc_encoder/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | project(plugin_nvenc_encoder) 2 | 3 | set(CMAKE_CXX_STANDARD 20) 4 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 5 | 6 | set(NVSDK_VERSION 7 | 12 8 | ) 9 | 10 | include(nvencoder/${NVSDK_VERSION}/CMakeLists.txt) 11 | 12 | include_directories( 13 | nvencoder/${NVSDK_VERSION} 14 | ) 15 | 16 | set(NVENCODER_SOURCES_LIST) 17 | foreach(item ${NVENCODER_SOURCES}) 18 | #message("Current item: ${item}") 19 | list(APPEND NVENCODER_SOURCES_LIST "${item}") 20 | endforeach() 21 | 22 | set(PLUGIN_SRCS 23 | ${CMAKE_CURRENT_SOURCE_DIR}/nvenc_encoder_plugin.cpp 24 | ${CMAKE_CURRENT_SOURCE_DIR}/nvenc_video_encoder.cpp 25 | ) 26 | 27 | add_library(${PROJECT_NAME} SHARED ${PLUGIN_SRCS} ${NVENCODER_SOURCES_LIST}) 28 | target_link_libraries(${PROJECT_NAME} PRIVATE tc_common_new tc_steam_manager_new tc_message 29 | tc_plugin sqlite_orm winmm.lib SetupAPI.lib) -------------------------------------------------------------------------------- /src/render/plugins/nvenc_encoder/ReadMe.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/src/render/plugins/nvenc_encoder/ReadMe.md -------------------------------------------------------------------------------- /src/render/plugins/nvenc_encoder/nvenc_encoder_defs.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 19/11/2024. 3 | // 4 | 5 | #ifndef GAMMARAY_NVENC_ENCODER_DEFS_H 6 | #define GAMMARAY_NVENC_ENCODER_DEFS_H 7 | 8 | #include 9 | 10 | namespace tc 11 | { 12 | static const std::string kNvencPluginName = "NVENC Encoder Plugin"; 13 | } 14 | 15 | #endif //GAMMARAY_FFMPEG_ENCODER_DEFS_H 16 | -------------------------------------------------------------------------------- /src/render/plugins/nvenc_encoder/nvencoder/12/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | 2 | set(NVENCODER_SOURCES 3 | nvencoder/12/NvEncoder.cpp 4 | nvencoder/12/NvEncoderD3D11.cpp 5 | ) -------------------------------------------------------------------------------- /src/render/plugins/nvenc_encoder/plugin_nvenc_encoder.dll.toml: -------------------------------------------------------------------------------- 1 | # 2 | author = "RGAA" 3 | 4 | # 5 | description = "This is NVENC encoder" 6 | 7 | # 8 | version_name = "1.2.0" 9 | 10 | # 11 | version_code = 120 12 | 13 | # 14 | enabled = true -------------------------------------------------------------------------------- /src/render/plugins/obj_detector/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | project(plugin_obj_detector) 2 | 3 | set(CMAKE_CXX_STANDARD 20) 4 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 5 | 6 | set(PLUGIN_SRCS 7 | ${CMAKE_CURRENT_SOURCE_DIR}/obj_detector_plugin.cpp 8 | ) 9 | 10 | add_library(${PROJECT_NAME} SHARED ${PLUGIN_SRCS}) 11 | target_link_libraries(${PROJECT_NAME} PRIVATE tc_common_new tc_steam_manager_new tc_message tc_plugin sqlite_orm winmm.lib SetupAPI.lib) 12 | target_link_libraries(${PROJECT_NAME} PRIVATE ${OpenCV_Libs}) -------------------------------------------------------------------------------- /src/render/plugins/obj_detector/ReadMe.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/src/render/plugins/obj_detector/ReadMe.md -------------------------------------------------------------------------------- /src/render/plugins/obj_detector/plugin_obj_detector.dll.toml: -------------------------------------------------------------------------------- 1 | # 2 | author = "RGAA" 3 | 4 | # 5 | description = "This is Obj Detector" 6 | 7 | # 8 | version_name = "1.2.0" 9 | 10 | # 11 | version_code = 120 12 | 13 | # 14 | enabled = false -------------------------------------------------------------------------------- /src/render/plugins/opus_encoder/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | project(plugin_opus_encoder) 2 | 3 | set(CMAKE_CXX_STANDARD 20) 4 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 5 | 6 | set(PLUGIN_SRCS 7 | ${CMAKE_CURRENT_SOURCE_DIR}/opus_encoder_plugin.cpp 8 | ) 9 | 10 | add_library(${PROJECT_NAME} SHARED ${PLUGIN_SRCS}) 11 | target_link_libraries(${PROJECT_NAME} PRIVATE tc_common_new tc_steam_manager_new tc_message tc_plugin tc_opus_codec_new) -------------------------------------------------------------------------------- /src/render/plugins/opus_encoder/ReadMe.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/src/render/plugins/opus_encoder/ReadMe.md -------------------------------------------------------------------------------- /src/render/plugins/opus_encoder/plugin_opus_encoder.dll.toml: -------------------------------------------------------------------------------- 1 | # 2 | author = "RGAA" 3 | 4 | # 5 | description = "This is Opus Encoder" 6 | 7 | # 8 | version_name = "1.2.0" 9 | 10 | # 11 | version_code = 120 12 | 13 | # 14 | enabled = true 15 | 16 | # 17 | save_debug_file = false -------------------------------------------------------------------------------- /src/render/plugins/plugin_stream_event_router.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 21/11/2024. 3 | // 4 | 5 | #ifndef GAMMARAY_PLUGIN_STREAM_EVENT_ROUTER_H 6 | #define GAMMARAY_PLUGIN_STREAM_EVENT_ROUTER_H 7 | 8 | #include 9 | #include "plugin_interface/gr_plugin_events.h" 10 | 11 | namespace tc 12 | { 13 | 14 | class Context; 15 | class Application; 16 | class PluginManager; 17 | class Statistics; 18 | 19 | class PluginStreamEventRouter { 20 | public: 21 | explicit PluginStreamEventRouter(const std::shared_ptr& app); 22 | 23 | void ProcessEncodedVideoFrameEvent(const std::shared_ptr& event); 24 | 25 | private: 26 | Statistics* statistics_ = nullptr; 27 | std::shared_ptr app_ = nullptr; 28 | std::shared_ptr context_ = nullptr; 29 | std::shared_ptr plugin_manager_ = nullptr; 30 | }; 31 | 32 | } 33 | 34 | #endif //GAMMARAY_PLUGIN_STREAM_EVENT_ROUTER_H 35 | -------------------------------------------------------------------------------- /src/render/plugins/was_audio_capture/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | project(plugin_was_audio_capture) 2 | 3 | set(CMAKE_CXX_STANDARD 20) 4 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 5 | 6 | set(PLUGIN_SRCS 7 | ${CMAKE_CURRENT_SOURCE_DIR}/was_audio_capture_plugin.cpp 8 | ${CMAKE_CURRENT_SOURCE_DIR}/wasapi_audio_capture.cpp 9 | ) 10 | 11 | add_library(${PROJECT_NAME} SHARED ${PLUGIN_SRCS}) 12 | target_link_libraries(${PROJECT_NAME} PRIVATE tc_common_new tc_steam_manager_new tc_message tc_plugin sqlite_orm winmm.lib SetupAPI.lib) -------------------------------------------------------------------------------- /src/render/plugins/was_audio_capture/ReadMe.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RGAA-Software/GammaRay/fc1fa841715fa0b1cb0c7563a560a4ab05da593e/src/render/plugins/was_audio_capture/ReadMe.md -------------------------------------------------------------------------------- /src/render/plugins/was_audio_capture/plugin_was_audio_capture.dll.toml: -------------------------------------------------------------------------------- 1 | # 2 | author = "RGAA" 3 | 4 | # 5 | description = "This is WAS Audio Capture" 6 | 7 | # 8 | version_name = "1.2.0" 9 | 10 | # 11 | version_code = 120 12 | 13 | # 14 | enabled = true -------------------------------------------------------------------------------- /src/render/plugins/was_audio_capture/wasapi_audio_capture.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "audio_capture.h" 4 | 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | 15 | namespace tc 16 | { 17 | 18 | class WASAPIAudioCapture : public IAudioCapture { 19 | public: 20 | static AudioCapturePtr Make(const std::string& device_id); 21 | 22 | int Start() override; 23 | int Pause() override; 24 | int Stop() override; 25 | 26 | private: 27 | bool exit_ = false; 28 | 29 | }; 30 | 31 | } -------------------------------------------------------------------------------- /src/render/settings/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.26) 2 | 3 | add_library(settings settings.cpp) -------------------------------------------------------------------------------- /src/render_panel/gr_render_controller.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 2024-03-30. 3 | // 4 | 5 | #ifndef TC_SERVER_STEAM_TC_APP_MANAGER_H 6 | #define TC_SERVER_STEAM_TC_APP_MANAGER_H 7 | 8 | #include 9 | #include 10 | #include 11 | 12 | #include 13 | 14 | #include "tc_common_new/concurrent_hashmap.h" 15 | #include "tc_common_new/response.h" 16 | 17 | namespace tc 18 | { 19 | 20 | class GrContext; 21 | class GrServiceClient; 22 | class GrApplication; 23 | 24 | class GrRenderController { 25 | public: 26 | 27 | explicit GrRenderController(const std::shared_ptr& app); 28 | ~GrRenderController(); 29 | 30 | bool StartServer(); 31 | bool StopServer(); 32 | bool ReStart(); 33 | void Exit(); 34 | 35 | private: 36 | QString GetWorkDir(); 37 | QString GetAppPath(); 38 | 39 | private: 40 | std::shared_ptr app_ = nullptr; 41 | std::shared_ptr context_ = nullptr; 42 | }; 43 | 44 | } 45 | 46 | #endif //TC_SERVER_STEAM_TC_APP_MANAGER_H 47 | -------------------------------------------------------------------------------- /src/render_panel/gr_resources.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 2024/4/12. 3 | // 4 | 5 | #ifndef TC_SERVER_STEAM_RESOURCE_MANAGER_H 6 | #define TC_SERVER_STEAM_RESOURCE_MANAGER_H 7 | 8 | #include 9 | #include 10 | #include 11 | 12 | namespace tc 13 | { 14 | 15 | class GrContext; 16 | 17 | class GrResources { 18 | public: 19 | 20 | explicit GrResources(const std::shared_ptr& ctx); 21 | void ExtractIconsIfNeeded(); 22 | 23 | private: 24 | std::shared_ptr context_ = nullptr; 25 | QString res_folder_path_; 26 | }; 27 | 28 | } 29 | 30 | #endif //TC_SERVER_STEAM_RESOURCE_MANAGER_H 31 | -------------------------------------------------------------------------------- /src/render_panel/gr_running_pipe.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 25/01/2025. 3 | // 4 | 5 | #ifndef GAMMARAY_GR_RUNNING_PIPE_H 6 | #define GAMMARAY_GR_RUNNING_PIPE_H 7 | 8 | #include 9 | #include 10 | #include 11 | #include 12 | 13 | namespace tc 14 | { 15 | 16 | class GrRunningPipe { 17 | public: 18 | explicit GrRunningPipe(); 19 | ~GrRunningPipe(); 20 | void StartListening(std::function&& cbk); 21 | bool SendHello(); 22 | 23 | private: 24 | std::shared_ptr recv_thread_ = nullptr; 25 | HANDLE recv_handle_ = nullptr; 26 | bool exit_receiving_ = false; 27 | }; 28 | 29 | } 30 | 31 | #endif //GAMMARAY_GR_RUNNING_PIPE_H 32 | -------------------------------------------------------------------------------- /src/render_panel/network/udp_broadcaster.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 2024-03-30. 3 | // 4 | 5 | #ifndef TC_SERVER_STEAM_UDP_BROADCASTER_H 6 | #define TC_SERVER_STEAM_UDP_BROADCASTER_H 7 | 8 | #include 9 | #include 10 | #include 11 | #include 12 | 13 | namespace tc 14 | { 15 | class GrContext; 16 | 17 | class UdpBroadcaster : public QObject { 18 | public: 19 | 20 | static std::shared_ptr Make(const std::shared_ptr& ctx); 21 | 22 | explicit UdpBroadcaster(const std::shared_ptr& ctx); 23 | 24 | void Broadcast(const std::string& msg); 25 | void Exit(); 26 | 27 | private: 28 | 29 | std::shared_ptr context_ = nullptr; 30 | QUdpSocket* udp_socket_ = nullptr; 31 | }; 32 | } 33 | 34 | #endif //TC_SERVER_STEAM_UDP_BROADCASTER_H 35 | -------------------------------------------------------------------------------- /src/render_panel/transfer/file_transfer.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 8/07/2024. 3 | // 4 | 5 | #ifndef GAMMARAY_FILETRANSFER_H 6 | #define GAMMARAY_FILETRANSFER_H 7 | 8 | #include 9 | #include 10 | 11 | namespace tc 12 | { 13 | 14 | class GrContext; 15 | class GrSettings; 16 | class Thread; 17 | class File; 18 | 19 | // Drag & Drop file transferring 20 | class FileTransferChannel { 21 | public: 22 | explicit FileTransferChannel(const std::shared_ptr& ctx, const std::shared_ptr& sess); 23 | void OnConnected(); 24 | void OnDisConnected(); 25 | void ParseBinaryMessage(std::string_view data); 26 | void PostBinaryMessage(const std::string& msg); 27 | 28 | private: 29 | GrSettings* settings_ = nullptr; 30 | std::shared_ptr context_ = nullptr; 31 | std::shared_ptr transferring_file_ = nullptr; 32 | std::shared_ptr sess_ = nullptr; 33 | }; 34 | 35 | } 36 | 37 | #endif //GAMMARAY_FILETRANSFER_H 38 | -------------------------------------------------------------------------------- /src/render_panel/ui/add_game_panel.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 2024/6/21. 3 | // 4 | 5 | #ifndef GAMMARAY_ADD_GAME_PANEL_H 6 | #define GAMMARAY_ADD_GAME_PANEL_H 7 | 8 | #include 9 | #include 10 | #include 11 | 12 | namespace tc 13 | { 14 | 15 | class GrContext; 16 | 17 | class AddGamePanel : public QDialog { 18 | public: 19 | AddGamePanel(const std::shared_ptr& ctx, QWidget* parent); 20 | private: 21 | void SaveGame(); 22 | 23 | private: 24 | std::shared_ptr context_ = nullptr; 25 | QLineEdit* lbl_game_name_ = nullptr; 26 | QLabel* lbl_game_installed_dir_ = nullptr; 27 | QLabel* lbl_game_exe_name_ = nullptr; 28 | QLineEdit* edit_game_exe_path_ = nullptr; 29 | QString cover_path_; 30 | QString cover_name_; 31 | QLabel* cover_preview_; 32 | }; 33 | 34 | } 35 | 36 | #endif //GAMMARAY_ADD_GAME_PANEL_H 37 | -------------------------------------------------------------------------------- /src/render_panel/ui/game_info_preview.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 2024/5/20. 3 | // 4 | 5 | #ifndef GAMMARAY_GAME_INFO_PREVIEW_H 6 | #define GAMMARAY_GAME_INFO_PREVIEW_H 7 | 8 | #include 9 | #include 10 | 11 | namespace tc 12 | { 13 | 14 | class TcDBGame; 15 | class GrApplication; 16 | 17 | class GameInfoPreview : public QDialog { 18 | public: 19 | 20 | GameInfoPreview(const std::shared_ptr& app, const std::shared_ptr& game, QWidget* parent = nullptr); 21 | ~GameInfoPreview() = default; 22 | 23 | }; 24 | 25 | } 26 | 27 | #endif //GAMMARAY_GAME_INFO_PREVIEW_H 28 | -------------------------------------------------------------------------------- /src/render_panel/ui/qt_circle.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 2024-04-11. 3 | // 4 | 5 | #ifndef QT_VIS_H_ 6 | #define QT_VIS_H_ 7 | 8 | #include 9 | #include 10 | #include "effect_widget.h" 11 | 12 | namespace tc 13 | { 14 | 15 | class QtCircle : public EffectWidget { 16 | 17 | public: 18 | explicit QtCircle(QWidget *parent = nullptr); 19 | void paintEvent(QPaintEvent *event) override; 20 | 21 | private: 22 | float rotate_ = 0; 23 | long color_count_ = 0; 24 | }; 25 | 26 | } 27 | 28 | #endif // VIS_H 29 | -------------------------------------------------------------------------------- /src/render_panel/ui/qt_vertical.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 2024-04-11. 3 | // 4 | 5 | #ifndef QT_VERTICLE_H 6 | #define QT_VERTICLE_H 7 | 8 | #include "effect_widget.h" 9 | #include 10 | 11 | namespace tc 12 | { 13 | 14 | class QtVertical : public EffectWidget { 15 | public: 16 | QtVertical(QWidget *parent); 17 | void paintEvent(QPaintEvent *event) override; 18 | 19 | private: 20 | QPixmap pixmap; 21 | }; 22 | 23 | 24 | } 25 | 26 | #endif // QT_VERTICLE_H 27 | -------------------------------------------------------------------------------- /src/render_panel/ui/rn_empty.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 2024-04-11. 3 | // 4 | 5 | #ifndef TC_SERVER_STEAM_RNST_EMPTY_H 6 | #define TC_SERVER_STEAM_RNST_EMPTY_H 7 | 8 | #include "tab_base.h" 9 | 10 | namespace tc 11 | { 12 | 13 | class RnEmpty : public TabBase { 14 | public: 15 | RnEmpty(const std::shared_ptr& app, QWidget *parent); 16 | ~RnEmpty() = default; 17 | 18 | void OnTabShow() override; 19 | void OnTabHide() override; 20 | 21 | }; 22 | 23 | } 24 | 25 | #endif //TC_SERVER_STEAM_ST_INPUT_H 26 | -------------------------------------------------------------------------------- /src/render_panel/ui/st_about_me.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 2024-06-10. 3 | // 4 | 5 | #ifndef GAMMARAY_ST_ABOUT_ME_H 6 | #define GAMMARAY_ST_ABOUT_ME_H 7 | 8 | #include 9 | #include "tab_base.h" 10 | 11 | namespace tc 12 | { 13 | class GrApplication; 14 | 15 | class StAboutMe : public TabBase { 16 | public: 17 | explicit StAboutMe(const std::shared_ptr& app, QWidget* parent = nullptr); 18 | ~StAboutMe() override = default; 19 | 20 | void OnTabShow() override; 21 | void OnTabHide() override; 22 | 23 | private: 24 | QLabel* license_ = nullptr; 25 | }; 26 | 27 | } 28 | 29 | #endif //GAMMARAY_ST_ABOUT_ME_H 30 | -------------------------------------------------------------------------------- /src/render_panel/ui/st_client.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 2024-04-11. 3 | // 4 | 5 | #ifndef TC_SERVER_STEAM_ST_CLIENT_H 6 | #define TC_SERVER_STEAM_ST_CLIENT_H 7 | 8 | #include "tab_base.h" 9 | 10 | namespace tc 11 | { 12 | 13 | class StClient : public TabBase { 14 | public: 15 | StClient(const std::shared_ptr& app, QWidget *parent); 16 | ~StClient() override = default; 17 | 18 | void OnTabShow() override; 19 | void OnTabHide() override; 20 | 21 | }; 22 | 23 | } 24 | 25 | #endif //TC_SERVER_STEAM_ST_INPUT_H 26 | -------------------------------------------------------------------------------- /src/render_panel/ui/st_general.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 2024-04-11. 3 | // 4 | 5 | #ifndef TC_SERVER_STEAM_ST_INPUT_H 6 | #define TC_SERVER_STEAM_ST_INPUT_H 7 | 8 | #include "tab_base.h" 9 | 10 | #include 11 | #include 12 | 13 | namespace tc 14 | { 15 | 16 | class StGeneral : public TabBase { 17 | public: 18 | StGeneral(const std::shared_ptr& app, QWidget *parent); 19 | ~StGeneral() override = default; 20 | 21 | void OnTabShow() override; 22 | void OnTabHide() override; 23 | private: 24 | QLineEdit* et_bitrate_; 25 | QLineEdit* et_res_width_; 26 | QLineEdit* et_res_height_; 27 | QCheckBox* cb_resize_res_; 28 | QComboBox* cb_capture_monitor_; 29 | QComboBox* cb_capture_audio_device_name_; 30 | }; 31 | 32 | } 33 | 34 | #endif //TC_SERVER_STEAM_ST_INPUT_H 35 | -------------------------------------------------------------------------------- /src/render_panel/ui/stat_chart.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 2024-04-20. 3 | // 4 | 5 | #ifndef GAMMARAY_STAT_CHART_H 6 | #define GAMMARAY_STAT_CHART_H 7 | 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | #include 15 | 16 | #include 17 | #include 18 | 19 | namespace tc 20 | { 21 | 22 | class GrContext; 23 | 24 | class StatChart : public QWidget { 25 | public: 26 | 27 | explicit StatChart(const std::shared_ptr& ctx, const std::vector& line_names, QWidget* parent = nullptr); 28 | 29 | void UpdateLines(const std::map>& value); 30 | 31 | private: 32 | 33 | std::shared_ptr ctx_ = nullptr; 34 | QChart* chart_ = nullptr; 35 | QChartView* chart_view_ = nullptr; 36 | QValueAxis* x_axis_ = nullptr; 37 | QValueAxis* y_axis_ = nullptr; 38 | std::map series_; 39 | 40 | }; 41 | 42 | } 43 | 44 | #endif //GAMMARAY_STAT_CHART_H 45 | -------------------------------------------------------------------------------- /src/render_panel/ui/tab_base.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 2024/4/9. 3 | // 4 | 5 | #include "tab_base.h" 6 | #include "render_panel/gr_settings.h" 7 | #include "render_panel/gr_context.h" 8 | #include "render_panel/gr_application.h" 9 | #include "tc_common_new/message_notifier.h" 10 | #include "render_panel/gr_statistics.h" 11 | 12 | namespace tc 13 | { 14 | TabBase::TabBase(const std::shared_ptr& app, QWidget* parent) : QWidget(parent) { 15 | app_ = app; 16 | context_ = app->GetContext(); 17 | settings_ = GrSettings::Instance(); 18 | msg_listener_ = context_->GetMessageNotifier()->CreateListener(); 19 | statistics_ = GrStatistics::Instance(); 20 | } 21 | 22 | TabBase::~TabBase() { 23 | 24 | } 25 | 26 | void TabBase::OnTabShow() { 27 | 28 | } 29 | 30 | void TabBase::OnTabHide() { 31 | 32 | } 33 | } -------------------------------------------------------------------------------- /src/render_panel/ui/tab_settings.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 2024-04-09. 3 | // 4 | 5 | #ifndef TC_SERVER_STEAM_TABSETTINGS_H 6 | #define TC_SERVER_STEAM_TABSETTINGS_H 7 | 8 | #include "tab_base.h" 9 | #include 10 | #include 11 | 12 | namespace tc 13 | { 14 | 15 | enum class StTabName { 16 | kStNetwork, 17 | kStGeneral, 18 | kStAboutMe, 19 | }; 20 | 21 | class TabSettings : public TabBase { 22 | public: 23 | 24 | explicit TabSettings(const std::shared_ptr& app, QWidget* parent = nullptr); 25 | ~TabSettings() override; 26 | 27 | void OnTabShow() override; 28 | void OnTabHide() override; 29 | 30 | private: 31 | void ChangeTab(const StTabName& tn); 32 | 33 | private: 34 | 35 | std::map tabs_; 36 | QStackedWidget* stacked_widget_ = nullptr; 37 | QPushButton* btn_client_ = nullptr; 38 | QPushButton* btn_input_ = nullptr; 39 | QPushButton* btn_about_me_ = nullptr; 40 | 41 | }; 42 | 43 | } 44 | 45 | #endif //TC_SERVER_STEAM_TABGAME_H 46 | -------------------------------------------------------------------------------- /src/service/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set(SERVICE_SRCS 2 | ${CMAKE_CURRENT_SOURCE_DIR}/service_main.cpp 3 | ${CMAKE_CURRENT_SOURCE_DIR}/service.cpp 4 | ${CMAKE_CURRENT_SOURCE_DIR}/service_context.cpp 5 | ${CMAKE_CURRENT_SOURCE_DIR}/service_msg_server.cpp 6 | ${CMAKE_CURRENT_SOURCE_DIR}/render_manager.cpp 7 | PARENT_SCOPE 8 | ) 9 | 10 | set(SERVICE_MGR_SRCS 11 | ${CMAKE_CURRENT_SOURCE_DIR}/service_manager.cpp 12 | PARENT_SCOPE 13 | ) 14 | 15 | set(SERVICE_MGR_MAIN_SRCS 16 | ${CMAKE_CURRENT_SOURCE_DIR}/service_manager_main.cpp 17 | PARENT_SCOPE 18 | ) -------------------------------------------------------------------------------- /src/service/service_main.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 21/10/2024. 3 | // 4 | 5 | #ifndef GAMMARAY_SERVICE_MAIN_H 6 | #define GAMMARAY_SERVICE_MAIN_H 7 | 8 | namespace tc 9 | { 10 | 11 | 12 | } 13 | 14 | #endif //GAMMARAY_SERVICE_MAIN_H 15 | -------------------------------------------------------------------------------- /src/service/service_manager.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 22/10/2024. 3 | // 4 | 5 | #ifndef GAMMARAY_SERVICE_MANAGER_H 6 | #define GAMMARAY_SERVICE_MANAGER_H 7 | 8 | #include 9 | #include 10 | 11 | namespace tc 12 | { 13 | enum class ServiceStatus { 14 | kUnknownStatus, 15 | kPending, 16 | kRunning, 17 | kStopped, 18 | }; 19 | 20 | class ServiceManager { 21 | public: 22 | static std::shared_ptr Make(); 23 | ServiceManager(); 24 | 25 | void Init(const std::string& srv_name, const std::string& path, const std::string& display_name, const std::string& description); 26 | void Install(); 27 | void Remove(); 28 | ServiceStatus QueryStatus(); 29 | 30 | static std::string StatusAsString(ServiceStatus status); 31 | 32 | private: 33 | std::string srv_name_; 34 | std::string srv_exe_path_; 35 | std::string srv_display_name_; 36 | std::string srv_description_; 37 | }; 38 | 39 | } 40 | 41 | #endif //GAMMARAY_SERVICE_MANAGER_H 42 | -------------------------------------------------------------------------------- /src/service/service_messages.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 5/12/2024. 3 | // 4 | 5 | #ifndef GAMMARAY_SERVICE_MESSAGES_H 6 | #define GAMMARAY_SERVICE_MESSAGES_H 7 | 8 | namespace tc 9 | { 10 | 11 | class MsgTimer1S { 12 | public: 13 | }; 14 | 15 | class MsgTimer3S { 16 | public: 17 | 18 | }; 19 | 20 | 21 | } 22 | 23 | #endif //GAMMARAY_SERVICE_MESSAGES_H 24 | -------------------------------------------------------------------------------- /src/tests/test_process.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 2024/5/24. 3 | // 4 | #include 5 | 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include "tc_common_new/process_util.h" 12 | 13 | using namespace tc; 14 | 15 | int main(int argc, char** argv) { 16 | ::testing::InitGoogleTest(); 17 | return RUN_ALL_TESTS(); 18 | } 19 | 20 | TEST(TestProcess, StartProcess) { 21 | auto ret = ProcessUtil::StartProcess("C:/software/u3d_demo/u3d_demo/u3d_shared_window_demo.exe", {}, true, false); 22 | std::cout << "result: " << ret << std::endl; 23 | } -------------------------------------------------------------------------------- /src/tests/test_resolutions.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // Created by RGAA on 31/08/2024. 3 | // 4 | 5 | #include 6 | #include 7 | 8 | int main() { 9 | DISPLAY_DEVICE dd; 10 | dd.cb = sizeof(dd); 11 | EnumDisplayDevices(NULL, 0, &dd, 0); 12 | DEVMODE dm; 13 | dm.dmSize = sizeof(dm); 14 | dm.dmDriverExtra = 0; 15 | int iModeNum = 0; 16 | while (EnumDisplaySettingsExW(dd.DeviceName, iModeNum, &dm, 0)) { 17 | std::wcout << "name: " << dd.DeviceName << " Width: " << dm.dmPelsWidth << " Height: " << dm.dmPelsHeight << std::endl; 18 | iModeNum++; 19 | } 20 | 21 | return 0; 22 | } -------------------------------------------------------------------------------- /src/uninstall/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set(UNINSTALL_SRCS 2 | ${CMAKE_CURRENT_SOURCE_DIR}/uninstall_main.cpp 3 | PARENT_SCOPE 4 | ) 5 | 6 | set(SHADOW_DELETER_SRCS 7 | ${CMAKE_CURRENT_SOURCE_DIR}/shadow_deleter.cpp 8 | PARENT_SCOPE 9 | ) --------------------------------------------------------------------------------