9dc922fc37
This commit cleans up and deduplicates all of the common build preamble/postamble across exe, dll, lib and c++/winrt projects. The following specific changes have been made: * All projects now define their ConfigurationType * All projects now set all their properties *before* including a common build file (or any other build files) * cppwinrt.pre and cppwinrt.post now delegate most of their configuration to common.pre and common.post * (becuase of the above,) all build options are conserved between console and c++/winrt components, including specific warnings and preprocessor definitions. * More properties that are configurable per-project are now conditioned so the common props don't override them. * The exe, dll, exe.or.dll, and lib postincludes have been merged into pre or post and switched based on condition as required * Shared items (-shared, -common) are now explicitly vcxitems instead of vcxproj files. * The link line is now manipulated after Microsoft.Cpp sets it, so the libraries we specify "win". All console things link first against onecore_apiset.lib. * Fix all compilation errors caused by build unification * Move CascadiaPackage's resources into a separate item file Fixes #922.
98 lines
3.4 KiB
C++
98 lines
3.4 KiB
C++
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT license.
|
|
//
|
|
// TitlebarControl.xaml.cpp
|
|
// Implementation of the TitlebarControl class
|
|
//
|
|
|
|
#include "pch.h"
|
|
|
|
#include "TitlebarControl.h"
|
|
|
|
#include "TitlebarControl.g.cpp"
|
|
|
|
namespace winrt::TerminalApp::implementation
|
|
{
|
|
TitlebarControl::TitlebarControl(uint64_t handle) :
|
|
_window{ reinterpret_cast<HWND>(handle) }
|
|
{
|
|
InitializeComponent();
|
|
|
|
// Register our event handlers on the MMC buttons.
|
|
MinMaxCloseControl().MinimizeClick({ this, &TitlebarControl::Minimize_Click });
|
|
MinMaxCloseControl().MaximizeClick({ this, &TitlebarControl::Maximize_Click });
|
|
MinMaxCloseControl().CloseClick({ this, &TitlebarControl::Close_Click });
|
|
}
|
|
|
|
IInspectable TitlebarControl::Content()
|
|
{
|
|
return ContentRoot().Content();
|
|
}
|
|
|
|
void TitlebarControl::Content(IInspectable content)
|
|
{
|
|
ContentRoot().Content(content);
|
|
}
|
|
|
|
void TitlebarControl::Root_SizeChanged(const IInspectable& /*sender*/,
|
|
const Windows::UI::Xaml::SizeChangedEventArgs& /*e*/)
|
|
{
|
|
const auto windowWidth = ActualWidth();
|
|
const auto minMaxCloseWidth = MinMaxCloseControl().ActualWidth();
|
|
const auto dragBarMinWidth = DragBar().MinWidth();
|
|
const auto maxWidth = windowWidth - minMaxCloseWidth - dragBarMinWidth;
|
|
// Only set our MaxWidth if it's greater than 0. Setting it to a
|
|
// negative value will cause a crash.
|
|
if (maxWidth >= 0)
|
|
{
|
|
ContentRoot().MaxWidth(maxWidth);
|
|
}
|
|
}
|
|
|
|
void TitlebarControl::_OnMaximizeOrRestore(byte flag)
|
|
{
|
|
POINT point1 = {};
|
|
::GetCursorPos(&point1);
|
|
const LPARAM lParam = MAKELPARAM(point1.x, point1.y);
|
|
WINDOWPLACEMENT placement = { sizeof(placement) };
|
|
::GetWindowPlacement(_window, &placement);
|
|
if (placement.showCmd == SW_SHOWNORMAL)
|
|
{
|
|
::PostMessage(_window, WM_SYSCOMMAND, SC_MAXIMIZE | flag, lParam);
|
|
}
|
|
else if (placement.showCmd == SW_SHOWMAXIMIZED)
|
|
{
|
|
::PostMessage(_window, WM_SYSCOMMAND, SC_RESTORE | flag, lParam);
|
|
}
|
|
}
|
|
|
|
void TitlebarControl::Maximize_Click(winrt::Windows::Foundation::IInspectable const& /*sender*/, winrt::Windows::UI::Xaml::RoutedEventArgs const& /*e*/)
|
|
{
|
|
_OnMaximizeOrRestore(HTMAXBUTTON);
|
|
}
|
|
|
|
void TitlebarControl::DragBar_DoubleTapped(winrt::Windows::Foundation::IInspectable const& /*sender*/, winrt::Windows::UI::Xaml::Input::DoubleTappedRoutedEventArgs const& /*e*/)
|
|
{
|
|
_OnMaximizeOrRestore(HTCAPTION);
|
|
}
|
|
|
|
void TitlebarControl::Minimize_Click(winrt::Windows::Foundation::IInspectable const& /*sender*/, winrt::Windows::UI::Xaml::RoutedEventArgs const& /*e*/)
|
|
{
|
|
if (_window)
|
|
{
|
|
::PostMessage(_window, WM_SYSCOMMAND, SC_MINIMIZE | HTMINBUTTON, 0);
|
|
}
|
|
}
|
|
|
|
void TitlebarControl::Close_Click(winrt::Windows::Foundation::IInspectable const& /*sender*/, winrt::Windows::UI::Xaml::RoutedEventArgs const& /*e*/)
|
|
{
|
|
::PostMessage(_window, WM_SYSCOMMAND, SC_CLOSE, 0);
|
|
}
|
|
|
|
void TitlebarControl::SetWindowVisualState(WindowVisualState visualState)
|
|
{
|
|
MinMaxCloseControl().SetWindowVisualState(visualState);
|
|
}
|
|
|
|
}
|