Files
2026-01-28 15:25:57 -06:00

158 lines
4.4 KiB
C++

#include "WinDurango.Common/Logging.h"
#include "WinDurango.Implementation.WinRT/Interfaces/Storage/Directory.h"
#include "pch.h"
#include <iostream>
using namespace winrt;
using namespace Windows;
using namespace Windows::ApplicationModel;
using namespace Windows::ApplicationModel::Core;
using namespace Windows::Foundation::Numerics;
using namespace Windows::UI;
using namespace Windows::UI::Core;
using namespace Windows::UI::Composition;
struct App : implements<App, IFrameworkViewSource, IFrameworkView>
{
CompositionTarget m_target{nullptr};
VisualCollection m_visuals{nullptr};
Visual m_selected{nullptr};
float2 m_offset{};
bool runFirst = true;
wd::common::Logging logthing;
IFrameworkView CreateView()
{
return *this;
}
void Initialize(CoreApplicationView const &)
{
}
void Load(hstring const &)
{
}
void Uninitialize()
{
}
void Run()
{
CoreWindow window = CoreWindow::GetForCurrentThread();
window.Activate();
CoreDispatcher dispatcher = window.Dispatcher();
dispatcher.ProcessEvents(CoreProcessEventsOption::ProcessUntilQuit);
}
void SetWindow(CoreWindow const &window)
{
Compositor compositor;
ContainerVisual root = compositor.CreateContainerVisual();
m_target = compositor.CreateTargetForCurrentView();
m_target.Root(root);
m_visuals = root.Children();
window.PointerPressed({this, &App::OnPointerPressed});
window.PointerMoved({this, &App::OnPointerMoved});
window.PointerReleased([&](auto &&...) { m_selected = nullptr; });
}
void OnPointerPressed(IInspectable const &, PointerEventArgs const &args)
{
float2 const point = args.CurrentPoint().Position();
for (Visual visual : m_visuals)
{
float3 const offset = visual.Offset();
float2 const size = visual.Size();
if (point.x >= offset.x && point.x < offset.x + size.x && point.y >= offset.y &&
point.y < offset.y + size.y)
{
m_selected = visual;
m_offset.x = offset.x - point.x;
m_offset.y = offset.y - point.y;
}
}
if (m_selected)
{
m_visuals.Remove(m_selected);
m_visuals.InsertAtTop(m_selected);
}
else
{
AddVisual(point);
}
if (runFirst)
{
Package pkg = Package::Current();
hstring id = pkg.Id().FamilyName();
std::wcout << L"Name: " << id.c_str() << L"\n";
wd::impl::winrt::interfaces::storage::WinRTDirectory dir("");
dir.open();
auto wddir = dir.CreateFolder("WinDurango");
wddir->open();
auto wdlog = wddir->CreateFile("log.txt");
wdlog->open();
(*wdlog) << std::string("Testing");
logthing = wd::common::Logging(wdlog);
logthing.Initialize();
logthing.Log("WinDurango.Testing", "Hi");
logthing.Warn("WinDurango.Testing", "Bye");
logthing.Error("WinDurango.Testing", "Oops");
runFirst = false;
}
logthing.Log("WinDurango.Testing", "Click");
}
void OnPointerMoved(IInspectable const &, PointerEventArgs const &args)
{
if (m_selected)
{
float2 const point = args.CurrentPoint().Position();
m_selected.Offset({point.x + m_offset.x, point.y + m_offset.y, 0.0f});
}
}
void AddVisual(float2 const point)
{
Compositor compositor = m_visuals.Compositor();
SpriteVisual visual = compositor.CreateSpriteVisual();
static Color colors[] = {
{0xDC, 0x5B, 0x9B, 0xD5}, {0xDC, 0xED, 0x7D, 0x31}, {0xDC, 0x70, 0xAD, 0x47}, {0xDC, 0xFF, 0xC0, 0x00}};
static unsigned last = 0;
unsigned const next = ++last % _countof(colors);
visual.Brush(compositor.CreateColorBrush(colors[next]));
float const BlockSize = 100.0f;
visual.Size({BlockSize, BlockSize});
visual.Offset({
point.x - BlockSize / 2.0f,
point.y - BlockSize / 2.0f,
0.0f,
});
m_visuals.InsertAtTop(visual);
m_selected = visual;
m_offset.x = -BlockSize / 2.0f;
m_offset.y = -BlockSize / 2.0f;
}
};
int __stdcall main()
{
CoreApplication::Run(make<App>());
}