mirror of
https://github.com/vczh-libraries/Release.git
synced 2026-05-22 23:36:46 +08:00
Update release
This commit is contained in:
+76
-152
@@ -199,24 +199,6 @@ GuiApplication
|
||||
}
|
||||
}
|
||||
|
||||
void GuiApplication::LeftButtonDown(NativePoint position)
|
||||
{
|
||||
OnMouseDown(position);
|
||||
}
|
||||
|
||||
void GuiApplication::LeftButtonUp(NativePoint position)
|
||||
{
|
||||
}
|
||||
|
||||
void GuiApplication::RightButtonDown(NativePoint position)
|
||||
{
|
||||
OnMouseDown(position);
|
||||
}
|
||||
|
||||
void GuiApplication::RightButtonUp(NativePoint position)
|
||||
{
|
||||
}
|
||||
|
||||
void GuiApplication::ClipboardUpdated()
|
||||
{
|
||||
for(vint i=0;i<windows.Count();i++)
|
||||
@@ -264,10 +246,6 @@ GuiApplication
|
||||
if(index==-1)
|
||||
{
|
||||
openingPopups.Add(popup);
|
||||
if(openingPopups.Count()==1)
|
||||
{
|
||||
GetCurrentController()->InputService()->StartHookMouse();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -275,22 +253,6 @@ GuiApplication
|
||||
{
|
||||
if(openingPopups.Remove(popup))
|
||||
{
|
||||
if(openingPopups.Count()==0)
|
||||
{
|
||||
GetCurrentController()->InputService()->StopHookMouse();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void GuiApplication::OnMouseDown(NativePoint location)
|
||||
{
|
||||
GuiWindow* window=GetWindow(location);
|
||||
for(vint i=0;i<windows.Count();i++)
|
||||
{
|
||||
if(windows[i]!=window)
|
||||
{
|
||||
windows[i]->MouseClickedOnOtherWindow(window);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4291,6 +4253,10 @@ GuiWindow
|
||||
void GuiWindow::OnNativeWindowChanged()
|
||||
{
|
||||
SyncNativeWindowProperties();
|
||||
if (auto window = GetNativeWindow())
|
||||
{
|
||||
window->SetWindowMode(windowMode);
|
||||
}
|
||||
GuiControlHost::OnNativeWindowChanged();
|
||||
}
|
||||
|
||||
@@ -4299,10 +4265,6 @@ GuiWindow
|
||||
GuiControlHost::OnVisualStatusChanged();
|
||||
}
|
||||
|
||||
void GuiWindow::MouseClickedOnOtherWindow(GuiWindow* window)
|
||||
{
|
||||
}
|
||||
|
||||
void GuiWindow::OnWindowActivated(compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments)
|
||||
{
|
||||
if (auto ct = GetControlTemplateObject(false))
|
||||
@@ -4319,8 +4281,9 @@ GuiWindow
|
||||
}
|
||||
}
|
||||
|
||||
GuiWindow::GuiWindow(theme::ThemeName themeName)
|
||||
GuiWindow::GuiWindow(theme::ThemeName themeName, INativeWindow::WindowMode mode)
|
||||
:GuiControlHost(themeName)
|
||||
, windowMode(mode)
|
||||
{
|
||||
SetAltComposition(boundsComposition);
|
||||
SetAltControl(this, true);
|
||||
@@ -4334,6 +4297,11 @@ GuiWindow
|
||||
WindowDeactivated.AttachMethod(this, &GuiWindow::OnWindowDeactivated);
|
||||
}
|
||||
|
||||
GuiWindow::GuiWindow(theme::ThemeName themeName)
|
||||
:GuiWindow(themeName, INativeWindow::Normal)
|
||||
{
|
||||
}
|
||||
|
||||
GuiWindow::~GuiWindow()
|
||||
{
|
||||
FinalizeAggregation();
|
||||
@@ -4503,11 +4471,6 @@ GuiPopup
|
||||
}
|
||||
}
|
||||
|
||||
void GuiPopup::MouseClickedOnOtherWindow(GuiWindow* window)
|
||||
{
|
||||
Hide();
|
||||
}
|
||||
|
||||
void GuiPopup::PopupOpened(compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments)
|
||||
{
|
||||
GetApplication()->RegisterPopupOpened(this);
|
||||
@@ -4649,17 +4612,18 @@ GuiPopup
|
||||
if (controlWindow)
|
||||
{
|
||||
window->SetParent(controlWindow);
|
||||
window->SetTopMost(controlWindow->GetTopMost());
|
||||
SetTopMost(controlWindow->GetTopMost());
|
||||
}
|
||||
else
|
||||
{
|
||||
window->SetTopMost(true);
|
||||
SetTopMost(true);
|
||||
}
|
||||
SetEnabledActivate(false);
|
||||
ShowDeactivated();
|
||||
}
|
||||
|
||||
GuiPopup::GuiPopup(theme::ThemeName themeName)
|
||||
:GuiWindow(themeName)
|
||||
GuiPopup::GuiPopup(theme::ThemeName themeName, INativeWindow::WindowMode mode)
|
||||
:GuiWindow(themeName, mode)
|
||||
{
|
||||
SetMinimizedBox(false);
|
||||
SetMaximizedBox(false);
|
||||
@@ -4672,6 +4636,11 @@ GuiPopup
|
||||
boundsComposition->GetEventReceiver()->keyDown.AttachMethod(this, &GuiPopup::OnKeyDown);
|
||||
}
|
||||
|
||||
GuiPopup::GuiPopup(theme::ThemeName themeName)
|
||||
:GuiPopup(themeName, INativeWindow::Popup)
|
||||
{
|
||||
}
|
||||
|
||||
GuiPopup::~GuiPopup()
|
||||
{
|
||||
GetApplication()->RegisterPopupClosed(this);
|
||||
@@ -4768,8 +4737,7 @@ GuiPopup
|
||||
}
|
||||
|
||||
GuiTooltip::GuiTooltip(theme::ThemeName themeName)
|
||||
:GuiPopup(themeName)
|
||||
,temporaryContentControl(0)
|
||||
: GuiPopup(themeName, INativeWindow::Tooltip)
|
||||
{
|
||||
containerComposition->SetMinSizeLimitation(GuiGraphicsComposition::LimitToElementAndChildren);
|
||||
containerComposition->SetPreferredMinSize(Size(20, 10));
|
||||
@@ -6812,7 +6780,10 @@ GuiComboBoxListControl
|
||||
void GuiComboBoxListControl::AfterControlTemplateInstalled(bool initialize)
|
||||
{
|
||||
GuiComboBoxBase::AfterControlTemplateInstalled(initialize);
|
||||
GetControlTemplateObject(true)->SetTextVisible(!itemStyleProperty);
|
||||
if (auto ct = GetControlTemplateObject(true))
|
||||
{
|
||||
ct->SetTextVisible(!itemStyleProperty);
|
||||
}
|
||||
}
|
||||
|
||||
void GuiComboBoxListControl::RemoveStyleController()
|
||||
@@ -6871,16 +6842,19 @@ GuiComboBoxListControl
|
||||
|
||||
void GuiComboBoxListControl::AdoptSubMenuSize()
|
||||
{
|
||||
Size expectedSize(0, GetDisplayFont().size * 20);
|
||||
Size adoptedSize = containedListControl->GetAdoptedSize(expectedSize);
|
||||
|
||||
Size clientSize = GetPreferredMenuClientSize();
|
||||
clientSize.y = adoptedSize.y + GetSubMenu()->GetClientSize().y - containedListControl->GetBoundsComposition()->GetBounds().Height();
|
||||
SetPreferredMenuClientSize(clientSize);
|
||||
|
||||
if (GetSubMenuOpening())
|
||||
if (auto subMenu = GetSubMenu())
|
||||
{
|
||||
GetSubMenu()->SetClientSize(clientSize);
|
||||
Size expectedSize(0, GetDisplayFont().size * 20);
|
||||
Size adoptedSize = containedListControl->GetAdoptedSize(expectedSize);
|
||||
|
||||
Size clientSize = GetPreferredMenuClientSize();
|
||||
clientSize.y = adoptedSize.y + subMenu->GetClientSize().y - containedListControl->GetBoundsComposition()->GetBounds().Height();
|
||||
SetPreferredMenuClientSize(clientSize);
|
||||
|
||||
if (GetSubMenuOpening())
|
||||
{
|
||||
subMenu->SetClientSize(clientSize);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6912,8 +6886,6 @@ GuiComboBoxListControl
|
||||
void GuiComboBoxListControl::OnAfterSubMenuOpening(compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments)
|
||||
{
|
||||
containedListControl->SelectItemsByClick(selectedIndex, false, false, true);
|
||||
GetSubMenu()->GetNativeWindow()->SetFocus();
|
||||
containedListControl->SetFocus();
|
||||
}
|
||||
|
||||
void GuiComboBoxListControl::OnListControlAdoptedSizeInvalidated(compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments)
|
||||
@@ -6939,7 +6911,7 @@ GuiComboBoxListControl
|
||||
GetSubMenu()->Hide();
|
||||
}
|
||||
|
||||
void GuiComboBoxListControl::OnListControlKeyDown(compositions::GuiGraphicsComposition* sender, compositions::GuiKeyEventArgs& arguments)
|
||||
void GuiComboBoxListControl::OnKeyDown(compositions::GuiGraphicsComposition* sender, compositions::GuiKeyEventArgs& arguments)
|
||||
{
|
||||
if (!arguments.autoRepeatKeyDown)
|
||||
{
|
||||
@@ -6952,7 +6924,8 @@ GuiComboBoxListControl
|
||||
GetSubMenu()->Hide();
|
||||
arguments.handled = true;
|
||||
break;
|
||||
default:;
|
||||
default:
|
||||
containedListControl->SelectItemsByKey(arguments.code, arguments.ctrl, arguments.shift);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -6990,8 +6963,8 @@ GuiComboBoxListControl
|
||||
containedListControl->AdoptedSizeInvalidated.AttachMethod(this, &GuiComboBoxListControl::OnListControlAdoptedSizeInvalidated);
|
||||
containedListControl->ItemLeftButtonDown.AttachMethod(this, &GuiComboBoxListControl::OnListControlItemMouseDown);
|
||||
containedListControl->ItemRightButtonDown.AttachMethod(this, &GuiComboBoxListControl::OnListControlItemMouseDown);
|
||||
containedListControl->GetFocusableComposition()->GetEventReceiver()->keyDown.AttachMethod(this, &GuiComboBoxListControl::OnListControlKeyDown);
|
||||
boundsChangedHandler = containedListControl->GetBoundsComposition()->BoundsChanged.AttachMethod(this, &GuiComboBoxListControl::OnListControlBoundsChanged);
|
||||
boundsComposition->GetEventReceiver()->keyDown.AttachMethod(this, &GuiComboBoxListControl::OnKeyDown);
|
||||
|
||||
auto itemProvider = containedListControl->GetItemProvider();
|
||||
|
||||
@@ -17472,19 +17445,26 @@ GuiSinglelineTextBox::DefaultTextElementOperatorCallback
|
||||
|
||||
bool GuiSinglelineTextBox::TextElementOperatorCallback::BeforeModify(TextPos start, TextPos end, const WString& originalText, WString& inputText)
|
||||
{
|
||||
vint length=inputText.Length();
|
||||
const wchar_t* input=inputText.Buffer();
|
||||
for(vint i=0;i<length;i++)
|
||||
vint length = inputText.Length();
|
||||
const wchar_t* input = inputText.Buffer();
|
||||
for (vint i = 0; i < length; i++)
|
||||
{
|
||||
if(*input==0 || *input==L'\r' || *input==L'\n')
|
||||
if (*input == 0 || *input == L'\r' || *input == L'\n')
|
||||
{
|
||||
length=i;
|
||||
length = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(length!=inputText.Length())
|
||||
if (length != inputText.Length())
|
||||
{
|
||||
inputText=inputText.Left(length);
|
||||
if (length == 0)
|
||||
{
|
||||
// if the first line is empty after adjustment
|
||||
// the input should just be canceled
|
||||
// to prevent from making noise in undo
|
||||
return false;
|
||||
}
|
||||
inputText = inputText.Left(length);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -20540,15 +20520,6 @@ GuiMenu
|
||||
GuiPopup::OnDeactivatedAltHost();
|
||||
}
|
||||
|
||||
void GuiMenu::MouseClickedOnOtherWindow(GuiWindow* window)
|
||||
{
|
||||
GuiMenu* targetMenu=dynamic_cast<GuiMenu*>(window);
|
||||
if(!targetMenu)
|
||||
{
|
||||
Hide();
|
||||
}
|
||||
}
|
||||
|
||||
void GuiMenu::OnWindowClosed(compositions::GuiGraphicsComposition* sender, compositions::GuiEventArgs& arguments)
|
||||
{
|
||||
if(parentMenuService)
|
||||
@@ -20563,11 +20534,9 @@ GuiMenu
|
||||
}
|
||||
|
||||
GuiMenu::GuiMenu(theme::ThemeName themeName, GuiControl* _owner)
|
||||
:GuiPopup(themeName)
|
||||
:GuiPopup(themeName, INativeWindow::Menu)
|
||||
, owner(_owner)
|
||||
, parentMenuService(0)
|
||||
{
|
||||
GetNativeWindow()->SetAlwaysPassFocusToParent(true);
|
||||
UpdateMenuService();
|
||||
WindowOpened.AttachMethod(this, &GuiMenu::OnWindowOpened);
|
||||
WindowClosed.AttachMethod(this, &GuiMenu::OnWindowClosed);
|
||||
@@ -20784,6 +20753,9 @@ GuiMenuButton
|
||||
{
|
||||
subMenu->WindowOpened.Detach(subMenuWindowOpenedHandler);
|
||||
subMenu->WindowClosed.Detach(subMenuWindowClosedHandler);
|
||||
|
||||
subMenuWindowOpenedHandler = nullptr;
|
||||
subMenuWindowClosedHandler = nullptr;
|
||||
if (ownedSubMenu)
|
||||
{
|
||||
delete subMenu;
|
||||
@@ -30564,42 +30536,29 @@ GuiGraphicsResourceManager
|
||||
{
|
||||
}
|
||||
|
||||
bool GuiGraphicsResourceManager::RegisterElementFactory(IGuiGraphicsElementFactory* factory)
|
||||
vint GuiGraphicsResourceManager::RegisterElementType(const WString& elementTypeName)
|
||||
{
|
||||
if(elementFactories.Keys().Contains(factory->GetElementTypeName()))
|
||||
CHECK_ERROR(!elementTypes.Contains(elementTypeName), L"GuiGraphicsResourceManager::RegisterElementType(const WString&)#This element type has already been registered.");
|
||||
return elementTypes.Add(elementTypeName);
|
||||
}
|
||||
|
||||
void GuiGraphicsResourceManager::RegisterRendererFactory(vint elementType, Ptr<IGuiGraphicsRendererFactory> factory)
|
||||
{
|
||||
if (rendererFactories.Count() <= elementType)
|
||||
{
|
||||
return false;
|
||||
rendererFactories.Resize(elementType + 1);
|
||||
rendererFactories[elementType] = factory;
|
||||
}
|
||||
else
|
||||
{
|
||||
elementFactories.Add(factory->GetElementTypeName(), factory);
|
||||
return true;
|
||||
CHECK_ERROR(!rendererFactories[elementType], L"GuiGraphicsResourceManager::RegisterRendererFactory(vint, Ptr<IGuiGraphicsRendererFactory>)#This element type has already been binded a renderer factory.");
|
||||
rendererFactories[elementType] = factory;
|
||||
}
|
||||
}
|
||||
|
||||
bool GuiGraphicsResourceManager::RegisterRendererFactory(const WString& elementTypeName, IGuiGraphicsRendererFactory* factory)
|
||||
IGuiGraphicsRendererFactory* GuiGraphicsResourceManager::GetRendererFactory(vint elementType)
|
||||
{
|
||||
if(rendererFactories.Keys().Contains(elementTypeName))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
rendererFactories.Add(elementTypeName, factory);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
IGuiGraphicsElementFactory* GuiGraphicsResourceManager::GetElementFactory(const WString& elementTypeName)
|
||||
{
|
||||
vint index=elementFactories.Keys().IndexOf(elementTypeName);
|
||||
return index==-1?0:elementFactories.Values().Get(index).Obj();
|
||||
}
|
||||
|
||||
IGuiGraphicsRendererFactory* GuiGraphicsResourceManager::GetRendererFactory(const WString& elementTypeName)
|
||||
{
|
||||
vint index=rendererFactories.Keys().IndexOf(elementTypeName);
|
||||
return index==-1?nullptr:rendererFactories.Values().Get(index).Obj();
|
||||
return rendererFactories.Count() > elementType ? rendererFactories[elementType].Obj() : nullptr;
|
||||
}
|
||||
|
||||
GuiGraphicsResourceManager* guiGraphicsResourceManager=0;
|
||||
@@ -30613,21 +30572,6 @@ GuiGraphicsResourceManager
|
||||
{
|
||||
guiGraphicsResourceManager=resourceManager;
|
||||
}
|
||||
|
||||
bool RegisterFactories(IGuiGraphicsElementFactory* elementFactory, IGuiGraphicsRendererFactory* rendererFactory)
|
||||
{
|
||||
if(guiGraphicsResourceManager && elementFactory && rendererFactory)
|
||||
{
|
||||
if(guiGraphicsResourceManager->RegisterElementFactory(elementFactory))
|
||||
{
|
||||
if(guiGraphicsResourceManager->RegisterRendererFactory(elementFactory->GetElementTypeName(), rendererFactory))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -32312,8 +32256,8 @@ namespace vl
|
||||
using namespace theme;
|
||||
|
||||
const wchar_t* const IGuiAltAction::Identifier = L"vl::presentation::compositions::IGuiAltAction";
|
||||
const wchar_t* const IGuiAltActionContainer::Identifier = L"vl::presentation::compositions::IGuiAltAction";
|
||||
const wchar_t* const IGuiAltActionHost::Identifier = L"vl::presentation::compositions::IGuiAltAction";
|
||||
const wchar_t* const IGuiAltActionContainer::Identifier = L"vl::presentation::compositions::IGuiAltActionContainer";
|
||||
const wchar_t* const IGuiAltActionHost::Identifier = L"vl::presentation::compositions::IGuiAltActionHost";
|
||||
|
||||
/***********************************************************************
|
||||
IGuiAltAction
|
||||
@@ -33171,26 +33115,6 @@ INativeWindowListener
|
||||
INativeControllerListener
|
||||
***********************************************************************/
|
||||
|
||||
void INativeControllerListener::LeftButtonDown(NativePoint position)
|
||||
{
|
||||
}
|
||||
|
||||
void INativeControllerListener::LeftButtonUp(NativePoint position)
|
||||
{
|
||||
}
|
||||
|
||||
void INativeControllerListener::RightButtonDown(NativePoint position)
|
||||
{
|
||||
}
|
||||
|
||||
void INativeControllerListener::RightButtonUp(NativePoint position)
|
||||
{
|
||||
}
|
||||
|
||||
void INativeControllerListener::MouseMoving(NativePoint position)
|
||||
{
|
||||
}
|
||||
|
||||
void INativeControllerListener::GlobalTimer()
|
||||
{
|
||||
}
|
||||
|
||||
+116
-160
File diff suppressed because it is too large
Load Diff
@@ -8259,13 +8259,6 @@ GuiControlInstanceLoader
|
||||
GuiPredefinedInstanceLoadersPlugin
|
||||
***********************************************************************/
|
||||
|
||||
Ptr<WfExpression> CreateTrue(IGuiInstanceLoader::ArgumentMap&)
|
||||
{
|
||||
auto expr = MakePtr<WfLiteralExpression>();
|
||||
expr->value = WfLiteralValue::True;
|
||||
return expr;
|
||||
}
|
||||
|
||||
void InitializeTrackerProgressBar(const WString& variableName, Ptr<WfBlockStatement> block)
|
||||
{
|
||||
auto refVariable = MakePtr<WfReferenceExpression>();
|
||||
|
||||
@@ -373,7 +373,7 @@ Type Declaration
|
||||
CLASS_MEMBER_PROPERTY_FAST(WindowCursor)
|
||||
CLASS_MEMBER_PROPERTY_FAST(CaretPoint)
|
||||
CLASS_MEMBER_PROPERTY_FAST(Parent)
|
||||
CLASS_MEMBER_PROPERTY_FAST(AlwaysPassFocusToParent)
|
||||
CLASS_MEMBER_PROPERTY_FAST(WindowMode)
|
||||
CLASS_MEMBER_PROPERTY_READONLY_FAST(CustomFramePadding)
|
||||
CLASS_MEMBER_PROPERTY_FAST(Icon)
|
||||
CLASS_MEMBER_PROPERTY_READONLY_FAST(SizeState)
|
||||
@@ -421,6 +421,14 @@ Type Declaration
|
||||
ENUM_NAMESPACE_ITEM(Maximized)
|
||||
END_ENUM_ITEM(INativeWindow::WindowSizeState)
|
||||
|
||||
BEGIN_ENUM_ITEM(INativeWindow::WindowMode)
|
||||
ENUM_ITEM_NAMESPACE(INativeWindow)
|
||||
ENUM_NAMESPACE_ITEM(Normal)
|
||||
ENUM_NAMESPACE_ITEM(Tooltip)
|
||||
ENUM_NAMESPACE_ITEM(Popup)
|
||||
ENUM_NAMESPACE_ITEM(Menu)
|
||||
END_ENUM_ITEM(INativeWindow::WindowMode)
|
||||
|
||||
BEGIN_INTERFACE_MEMBER_NOPROXY(INativeDelay)
|
||||
CLASS_MEMBER_PROPERTY_READONLY_FAST(Status)
|
||||
|
||||
@@ -1242,6 +1250,8 @@ Type Declaration (Class)
|
||||
CLASS_MEMBER_PROPERTY_FAST(ColumnPadding)
|
||||
CLASS_MEMBER_PROPERTY_FAST(Axis)
|
||||
CLASS_MEMBER_PROPERTY_FAST(Alignment)
|
||||
|
||||
CLASS_MEMBER_METHOD(InsertFlowItem, { L"index" _ L"item" })
|
||||
END_CLASS_MEMBER(GuiFlowComposition)
|
||||
|
||||
BEGIN_CLASS_MEMBER(GuiFlowItemComposition)
|
||||
@@ -1279,12 +1289,12 @@ Type Declaration (Class)
|
||||
CLASS_MEMBER_PROPERTY_FAST(Group)
|
||||
CLASS_MEMBER_PROPERTY_FAST(SharedWidth)
|
||||
CLASS_MEMBER_PROPERTY_FAST(SharedHeight)
|
||||
END_CLASS_MEMBER(GuiSubComponentMeasurer)
|
||||
END_CLASS_MEMBER(GuiSharedSizeItemComposition)
|
||||
|
||||
BEGIN_CLASS_MEMBER(GuiSharedSizeRootComposition)
|
||||
CLASS_MEMBER_BASE(GuiBoundsComposition)
|
||||
CLASS_MEMBER_CONSTRUCTOR(GuiSharedSizeRootComposition*(), NO_PARAMETER)
|
||||
END_CLASS_MEMBER(GuiSubComponentMeasurerSource)
|
||||
END_CLASS_MEMBER(GuiSharedSizeRootComposition)
|
||||
|
||||
BEGIN_CLASS_MEMBER(GuiRepeatCompositionBase)
|
||||
CLASS_MEMBER_GUIEVENT(ItemInserted)
|
||||
|
||||
@@ -125,6 +125,7 @@ Type List (Basic)
|
||||
F(presentation::INativeCursor::SystemCursorType)\
|
||||
F(presentation::INativeWindow)\
|
||||
F(presentation::INativeWindow::WindowSizeState)\
|
||||
F(presentation::INativeWindow::WindowMode)\
|
||||
F(presentation::INativeDelay)\
|
||||
F(presentation::INativeDelay::ExecuteStatus)\
|
||||
F(presentation::INativeScreen)\
|
||||
|
||||
+160
-139
@@ -8136,45 +8136,59 @@ WindowsForm
|
||||
SetWindowPos(handle, 0, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE | SWP_FRAMECHANGED);
|
||||
}
|
||||
|
||||
LONG_PTR InternalGetStyle()
|
||||
{
|
||||
return GetWindowLongPtr(handle, GWL_STYLE);
|
||||
}
|
||||
|
||||
void InternalSetStyle(LONG_PTR style)
|
||||
{
|
||||
SetWindowLongPtr(handle, GWL_STYLE, style);
|
||||
SetWindowPos(handle, 0, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE | SWP_FRAMECHANGED);
|
||||
}
|
||||
|
||||
LONG_PTR TurnOnStyle(LONG_PTR combination, LONG_PTR style)
|
||||
{
|
||||
return combination | style;
|
||||
}
|
||||
|
||||
LONG_PTR TurnOffStyle(LONG_PTR combination, LONG_PTR style)
|
||||
{
|
||||
return combination & (~style);
|
||||
}
|
||||
|
||||
bool GetExStyle(LONG_PTR exStyle)
|
||||
{
|
||||
LONG_PTR Long=InternalGetExStyle();
|
||||
return (Long & exStyle) != 0;
|
||||
return (InternalGetExStyle() & exStyle) != 0;
|
||||
}
|
||||
|
||||
void SetExStyle(LONG_PTR exStyle, bool available)
|
||||
{
|
||||
LONG_PTR Long = InternalGetExStyle();
|
||||
if(available)
|
||||
if (available)
|
||||
{
|
||||
Long |= exStyle;
|
||||
InternalSetExStyle(TurnOnStyle(InternalGetExStyle(), exStyle));
|
||||
}
|
||||
else
|
||||
{
|
||||
Long &= ~exStyle;
|
||||
InternalSetExStyle(TurnOffStyle(InternalGetExStyle(), exStyle));
|
||||
}
|
||||
InternalSetExStyle(Long);
|
||||
}
|
||||
|
||||
bool GetStyle(LONG_PTR style)
|
||||
{
|
||||
LONG_PTR Long = GetWindowLongPtr(handle, GWL_STYLE);
|
||||
return (Long & style) != 0;
|
||||
return (InternalGetStyle() & style) != 0;
|
||||
}
|
||||
|
||||
void SetStyle(LONG_PTR style, bool available)
|
||||
{
|
||||
LONG_PTR Long = GetWindowLongPtr(handle, GWL_STYLE);
|
||||
if(available)
|
||||
if (available)
|
||||
{
|
||||
Long |= style;
|
||||
InternalSetStyle(TurnOnStyle(InternalGetStyle(), style));
|
||||
}
|
||||
else
|
||||
{
|
||||
Long &= ~style;
|
||||
InternalSetStyle(TurnOffStyle(InternalGetStyle(), style));
|
||||
}
|
||||
SetWindowLongPtr(handle, GWL_STYLE, Long);
|
||||
SetWindowPos(handle, 0, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE | SWP_FRAMECHANGED);
|
||||
}
|
||||
#pragma push_macro("_CONTROL")
|
||||
#if defined _CONTROL
|
||||
@@ -8297,6 +8311,48 @@ WindowsForm
|
||||
bool transferFocusEvent = false;
|
||||
bool nonClient = false;
|
||||
|
||||
// handling popup windows
|
||||
{
|
||||
bool closeChildPopups = false;
|
||||
switch (uMsg)
|
||||
{
|
||||
case WM_ACTIVATE:
|
||||
if (wParam == WA_INACTIVE && windowMode == Normal)
|
||||
{
|
||||
closeChildPopups = true;
|
||||
}
|
||||
break;
|
||||
case WM_LBUTTONDOWN:
|
||||
case WM_MBUTTONDOWN:
|
||||
case WM_RBUTTONDOWN:
|
||||
closeChildPopups = true;
|
||||
break;
|
||||
}
|
||||
|
||||
if (closeChildPopups)
|
||||
{
|
||||
List<WindowsForm*> childPopups;
|
||||
childPopups.Add(this);
|
||||
for (vint i = 0; i < childPopups.Count(); i++)
|
||||
{
|
||||
auto popup = childPopups[i];
|
||||
for (vint j = 0; j < popup->childWindows.Count(); j++)
|
||||
{
|
||||
auto childPopup = popup->childWindows[j];
|
||||
if (childPopup->windowMode != Normal)
|
||||
{
|
||||
childPopups.Add(childPopup);
|
||||
}
|
||||
}
|
||||
|
||||
if (popup != this && popup->IsVisible())
|
||||
{
|
||||
popup->Hide(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
switch(uMsg)
|
||||
{
|
||||
case WM_LBUTTONDOWN:
|
||||
@@ -8387,11 +8443,18 @@ WindowsForm
|
||||
}
|
||||
}
|
||||
break;
|
||||
case WM_MOUSEACTIVATE:
|
||||
if (!IsEnabledActivate())
|
||||
{
|
||||
result = MA_NOACTIVATE;
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
case WM_ACTIVATE:
|
||||
{
|
||||
for(vint i=0;i<listeners.Count();i++)
|
||||
for (vint i = 0; i < listeners.Count(); i++)
|
||||
{
|
||||
if(wParam==WA_ACTIVE || wParam==WA_CLICKACTIVE)
|
||||
if (wParam == WA_ACTIVE || wParam == WA_CLICKACTIVE)
|
||||
{
|
||||
listeners[i]->Activated();
|
||||
}
|
||||
@@ -8792,22 +8855,7 @@ WindowsForm
|
||||
break;
|
||||
}
|
||||
|
||||
if(IsWindow(hwnd)!=0)
|
||||
{
|
||||
if(transferFocusEvent && IsFocused())
|
||||
{
|
||||
WindowsForm* window=this;
|
||||
while(window->parentWindow && window->alwaysPassFocusToParent)
|
||||
{
|
||||
window=window->parentWindow;
|
||||
}
|
||||
if(window!=this)
|
||||
{
|
||||
window->SetFocus();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// handling custom frame
|
||||
if (customFrameMode)
|
||||
{
|
||||
switch (uMsg)
|
||||
@@ -8859,7 +8907,8 @@ WindowsForm
|
||||
WindowsCursor* cursor = nullptr;
|
||||
NativePoint caretPoint;
|
||||
WindowsForm* parentWindow = nullptr;
|
||||
bool alwaysPassFocusToParent = false;
|
||||
List<WindowsForm*> childWindows;
|
||||
WindowMode windowMode = Normal;
|
||||
List<INativeWindowListener*> listeners;
|
||||
vint mouseLastX = -1;
|
||||
vint mouseLastY = -1;
|
||||
@@ -8889,7 +8938,7 @@ WindowsForm
|
||||
WindowsForm(HWND parent, WString className, HINSTANCE hInstance)
|
||||
{
|
||||
DWORD exStyle = WS_EX_APPWINDOW | WS_EX_CONTROLPARENT;
|
||||
DWORD style = WS_BORDER | WS_CAPTION | WS_SIZEBOX | WS_SYSMENU | WS_POPUP | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_MAXIMIZEBOX | WS_MINIMIZEBOX;
|
||||
DWORD style = WS_BORDER | WS_CAPTION | WS_SIZEBOX | WS_SYSMENU | WS_OVERLAPPED | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_MAXIMIZEBOX | WS_MINIMIZEBOX;
|
||||
handle = CreateWindowEx(exStyle, className.Buffer(), L"", style, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, parent, NULL, hInstance, NULL);
|
||||
|
||||
UpdateDpiAwaredFields(true);
|
||||
@@ -8897,6 +8946,15 @@ WindowsForm
|
||||
|
||||
~WindowsForm()
|
||||
{
|
||||
if (parentWindow)
|
||||
{
|
||||
parentWindow->childWindows.Remove(this);
|
||||
}
|
||||
for (vint i = childWindows.Count() - 1; i >= 0; i--)
|
||||
{
|
||||
childWindows[i]->SetParent(parentWindow);
|
||||
}
|
||||
|
||||
*flagDisposed.Obj() = true;
|
||||
List<INativeWindowListener*> copiedListeners;
|
||||
CopyFrom(copiedListeners, listeners);
|
||||
@@ -9125,25 +9183,44 @@ WindowsForm
|
||||
|
||||
void SetParent(INativeWindow* parent)override
|
||||
{
|
||||
parentWindow=dynamic_cast<WindowsForm*>(parent);
|
||||
if(parentWindow)
|
||||
if (parentWindow)
|
||||
{
|
||||
parentWindow->childWindows.Remove(this);
|
||||
}
|
||||
|
||||
if ((parentWindow = dynamic_cast<WindowsForm*>(parent)))
|
||||
{
|
||||
parentWindow->childWindows.Add(this);
|
||||
// ::SetParent(handle, parentWindow->handle);
|
||||
SetWindowLongPtr(handle, GWLP_HWNDPARENT, (LONG_PTR)parentWindow->handle);
|
||||
}
|
||||
else
|
||||
{
|
||||
// ::SetParent(handle, NULL);
|
||||
SetWindowLongPtr(handle, GWLP_HWNDPARENT, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
bool GetAlwaysPassFocusToParent()override
|
||||
WindowMode GetWindowMode()override
|
||||
{
|
||||
return alwaysPassFocusToParent;
|
||||
return windowMode;
|
||||
}
|
||||
|
||||
void SetAlwaysPassFocusToParent(bool value)override
|
||||
void SetWindowMode(WindowMode mode)override
|
||||
{
|
||||
alwaysPassFocusToParent=value;
|
||||
windowMode = mode;
|
||||
auto style = InternalGetStyle();
|
||||
if (mode == Normal)
|
||||
{
|
||||
style = TurnOnStyle(style, WS_OVERLAPPED);
|
||||
style = TurnOffStyle(style, WS_POPUP);
|
||||
}
|
||||
else
|
||||
{
|
||||
style = TurnOffStyle(style, WS_OVERLAPPED);
|
||||
style = TurnOnStyle(style, WS_POPUP);
|
||||
}
|
||||
InternalSetStyle(style);
|
||||
}
|
||||
|
||||
void EnableCustomFrameMode()override
|
||||
@@ -9563,7 +9640,7 @@ WindowsForm
|
||||
|
||||
void SetTopMost(bool topmost)override
|
||||
{
|
||||
SetWindowPos(handle, (topmost ? HWND_TOPMOST : HWND_NOTOPMOST), 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_FRAMECHANGED);
|
||||
SetWindowPos(handle, (topmost ? HWND_TOPMOST : HWND_NOTOPMOST), 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE | SWP_FRAMECHANGED);
|
||||
}
|
||||
|
||||
void SupressAlt()override
|
||||
@@ -9617,7 +9694,6 @@ WindowsController
|
||||
|
||||
LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
LRESULT CALLBACK GodProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
LRESULT CALLBACK MouseProc(int nCode , WPARAM wParam , LPARAM lParam);
|
||||
|
||||
class WindowsController : public Object, public virtual INativeController, public virtual INativeWindowService
|
||||
{
|
||||
@@ -9647,7 +9723,6 @@ WindowsController
|
||||
,mainWindow(0)
|
||||
,mainWindowHandle(0)
|
||||
,screenService(&GetHWNDFromNativeWindowHandle)
|
||||
,inputService(&MouseProc)
|
||||
,dialogService(&GetHWNDFromNativeWindowHandle)
|
||||
{
|
||||
godWindow=CreateWindowEx(WS_EX_CONTROLPARENT, godClass.GetName().Buffer(), L"GodWindow", WS_OVERLAPPEDWINDOW, 0, 0, 0, 0, NULL, NULL, hInstance, NULL);
|
||||
@@ -9658,7 +9733,6 @@ WindowsController
|
||||
~WindowsController()
|
||||
{
|
||||
inputService.StopTimer();
|
||||
inputService.StopHookMouse();
|
||||
clipboardService.SetOwnerHandle(NULL);
|
||||
DestroyWindow(godWindow);
|
||||
}
|
||||
@@ -9700,17 +9774,32 @@ WindowsController
|
||||
{
|
||||
if (hwnd == mainWindowHandle && uMsg == WM_DESTROY)
|
||||
{
|
||||
for (vint i = 0; i < windows.Count(); i++)
|
||||
FOREACH(WindowsForm*, window, windows.Values())
|
||||
{
|
||||
if (windows.Values().Get(i)->IsVisible())
|
||||
if (window->IsVisible())
|
||||
{
|
||||
windows.Values().Get(i)->Hide(true);
|
||||
window->Hide(true);
|
||||
}
|
||||
}
|
||||
while (windows.Count())
|
||||
List<WindowsForm*> normalWindows;
|
||||
CopyFrom(
|
||||
normalWindows,
|
||||
From(windows.Values())
|
||||
.Where([](WindowsForm* window)
|
||||
{
|
||||
return window->GetWindowMode() == INativeWindow::Normal;
|
||||
})
|
||||
);
|
||||
FOREACH(WindowsForm*, window, normalWindows)
|
||||
{
|
||||
DestroyNativeWindow(windows.Values().Get(0));
|
||||
DestroyNativeWindow(window);
|
||||
}
|
||||
for (vint i = windows.Count() - 1; i >= 0; i--)
|
||||
{
|
||||
auto window = windows.Values()[i];
|
||||
DestroyNativeWindow(window);
|
||||
}
|
||||
|
||||
PostQuitMessage(0);
|
||||
}
|
||||
}
|
||||
@@ -9832,11 +9921,6 @@ WindowsController
|
||||
|
||||
//=======================================================================
|
||||
|
||||
void InvokeMouseHook(WPARAM message, NativePoint location)
|
||||
{
|
||||
callbackService.InvokeMouseHook(message, location);
|
||||
}
|
||||
|
||||
void InvokeGlobalTimer()
|
||||
{
|
||||
callbackService.InvokeGlobalTimer();
|
||||
@@ -9884,18 +9968,6 @@ Windows Procedure
|
||||
return DefWindowProc(hwnd, uMsg, wParam, lParam);
|
||||
}
|
||||
|
||||
LRESULT CALLBACK MouseProc(int nCode , WPARAM wParam , LPARAM lParam)
|
||||
{
|
||||
WindowsController* controller=dynamic_cast<WindowsController*>(GetCurrentController());
|
||||
if(controller)
|
||||
{
|
||||
MSLLHOOKSTRUCT* mouseHookStruct=(MSLLHOOKSTRUCT*)lParam;
|
||||
NativePoint location(mouseHookStruct->pt.x, mouseHookStruct->pt.y);
|
||||
controller->InvokeMouseHook(wParam, location);
|
||||
}
|
||||
return CallNextHookEx(NULL,nCode,wParam,lParam);
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
Windows Platform Native Controller
|
||||
***********************************************************************/
|
||||
@@ -10322,6 +10394,16 @@ ControllerListener
|
||||
}
|
||||
}
|
||||
|
||||
~Direct2DWindowsNativeControllerListener()
|
||||
{
|
||||
for (vint i = 0; i < nativeWindowListeners.Count(); i++)
|
||||
{
|
||||
auto window = nativeWindowListeners.Keys()[i];
|
||||
auto listener = nativeWindowListeners.Values()[i];
|
||||
window->UninstallListener(listener.Obj());
|
||||
}
|
||||
}
|
||||
|
||||
ComPtr<ID3D11Device> CreateD3D11Device(D3D_DRIVER_TYPE driverType)
|
||||
{
|
||||
UINT flags = D3D11_CREATE_DEVICE_BGRA_SUPPORT;
|
||||
@@ -12633,6 +12715,16 @@ namespace vl
|
||||
public:
|
||||
Dictionary<INativeWindow*, Ptr<GdiWindowsNativeWindowListener>> nativeWindowListeners;
|
||||
|
||||
~GdiWindowsNativeControllerListener()
|
||||
{
|
||||
for (vint i = 0; i < nativeWindowListeners.Count(); i++)
|
||||
{
|
||||
auto window = nativeWindowListeners.Keys()[i];
|
||||
auto listener = nativeWindowListeners.Values()[i];
|
||||
window->UninstallListener(listener.Obj());
|
||||
}
|
||||
}
|
||||
|
||||
void NativeWindowCreated(INativeWindow* window)
|
||||
{
|
||||
Ptr<GdiWindowsNativeWindowListener> listener=new GdiWindowsNativeWindowListener(window);
|
||||
@@ -13010,53 +13102,6 @@ WindowsCallbackService
|
||||
}
|
||||
}
|
||||
|
||||
void WindowsCallbackService::InvokeMouseHook(WPARAM message, NativePoint location)
|
||||
{
|
||||
switch(message)
|
||||
{
|
||||
case WM_LBUTTONDOWN:
|
||||
{
|
||||
for(vint i=0;i<listeners.Count();i++)
|
||||
{
|
||||
listeners[i]->LeftButtonDown(location);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case WM_LBUTTONUP:
|
||||
{
|
||||
for(vint i=0;i<listeners.Count();i++)
|
||||
{
|
||||
listeners[i]->LeftButtonUp(location);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case WM_RBUTTONDOWN:
|
||||
{
|
||||
for(vint i=0;i<listeners.Count();i++)
|
||||
{
|
||||
listeners[i]->RightButtonDown(location);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case WM_RBUTTONUP:
|
||||
{
|
||||
for(vint i=0;i<listeners.Count();i++)
|
||||
{
|
||||
listeners[i]->RightButtonUp(location);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case WM_MOUSEMOVE:
|
||||
{
|
||||
for(vint i=0;i<listeners.Count();i++)
|
||||
{
|
||||
listeners[i]->MouseMoving(location);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void WindowsCallbackService::InvokeGlobalTimer()
|
||||
{
|
||||
for(vint i=0;i<listeners.Count();i++)
|
||||
@@ -14399,11 +14444,9 @@ WindowsInputService
|
||||
}
|
||||
}
|
||||
|
||||
WindowsInputService::WindowsInputService(HOOKPROC _mouseProc)
|
||||
WindowsInputService::WindowsInputService()
|
||||
:ownerHandle(NULL)
|
||||
,mouseHook(NULL)
|
||||
,isTimerEnabled(false)
|
||||
,mouseProc(_mouseProc)
|
||||
,keyNames(146)
|
||||
{
|
||||
InitializeKeyNames();
|
||||
@@ -14414,28 +14457,6 @@ WindowsInputService
|
||||
ownerHandle=handle;
|
||||
}
|
||||
|
||||
void WindowsInputService::StartHookMouse()
|
||||
{
|
||||
if(!IsHookingMouse())
|
||||
{
|
||||
mouseHook=SetWindowsHookEx(WH_MOUSE_LL, mouseProc, NULL, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
void WindowsInputService::StopHookMouse()
|
||||
{
|
||||
if(IsHookingMouse())
|
||||
{
|
||||
UnhookWindowsHookEx(mouseHook);
|
||||
mouseHook=NULL;
|
||||
}
|
||||
}
|
||||
|
||||
bool WindowsInputService::IsHookingMouse()
|
||||
{
|
||||
return mouseHook!=NULL;
|
||||
}
|
||||
|
||||
void WindowsInputService::StartTimer()
|
||||
{
|
||||
if(!IsTimerEnabled())
|
||||
|
||||
@@ -1852,7 +1852,6 @@ namespace vl
|
||||
bool InstallListener(INativeControllerListener* listener)override;
|
||||
bool UninstallListener(INativeControllerListener* listener)override;
|
||||
|
||||
void InvokeMouseHook(WPARAM message, NativePoint location);
|
||||
void InvokeGlobalTimer();
|
||||
void InvokeClipboardUpdated();
|
||||
void InvokeNativeWindowCreated(INativeWindow* window);
|
||||
@@ -2241,9 +2240,7 @@ namespace vl
|
||||
{
|
||||
protected:
|
||||
HWND ownerHandle;
|
||||
HHOOK mouseHook;
|
||||
bool isTimerEnabled;
|
||||
HOOKPROC mouseProc;
|
||||
|
||||
collections::Array<WString> keyNames;
|
||||
collections::Dictionary<WString, VKEY> keys;
|
||||
@@ -2251,12 +2248,9 @@ namespace vl
|
||||
WString GetKeyNameInternal(VKEY code);
|
||||
void InitializeKeyNames();
|
||||
public:
|
||||
WindowsInputService(HOOKPROC _mouseProc);
|
||||
WindowsInputService();
|
||||
|
||||
void SetOwnerHandle(HWND handle);
|
||||
void StartHookMouse()override;
|
||||
void StopHookMouse()override;
|
||||
bool IsHookingMouse()override;
|
||||
void StartTimer()override;
|
||||
void StopTimer()override;
|
||||
bool IsTimerEnabled()override;
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user