Fix up radio buttons, more editbox functionality.

All blocking issues with UI should now be fixed.
This commit is contained in:
elasota
2020-02-16 21:57:02 -05:00
parent a726a88f70
commit 7548690c51
14 changed files with 140 additions and 6 deletions

View File

@@ -83,6 +83,7 @@
<Import Project="GpApp.props" />
<Import Project="..\Common.props" />
<Import Project="..\GpCommon.props" />
<Import Project="..\Release.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup />

View File

@@ -398,6 +398,9 @@ Boolean TestHighScore (void)
}
}
if (IsHighScoreForceTop())
placing = 0;
if (placing != -1)
{
int64_t scoreTimestamp = PortabilityLayer::HostSystemServices::GetInstance()->GetTime();

View File

@@ -1,6 +1,7 @@
#include "PLCheckboxWidget.h"
#include "PLStandardColors.h"
#include "FontFamily.h"
#include "PLTimeTaggedVOSEvent.h"
#include <algorithm>
@@ -9,6 +10,7 @@ namespace PortabilityLayer
CheckboxWidget::CheckboxWidget(const WidgetBasicState &state)
: WidgetSpec<CheckboxWidget>(state)
, m_text(state.m_text)
, m_haveMouseDown(false)
{
}
@@ -69,4 +71,40 @@ namespace PortabilityLayer
if (m_window)
DrawControl(&m_window->m_surface);
}
WidgetHandleState_t CheckboxWidget::ProcessEvent(const TimeTaggedVOSEvent &evt)
{
if (m_haveMouseDown)
{
if (evt.IsLMouseUpEvent())
{
m_haveMouseDown = false;
const Point pt = m_window->MouseToLocal(evt.m_vosEvent.m_event.m_mouseInputEvent);
if (m_rect.Contains(pt))
return WidgetHandleStates::kActivated;
else
return WidgetHandleStates::kIgnored;
}
return WidgetHandleStates::kCaptured;
}
else
{
if (evt.IsLMouseDownEvent())
{
const Point pt = m_window->MouseToLocal(evt.m_vosEvent.m_event.m_mouseInputEvent);
if (m_rect.Contains(pt))
{
m_haveMouseDown = true;
return WidgetHandleStates::kCaptured;
}
else
return WidgetHandleStates::kIgnored;
}
}
return WidgetHandleStates::kIgnored;
}
}

View File

@@ -19,7 +19,10 @@ namespace PortabilityLayer
void OnStateChanged() override;
WidgetHandleState_t ProcessEvent(const TimeTaggedVOSEvent &evt);
private:
PascalStr<255> m_text;
bool m_haveMouseDown;
};
}

View File

@@ -1,5 +1,9 @@
#include "PLDialogs.h"
#include "DialogManager.h"
#include "PLArrayView.h"
#include "PLPasStr.h"
#include "PLEditboxWidget.h"
DialogTextSubstitutions::DialogTextSubstitutions()
@@ -78,7 +82,9 @@ void SetDialogItemText(THandle<Control> handle, const PLPasStr &str)
void SelectDialogItemText(Dialog *dialog, int item, int firstSelChar, int lastSelCharExclusive)
{
PL_NotYetImplemented_TODO("TextBox_Critical");
PortabilityLayer::EditboxWidget *widget = static_cast<PortabilityLayer::EditboxWidget*>(dialog->GetItems()[item - 1].GetWidget());
widget->GetWindow()->FocusWidget(widget);
widget->SetSelection(firstSelChar, lastSelCharExclusive);
}
ModalFilterUPP NewModalFilterUPP(ModalFilterUPP func)

View File

@@ -166,6 +166,9 @@ namespace PortabilityLayer
{
if (evt.m_vosEvent.m_eventType == GpVOSEventTypes::kKeyboardInput)
{
if (!m_hasFocus)
return WidgetHandleStates::kIgnored;
const GpKeyboardInputEvent &keyEvent = evt.m_vosEvent.m_event.m_keyboardInputEvent;
if (keyEvent.m_eventType == GpKeyboardInputEventTypes::kAutoChar || keyEvent.m_eventType == GpKeyboardInputEventTypes::kDownChar)
@@ -191,8 +194,6 @@ namespace PortabilityLayer
{
if (ch >= 0x20 && ch <= 0x7e)
HandleCharacter(ch, keyEvent.m_repeatCount);
else if (ch == '\b')
HandleBackspace(keyEvent.m_repeatCount);
return WidgetHandleStates::kDigested;
}
@@ -206,7 +207,7 @@ namespace PortabilityLayer
{
if (keyEvent.m_key.m_specialKey == GpKeySpecials::kBackspace)
{
HandleBackspace(keyEvent.m_repeatCount);
return WidgetHandleStates::kDigested;
}
else if (keyEvent.m_key.m_specialKey == GpKeySpecials::kDelete)
@@ -234,6 +235,24 @@ namespace PortabilityLayer
return true;
}
void EditboxWidget::SetSelection(size_t startChar, size_t endChar)
{
if (startChar > m_length)
startChar = m_length;
if (endChar < startChar)
endChar = startChar;
if (endChar > m_length)
endChar = m_length;
m_selStartChar = startChar;
m_selEndChar = endChar;
m_caratTimer = 0;
Redraw();
}
void EditboxWidget::OnTick()
{
if (m_hasFocus)

View File

@@ -24,6 +24,8 @@ namespace PortabilityLayer
bool HandlesTickEvents() const;
void SetSelection(size_t startChar, size_t endChar);
private:
static const unsigned int kCaratBlinkRate = 20;

View File

@@ -19,3 +19,8 @@ bool IsRoomEditorDisabled()
{
return true;
}
bool IsHighScoreForceTop()
{
return false;
}

View File

@@ -4,3 +4,4 @@ bool IsMacPlusGraphicBanned();
bool IsMacPlusSoundBanned();
bool IsHighScoreDisabled();
bool IsRoomEditorDisabled();
bool IsHighScoreForceTop();

View File

@@ -1,6 +1,7 @@
#include "PLRadioButtonWidget.h"
#include "PLStandardColors.h"
#include "FontFamily.h"
#include "PLTimeTaggedVOSEvent.h"
#include <algorithm>
@@ -9,6 +10,7 @@ namespace PortabilityLayer
RadioButtonWidget::RadioButtonWidget(const WidgetBasicState &state)
: WidgetSpec<RadioButtonWidget>(state)
, m_text(state.m_text)
, m_haveMouseDown(false)
{
}
@@ -68,4 +70,40 @@ namespace PortabilityLayer
if (m_window)
DrawControl(&m_window->m_surface);
}
WidgetHandleState_t RadioButtonWidget::ProcessEvent(const TimeTaggedVOSEvent &evt)
{
if (m_haveMouseDown)
{
if (evt.IsLMouseUpEvent())
{
m_haveMouseDown = false;
const Point pt = m_window->MouseToLocal(evt.m_vosEvent.m_event.m_mouseInputEvent);
if (m_rect.Contains(pt))
return WidgetHandleStates::kActivated;
else
return WidgetHandleStates::kIgnored;
}
return WidgetHandleStates::kCaptured;
}
else
{
if (evt.IsLMouseDownEvent())
{
const Point pt = m_window->MouseToLocal(evt.m_vosEvent.m_event.m_mouseInputEvent);
if (m_rect.Contains(pt))
{
m_haveMouseDown = true;
return WidgetHandleStates::kCaptured;
}
else
return WidgetHandleStates::kIgnored;
}
}
return WidgetHandleStates::kIgnored;
}
}

View File

@@ -19,7 +19,10 @@ namespace PortabilityLayer
void OnStateChanged() override;
WidgetHandleState_t ProcessEvent(const TimeTaggedVOSEvent &evt);
private:
PascalStr<255> m_text;
bool m_haveMouseDown;
};
}

View File

@@ -64,6 +64,7 @@
<Import Project="..\MacRomanConversion.props" />
<Import Project="..\zlib.props" />
<Import Project="..\RapidJSON.props" />
<Import Project="..\Release.props" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
@@ -73,6 +74,7 @@
<Import Project="..\MacRomanConversion.props" />
<Import Project="..\zlib.props" />
<Import Project="..\RapidJSON.props" />
<Import Project="..\Release.props" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
@@ -91,6 +93,7 @@
<Import Project="..\MacRomanConversion.props" />
<Import Project="..\zlib.props" />
<Import Project="..\RapidJSON.props" />
<Import Project="..\Release.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup />

12
Release.props Normal file
View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets" />
<PropertyGroup Label="UserMacros" />
<PropertyGroup />
<ItemDefinitionGroup>
<ClCompile>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
</ItemDefinitionGroup>
<ItemGroup />
</Project>