[FancyZones] Improve code quality (part 4) (#23638)

This commit is contained in:
Seraphima Zykova
2023-01-30 19:39:46 +03:00
committed by GitHub
parent c94c79a057
commit 92f61d6ef5
13 changed files with 423 additions and 647 deletions

View File

@@ -127,62 +127,6 @@ WorkArea::~WorkArea()
windowPool.FreeZonesOverlayWindow(m_window);
}
HRESULT WorkArea::MoveSizeEnter(HWND window) noexcept
{
m_windowMoveSize = window;
m_highlightedZones.Reset();
ShowZonesOverlay();
Trace::WorkArea::MoveOrResizeStarted(m_layout.get(), m_layoutWindows.get());
return S_OK;
}
HRESULT WorkArea::MoveSizeUpdate(POINT const& ptScreen, bool dragEnabled, bool selectManyZones) noexcept
{
if (!m_layout)
{
return -1;
}
bool redraw = false;
if (dragEnabled)
{
POINT ptClient = ptScreen;
MapWindowPoints(nullptr, m_window, &ptClient, 1);
redraw = m_highlightedZones.Update(m_layout.get(), ptClient, selectManyZones);
}
else if (!m_highlightedZones.Empty())
{
m_highlightedZones.Reset();
redraw = true;
}
if (redraw && m_zonesOverlay)
{
m_zonesOverlay->DrawActiveZoneSet(m_layout->Zones(), m_highlightedZones.Zones(), Colors::GetZoneColors(), FancyZonesSettings::settings().showZoneNumber);
}
return S_OK;
}
HRESULT WorkArea::MoveSizeEnd(HWND window) noexcept
{
if (m_windowMoveSize != window)
{
return E_INVALIDARG;
}
MoveWindowIntoZoneByIndexSet(window, m_highlightedZones.Zones());
m_highlightedZones.Reset();
Trace::WorkArea::MoveOrResizeEnd(m_layout.get(), m_layoutWindows.get());
HideZonesOverlay();
m_windowMoveSize = nullptr;
return S_OK;
}
void WorkArea::MoveWindowIntoZoneByIndex(HWND window, ZoneIndex index) noexcept
{
MoveWindowIntoZoneByIndexSet(window, { index });
@@ -482,22 +426,31 @@ ZoneIndexSet WorkArea::GetWindowZoneIndexes(HWND window) const noexcept
return {};
}
void WorkArea::ShowZonesOverlay() noexcept
void WorkArea::ShowZonesOverlay(const ZoneIndexSet& highlight, HWND draggedWindow/* = nullptr*/)
{
if (m_window && m_layout)
if (m_layout && m_zonesOverlay)
{
SetAsTopmostWindow();
m_zonesOverlay->DrawActiveZoneSet(m_layout->Zones(), m_highlightedZones.Zones(), Colors::GetZoneColors(), FancyZonesSettings::settings().showZoneNumber);
SetWorkAreaWindowAsTopmost(draggedWindow);
m_zonesOverlay->DrawActiveZoneSet(m_layout->Zones(), highlight, Colors::GetZoneColors(), FancyZonesSettings::settings().showZoneNumber);
m_zonesOverlay->Show();
}
}
void WorkArea::HideZonesOverlay() noexcept
void WorkArea::HideZonesOverlay()
{
if (m_window)
if (m_zonesOverlay)
{
m_zonesOverlay->Hide();
m_windowMoveSize = nullptr;
}
}
void WorkArea::FlashZones()
{
if (m_layout && m_zonesOverlay)
{
SetWorkAreaWindowAsTopmost(nullptr);
m_zonesOverlay->DrawActiveZoneSet(m_layout->Zones(), {}, Colors::GetZoneColors(), FancyZonesSettings::settings().showZoneNumber);
m_zonesOverlay->Flash();
}
}
@@ -524,25 +477,6 @@ void WorkArea::CycleWindows(HWND window, bool reverse) noexcept
}
}
void WorkArea::ClearSelectedZones() noexcept
{
if (!m_highlightedZones.Empty() && m_layout)
{
m_highlightedZones.Reset();
m_zonesOverlay->DrawActiveZoneSet(m_layout->Zones(), {}, Colors::GetZoneColors(), FancyZonesSettings::settings().showZoneNumber);
}
}
void WorkArea::FlashZones() noexcept
{
if (m_window && m_layout)
{
SetAsTopmostWindow();
m_zonesOverlay->DrawActiveZoneSet(m_layout->Zones(), {}, Colors::GetZoneColors(), FancyZonesSettings::settings().showZoneNumber);
m_zonesOverlay->Flash();
}
}
#pragma region private
bool WorkArea::InitWindow(HINSTANCE hinstance) noexcept
@@ -618,21 +552,16 @@ LRESULT WorkArea::WndProc(UINT message, WPARAM wparam, LPARAM lparam) noexcept
return 0;
}
void WorkArea::SetAsTopmostWindow() noexcept
void WorkArea::SetWorkAreaWindowAsTopmost(HWND draggedWindow) noexcept
{
if (!m_window)
{
return;
}
UINT flags = SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE;
HWND windowInsertAfter = m_windowMoveSize;
if (windowInsertAfter == nullptr)
{
windowInsertAfter = HWND_TOPMOST;
}
HWND windowInsertAfter = draggedWindow ? draggedWindow : HWND_TOPMOST;
const UINT flags = SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE;
SetWindowPos(m_window, windowInsertAfter, 0, 0, 0, 0, flags);
}