tray icon and resources
This commit is contained in:
parent
0d7d050777
commit
587969d304
|
@ -1,2 +1,3 @@
|
||||||
build/*
|
build/*
|
||||||
.DS_Store
|
.DS_Store
|
||||||
|
src/rsrc.hpp
|
|
@ -1,9 +1,11 @@
|
||||||
cmake_minimum_required (VERSION 3.8)
|
cmake_minimum_required (VERSION 3.8)
|
||||||
|
include("cmake/create_resources.cmake")
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
project ("globalRPC" LANGUAGES C CXX OBJCXX)
|
project ("globalRPC" LANGUAGES C CXX OBJCXX)
|
||||||
else()
|
else()
|
||||||
project ("globalRPC" LANGUAGES C CXX)
|
project ("globalRPC" LANGUAGES C CXX)
|
||||||
endif()
|
endif()
|
||||||
|
create_resources("rsrc" "src/rsrc.hpp")
|
||||||
file(GLOB_RECURSE SOURCES "src/*.cpp")
|
file(GLOB_RECURSE SOURCES "src/*.cpp")
|
||||||
add_executable (rpc ${SOURCES})
|
add_executable (rpc ${SOURCES})
|
||||||
set_property(TARGET rpc PROPERTY CXX_STANDARD 20)
|
set_property(TARGET rpc PROPERTY CXX_STANDARD 20)
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
function(create_resources dir output)
|
||||||
|
file(WRITE ${output} "")
|
||||||
|
file(GLOB bins ${dir}/*)
|
||||||
|
foreach(bin ${bins})
|
||||||
|
string(REGEX MATCH "([^/]+)$" filename ${bin})
|
||||||
|
string(REGEX REPLACE "\\.| |-" "_" filename ${filename})
|
||||||
|
file(READ ${bin} filedata HEX)
|
||||||
|
string(REGEX REPLACE "([0-9a-f][0-9a-f])" "0x\\1," filedata ${filedata})
|
||||||
|
file(APPEND ${output} "inline const unsigned char ${filename}[] = {${filedata}};\ninline const unsigned ${filename}_size = sizeof(${filename});\n")
|
||||||
|
endforeach()
|
||||||
|
endfunction()
|
Binary file not shown.
After Width: | Height: | Size: 285 KiB |
38
src/main.cpp
38
src/main.cpp
|
@ -1,4 +1,7 @@
|
||||||
#include <discord-rpc/discord_rpc.h>
|
#include <discord-rpc/discord_rpc.h>
|
||||||
|
#include <wx/image.h>
|
||||||
|
#include <wx/mstream.h>
|
||||||
|
#include <wx/taskbar.h>
|
||||||
#include <wx/wx.h>
|
#include <wx/wx.h>
|
||||||
|
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
|
@ -7,6 +10,7 @@
|
||||||
#include <thread>
|
#include <thread>
|
||||||
|
|
||||||
#include "backend.hpp"
|
#include "backend.hpp"
|
||||||
|
#include "rsrc.hpp"
|
||||||
#include "utils.hpp"
|
#include "utils.hpp"
|
||||||
|
|
||||||
std::string lastPlayingSong = "";
|
std::string lastPlayingSong = "";
|
||||||
|
@ -98,14 +102,48 @@ void handleMediaTasks() {
|
||||||
Discord_UpdatePresence(&activity);
|
Discord_UpdatePresence(&activity);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
class MyTaskBarIcon : public wxTaskBarIcon {
|
||||||
|
public:
|
||||||
|
MyTaskBarIcon(wxFrame* mainFrame) : m_mainFrame(mainFrame) {}
|
||||||
|
|
||||||
|
void OnMenuOpen(wxCommandEvent& evt) { m_mainFrame->Show(true); }
|
||||||
|
|
||||||
|
void OnMenuExit(wxCommandEvent& evt) { m_mainFrame->Close(true); }
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual wxMenu* CreatePopupMenu() override {
|
||||||
|
wxMenu* menu = new wxMenu;
|
||||||
|
menu->Append(10001, "Open");
|
||||||
|
menu->AppendSeparator();
|
||||||
|
menu->Append(10002, "Quit");
|
||||||
|
Bind(wxEVT_MENU, &MyTaskBarIcon::OnMenuOpen, this, 10001);
|
||||||
|
Bind(wxEVT_MENU, &MyTaskBarIcon::OnMenuExit, this, 10002);
|
||||||
|
return menu;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
wxFrame* m_mainFrame;
|
||||||
|
};
|
||||||
class MyApp : public wxApp {
|
class MyApp : public wxApp {
|
||||||
public:
|
public:
|
||||||
virtual bool OnInit() override {
|
virtual bool OnInit() override {
|
||||||
|
wxInitAllImageHandlers();
|
||||||
wxFrame* frame = new wxFrame(nullptr, wxID_ANY, "Hello wxWidgets", wxDefaultPosition, wxSize(400, 300));
|
wxFrame* frame = new wxFrame(nullptr, wxID_ANY, "Hello wxWidgets", wxDefaultPosition, wxSize(400, 300));
|
||||||
|
trayIcon = new MyTaskBarIcon(frame);
|
||||||
|
frame->Bind(wxEVT_CLOSE_WINDOW, [=](wxCloseEvent& event) {
|
||||||
|
trayIcon->RemoveIcon();
|
||||||
|
trayIcon->Destroy();
|
||||||
|
event.Skip();
|
||||||
|
});
|
||||||
|
wxIcon icon = utils::loadIconFromMemory(icon_png, icon_png_size);
|
||||||
|
trayIcon->SetIcon(icon, "My App");
|
||||||
wxStaticText* text = new wxStaticText(frame, wxID_ANY, "Hello World", wxPoint(150, 130));
|
wxStaticText* text = new wxStaticText(frame, wxID_ANY, "Hello World", wxPoint(150, 130));
|
||||||
frame->Show(true);
|
frame->Show(true);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
MyTaskBarIcon* trayIcon;
|
||||||
};
|
};
|
||||||
|
|
||||||
wxIMPLEMENT_APP_NO_MAIN(MyApp);
|
wxIMPLEMENT_APP_NO_MAIN(MyApp);
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
#ifndef _UTILS_
|
#ifndef _UTILS_
|
||||||
#define _UTILS_
|
#define _UTILS_
|
||||||
#include <curl/include/curl/curl.h>
|
#include <curl/include/curl/curl.h>
|
||||||
|
#include <wx/mstream.h>
|
||||||
|
#include <wx/wx.h>
|
||||||
|
|
||||||
#include <filesystem>
|
#include <filesystem>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
|
@ -13,6 +15,17 @@
|
||||||
#define CONFIG_FILENAME "known.json"
|
#define CONFIG_FILENAME "known.json"
|
||||||
|
|
||||||
namespace utils {
|
namespace utils {
|
||||||
|
inline wxIcon loadIconFromMemory(const unsigned char* data, size_t size) {
|
||||||
|
wxMemoryInputStream stream(data, size);
|
||||||
|
wxImage img(stream, wxBITMAP_TYPE_PNG);
|
||||||
|
if (img.IsOk()) {
|
||||||
|
wxBitmap bmp(img);
|
||||||
|
wxIcon icon;
|
||||||
|
icon.CopyFromBitmap(bmp);
|
||||||
|
return icon;
|
||||||
|
}
|
||||||
|
return wxNullIcon;
|
||||||
|
}
|
||||||
inline std::string ltrim(std::string& s) {
|
inline std::string ltrim(std::string& s) {
|
||||||
s.erase(s.begin(), std::find_if(s.begin(), s.end(), [](unsigned char ch) { return !std::isspace(ch); }));
|
s.erase(s.begin(), std::find_if(s.begin(), s.end(), [](unsigned char ch) { return !std::isspace(ch); }));
|
||||||
return s;
|
return s;
|
||||||
|
|
Loading…
Reference in New Issue