mirror of
https://github.com/WinDurango/WinDurango.git
synced 2026-01-31 00:55:17 +01:00
170 lines
4.3 KiB
C++
170 lines
4.3 KiB
C++
#include "pch.h"
|
|
#include "WinDurango.Implementation.WinRT/Interfaces/Storage/Directory.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;
|
|
|
|
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");
|
|
runFirst = false;
|
|
}
|
|
}
|
|
|
|
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>());
|
|
}
|