Add Windows support.
This commit is contained in:
parent
ee51f3ee09
commit
683ba5447f
37 changed files with 477 additions and 113 deletions
|
@ -5,7 +5,13 @@ project(media-tools)
|
||||||
|
|
||||||
set(CMAKE_CXX_STANDARD 17)
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED True)
|
set(CMAKE_CXX_STANDARD_REQUIRED True)
|
||||||
link_libraries(stdc++fs)
|
set_property( GLOBAL PROPERTY USE_FOLDERS ON)
|
||||||
|
|
||||||
|
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
|
||||||
|
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
|
||||||
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
||||||
|
|
||||||
|
find_package(SQLite3)
|
||||||
|
|
||||||
add_subdirectory(src)
|
add_subdirectory(src)
|
||||||
add_subdirectory(apps)
|
add_subdirectory(apps)
|
||||||
|
|
|
@ -5,7 +5,15 @@ target_include_directories(sample_gui PUBLIC
|
||||||
"${PROJECT_SOURCE_DIR}/src/client"
|
"${PROJECT_SOURCE_DIR}/src/client"
|
||||||
)
|
)
|
||||||
target_link_libraries(sample_gui PUBLIC client windows console core
|
target_link_libraries(sample_gui PUBLIC client windows console core
|
||||||
network database geometry audio graphics web)
|
network database geometry audio web)
|
||||||
|
|
||||||
|
add_executable(sample_gui_win WIN32 gui-main-win.cpp)
|
||||||
|
target_include_directories(sample_gui PUBLIC
|
||||||
|
"${PROJECT_SOURCE_DIR}/src/console"
|
||||||
|
"${PROJECT_SOURCE_DIR}/src/client"
|
||||||
|
)
|
||||||
|
target_link_libraries(sample_gui_win PUBLIC client windows console core
|
||||||
|
network database geometry audio web)
|
||||||
|
|
||||||
# Sample Console
|
# Sample Console
|
||||||
add_executable(sample_console console-main.cpp)
|
add_executable(sample_console console-main.cpp)
|
||||||
|
@ -22,3 +30,8 @@ target_include_directories(xml_practice PUBLIC
|
||||||
"${PROJECT_SOURCE_DIR}/src/web/xml"
|
"${PROJECT_SOURCE_DIR}/src/web/xml"
|
||||||
)
|
)
|
||||||
target_link_libraries(xml_practice PUBLIC core web)
|
target_link_libraries(xml_practice PUBLIC core web)
|
||||||
|
|
||||||
|
set_property(TARGET sample_console PROPERTY FOLDER apps)
|
||||||
|
set_property(TARGET sample_gui PROPERTY FOLDER apps)
|
||||||
|
set_property(TARGET sample_gui_win PROPERTY FOLDER apps)
|
||||||
|
set_property(TARGET xml_practice PROPERTY FOLDER apps)
|
82
apps/audio-win.cpp
Normal file
82
apps/audio-win.cpp
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
// LowLevelAudio.cpp : This file contains the 'main' function. Program execution begins and ends there.
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "Mmdeviceapi.h"
|
||||||
|
#include "Functiondiscoverykeys_devpkey.h"
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
const CLSID CLSID_MMDeviceEnumerator = __uuidof(MMDeviceEnumerator);
|
||||||
|
const IID IID_IMMDeviceEnumerator = __uuidof(IMMDeviceEnumerator);
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
CoInitialize(nullptr);
|
||||||
|
IMMDeviceEnumerator* pEnumerator = nullptr;
|
||||||
|
IMMDeviceCollection* pDeviceCollection = nullptr;
|
||||||
|
HRESULT hr = S_OK;
|
||||||
|
|
||||||
|
hr = CoCreateInstance(CLSID_MMDeviceEnumerator, NULL, CLSCTX_ALL,
|
||||||
|
IID_IMMDeviceEnumerator, (void**)& pEnumerator);
|
||||||
|
if (!pEnumerator)
|
||||||
|
{
|
||||||
|
std::cout << "Failed to populate enumerator" << std::endl;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
hr = pEnumerator->EnumAudioEndpoints(eRender, DEVICE_STATE_ACTIVE, &pDeviceCollection);
|
||||||
|
UINT count;
|
||||||
|
hr = pDeviceCollection->GetCount(&count);
|
||||||
|
if (count == 0)
|
||||||
|
{
|
||||||
|
std::cout << "No devices found\n";
|
||||||
|
}
|
||||||
|
// Each loop prints the name of an endpoint device.
|
||||||
|
IMMDevice* pEndpoint = nullptr;
|
||||||
|
IPropertyStore* pProps = nullptr;
|
||||||
|
LPWSTR pwszID = nullptr;
|
||||||
|
for (ULONG i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
// Get pointer to endpoint number i.
|
||||||
|
hr = pDeviceCollection->Item(i, &pEndpoint);
|
||||||
|
|
||||||
|
// Get the endpoint ID string.
|
||||||
|
hr = pEndpoint->GetId(&pwszID);
|
||||||
|
hr = pEndpoint->OpenPropertyStore(STGM_READ, &pProps);
|
||||||
|
|
||||||
|
PROPVARIANT varName;
|
||||||
|
// Initialize container for property value.
|
||||||
|
PropVariantInit(&varName);
|
||||||
|
|
||||||
|
// Get the endpoint's friendly-name property.
|
||||||
|
hr = pProps->GetValue(PKEY_Device_FriendlyName, &varName);
|
||||||
|
|
||||||
|
// Print endpoint friendly name and endpoint ID.
|
||||||
|
std::cout << "Endpoint: " << i << " " << varName.pwszVal << " " << pwszID << std::endl;
|
||||||
|
CoTaskMemFree(pwszID);
|
||||||
|
pwszID = nullptr;
|
||||||
|
|
||||||
|
PropVariantClear(&varName);
|
||||||
|
if (pProps)
|
||||||
|
{
|
||||||
|
pProps->Release();
|
||||||
|
pProps = nullptr;
|
||||||
|
}
|
||||||
|
if (pEndpoint)
|
||||||
|
{
|
||||||
|
pEndpoint->Release();
|
||||||
|
pEndpoint = nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (pEnumerator)
|
||||||
|
{
|
||||||
|
pEnumerator->Release();
|
||||||
|
pEnumerator = nullptr;
|
||||||
|
}
|
||||||
|
if (pDeviceCollection)
|
||||||
|
{
|
||||||
|
pDeviceCollection->Release();
|
||||||
|
pDeviceCollection = nullptr;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
73
apps/gui-main-win.cpp
Normal file
73
apps/gui-main-win.cpp
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
#ifndef UNICODE
|
||||||
|
#define UNICODE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "windows.h"
|
||||||
|
|
||||||
|
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||||
|
|
||||||
|
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int nCmdShow)
|
||||||
|
{
|
||||||
|
// Register the window class.
|
||||||
|
const wchar_t CLASS_NAME[] = L"Sample Window Class";
|
||||||
|
|
||||||
|
WNDCLASS wc = { };
|
||||||
|
|
||||||
|
wc.lpfnWndProc = WindowProc;
|
||||||
|
wc.hInstance = hInstance;
|
||||||
|
wc.lpszClassName = CLASS_NAME;
|
||||||
|
|
||||||
|
RegisterClass(&wc);
|
||||||
|
|
||||||
|
HWND hwnd = CreateWindowEx(
|
||||||
|
0, // Optional window styles.
|
||||||
|
CLASS_NAME, // Window class
|
||||||
|
L"Learn to Program Windows", // Window text
|
||||||
|
WS_OVERLAPPEDWINDOW, // Window style
|
||||||
|
|
||||||
|
// Size and position
|
||||||
|
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
|
||||||
|
|
||||||
|
NULL, // Parent window
|
||||||
|
NULL, // Menu
|
||||||
|
hInstance, // Instance handle
|
||||||
|
NULL // Additional application data
|
||||||
|
);
|
||||||
|
|
||||||
|
if (hwnd == NULL)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
ShowWindow(hwnd, nCmdShow);
|
||||||
|
|
||||||
|
// Run the message loop.
|
||||||
|
MSG msg = { };
|
||||||
|
while (GetMessage(&msg, NULL, 0, 0))
|
||||||
|
{
|
||||||
|
TranslateMessage(&msg);
|
||||||
|
DispatchMessage(&msg);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
switch (uMsg)
|
||||||
|
{
|
||||||
|
case WM_DESTROY:
|
||||||
|
PostQuitMessage(0);
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case WM_PAINT:
|
||||||
|
{
|
||||||
|
PAINTSTRUCT ps;
|
||||||
|
HDC hdc = BeginPaint(hwnd, &ps);
|
||||||
|
|
||||||
|
FillRect(hdc, &ps.rcPaint, (HBRUSH)(COLOR_WINDOW + 1));
|
||||||
|
|
||||||
|
EndPaint(hwnd, &ps);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return DefWindowProc(hwnd, uMsg, wParam, lParam);
|
||||||
|
}
|
|
@ -4,7 +4,7 @@ AudioManager::AudioManager()
|
||||||
: mAudioDevices(),
|
: mAudioDevices(),
|
||||||
mAudioInterface()
|
mAudioInterface()
|
||||||
{
|
{
|
||||||
mAudioInterface = AlsaInterface::Create();
|
mAudioInterface = AudioInterface::Create();
|
||||||
}
|
}
|
||||||
|
|
||||||
AudioManager::~AudioManager()
|
AudioManager::~AudioManager()
|
||||||
|
@ -12,9 +12,9 @@ AudioManager::~AudioManager()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<AudioManager> AudioManager::Create()
|
std::unique_ptr<AudioManager> AudioManager::Create()
|
||||||
{
|
{
|
||||||
return std::make_shared<AudioManager>();
|
return std::make_unique<AudioManager>();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudioManager::AddAudioDevice(AudioDevicePtr device)
|
void AudioManager::AddAudioDevice(AudioDevicePtr device)
|
||||||
|
@ -22,9 +22,9 @@ void AudioManager::AddAudioDevice(AudioDevicePtr device)
|
||||||
mAudioDevices.push_back(device);
|
mAudioDevices.push_back(device);
|
||||||
}
|
}
|
||||||
|
|
||||||
AlsaInterfacePtr AudioManager::GetAudioInterface()
|
AudioInterface* AudioManager::GetAudioInterface()
|
||||||
{
|
{
|
||||||
return mAudioInterface;
|
return mAudioInterface.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<AudioDevicePtr> AudioManager::GetAudioDevices()
|
std::vector<AudioDevicePtr> AudioManager::GetAudioDevices()
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "AlsaInterface.h"
|
#include "AudioInterface.h"
|
||||||
#include "AudioDevice.h"
|
#include "AudioDevice.h"
|
||||||
|
|
||||||
class AudioManager
|
class AudioManager
|
||||||
|
@ -12,7 +12,7 @@ class AudioManager
|
||||||
private:
|
private:
|
||||||
|
|
||||||
std::vector<AudioDevicePtr> mAudioDevices;
|
std::vector<AudioDevicePtr> mAudioDevices;
|
||||||
AlsaInterfacePtr mAudioInterface;
|
AudioInterfaceUPtr mAudioInterface;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
@ -20,13 +20,13 @@ public:
|
||||||
|
|
||||||
~AudioManager();
|
~AudioManager();
|
||||||
|
|
||||||
static std::shared_ptr<AudioManager> Create();
|
static std::unique_ptr<AudioManager> Create();
|
||||||
|
|
||||||
void AddAudioDevice(AudioDevicePtr device);
|
void AddAudioDevice(AudioDevicePtr device);
|
||||||
|
|
||||||
std::vector<AudioDevicePtr> GetAudioDevices();
|
std::vector<AudioDevicePtr> GetAudioDevices();
|
||||||
|
|
||||||
AlsaInterfacePtr GetAudioInterface();
|
AudioInterface* GetAudioInterface();
|
||||||
};
|
};
|
||||||
|
|
||||||
using AudioManagerPtr = std::shared_ptr<AudioManager>;
|
using AudioManagerUPtr = std::unique_ptr<AudioManager>;
|
||||||
|
|
|
@ -1,7 +1,26 @@
|
||||||
|
list(APPEND linux_HEADERS
|
||||||
|
audio_interfaces/AlsaInterface.h
|
||||||
|
)
|
||||||
|
|
||||||
|
list(APPEND audio_HEADERS
|
||||||
|
AudioDevice.h
|
||||||
|
AudioManager.h
|
||||||
|
audio_interfaces/AudioInterface.h
|
||||||
|
midi/MidiReader.h
|
||||||
|
midi/MidiTrack.h
|
||||||
|
midi/MidiDocument.h
|
||||||
|
midi/MidiEvent.h
|
||||||
|
midi/MetaMidiEvent.h
|
||||||
|
midi/MidiChannelEvent.h)
|
||||||
|
|
||||||
|
list(APPEND linux_INCLUDES
|
||||||
|
audio_interfaces/AlsaInterface.cpp
|
||||||
|
)
|
||||||
|
|
||||||
list(APPEND audio_LIB_INCLUDES
|
list(APPEND audio_LIB_INCLUDES
|
||||||
AudioDevice.cpp
|
AudioDevice.cpp
|
||||||
AudioManager.cpp
|
AudioManager.cpp
|
||||||
audio_interfaces/AlsaInterface.cpp
|
audio_interfaces/AudioInterface.cpp
|
||||||
midi/MidiReader.cpp
|
midi/MidiReader.cpp
|
||||||
midi/MidiTrack.cpp
|
midi/MidiTrack.cpp
|
||||||
midi/MidiDocument.cpp
|
midi/MidiDocument.cpp
|
||||||
|
@ -9,8 +28,7 @@ list(APPEND audio_LIB_INCLUDES
|
||||||
midi/MetaMidiEvent.cpp
|
midi/MetaMidiEvent.cpp
|
||||||
midi/MidiChannelEvent.cpp)
|
midi/MidiChannelEvent.cpp)
|
||||||
|
|
||||||
|
add_library(audio SHARED ${audio_LIB_INCLUDES} ${audio_HEADERS})
|
||||||
add_library(audio SHARED ${audio_LIB_INCLUDES})
|
|
||||||
target_include_directories(audio PUBLIC
|
target_include_directories(audio PUBLIC
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}"
|
"${CMAKE_CURRENT_SOURCE_DIR}"
|
||||||
"${PROJECT_SOURCE_DIR}/src/core/file_utilities"
|
"${PROJECT_SOURCE_DIR}/src/core/file_utilities"
|
||||||
|
@ -19,4 +37,10 @@ target_include_directories(audio PUBLIC
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/midi"
|
"${CMAKE_CURRENT_SOURCE_DIR}/midi"
|
||||||
)
|
)
|
||||||
|
|
||||||
target_link_libraries(audio PUBLIC core asound)
|
list(APPEND linux_LIBS
|
||||||
|
asound
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(audio PUBLIC core)
|
||||||
|
set_target_properties( audio PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON )
|
||||||
|
set_property(TARGET audio PROPERTY FOLDER src)
|
22
src/audio/audio_interfaces/AudioInterface.cpp
Normal file
22
src/audio/audio_interfaces/AudioInterface.cpp
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
#include "AudioInterface.h"
|
||||||
|
#include "AudioDevice.h"
|
||||||
|
|
||||||
|
AudioInterface::AudioInterface()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
std::unique_ptr<AudioInterface> AudioInterface::Create()
|
||||||
|
{
|
||||||
|
return std::make_unique<AudioInterface>();
|
||||||
|
}
|
||||||
|
|
||||||
|
void AudioInterface::OpenDevice(AudioDevicePtr device)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void AudioInterface::Play(AudioDevicePtr device)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
21
src/audio/audio_interfaces/AudioInterface.h
Normal file
21
src/audio/audio_interfaces/AudioInterface.h
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
class AudioDevice;
|
||||||
|
using AudioDevicePtr = std::shared_ptr<AudioDevice>;
|
||||||
|
|
||||||
|
class AudioInterface
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
AudioInterface();
|
||||||
|
|
||||||
|
static std::unique_ptr<AudioInterface> Create();
|
||||||
|
|
||||||
|
void OpenDevice(AudioDevicePtr device);
|
||||||
|
|
||||||
|
void Play(AudioDevicePtr device);
|
||||||
|
};
|
||||||
|
|
||||||
|
using AudioInterfaceUPtr = std::unique_ptr<AudioInterface>;
|
|
@ -123,11 +123,11 @@ bool MidiReader::ProcessSetTempoMetaEvent(std::ifstream& file, MetaMidiEvent& ev
|
||||||
BinaryFile::GetNextByteAsInt(file, length);
|
BinaryFile::GetNextByteAsInt(file, length);
|
||||||
mTrackByteCount ++;
|
mTrackByteCount ++;
|
||||||
|
|
||||||
char buffer[length];
|
std::string buffer;
|
||||||
BinaryFile::GetNextNBytes(file, buffer, length);
|
BinaryFile::GetNextNBytes(file, buffer.data(), length);
|
||||||
mTrackByteCount += length;
|
mTrackByteCount += length;
|
||||||
|
|
||||||
int tempo = ByteUtils::ToInt(buffer, length);
|
int tempo = ByteUtils::ToInt(buffer.data(), length);
|
||||||
const int MICROSECONDS_PER_MINUTE = 60000000;
|
const int MICROSECONDS_PER_MINUTE = 60000000;
|
||||||
std::cout << "Got tempo "<< tempo << "|" << MICROSECONDS_PER_MINUTE/tempo<< std::endl;
|
std::cout << "Got tempo "<< tempo << "|" << MICROSECONDS_PER_MINUTE/tempo<< std::endl;
|
||||||
event.SetValue(tempo);
|
event.SetValue(tempo);
|
||||||
|
@ -331,7 +331,7 @@ bool MidiReader::ProcessTrackChunk(std::ifstream& file, bool debug)
|
||||||
mTrackByteCount = 0;
|
mTrackByteCount = 0;
|
||||||
MidiTrack track;
|
MidiTrack track;
|
||||||
unsigned iter_count = 0;
|
unsigned iter_count = 0;
|
||||||
while(mTrackByteCount < chunkSize)
|
while(mTrackByteCount < unsigned(chunkSize))
|
||||||
{
|
{
|
||||||
std::cout << "-------------" << std::endl;
|
std::cout << "-------------" << std::endl;
|
||||||
ProcessEvent(file, track);
|
ProcessEvent(file, track);
|
||||||
|
|
|
@ -1,3 +1,16 @@
|
||||||
|
list(APPEND client_HEADERS
|
||||||
|
TopBar.h
|
||||||
|
StatusBar.h
|
||||||
|
GuiApplication.h
|
||||||
|
TabbedPanelWidget.h
|
||||||
|
text_editor/TextEditorView.h
|
||||||
|
text_editor/TextEditorModel.h
|
||||||
|
text_editor/TextEditorController.h
|
||||||
|
text_editor/PlainTextDocument.h
|
||||||
|
audio_editor/AudioEditorView.h
|
||||||
|
image_editor/ImageEditorView.h
|
||||||
|
web_client/WebClientView.h)
|
||||||
|
|
||||||
list(APPEND client_LIB_INCLUDES
|
list(APPEND client_LIB_INCLUDES
|
||||||
TopBar.cpp
|
TopBar.cpp
|
||||||
StatusBar.cpp
|
StatusBar.cpp
|
||||||
|
@ -11,7 +24,7 @@ list(APPEND client_LIB_INCLUDES
|
||||||
image_editor/ImageEditorView.cpp
|
image_editor/ImageEditorView.cpp
|
||||||
web_client/WebClientView.cpp)
|
web_client/WebClientView.cpp)
|
||||||
|
|
||||||
add_library(client SHARED ${client_LIB_INCLUDES})
|
add_library(client SHARED ${client_LIB_INCLUDES} ${client_HEADERS})
|
||||||
|
|
||||||
target_link_libraries(client ui_elements windows core console database geometry)
|
target_link_libraries(client ui_elements windows core console database geometry)
|
||||||
|
|
||||||
|
@ -24,3 +37,5 @@ target_include_directories(client PUBLIC
|
||||||
"${PROJECT_SOURCE_DIR}/src/console"
|
"${PROJECT_SOURCE_DIR}/src/console"
|
||||||
"${PROJECT_SOURCE_DIR}/src/ui_elements/widgets"
|
"${PROJECT_SOURCE_DIR}/src/ui_elements/widgets"
|
||||||
)
|
)
|
||||||
|
set_property(TARGET client PROPERTY FOLDER src)
|
||||||
|
set_target_properties( client PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON )
|
|
@ -1,12 +1,11 @@
|
||||||
#include "GuiApplication.h"
|
#include "GuiApplication.h"
|
||||||
|
|
||||||
#include "Widget.h"
|
#include "Widget.h"
|
||||||
#include "XcbInterface.h"
|
//#include "XcbInterface.h"
|
||||||
#include "XcbKeyboard.h"
|
//#include "XcbKeyboard.h"
|
||||||
#include "Window.h"
|
#include "Window.h"
|
||||||
#include "TextElement.h"
|
#include "TextElement.h"
|
||||||
#include "WindowManager.h"
|
#include "WindowManager.h"
|
||||||
#include <iostream>
|
|
||||||
#include "TextEditorView.h"
|
#include "TextEditorView.h"
|
||||||
#include "AudioEditorView.h"
|
#include "AudioEditorView.h"
|
||||||
#include "ImageEditorView.h"
|
#include "ImageEditorView.h"
|
||||||
|
@ -16,6 +15,8 @@
|
||||||
#include "StatusBar.h"
|
#include "StatusBar.h"
|
||||||
#include "HorizontalSpacer.h"
|
#include "HorizontalSpacer.h"
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
GuiApplication::GuiApplication()
|
GuiApplication::GuiApplication()
|
||||||
: AbstractDesktopApp(),
|
: AbstractDesktopApp(),
|
||||||
mMainApplication(),
|
mMainApplication(),
|
||||||
|
@ -74,18 +75,18 @@ void GuiApplication::Run()
|
||||||
auto mainWindow = mDesktopManager->GetWindowManager()->GetMainWindow();
|
auto mainWindow = mDesktopManager->GetWindowManager()->GetMainWindow();
|
||||||
SetUpWidget();
|
SetUpWidget();
|
||||||
|
|
||||||
mDesktopManager->SetKeyboard(XcbKeyboard::Create());
|
//mDesktopManager->SetKeyboard(XcbKeyboard::Create());
|
||||||
|
|
||||||
bool useOpenGl = false;
|
//bool useOpenGl = false;
|
||||||
XcbInterface window_interface;
|
//XcbInterface window_interface;
|
||||||
window_interface.SetUseOpenGl(useOpenGl);
|
//window_interface.SetUseOpenGl(useOpenGl);
|
||||||
window_interface.Initialize();
|
//window_interface.Initialize();
|
||||||
window_interface.AddWindow(mainWindow);
|
//window_interface.AddWindow(mainWindow);
|
||||||
window_interface.ShowWindow(mainWindow);
|
//window_interface.ShowWindow(mainWindow);
|
||||||
if(useOpenGl)
|
//if(useOpenGl)
|
||||||
{
|
//{
|
||||||
window_interface.CreateOpenGlDrawable(mainWindow);
|
// window_interface.CreateOpenGlDrawable(mainWindow);
|
||||||
}
|
//}
|
||||||
window_interface.Loop(mDesktopManager.get());
|
//window_interface.Loop(mDesktopManager.get());
|
||||||
window_interface.ShutDown();
|
//window_interface.ShutDown();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <memory>
|
|
||||||
|
|
||||||
#include "MainApplication.h"
|
#include "MainApplication.h"
|
||||||
#include "AbstractDesktopApp.h"
|
#include "AbstractDesktopApp.h"
|
||||||
#include "DesktopManager.h"
|
#include "DesktopManager.h"
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
class GuiApplication : public AbstractDesktopApp
|
class GuiApplication : public AbstractDesktopApp
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
|
list(APPEND console_HEADERS MainApplication.h)
|
||||||
|
|
||||||
list(APPEND console_LIB_INCLUDES MainApplication.cpp)
|
list(APPEND console_LIB_INCLUDES MainApplication.cpp)
|
||||||
|
|
||||||
add_library(console SHARED ${console_LIB_INCLUDES})
|
add_library(console SHARED ${console_LIB_INCLUDES} ${console_HEADERS})
|
||||||
|
|
||||||
target_include_directories(console PUBLIC
|
target_include_directories(console PUBLIC
|
||||||
"${PROJECT_SOURCE_DIR}/src/core/"
|
"${PROJECT_SOURCE_DIR}/src/core/"
|
||||||
|
@ -14,4 +16,8 @@ target_include_directories(console PUBLIC
|
||||||
"${PROJECT_SOURCE_DIR}/src/audio/midi"
|
"${PROJECT_SOURCE_DIR}/src/audio/midi"
|
||||||
"${PROJECT_SOURCE_DIR}/src/audio/audio_interfaces"
|
"${PROJECT_SOURCE_DIR}/src/audio/audio_interfaces"
|
||||||
"${PROJECT_SOURCE_DIR}/src/web"
|
"${PROJECT_SOURCE_DIR}/src/web"
|
||||||
|
"${SQLite3_INCLUDE_DIR}"
|
||||||
)
|
)
|
||||||
|
set_property(TARGET console PROPERTY FOLDER src)
|
||||||
|
target_link_libraries(console PUBLIC core audio network database web)
|
||||||
|
set_target_properties( console PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON )
|
|
@ -15,8 +15,8 @@ private:
|
||||||
|
|
||||||
CommandLineArgsUPtr mCommandLineArgs;
|
CommandLineArgsUPtr mCommandLineArgs;
|
||||||
DatabaseManagerPtr mDatabaseManager;
|
DatabaseManagerPtr mDatabaseManager;
|
||||||
NetworkManagerPtr mNetworkManager;
|
NetworkManagerUPtr mNetworkManager;
|
||||||
AudioManagerPtr mAudioManager;
|
AudioManagerUPtr mAudioManager;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
|
|
@ -25,14 +25,14 @@ public:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ToInt(char* buffer, unsigned size, bool reverse = true)
|
static int ToInt(char* buffer, const unsigned size, bool reverse = true)
|
||||||
{
|
{
|
||||||
int result;
|
int result;
|
||||||
if(reverse)
|
if(reverse)
|
||||||
{
|
{
|
||||||
char reversed[size];
|
std::string reversed;
|
||||||
ReverseBuffer(buffer, reversed, size);
|
ReverseBuffer(buffer, reversed.data(), size);
|
||||||
std::memcpy(&result, reversed, sizeof(int));
|
std::memcpy(&result, reversed.data(), sizeof(int));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,3 +1,14 @@
|
||||||
|
list(APPEND core_HEADERS
|
||||||
|
Event.h
|
||||||
|
Color.h
|
||||||
|
CommandLineArgs.h
|
||||||
|
loggers/FileLogger.h
|
||||||
|
file_utilities/BinaryFile.h
|
||||||
|
file_utilities/File.h
|
||||||
|
file_utilities/FileFormats.h
|
||||||
|
StringUtils.h
|
||||||
|
http/HttpResponse.h)
|
||||||
|
|
||||||
list(APPEND core_LIB_INCLUDES
|
list(APPEND core_LIB_INCLUDES
|
||||||
Event.cpp
|
Event.cpp
|
||||||
Color.cpp
|
Color.cpp
|
||||||
|
@ -10,10 +21,12 @@ list(APPEND core_LIB_INCLUDES
|
||||||
http/HttpResponse.cpp)
|
http/HttpResponse.cpp)
|
||||||
|
|
||||||
# add the executable
|
# add the executable
|
||||||
add_library(core SHARED ${core_LIB_INCLUDES})
|
add_library(core SHARED ${core_LIB_INCLUDES} ${core_HEADERS})
|
||||||
|
|
||||||
target_include_directories(core PUBLIC
|
target_include_directories(core PUBLIC
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}"
|
"${CMAKE_CURRENT_SOURCE_DIR}"
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/file_utilities"
|
"${CMAKE_CURRENT_SOURCE_DIR}/file_utilities"
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/loggers"
|
"${CMAKE_CURRENT_SOURCE_DIR}/loggers"
|
||||||
)
|
)
|
||||||
|
set_target_properties( core PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON )
|
||||||
|
set_property(TARGET core PROPERTY FOLDER src)
|
|
@ -13,7 +13,7 @@ File::File(std::filesystem::path path)
|
||||||
|
|
||||||
std::string File::GetExtension() const
|
std::string File::GetExtension() const
|
||||||
{
|
{
|
||||||
return mFullPath.extension();
|
return mFullPath.extension().string();
|
||||||
}
|
}
|
||||||
|
|
||||||
void File::SetAccessMode(AccessMode mode)
|
void File::SetAccessMode(AccessMode mode)
|
||||||
|
|
|
@ -21,7 +21,7 @@ void HttpResponse::SetBody(const std::string& body)
|
||||||
|
|
||||||
unsigned HttpResponse::GetBodyLength()
|
unsigned HttpResponse::GetBodyLength()
|
||||||
{
|
{
|
||||||
return mBody.length();
|
return unsigned(mBody.length());
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string HttpResponse::GetHeaderString()
|
std::string HttpResponse::GetHeaderString()
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#include "FileLogger.h"
|
#include "FileLogger.h"
|
||||||
#include <ctime>
|
#include <time.h>
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
|
|
||||||
|
|
||||||
|
@ -37,5 +37,11 @@ void FileLogger::LogLine(const std::string& logType, const std::string& line, co
|
||||||
{
|
{
|
||||||
std::time_t t = std::time(nullptr);
|
std::time_t t = std::time(nullptr);
|
||||||
const std::string cleanedFileName = fileName.substr(fileName.find_last_of("/\\") + 1);
|
const std::string cleanedFileName = fileName.substr(fileName.find_last_of("/\\") + 1);
|
||||||
mFileStream << logType << "|" << std::put_time(std::gmtime(&t), "%T") << "|" << cleanedFileName << "::" << functionName << "::" << lineNumber << "|" << line << std::endl;
|
std::tm time_buf = { 0 };
|
||||||
|
#ifdef WIN32
|
||||||
|
gmtime_s(&time_buf, &t);
|
||||||
|
#else
|
||||||
|
std::gmtime_s(&t, &time_buf);
|
||||||
|
#endif
|
||||||
|
mFileStream << logType << "|" << std::put_time(&time_buf, "%T") << "|" << cleanedFileName << "::" << functionName << "::" << lineNumber << "|" << line << std::endl;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,13 +1,15 @@
|
||||||
list(APPEND database_LIB_INCLUDES
|
list(APPEND database_LIB_INCLUDES
|
||||||
Database.cpp
|
Database.cpp
|
||||||
DatabaseManager.cpp
|
DatabaseManager.cpp
|
||||||
database_interfaces/SqliteInterface.cpp)
|
database_interfaces/SqliteInterface.cpp
|
||||||
|
${SQLite3_INCLUDE_DIR}/sqlite3.c)
|
||||||
|
|
||||||
add_library(database SHARED ${database_LIB_INCLUDES})
|
add_library(database SHARED ${database_LIB_INCLUDES})
|
||||||
|
|
||||||
target_include_directories(database PUBLIC
|
target_include_directories(database PUBLIC
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}"
|
"${CMAKE_CURRENT_SOURCE_DIR}"
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/database_interfaces"
|
"${CMAKE_CURRENT_SOURCE_DIR}/database_interfaces"
|
||||||
|
"${SQLite3_INCLUDE_DIR}"
|
||||||
)
|
)
|
||||||
|
set_property(TARGET database PROPERTY FOLDER src)
|
||||||
target_link_libraries(database PUBLIC sqlite3)
|
set_target_properties( database PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON )
|
|
@ -5,3 +5,5 @@ list(APPEND geometry_LIB_INCLUDES
|
||||||
# add the library
|
# add the library
|
||||||
add_library(geometry SHARED ${geometry_LIB_INCLUDES})
|
add_library(geometry SHARED ${geometry_LIB_INCLUDES})
|
||||||
|
|
||||||
|
set_target_properties( geometry PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON )
|
||||||
|
set_property(TARGET geometry PROPERTY FOLDER src)
|
|
@ -1,5 +1,8 @@
|
||||||
list(APPEND graphics_LIB_INCLUDES OpenGlInterface)
|
list(APPEND graphics_LIB_INCLUDES OpenGlInterface.cpp)
|
||||||
|
list(APPEND graphics_HEADERS OpenGlInterface.h)
|
||||||
|
|
||||||
add_library(graphics SHARED ${graphics_LIB_INCLUDES})
|
add_library(graphics SHARED ${graphics_LIB_INCLUDES} ${graphics_HEADERS})
|
||||||
|
|
||||||
target_link_libraries(graphics PUBLIC GL)
|
target_link_libraries(graphics PUBLIC GL)
|
||||||
|
|
||||||
|
set_property(TARGET graphics PROPERTY FOLDER src)
|
|
@ -1,14 +1,26 @@
|
||||||
|
list(APPEND linux_INCLUDES
|
||||||
|
sockets/UnixSocketInterface.cpp)
|
||||||
|
|
||||||
|
list(APPEND network_HEADERS
|
||||||
|
NetworkManager.h
|
||||||
|
sockets/Socket.h
|
||||||
|
sockets/SocketInterface.h
|
||||||
|
)
|
||||||
|
|
||||||
list(APPEND network_LIB_INCLUDES
|
list(APPEND network_LIB_INCLUDES
|
||||||
NetworkManager.cpp
|
NetworkManager.cpp
|
||||||
sockets/Socket.cpp
|
sockets/Socket.cpp
|
||||||
sockets/UnixSocketInterface.cpp)
|
sockets/SocketInterface.cpp
|
||||||
|
)
|
||||||
|
|
||||||
add_library(network SHARED ${network_LIB_INCLUDES})
|
add_library(network SHARED ${network_LIB_INCLUDES} ${network_HEADERS})
|
||||||
|
|
||||||
target_include_directories(network PUBLIC
|
target_include_directories(network PUBLIC
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}"
|
"${CMAKE_CURRENT_SOURCE_DIR}"
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/sockets"
|
"${CMAKE_CURRENT_SOURCE_DIR}/sockets"
|
||||||
"${PROJECT_SOURCE_DIR}/src/core/http"
|
"${PROJECT_SOURCE_DIR}/src/core/http"
|
||||||
)
|
)
|
||||||
|
set_target_properties( network PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON )
|
||||||
|
target_link_libraries( network PUBLIC core)
|
||||||
|
|
||||||
target_link_libraries(network PUBLIC core)
|
set_property(TARGET network PROPERTY FOLDER src)
|
|
@ -12,14 +12,14 @@ NetworkManager::~NetworkManager()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<NetworkManager> NetworkManager::Create()
|
std::unique_ptr<NetworkManager> NetworkManager::Create()
|
||||||
{
|
{
|
||||||
return std::make_shared<NetworkManager>();
|
return std::make_unique<NetworkManager>();
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetworkManager::Initialize()
|
void NetworkManager::Initialize()
|
||||||
{
|
{
|
||||||
mSocketInterface = UnixSocketInterface::Create();
|
mSocketInterface = SocketInterface::Create();
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetworkManager::RunHttpServer()
|
void NetworkManager::RunHttpServer()
|
||||||
|
|
|
@ -4,12 +4,12 @@
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "Socket.h"
|
#include "Socket.h"
|
||||||
#include "UnixSocketInterface.h"
|
#include "SocketInterface.h"
|
||||||
|
|
||||||
class NetworkManager
|
class NetworkManager
|
||||||
{
|
{
|
||||||
std::vector<SocketPtr> mActiveSockets;
|
std::vector<SocketPtr> mActiveSockets;
|
||||||
UnixSocketInterfacePtr mSocketInterface;
|
SocketInterfaceUPtr mSocketInterface;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ public:
|
||||||
|
|
||||||
~NetworkManager();
|
~NetworkManager();
|
||||||
|
|
||||||
static std::shared_ptr<NetworkManager> Create();
|
static std::unique_ptr<NetworkManager> Create();
|
||||||
|
|
||||||
void Initialize();
|
void Initialize();
|
||||||
|
|
||||||
|
@ -30,4 +30,4 @@ public:
|
||||||
void ShutDown();
|
void ShutDown();
|
||||||
};
|
};
|
||||||
|
|
||||||
using NetworkManagerPtr = std::shared_ptr<NetworkManager>;
|
using NetworkManagerUPtr = std::unique_ptr<NetworkManager>;
|
||||||
|
|
27
src/network/sockets/SocketInterface.cpp
Normal file
27
src/network/sockets/SocketInterface.cpp
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
#include "SocketInterface.h"
|
||||||
|
#include "Socket.h"
|
||||||
|
|
||||||
|
SocketInterface::SocketInterface()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
std::unique_ptr<SocketInterface> SocketInterface::Create()
|
||||||
|
{
|
||||||
|
return std::make_unique<SocketInterface>();
|
||||||
|
}
|
||||||
|
|
||||||
|
void SocketInterface::CreateSocket(SocketPtr socket)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void SocketInterface::Listen(SocketPtr socket)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void SocketInterface::Run(SocketPtr socket)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
20
src/network/sockets/SocketInterface.h
Normal file
20
src/network/sockets/SocketInterface.h
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
#pragma
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
class Socket;
|
||||||
|
using SocketPtr = std::shared_ptr<Socket>;
|
||||||
|
|
||||||
|
class SocketInterface
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
SocketInterface();
|
||||||
|
|
||||||
|
static std::unique_ptr<SocketInterface> Create();
|
||||||
|
void CreateSocket(SocketPtr socket);
|
||||||
|
void Listen(SocketPtr socket);
|
||||||
|
void Run(SocketPtr socket);
|
||||||
|
};
|
||||||
|
|
||||||
|
using SocketInterfaceUPtr = std::unique_ptr<SocketInterface>;
|
|
@ -30,3 +30,7 @@ target_include_directories(ui_elements PUBLIC
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/desktop_elements"
|
"${CMAKE_CURRENT_SOURCE_DIR}/desktop_elements"
|
||||||
)
|
)
|
||||||
target_link_libraries(ui_elements PUBLIC core geometry)
|
target_link_libraries(ui_elements PUBLIC core geometry)
|
||||||
|
|
||||||
|
set_property(TARGET ui_elements PROPERTY FOLDER src)
|
||||||
|
|
||||||
|
set_target_properties( ui_elements PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON )
|
|
@ -48,7 +48,7 @@ void Button::OnPaintEvent(const PaintEvent* event)
|
||||||
AddBackground(event);
|
AddBackground(event);
|
||||||
if(!mLabel.empty())
|
if(!mLabel.empty())
|
||||||
{
|
{
|
||||||
unsigned fontOffset = mLabel.size() * 4;
|
unsigned fontOffset = unsigned(mLabel.size()) * 4;
|
||||||
auto middle = DiscretePoint(mLocation.GetX() + mSize.mWidth/2 - fontOffset,
|
auto middle = DiscretePoint(mLocation.GetX() + mSize.mWidth/2 - fontOffset,
|
||||||
mLocation.GetY() + mSize.mHeight/2 + 4);
|
mLocation.GetY() + mSize.mHeight/2 + 4);
|
||||||
auto textLayer = VisualLayer::Create();
|
auto textLayer = VisualLayer::Create();
|
||||||
|
|
|
@ -46,8 +46,8 @@ void HorizontalSpacer::AddChildLayers(const PaintEvent* event)
|
||||||
{
|
{
|
||||||
delta = size.mMaxHeight;
|
delta = size.mMaxHeight;
|
||||||
}
|
}
|
||||||
child->SetBounds(mSize.mWidth, delta);
|
child->SetBounds(mSize.mWidth, unsigned(delta));
|
||||||
child->SetLocation(DiscretePoint(mLocation.GetX(), mLocation.GetY() + offset));
|
child->SetLocation(DiscretePoint(mLocation.GetX(), mLocation.GetY() + unsigned(offset)));
|
||||||
child->OnPaintEvent(event);
|
child->OnPaintEvent(event);
|
||||||
auto layers = child->GetLayers();
|
auto layers = child->GetLayers();
|
||||||
mLayers.insert(mLayers.end(), layers.begin(), layers.end());
|
mLayers.insert(mLayers.end(), layers.begin(), layers.end());
|
||||||
|
|
|
@ -25,7 +25,7 @@ void Label::OnPaintEvent(const PaintEvent* event)
|
||||||
|
|
||||||
if(!mLabel.empty())
|
if(!mLabel.empty())
|
||||||
{
|
{
|
||||||
unsigned fontOffset = mLabel.size() * 4;
|
unsigned fontOffset = unsigned(mLabel.size()) * 4;
|
||||||
auto middle = DiscretePoint(mLocation.GetX() + mSize.mWidth/2 - fontOffset,
|
auto middle = DiscretePoint(mLocation.GetX() + mSize.mWidth/2 - fontOffset,
|
||||||
mLocation.GetY() + mSize.mHeight/2 + 4);
|
mLocation.GetY() + mSize.mHeight/2 + 4);
|
||||||
auto textLayer = VisualLayer::Create();
|
auto textLayer = VisualLayer::Create();
|
||||||
|
|
|
@ -86,7 +86,7 @@ void TextBox::OnPaintEvent(const PaintEvent* event)
|
||||||
for(const auto& line : seglist)
|
for(const auto& line : seglist)
|
||||||
{
|
{
|
||||||
auto loc = DiscretePoint(mLocation.GetX() + mPadding.mLeft,
|
auto loc = DiscretePoint(mLocation.GetX() + mPadding.mLeft,
|
||||||
mLocation.GetY() + mPadding.mTop + offset);
|
mLocation.GetY() + mPadding.mTop + unsigned(offset));
|
||||||
auto textLayer = VisualLayer::Create();
|
auto textLayer = VisualLayer::Create();
|
||||||
auto textElement = TextElement::Create(line, loc);
|
auto textElement = TextElement::Create(line, loc);
|
||||||
textElement->SetFillColor(Color::Create(*mBackgroundColor));
|
textElement->SetFillColor(Color::Create(*mBackgroundColor));
|
||||||
|
|
|
@ -31,14 +31,14 @@ void VerticalSpacer::AddChildLayers(const PaintEvent* event)
|
||||||
mLayers.clear();
|
mLayers.clear();
|
||||||
double scaleSum = std::accumulate(mScales.begin(), mScales.end(), 0.0);
|
double scaleSum = std::accumulate(mScales.begin(), mScales.end(), 0.0);
|
||||||
double offset = 0;
|
double offset = 0;
|
||||||
unsigned delta = mSize.mWidth / mChildren.size();
|
unsigned delta = mSize.mWidth / unsigned(mChildren.size());
|
||||||
for(std::size_t idx=0; idx<mChildren.size(); idx++)
|
for(std::size_t idx=0; idx<mChildren.size(); idx++)
|
||||||
{
|
{
|
||||||
auto& child = mChildren[idx];
|
auto& child = mChildren[idx];
|
||||||
double scale = mScales[idx];
|
double scale = mScales[idx];
|
||||||
double delta = mSize.mWidth * (scale/scaleSum);
|
double delta = mSize.mWidth * (scale/scaleSum);
|
||||||
child->SetBounds(delta, mSize.mHeight);
|
child->SetBounds(unsigned(delta), mSize.mHeight);
|
||||||
child->SetLocation(DiscretePoint(mLocation.GetX() + offset, mLocation.GetY()));
|
child->SetLocation(DiscretePoint(mLocation.GetX() + unsigned(offset), mLocation.GetY()));
|
||||||
child->OnPaintEvent(event);
|
child->OnPaintEvent(event);
|
||||||
auto layers = child->GetLayers();
|
auto layers = child->GetLayers();
|
||||||
mLayers.insert(mLayers.end(), layers.begin(), layers.end());
|
mLayers.insert(mLayers.end(), layers.begin(), layers.end());
|
||||||
|
|
|
@ -23,3 +23,6 @@ target_include_directories(web PUBLIC
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/html"
|
"${CMAKE_CURRENT_SOURCE_DIR}/html"
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/markdown"
|
"${CMAKE_CURRENT_SOURCE_DIR}/markdown"
|
||||||
)
|
)
|
||||||
|
set_property(TARGET web PROPERTY FOLDER src)
|
||||||
|
target_link_libraries(web PUBLIC core)
|
||||||
|
set_target_properties( web PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON )
|
|
@ -1,13 +1,15 @@
|
||||||
list(APPEND windows_LIB_INCLUDES
|
list(APPEND linux_INCLUDES
|
||||||
managers/WindowManager.cpp
|
|
||||||
managers/DesktopManager.cpp
|
|
||||||
managers/EventManager.cpp
|
|
||||||
ui_interfaces/x11/XcbInterface.cpp
|
ui_interfaces/x11/XcbInterface.cpp
|
||||||
ui_interfaces/x11/XcbLayerInterface.cpp
|
ui_interfaces/x11/XcbLayerInterface.cpp
|
||||||
ui_interfaces/x11/XcbTextInterface.cpp
|
ui_interfaces/x11/XcbTextInterface.cpp
|
||||||
ui_interfaces/x11/XcbKeyboard.cpp
|
ui_interfaces/x11/XcbKeyboard.cpp
|
||||||
ui_interfaces/x11/GlxInterface.cpp)
|
ui_interfaces/x11/GlxInterface.cpp)
|
||||||
|
|
||||||
|
list(APPEND windows_LIB_INCLUDES
|
||||||
|
managers/WindowManager.cpp
|
||||||
|
managers/DesktopManager.cpp
|
||||||
|
managers/EventManager.cpp)
|
||||||
|
|
||||||
# add the library
|
# add the library
|
||||||
add_library(windows SHARED ${windows_LIB_INCLUDES})
|
add_library(windows SHARED ${windows_LIB_INCLUDES})
|
||||||
|
|
||||||
|
@ -16,8 +18,15 @@ target_include_directories(windows PUBLIC
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/managers"
|
"${CMAKE_CURRENT_SOURCE_DIR}/managers"
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/ui_interfaces/x11"
|
"${CMAKE_CURRENT_SOURCE_DIR}/ui_interfaces/x11"
|
||||||
"${PROJECT_SOURCE_DIR}/src/geometry"
|
"${PROJECT_SOURCE_DIR}/src/geometry"
|
||||||
"${PROJECT_SOURCE_DIR}/src/graphics"
|
|
||||||
"${PROJECT_SOURCE_DIR}/src/ui_elements"
|
"${PROJECT_SOURCE_DIR}/src/ui_elements"
|
||||||
"${PROJECT_SOURCE_DIR}/src/ui_elements/widgets"
|
"${PROJECT_SOURCE_DIR}/src/ui_elements/widgets"
|
||||||
)
|
)
|
||||||
target_link_libraries(windows PUBLIC X11 X11-xcb xcb core graphics geometry ui_elements)
|
|
||||||
|
list(APPEND linux_LIBS
|
||||||
|
managers/WindowManager.cpp
|
||||||
|
managers/DesktopManager.cpp
|
||||||
|
managers/EventManager.cpp)
|
||||||
|
target_link_libraries(windows PUBLIC core geometry ui_elements)
|
||||||
|
|
||||||
|
set_property(TARGET windows PROPERTY FOLDER src)
|
||||||
|
set_target_properties( windows PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON )
|
Loading…
Reference in a new issue