C26447,C26440 - is noexcept but can throw or doesn't throw but not noexcept
This commit is contained in:
parent
8c3a629b52
commit
4f1157c044
|
@ -6,21 +6,21 @@
|
|||
#include "AttrRowIterator.hpp"
|
||||
#include "AttrRow.hpp"
|
||||
|
||||
AttrRowIterator AttrRowIterator::CreateEndIterator(const ATTR_ROW* const attrRow)
|
||||
AttrRowIterator AttrRowIterator::CreateEndIterator(const ATTR_ROW* const attrRow) noexcept
|
||||
{
|
||||
AttrRowIterator it{ attrRow };
|
||||
it._setToEnd();
|
||||
return it;
|
||||
}
|
||||
|
||||
AttrRowIterator::AttrRowIterator(const ATTR_ROW* const attrRow) :
|
||||
AttrRowIterator::AttrRowIterator(const ATTR_ROW* const attrRow) noexcept :
|
||||
_pAttrRow{ attrRow },
|
||||
_run{ attrRow->_list.cbegin() },
|
||||
_currentAttributeIndex{ 0 }
|
||||
{
|
||||
}
|
||||
|
||||
AttrRowIterator::operator bool() const noexcept
|
||||
AttrRowIterator::operator bool() const
|
||||
{
|
||||
return _run < _pAttrRow->_list.cend();
|
||||
}
|
||||
|
@ -139,7 +139,7 @@ void AttrRowIterator::_decrement(size_t count)
|
|||
|
||||
// Routine Description:
|
||||
// - sets fields on the iterator to describe the end() state of the ATTR_ROW
|
||||
void AttrRowIterator::_setToEnd()
|
||||
void AttrRowIterator::_setToEnd() noexcept
|
||||
{
|
||||
_run = _pAttrRow->_list.cend();
|
||||
_currentAttributeIndex = 0;
|
||||
|
|
|
@ -29,11 +29,11 @@ public:
|
|||
using pointer = TextAttribute*;
|
||||
using reference = TextAttribute&;
|
||||
|
||||
static AttrRowIterator CreateEndIterator(const ATTR_ROW* const attrRow);
|
||||
static AttrRowIterator CreateEndIterator(const ATTR_ROW* const attrRow) noexcept;
|
||||
|
||||
AttrRowIterator(const ATTR_ROW* const attrRow);
|
||||
AttrRowIterator(const ATTR_ROW* const attrRow) noexcept;
|
||||
|
||||
operator bool() const noexcept;
|
||||
operator bool() const;
|
||||
|
||||
bool operator==(const AttrRowIterator& it) const;
|
||||
bool operator!=(const AttrRowIterator& it) const;
|
||||
|
@ -57,5 +57,5 @@ private:
|
|||
|
||||
void _increment(size_t count);
|
||||
void _decrement(size_t count);
|
||||
void _setToEnd();
|
||||
void _setToEnd() noexcept;
|
||||
};
|
||||
|
|
|
@ -84,7 +84,7 @@ size_t CharRow::size() const noexcept
|
|||
// - sRowWidth - The width of the row.
|
||||
// Return Value:
|
||||
// - <none>
|
||||
void CharRow::Reset()
|
||||
void CharRow::Reset() noexcept
|
||||
{
|
||||
for (auto& cell : _data)
|
||||
{
|
||||
|
@ -292,12 +292,12 @@ std::wstring CharRow::GetText() const
|
|||
return wstr;
|
||||
}
|
||||
|
||||
UnicodeStorage& CharRow::GetUnicodeStorage()
|
||||
UnicodeStorage& CharRow::GetUnicodeStorage() noexcept
|
||||
{
|
||||
return _pParent->GetUnicodeStorage();
|
||||
}
|
||||
|
||||
const UnicodeStorage& CharRow::GetUnicodeStorage() const
|
||||
const UnicodeStorage& CharRow::GetUnicodeStorage() const noexcept
|
||||
{
|
||||
return _pParent->GetUnicodeStorage();
|
||||
}
|
||||
|
@ -308,7 +308,7 @@ const UnicodeStorage& CharRow::GetUnicodeStorage() const
|
|||
// - column - the column to generate the key for
|
||||
// Return Value:
|
||||
// - the COORD key for data access from UnicodeStorage for the column
|
||||
COORD CharRow::GetStorageKey(const size_t column) const
|
||||
COORD CharRow::GetStorageKey(const size_t column) const noexcept
|
||||
{
|
||||
return { gsl::narrow<SHORT>(column), _pParent->GetId() };
|
||||
}
|
||||
|
|
|
@ -53,7 +53,7 @@ public:
|
|||
void SetDoubleBytePadded(const bool doubleBytePadded) noexcept;
|
||||
bool WasDoubleBytePadded() const noexcept;
|
||||
size_t size() const noexcept;
|
||||
void Reset();
|
||||
void Reset() noexcept;
|
||||
[[nodiscard]] HRESULT Resize(const size_t newSize) noexcept;
|
||||
size_t MeasureLeft() const;
|
||||
size_t MeasureRight() const noexcept;
|
||||
|
@ -78,9 +78,9 @@ public:
|
|||
iterator end() noexcept;
|
||||
const_iterator cend() const noexcept;
|
||||
|
||||
UnicodeStorage& GetUnicodeStorage();
|
||||
const UnicodeStorage& GetUnicodeStorage() const;
|
||||
COORD GetStorageKey(const size_t column) const;
|
||||
UnicodeStorage& GetUnicodeStorage() noexcept;
|
||||
const UnicodeStorage& GetUnicodeStorage() const noexcept;
|
||||
COORD GetStorageKey(const size_t column) const noexcept;
|
||||
|
||||
void UpdateParent(ROW* const pParent) noexcept;
|
||||
|
||||
|
|
|
@ -8,13 +8,13 @@
|
|||
// default glyph value, used for reseting the character data portion of a cell
|
||||
static constexpr wchar_t DefaultValue = UNICODE_SPACE;
|
||||
|
||||
CharRowCell::CharRowCell() :
|
||||
CharRowCell::CharRowCell() noexcept:
|
||||
_wch{ DefaultValue },
|
||||
_attr{}
|
||||
{
|
||||
}
|
||||
|
||||
CharRowCell::CharRowCell(const wchar_t wch, const DbcsAttribute attr) :
|
||||
CharRowCell::CharRowCell(const wchar_t wch, const DbcsAttribute attr) noexcept:
|
||||
_wch{ wch },
|
||||
_attr{ attr }
|
||||
{
|
||||
|
@ -22,7 +22,7 @@ CharRowCell::CharRowCell(const wchar_t wch, const DbcsAttribute attr) :
|
|||
|
||||
// Routine Description:
|
||||
// - "erases" the glyph. really sets it back to the default "empty" value
|
||||
void CharRowCell::EraseChars()
|
||||
void CharRowCell::EraseChars() noexcept
|
||||
{
|
||||
if (_attr.IsGlyphStored())
|
||||
{
|
||||
|
|
|
@ -27,10 +27,10 @@ Author(s):
|
|||
class CharRowCell final
|
||||
{
|
||||
public:
|
||||
CharRowCell();
|
||||
CharRowCell(const wchar_t wch, const DbcsAttribute attr);
|
||||
CharRowCell() noexcept;
|
||||
CharRowCell(const wchar_t wch, const DbcsAttribute attr) noexcept;
|
||||
|
||||
void EraseChars();
|
||||
void EraseChars() noexcept;
|
||||
void Reset() noexcept;
|
||||
|
||||
bool IsSpace() const noexcept;
|
||||
|
|
|
@ -25,7 +25,7 @@ class CharRowCellReference final
|
|||
public:
|
||||
using const_iterator = const wchar_t*;
|
||||
|
||||
CharRowCellReference(CharRow& parent, const size_t index) :
|
||||
CharRowCellReference(CharRow& parent, const size_t index) noexcept :
|
||||
_parent{ parent },
|
||||
_index{ index }
|
||||
{
|
||||
|
|
|
@ -63,7 +63,7 @@ public:
|
|||
return _glyphStored;
|
||||
}
|
||||
|
||||
void SetGlyphStored(const bool stored)
|
||||
void SetGlyphStored(const bool stored) noexcept
|
||||
{
|
||||
_glyphStored = stored;
|
||||
}
|
||||
|
|
|
@ -17,7 +17,7 @@ static constexpr TextAttribute InvalidTextAttribute{ INVALID_COLOR, INVALID_COLO
|
|||
// Arguments:
|
||||
// - wch - The character to use for filling
|
||||
// - fillLimit - How many times to allow this value to be viewed/filled. Infinite if 0.
|
||||
OutputCellIterator::OutputCellIterator(const wchar_t& wch, const size_t fillLimit) :
|
||||
OutputCellIterator::OutputCellIterator(const wchar_t& wch, const size_t fillLimit) noexcept :
|
||||
_mode(Mode::Fill),
|
||||
_currentView(s_GenerateView(wch)),
|
||||
_run(),
|
||||
|
@ -33,7 +33,7 @@ OutputCellIterator::OutputCellIterator(const wchar_t& wch, const size_t fillLimi
|
|||
// Arguments:
|
||||
// - attr - The color attribute to use for filling
|
||||
// - fillLimit - How many times to allow this value to be viewed/filled. Infinite if 0.
|
||||
OutputCellIterator::OutputCellIterator(const TextAttribute& attr, const size_t fillLimit) :
|
||||
OutputCellIterator::OutputCellIterator(const TextAttribute& attr, const size_t fillLimit) noexcept :
|
||||
_mode(Mode::Fill),
|
||||
_currentView(s_GenerateView(attr)),
|
||||
_run(),
|
||||
|
@ -50,7 +50,7 @@ OutputCellIterator::OutputCellIterator(const TextAttribute& attr, const size_t f
|
|||
// - wch - The character to use for filling
|
||||
// - attr - The color attribute to use for filling
|
||||
// - fillLimit - How many times to allow this value to be viewed/filled. Infinite if 0.
|
||||
OutputCellIterator::OutputCellIterator(const wchar_t& wch, const TextAttribute& attr, const size_t fillLimit) :
|
||||
OutputCellIterator::OutputCellIterator(const wchar_t& wch, const TextAttribute& attr, const size_t fillLimit) noexcept :
|
||||
_mode(Mode::Fill),
|
||||
_currentView(s_GenerateView(wch, attr)),
|
||||
_run(),
|
||||
|
@ -66,7 +66,7 @@ OutputCellIterator::OutputCellIterator(const wchar_t& wch, const TextAttribute&
|
|||
// Arguments:
|
||||
// - charInfo - The legacy character and color data to use for fililng (uses Unicode portion of text data)
|
||||
// - fillLimit - How many times to allow this value to be viewed/filled. Infinite if 0.
|
||||
OutputCellIterator::OutputCellIterator(const CHAR_INFO& charInfo, const size_t fillLimit) :
|
||||
OutputCellIterator::OutputCellIterator(const CHAR_INFO& charInfo, const size_t fillLimit) noexcept :
|
||||
_mode(Mode::Fill),
|
||||
_currentView(s_GenerateView(charInfo)),
|
||||
_run(),
|
||||
|
@ -116,7 +116,7 @@ OutputCellIterator::OutputCellIterator(const std::wstring_view utf16Text, const
|
|||
// razzle cannot distinguish between a std::wstring_view and a std::basic_string_view<WORD>
|
||||
// NOTE: This one internally casts to wchar_t because Razzle sees WORD and wchar_t as the same type
|
||||
// despite that Visual Studio build can tell the difference.
|
||||
OutputCellIterator::OutputCellIterator(const std::basic_string_view<WORD> legacyAttrs, const bool /*unused*/) :
|
||||
OutputCellIterator::OutputCellIterator(const std::basic_string_view<WORD> legacyAttrs, const bool /*unused*/) noexcept :
|
||||
_mode(Mode::LegacyAttr),
|
||||
_currentView(s_GenerateViewLegacyAttr(legacyAttrs.at(0))),
|
||||
_run(std::wstring_view(reinterpret_cast<const wchar_t*>(legacyAttrs.data()), legacyAttrs.size())),
|
||||
|
@ -131,7 +131,7 @@ OutputCellIterator::OutputCellIterator(const std::basic_string_view<WORD> legacy
|
|||
// - This is an iterator over legacy cell data. We will use the unicode text and the legacy color attribute.
|
||||
// Arguments:
|
||||
// - charInfos - Multiple cell with unicode text and legacy color data.
|
||||
OutputCellIterator::OutputCellIterator(const std::basic_string_view<CHAR_INFO> charInfos) :
|
||||
OutputCellIterator::OutputCellIterator(const std::basic_string_view<CHAR_INFO> charInfos) noexcept :
|
||||
_mode(Mode::CharInfo),
|
||||
_currentView(s_GenerateView(charInfos.at(0))),
|
||||
_run(charInfos),
|
||||
|
@ -315,7 +315,7 @@ OutputCellIterator OutputCellIterator::operator++(int)
|
|||
// - Reference the view to fully-formed output cell data representing the underlying data source.
|
||||
// Return Value:
|
||||
// - Reference to the view
|
||||
const OutputCellView& OutputCellIterator::operator*() const
|
||||
const OutputCellView& OutputCellIterator::operator*() const noexcept
|
||||
{
|
||||
return _currentView;
|
||||
}
|
||||
|
@ -324,7 +324,7 @@ const OutputCellView& OutputCellIterator::operator*() const
|
|||
// - Get pointer to the view to fully-formed output cell data representing the underlying data source.
|
||||
// Return Value:
|
||||
// - Pointer to the view
|
||||
const OutputCellView* OutputCellIterator::operator->() const
|
||||
const OutputCellView* OutputCellIterator::operator->() const noexcept
|
||||
{
|
||||
return &_currentView;
|
||||
}
|
||||
|
@ -338,7 +338,7 @@ const OutputCellView* OutputCellIterator::operator->() const
|
|||
// - True if we just turned a lead half into a trailing half (and caller doesn't
|
||||
// need to further update the view).
|
||||
// - False if this wasn't applicable and the caller should update the view.
|
||||
bool OutputCellIterator::_TryMoveTrailing()
|
||||
bool OutputCellIterator::_TryMoveTrailing() noexcept
|
||||
{
|
||||
if (_currentView.DbcsAttr().IsLeading())
|
||||
{
|
||||
|
@ -421,7 +421,7 @@ OutputCellView OutputCellIterator::s_GenerateView(const std::wstring_view view,
|
|||
// - wch - View representing a single UTF-16 character (that can be represented without surrogates)
|
||||
// Return Value:
|
||||
// - Object representing the view into this cell
|
||||
OutputCellView OutputCellIterator::s_GenerateView(const wchar_t& wch)
|
||||
OutputCellView OutputCellIterator::s_GenerateView(const wchar_t& wch) noexcept
|
||||
{
|
||||
const auto glyph = std::wstring_view(&wch, 1);
|
||||
|
||||
|
@ -443,7 +443,7 @@ OutputCellView OutputCellIterator::s_GenerateView(const wchar_t& wch)
|
|||
// - attr - View representing a single color
|
||||
// Return Value:
|
||||
// - Object representing the view into this cell
|
||||
OutputCellView OutputCellIterator::s_GenerateView(const TextAttribute& attr)
|
||||
OutputCellView OutputCellIterator::s_GenerateView(const TextAttribute& attr) noexcept
|
||||
{
|
||||
return OutputCellView({}, {}, attr, TextAttributeBehavior::StoredOnly);
|
||||
}
|
||||
|
@ -458,7 +458,7 @@ OutputCellView OutputCellIterator::s_GenerateView(const TextAttribute& attr)
|
|||
// - attr - View representing a single color
|
||||
// Return Value:
|
||||
// - Object representing the view into this cell
|
||||
OutputCellView OutputCellIterator::s_GenerateView(const wchar_t& wch, const TextAttribute& attr)
|
||||
OutputCellView OutputCellIterator::s_GenerateView(const wchar_t& wch, const TextAttribute& attr) noexcept
|
||||
{
|
||||
const auto glyph = std::wstring_view(&wch, 1);
|
||||
|
||||
|
@ -480,7 +480,7 @@ OutputCellView OutputCellIterator::s_GenerateView(const wchar_t& wch, const Text
|
|||
// - legacyAttr - View representing a single legacy color
|
||||
// Return Value:
|
||||
// - Object representing the view into this cell
|
||||
OutputCellView OutputCellIterator::s_GenerateViewLegacyAttr(const WORD& legacyAttr)
|
||||
OutputCellView OutputCellIterator::s_GenerateViewLegacyAttr(const WORD& legacyAttr) noexcept
|
||||
{
|
||||
WORD cleanAttr = legacyAttr;
|
||||
WI_ClearAllFlags(cleanAttr, COMMON_LVB_SBCSDBCS); // don't use legacy lead/trailing byte flags for colors
|
||||
|
@ -498,7 +498,7 @@ OutputCellView OutputCellIterator::s_GenerateViewLegacyAttr(const WORD& legacyAt
|
|||
// - charInfo - character and attribute pair representing a single cell
|
||||
// Return Value:
|
||||
// - Object representing the view into this cell
|
||||
OutputCellView OutputCellIterator::s_GenerateView(const CHAR_INFO& charInfo)
|
||||
OutputCellView OutputCellIterator::s_GenerateView(const CHAR_INFO& charInfo) noexcept
|
||||
{
|
||||
const auto glyph = std::wstring_view(&charInfo.Char.UnicodeChar, 1);
|
||||
|
||||
|
|
|
@ -33,14 +33,14 @@ public:
|
|||
using pointer = OutputCellView*;
|
||||
using reference = OutputCellView&;
|
||||
|
||||
OutputCellIterator(const wchar_t& wch, const size_t fillLimit = 0);
|
||||
OutputCellIterator(const TextAttribute& attr, const size_t fillLimit = 0);
|
||||
OutputCellIterator(const wchar_t& wch, const TextAttribute& attr, const size_t fillLimit = 0);
|
||||
OutputCellIterator(const CHAR_INFO& charInfo, const size_t fillLimit = 0);
|
||||
OutputCellIterator(const wchar_t& wch, const size_t fillLimit = 0) noexcept;
|
||||
OutputCellIterator(const TextAttribute& attr, const size_t fillLimit = 0) noexcept;
|
||||
OutputCellIterator(const wchar_t& wch, const TextAttribute& attr, const size_t fillLimit = 0) noexcept;
|
||||
OutputCellIterator(const CHAR_INFO& charInfo, const size_t fillLimit = 0) noexcept;
|
||||
OutputCellIterator(const std::wstring_view utf16Text);
|
||||
OutputCellIterator(const std::wstring_view utf16Text, const TextAttribute attribute);
|
||||
OutputCellIterator(const std::basic_string_view<WORD> legacyAttributes, const bool unused);
|
||||
OutputCellIterator(const std::basic_string_view<CHAR_INFO> charInfos);
|
||||
OutputCellIterator(const std::basic_string_view<WORD> legacyAttributes, const bool unused) noexcept;
|
||||
OutputCellIterator(const std::basic_string_view<CHAR_INFO> charInfos) noexcept;
|
||||
OutputCellIterator(const std::basic_string_view<OutputCell> cells);
|
||||
~OutputCellIterator() = default;
|
||||
|
||||
|
@ -55,8 +55,8 @@ public:
|
|||
OutputCellIterator& operator++();
|
||||
OutputCellIterator operator++(int);
|
||||
|
||||
const OutputCellView& operator*() const;
|
||||
const OutputCellView* operator->() const;
|
||||
const OutputCellView& operator*() const noexcept;
|
||||
const OutputCellView* operator->() const noexcept;
|
||||
|
||||
private:
|
||||
enum class Mode
|
||||
|
@ -97,7 +97,7 @@ private:
|
|||
|
||||
TextAttribute _attr;
|
||||
|
||||
bool _TryMoveTrailing();
|
||||
bool _TryMoveTrailing() noexcept;
|
||||
|
||||
static OutputCellView s_GenerateView(const std::wstring_view view);
|
||||
|
||||
|
@ -108,11 +108,11 @@ private:
|
|||
const TextAttribute attr,
|
||||
const TextAttributeBehavior behavior);
|
||||
|
||||
static OutputCellView s_GenerateView(const wchar_t& wch);
|
||||
static OutputCellView s_GenerateViewLegacyAttr(const WORD& legacyAttr);
|
||||
static OutputCellView s_GenerateView(const TextAttribute& attr);
|
||||
static OutputCellView s_GenerateView(const wchar_t& wch, const TextAttribute& attr);
|
||||
static OutputCellView s_GenerateView(const CHAR_INFO& charInfo);
|
||||
static OutputCellView s_GenerateView(const wchar_t& wch) noexcept;
|
||||
static OutputCellView s_GenerateViewLegacyAttr(const WORD& legacyAttr) noexcept;
|
||||
static OutputCellView s_GenerateView(const TextAttribute& attr) noexcept;
|
||||
static OutputCellView s_GenerateView(const wchar_t& wch, const TextAttribute& attr) noexcept;
|
||||
static OutputCellView s_GenerateView(const CHAR_INFO& charInfo) noexcept;
|
||||
|
||||
static OutputCellView s_GenerateView(const OutputCell& cell);
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
OutputCellView::OutputCellView(const std::wstring_view view,
|
||||
const DbcsAttribute dbcsAttr,
|
||||
const TextAttribute textAttr,
|
||||
const TextAttributeBehavior behavior) :
|
||||
const TextAttributeBehavior behavior) noexcept:
|
||||
_view(view),
|
||||
_dbcsAttr(dbcsAttr),
|
||||
_textAttr(textAttr),
|
||||
|
|
|
@ -28,7 +28,7 @@ public:
|
|||
OutputCellView(const std::wstring_view view,
|
||||
const DbcsAttribute dbcsAttr,
|
||||
const TextAttribute textAttr,
|
||||
const TextAttributeBehavior behavior);
|
||||
const TextAttributeBehavior behavior) noexcept;
|
||||
|
||||
const std::wstring_view& Chars() const noexcept;
|
||||
size_t Columns() const noexcept;
|
||||
|
|
|
@ -30,12 +30,12 @@ size_t ROW::size() const noexcept
|
|||
return _rowWidth;
|
||||
}
|
||||
|
||||
const CharRow& ROW::GetCharRow() const
|
||||
const CharRow& ROW::GetCharRow() const noexcept
|
||||
{
|
||||
return _charRow;
|
||||
}
|
||||
|
||||
CharRow& ROW::GetCharRow()
|
||||
CharRow& ROW::GetCharRow() noexcept
|
||||
{
|
||||
return const_cast<CharRow&>(static_cast<const ROW* const>(this)->GetCharRow());
|
||||
}
|
||||
|
@ -132,12 +132,12 @@ RowCellIterator ROW::AsCellIter(const size_t startIndex, const size_t count) con
|
|||
return RowCellIterator(*this, startIndex, count);
|
||||
}
|
||||
|
||||
UnicodeStorage& ROW::GetUnicodeStorage()
|
||||
UnicodeStorage& ROW::GetUnicodeStorage() noexcept
|
||||
{
|
||||
return _pParent->GetUnicodeStorage();
|
||||
}
|
||||
|
||||
const UnicodeStorage& ROW::GetUnicodeStorage() const
|
||||
const UnicodeStorage& ROW::GetUnicodeStorage() const noexcept
|
||||
{
|
||||
return _pParent->GetUnicodeStorage();
|
||||
}
|
||||
|
|
|
@ -36,8 +36,8 @@ public:
|
|||
|
||||
size_t size() const noexcept;
|
||||
|
||||
const CharRow& GetCharRow() const;
|
||||
CharRow& GetCharRow();
|
||||
const CharRow& GetCharRow() const noexcept;
|
||||
CharRow& GetCharRow() noexcept;
|
||||
|
||||
const ATTR_ROW& GetAttrRow() const noexcept;
|
||||
ATTR_ROW& GetAttrRow() noexcept;
|
||||
|
@ -54,8 +54,8 @@ public:
|
|||
RowCellIterator AsCellIter(const size_t startIndex) const;
|
||||
RowCellIterator AsCellIter(const size_t startIndex, const size_t count) const;
|
||||
|
||||
UnicodeStorage& GetUnicodeStorage();
|
||||
const UnicodeStorage& GetUnicodeStorage() const;
|
||||
UnicodeStorage& GetUnicodeStorage() noexcept;
|
||||
const UnicodeStorage& GetUnicodeStorage() const noexcept;
|
||||
|
||||
OutputCellIterator WriteCells(OutputCellIterator it, const size_t index, const bool setWrap, std::optional<size_t> limitRight = std::nullopt);
|
||||
|
||||
|
|
|
@ -37,38 +37,38 @@ bool RowCellIterator::operator!=(const RowCellIterator& it) const noexcept
|
|||
return !(*this == it);
|
||||
}
|
||||
|
||||
RowCellIterator& RowCellIterator::operator+=(const ptrdiff_t& movement)
|
||||
RowCellIterator& RowCellIterator::operator+=(const ptrdiff_t& movement) noexcept
|
||||
{
|
||||
_pos += movement;
|
||||
|
||||
return (*this);
|
||||
}
|
||||
|
||||
RowCellIterator& RowCellIterator::operator++()
|
||||
RowCellIterator& RowCellIterator::operator++() noexcept
|
||||
{
|
||||
return this->operator+=(1);
|
||||
}
|
||||
|
||||
RowCellIterator RowCellIterator::operator++(int)
|
||||
RowCellIterator RowCellIterator::operator++(int) noexcept
|
||||
{
|
||||
auto temp(*this);
|
||||
operator++();
|
||||
return temp;
|
||||
}
|
||||
|
||||
RowCellIterator RowCellIterator::operator+(const ptrdiff_t& movement)
|
||||
RowCellIterator RowCellIterator::operator+(const ptrdiff_t& movement) noexcept
|
||||
{
|
||||
auto temp(*this);
|
||||
temp += movement;
|
||||
return temp;
|
||||
}
|
||||
|
||||
const OutputCellView& RowCellIterator::operator*() const
|
||||
const OutputCellView& RowCellIterator::operator*() const noexcept
|
||||
{
|
||||
return _view;
|
||||
}
|
||||
|
||||
const OutputCellView* RowCellIterator::operator->() const
|
||||
const OutputCellView* RowCellIterator::operator->() const noexcept
|
||||
{
|
||||
return &_view;
|
||||
}
|
||||
|
|
|
@ -38,13 +38,13 @@ public:
|
|||
bool operator==(const RowCellIterator& it) const noexcept;
|
||||
bool operator!=(const RowCellIterator& it) const noexcept;
|
||||
|
||||
RowCellIterator& operator+=(const ptrdiff_t& movement);
|
||||
RowCellIterator& operator++();
|
||||
RowCellIterator operator++(int);
|
||||
RowCellIterator operator+(const ptrdiff_t& movement);
|
||||
RowCellIterator& operator+=(const ptrdiff_t& movement) noexcept;
|
||||
RowCellIterator& operator++() noexcept;
|
||||
RowCellIterator operator++(int) noexcept;
|
||||
RowCellIterator operator+(const ptrdiff_t& movement) noexcept;
|
||||
|
||||
const OutputCellView& operator*() const;
|
||||
const OutputCellView* operator->() const;
|
||||
const OutputCellView& operator*() const noexcept;
|
||||
const OutputCellView* operator->() const noexcept;
|
||||
|
||||
private:
|
||||
const ROW& _row;
|
||||
|
|
|
@ -16,7 +16,7 @@ bool TextAttribute::IsLegacy() const noexcept
|
|||
// - color that should be displayed as the foreground color
|
||||
COLORREF TextAttribute::CalculateRgbForeground(std::basic_string_view<COLORREF> colorTable,
|
||||
COLORREF defaultFgColor,
|
||||
COLORREF defaultBgColor) const
|
||||
COLORREF defaultBgColor) const noexcept
|
||||
{
|
||||
return _IsReverseVideo() ? _GetRgbBackground(colorTable, defaultBgColor) : _GetRgbForeground(colorTable, defaultFgColor);
|
||||
}
|
||||
|
@ -29,7 +29,7 @@ COLORREF TextAttribute::CalculateRgbForeground(std::basic_string_view<COLORREF>
|
|||
// - color that should be displayed as the background color
|
||||
COLORREF TextAttribute::CalculateRgbBackground(std::basic_string_view<COLORREF> colorTable,
|
||||
COLORREF defaultFgColor,
|
||||
COLORREF defaultBgColor) const
|
||||
COLORREF defaultBgColor) const noexcept
|
||||
{
|
||||
return _IsReverseVideo() ? _GetRgbForeground(colorTable, defaultFgColor) : _GetRgbBackground(colorTable, defaultBgColor);
|
||||
}
|
||||
|
@ -42,7 +42,7 @@ COLORREF TextAttribute::CalculateRgbBackground(std::basic_string_view<COLORREF>
|
|||
// Return Value:
|
||||
// - color that is stored as the foreground color
|
||||
COLORREF TextAttribute::_GetRgbForeground(std::basic_string_view<COLORREF> colorTable,
|
||||
COLORREF defaultColor) const
|
||||
COLORREF defaultColor) const noexcept
|
||||
{
|
||||
return _foreground.GetColor(colorTable, defaultColor, _isBold);
|
||||
}
|
||||
|
@ -55,7 +55,7 @@ COLORREF TextAttribute::_GetRgbForeground(std::basic_string_view<COLORREF> color
|
|||
// Return Value:
|
||||
// - color that is stored as the background color
|
||||
COLORREF TextAttribute::_GetRgbBackground(std::basic_string_view<COLORREF> colorTable,
|
||||
COLORREF defaultColor) const
|
||||
COLORREF defaultColor) const noexcept
|
||||
{
|
||||
return _background.GetColor(colorTable, defaultColor, false);
|
||||
}
|
||||
|
@ -75,12 +75,12 @@ WORD TextAttribute::GetMetaAttributes() const noexcept
|
|||
return wMeta;
|
||||
}
|
||||
|
||||
void TextAttribute::SetForeground(const COLORREF rgbForeground)
|
||||
void TextAttribute::SetForeground(const COLORREF rgbForeground) noexcept
|
||||
{
|
||||
_foreground = TextColor(rgbForeground);
|
||||
}
|
||||
|
||||
void TextAttribute::SetBackground(const COLORREF rgbBackground)
|
||||
void TextAttribute::SetBackground(const COLORREF rgbBackground) noexcept
|
||||
{
|
||||
_background = TextColor(rgbBackground);
|
||||
}
|
||||
|
@ -98,7 +98,7 @@ void TextAttribute::SetFromLegacy(const WORD wLegacy) noexcept
|
|||
void TextAttribute::SetLegacyAttributes(const WORD attrs,
|
||||
const bool setForeground,
|
||||
const bool setBackground,
|
||||
const bool setMeta)
|
||||
const bool setMeta) noexcept
|
||||
{
|
||||
if (setForeground)
|
||||
{
|
||||
|
@ -143,7 +143,7 @@ void TextAttribute::SetIndexedAttributes(const std::optional<const BYTE> foregro
|
|||
}
|
||||
}
|
||||
|
||||
void TextAttribute::SetColor(const COLORREF rgbColor, const bool fIsForeground)
|
||||
void TextAttribute::SetColor(const COLORREF rgbColor, const bool fIsForeground) noexcept
|
||||
{
|
||||
if (fIsForeground)
|
||||
{
|
||||
|
|
|
@ -90,10 +90,10 @@ public:
|
|||
|
||||
COLORREF CalculateRgbForeground(std::basic_string_view<COLORREF> colorTable,
|
||||
COLORREF defaultFgColor,
|
||||
COLORREF defaultBgColor) const;
|
||||
COLORREF defaultBgColor) const noexcept;
|
||||
COLORREF CalculateRgbBackground(std::basic_string_view<COLORREF> colorTable,
|
||||
COLORREF defaultFgColor,
|
||||
COLORREF defaultBgColor) const;
|
||||
COLORREF defaultBgColor) const noexcept;
|
||||
|
||||
bool IsLeadingByte() const noexcept;
|
||||
bool IsTrailingByte() const noexcept;
|
||||
|
@ -110,7 +110,7 @@ public:
|
|||
void SetLegacyAttributes(const WORD attrs,
|
||||
const bool setForeground,
|
||||
const bool setBackground,
|
||||
const bool setMeta);
|
||||
const bool setMeta) noexcept;
|
||||
|
||||
void SetIndexedAttributes(const std::optional<const BYTE> foreground,
|
||||
const std::optional<const BYTE> background) noexcept;
|
||||
|
@ -133,9 +133,9 @@ public:
|
|||
bool IsLegacy() const noexcept;
|
||||
bool IsBold() const noexcept;
|
||||
|
||||
void SetForeground(const COLORREF rgbForeground);
|
||||
void SetBackground(const COLORREF rgbBackground);
|
||||
void SetColor(const COLORREF rgbColor, const bool fIsForeground);
|
||||
void SetForeground(const COLORREF rgbForeground) noexcept;
|
||||
void SetBackground(const COLORREF rgbBackground) noexcept;
|
||||
void SetColor(const COLORREF rgbColor, const bool fIsForeground) noexcept;
|
||||
|
||||
void SetDefaultForeground() noexcept;
|
||||
void SetDefaultBackground() noexcept;
|
||||
|
@ -150,9 +150,9 @@ public:
|
|||
|
||||
private:
|
||||
COLORREF _GetRgbForeground(std::basic_string_view<COLORREF> colorTable,
|
||||
COLORREF defaultColor) const;
|
||||
COLORREF defaultColor) const noexcept;
|
||||
COLORREF _GetRgbBackground(std::basic_string_view<COLORREF> colorTable,
|
||||
COLORREF defaultColor) const;
|
||||
COLORREF defaultColor) const noexcept;
|
||||
bool _IsReverseVideo() const noexcept;
|
||||
void _SetBoldness(const bool isBold) noexcept;
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
// - rgbColor: the COLORREF containing the color information for this TextColor
|
||||
// Return Value:
|
||||
// - <none>
|
||||
void TextColor::SetColor(const COLORREF rgbColor)
|
||||
void TextColor::SetColor(const COLORREF rgbColor) noexcept
|
||||
{
|
||||
_meta = ColorType::IsRgb;
|
||||
_red = GetRValue(rgbColor);
|
||||
|
@ -25,7 +25,7 @@ void TextColor::SetColor(const COLORREF rgbColor)
|
|||
// - index: the index of the colortable we should use for this TextColor.
|
||||
// Return Value:
|
||||
// - <none>
|
||||
void TextColor::SetIndex(const BYTE index)
|
||||
void TextColor::SetIndex(const BYTE index) noexcept
|
||||
{
|
||||
_meta = ColorType::IsIndex;
|
||||
_index = index;
|
||||
|
@ -38,7 +38,7 @@ void TextColor::SetIndex(const BYTE index)
|
|||
// - <none>
|
||||
// Return Value:
|
||||
// - <none>
|
||||
void TextColor::SetDefault()
|
||||
void TextColor::SetDefault() noexcept
|
||||
{
|
||||
_meta = ColorType::IsDefault;
|
||||
}
|
||||
|
@ -63,7 +63,7 @@ void TextColor::SetDefault()
|
|||
// - a COLORREF containing the real value of this TextColor.
|
||||
COLORREF TextColor::GetColor(std::basic_string_view<COLORREF> colorTable,
|
||||
const COLORREF defaultColor,
|
||||
bool brighten) const
|
||||
bool brighten) const noexcept
|
||||
{
|
||||
if (IsDefault())
|
||||
{
|
||||
|
@ -119,7 +119,7 @@ COLORREF TextColor::GetColor(std::basic_string_view<COLORREF> colorTable,
|
|||
// - <none>
|
||||
// Return Value:
|
||||
// - a COLORREF containing our stored value
|
||||
COLORREF TextColor::_GetRGB() const
|
||||
COLORREF TextColor::_GetRGB() const noexcept
|
||||
{
|
||||
return RGB(_red, _green, _blue);
|
||||
}
|
||||
|
|
|
@ -91,13 +91,13 @@ public:
|
|||
return _meta == ColorType::IsRgb;
|
||||
}
|
||||
|
||||
void SetColor(const COLORREF rgbColor);
|
||||
void SetIndex(const BYTE index);
|
||||
void SetDefault();
|
||||
void SetColor(const COLORREF rgbColor) noexcept;
|
||||
void SetIndex(const BYTE index) noexcept;
|
||||
void SetDefault() noexcept;
|
||||
|
||||
COLORREF GetColor(std::basic_string_view<COLORREF> colorTable,
|
||||
const COLORREF defaultColor,
|
||||
const bool brighten) const;
|
||||
const bool brighten) const noexcept;
|
||||
|
||||
constexpr BYTE GetIndex() const noexcept
|
||||
{
|
||||
|
@ -113,7 +113,7 @@ private:
|
|||
BYTE _green;
|
||||
BYTE _blue;
|
||||
|
||||
COLORREF _GetRGB() const;
|
||||
COLORREF _GetRGB() const noexcept;
|
||||
|
||||
#ifdef UNIT_TESTING
|
||||
friend class TextBufferTests;
|
||||
|
|
|
@ -35,7 +35,7 @@ void UnicodeStorage::StoreGlyph(const key_type key, const mapped_type& glyph)
|
|||
// - erases key and its associated data from the storage
|
||||
// Arguments:
|
||||
// - key - the key to remove
|
||||
void UnicodeStorage::Erase(const key_type key) noexcept
|
||||
void UnicodeStorage::Erase(const key_type key)
|
||||
{
|
||||
_map.erase(key);
|
||||
}
|
||||
|
|
|
@ -53,7 +53,7 @@ public:
|
|||
|
||||
void StoreGlyph(const key_type key, const mapped_type& glyph);
|
||||
|
||||
void Erase(const key_type key) noexcept;
|
||||
void Erase(const key_type key);
|
||||
|
||||
void Remap(const std::map<SHORT, SHORT>& rowMap, const std::optional<SHORT> width);
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
// - Constructor to set default properties for Cursor
|
||||
// Arguments:
|
||||
// - ulSize - The height of the cursor within this buffer
|
||||
Cursor::Cursor(const ULONG ulSize, TextBuffer& parentBuffer) :
|
||||
Cursor::Cursor(const ULONG ulSize, TextBuffer& parentBuffer) noexcept:
|
||||
_parentBuffer{ parentBuffer },
|
||||
_cPosition{ 0 },
|
||||
_fHasMoved(false),
|
||||
|
@ -87,36 +87,36 @@ ULONG Cursor::GetSize() const noexcept
|
|||
return _ulSize;
|
||||
}
|
||||
|
||||
void Cursor::SetHasMoved(const bool fHasMoved)
|
||||
void Cursor::SetHasMoved(const bool fHasMoved) noexcept
|
||||
{
|
||||
_fHasMoved = fHasMoved;
|
||||
}
|
||||
|
||||
void Cursor::SetIsVisible(const bool fIsVisible)
|
||||
void Cursor::SetIsVisible(const bool fIsVisible) noexcept
|
||||
{
|
||||
_fIsVisible = fIsVisible;
|
||||
_RedrawCursor();
|
||||
}
|
||||
|
||||
void Cursor::SetIsOn(const bool fIsOn)
|
||||
void Cursor::SetIsOn(const bool fIsOn) noexcept
|
||||
{
|
||||
_fIsOn = fIsOn;
|
||||
_RedrawCursorAlways();
|
||||
}
|
||||
|
||||
void Cursor::SetBlinkingAllowed(const bool fBlinkingAllowed)
|
||||
void Cursor::SetBlinkingAllowed(const bool fBlinkingAllowed) noexcept
|
||||
{
|
||||
_fBlinkingAllowed = fBlinkingAllowed;
|
||||
_RedrawCursorAlways();
|
||||
}
|
||||
|
||||
void Cursor::SetIsDouble(const bool fIsDouble)
|
||||
void Cursor::SetIsDouble(const bool fIsDouble) noexcept
|
||||
{
|
||||
_fIsDouble = fIsDouble;
|
||||
_RedrawCursor();
|
||||
}
|
||||
|
||||
void Cursor::SetIsConversionArea(const bool fIsConversionArea)
|
||||
void Cursor::SetIsConversionArea(const bool fIsConversionArea) noexcept
|
||||
{
|
||||
// Functionally the same as "Hide cursor"
|
||||
// Never called with TRUE, it's only used in the creation of a
|
||||
|
@ -125,19 +125,19 @@ void Cursor::SetIsConversionArea(const bool fIsConversionArea)
|
|||
_RedrawCursorAlways();
|
||||
}
|
||||
|
||||
void Cursor::SetIsPopupShown(const bool fIsPopupShown)
|
||||
void Cursor::SetIsPopupShown(const bool fIsPopupShown) noexcept
|
||||
{
|
||||
// Functionally the same as "Hide cursor"
|
||||
_fIsPopupShown = fIsPopupShown;
|
||||
_RedrawCursorAlways();
|
||||
}
|
||||
|
||||
void Cursor::SetDelay(const bool fDelay)
|
||||
void Cursor::SetDelay(const bool fDelay) noexcept
|
||||
{
|
||||
_fDelay = fDelay;
|
||||
}
|
||||
|
||||
void Cursor::SetSize(const ULONG ulSize)
|
||||
void Cursor::SetSize(const ULONG ulSize) noexcept
|
||||
{
|
||||
_ulSize = ulSize;
|
||||
_RedrawCursor();
|
||||
|
@ -195,7 +195,7 @@ void Cursor::_RedrawCursorAlways() noexcept
|
|||
CATCH_LOG();
|
||||
}
|
||||
|
||||
void Cursor::SetPosition(const COORD cPosition)
|
||||
void Cursor::SetPosition(const COORD cPosition) noexcept
|
||||
{
|
||||
_RedrawCursor();
|
||||
_cPosition.X = cPosition.X;
|
||||
|
@ -204,7 +204,7 @@ void Cursor::SetPosition(const COORD cPosition)
|
|||
ResetDelayEOLWrap();
|
||||
}
|
||||
|
||||
void Cursor::SetXPosition(const int NewX)
|
||||
void Cursor::SetXPosition(const int NewX) noexcept
|
||||
{
|
||||
_RedrawCursor();
|
||||
_cPosition.X = gsl::narrow<SHORT>(NewX);
|
||||
|
@ -212,7 +212,7 @@ void Cursor::SetXPosition(const int NewX)
|
|||
ResetDelayEOLWrap();
|
||||
}
|
||||
|
||||
void Cursor::SetYPosition(const int NewY)
|
||||
void Cursor::SetYPosition(const int NewY) noexcept
|
||||
{
|
||||
_RedrawCursor();
|
||||
_cPosition.Y = gsl::narrow<SHORT>(NewY);
|
||||
|
@ -220,7 +220,7 @@ void Cursor::SetYPosition(const int NewY)
|
|||
ResetDelayEOLWrap();
|
||||
}
|
||||
|
||||
void Cursor::IncrementXPosition(const int DeltaX)
|
||||
void Cursor::IncrementXPosition(const int DeltaX) noexcept
|
||||
{
|
||||
_RedrawCursor();
|
||||
_cPosition.X += gsl::narrow<SHORT>(DeltaX);
|
||||
|
@ -228,7 +228,7 @@ void Cursor::IncrementXPosition(const int DeltaX)
|
|||
ResetDelayEOLWrap();
|
||||
}
|
||||
|
||||
void Cursor::IncrementYPosition(const int DeltaY)
|
||||
void Cursor::IncrementYPosition(const int DeltaY) noexcept
|
||||
{
|
||||
_RedrawCursor();
|
||||
_cPosition.Y += gsl::narrow<SHORT>(DeltaY);
|
||||
|
@ -236,7 +236,7 @@ void Cursor::IncrementYPosition(const int DeltaY)
|
|||
ResetDelayEOLWrap();
|
||||
}
|
||||
|
||||
void Cursor::DecrementXPosition(const int DeltaX)
|
||||
void Cursor::DecrementXPosition(const int DeltaX) noexcept
|
||||
{
|
||||
_RedrawCursor();
|
||||
_cPosition.X -= gsl::narrow<SHORT>(DeltaX);
|
||||
|
@ -244,7 +244,7 @@ void Cursor::DecrementXPosition(const int DeltaX)
|
|||
ResetDelayEOLWrap();
|
||||
}
|
||||
|
||||
void Cursor::DecrementYPosition(const int DeltaY)
|
||||
void Cursor::DecrementYPosition(const int DeltaY) noexcept
|
||||
{
|
||||
_RedrawCursor();
|
||||
_cPosition.Y -= gsl::narrow<SHORT>(DeltaY);
|
||||
|
@ -262,7 +262,7 @@ void Cursor::DecrementYPosition(const int DeltaY)
|
|||
// - OtherCursor - The cursor to copy properties from
|
||||
// Return Value:
|
||||
// - <none>
|
||||
void Cursor::CopyProperties(const Cursor& OtherCursor)
|
||||
void Cursor::CopyProperties(const Cursor& OtherCursor) noexcept
|
||||
{
|
||||
// We shouldn't copy the position as it will be already rearranged by the resize operation.
|
||||
//_cPosition = pOtherCursor->_cPosition;
|
||||
|
@ -288,34 +288,34 @@ void Cursor::CopyProperties(const Cursor& OtherCursor)
|
|||
_color = OtherCursor._color;
|
||||
}
|
||||
|
||||
void Cursor::DelayEOLWrap(const COORD coordDelayedAt)
|
||||
void Cursor::DelayEOLWrap(const COORD coordDelayedAt) noexcept
|
||||
{
|
||||
_coordDelayedAt = coordDelayedAt;
|
||||
_fDelayedEolWrap = true;
|
||||
}
|
||||
|
||||
void Cursor::ResetDelayEOLWrap()
|
||||
void Cursor::ResetDelayEOLWrap() noexcept
|
||||
{
|
||||
_coordDelayedAt = { 0 };
|
||||
_fDelayedEolWrap = false;
|
||||
}
|
||||
|
||||
COORD Cursor::GetDelayedAtPosition() const
|
||||
COORD Cursor::GetDelayedAtPosition() const noexcept
|
||||
{
|
||||
return _coordDelayedAt;
|
||||
}
|
||||
|
||||
bool Cursor::IsDelayedEOLWrap() const
|
||||
bool Cursor::IsDelayedEOLWrap() const noexcept
|
||||
{
|
||||
return _fDelayedEolWrap;
|
||||
}
|
||||
|
||||
void Cursor::StartDeferDrawing()
|
||||
void Cursor::StartDeferDrawing() noexcept
|
||||
{
|
||||
_fDeferCursorRedraw = true;
|
||||
}
|
||||
|
||||
void Cursor::EndDeferDrawing()
|
||||
void Cursor::EndDeferDrawing() noexcept
|
||||
{
|
||||
if (_fHaveDeferredCursorRedraw)
|
||||
{
|
||||
|
@ -325,27 +325,27 @@ void Cursor::EndDeferDrawing()
|
|||
_fDeferCursorRedraw = FALSE;
|
||||
}
|
||||
|
||||
const CursorType Cursor::GetType() const
|
||||
const CursorType Cursor::GetType() const noexcept
|
||||
{
|
||||
return _cursorType;
|
||||
}
|
||||
|
||||
const bool Cursor::IsUsingColor() const
|
||||
const bool Cursor::IsUsingColor() const noexcept
|
||||
{
|
||||
return GetColor() != INVALID_COLOR;
|
||||
}
|
||||
|
||||
const COLORREF Cursor::GetColor() const
|
||||
const COLORREF Cursor::GetColor() const noexcept
|
||||
{
|
||||
return _color;
|
||||
}
|
||||
|
||||
void Cursor::SetColor(const unsigned int color)
|
||||
void Cursor::SetColor(const unsigned int color) noexcept
|
||||
{
|
||||
_color = gsl::narrow_cast<COLORREF>(color);
|
||||
}
|
||||
|
||||
void Cursor::SetType(const CursorType type)
|
||||
void Cursor::SetType(const CursorType type) noexcept
|
||||
{
|
||||
_cursorType = type;
|
||||
}
|
||||
|
|
|
@ -28,7 +28,7 @@ class Cursor final
|
|||
public:
|
||||
static const unsigned int s_InvertCursorColor = INVALID_COLOR;
|
||||
|
||||
Cursor(const ULONG ulSize, TextBuffer& parentBuffer);
|
||||
Cursor(const ULONG ulSize, TextBuffer& parentBuffer) noexcept;
|
||||
|
||||
~Cursor();
|
||||
|
||||
|
@ -50,41 +50,41 @@ public:
|
|||
ULONG GetSize() const noexcept;
|
||||
COORD GetPosition() const noexcept;
|
||||
|
||||
const CursorType GetType() const;
|
||||
const bool IsUsingColor() const;
|
||||
const COLORREF GetColor() const;
|
||||
const CursorType GetType() const noexcept;
|
||||
const bool IsUsingColor() const noexcept;
|
||||
const COLORREF GetColor() const noexcept;
|
||||
|
||||
void StartDeferDrawing();
|
||||
void EndDeferDrawing();
|
||||
void StartDeferDrawing() noexcept;
|
||||
void EndDeferDrawing() noexcept;
|
||||
|
||||
void SetHasMoved(const bool fHasMoved);
|
||||
void SetIsVisible(const bool fIsVisible);
|
||||
void SetIsOn(const bool fIsOn);
|
||||
void SetBlinkingAllowed(const bool fIsOn);
|
||||
void SetIsDouble(const bool fIsDouble);
|
||||
void SetIsConversionArea(const bool fIsConversionArea);
|
||||
void SetIsPopupShown(const bool fIsPopupShown);
|
||||
void SetDelay(const bool fDelay);
|
||||
void SetSize(const ULONG ulSize);
|
||||
void SetHasMoved(const bool fHasMoved) noexcept;
|
||||
void SetIsVisible(const bool fIsVisible) noexcept;
|
||||
void SetIsOn(const bool fIsOn) noexcept;
|
||||
void SetBlinkingAllowed(const bool fIsOn) noexcept;
|
||||
void SetIsDouble(const bool fIsDouble) noexcept;
|
||||
void SetIsConversionArea(const bool fIsConversionArea) noexcept;
|
||||
void SetIsPopupShown(const bool fIsPopupShown) noexcept;
|
||||
void SetDelay(const bool fDelay) noexcept;
|
||||
void SetSize(const ULONG ulSize) noexcept;
|
||||
void SetStyle(const ULONG ulSize, const COLORREF color, const CursorType type) noexcept;
|
||||
|
||||
void SetPosition(const COORD cPosition);
|
||||
void SetXPosition(const int NewX);
|
||||
void SetYPosition(const int NewY);
|
||||
void IncrementXPosition(const int DeltaX);
|
||||
void IncrementYPosition(const int DeltaY);
|
||||
void DecrementXPosition(const int DeltaX);
|
||||
void DecrementYPosition(const int DeltaY);
|
||||
void SetPosition(const COORD cPosition) noexcept;
|
||||
void SetXPosition(const int NewX) noexcept;
|
||||
void SetYPosition(const int NewY) noexcept;
|
||||
void IncrementXPosition(const int DeltaX) noexcept;
|
||||
void IncrementYPosition(const int DeltaY) noexcept;
|
||||
void DecrementXPosition(const int DeltaX) noexcept;
|
||||
void DecrementYPosition(const int DeltaY) noexcept;
|
||||
|
||||
void CopyProperties(const Cursor& OtherCursor);
|
||||
void CopyProperties(const Cursor& OtherCursor) noexcept;
|
||||
|
||||
void DelayEOLWrap(const COORD coordDelayedAt);
|
||||
void ResetDelayEOLWrap();
|
||||
COORD GetDelayedAtPosition() const;
|
||||
bool IsDelayedEOLWrap() const;
|
||||
void DelayEOLWrap(const COORD coordDelayedAt) noexcept;
|
||||
void ResetDelayEOLWrap() noexcept;
|
||||
COORD GetDelayedAtPosition() const noexcept;
|
||||
bool IsDelayedEOLWrap() const noexcept;
|
||||
|
||||
void SetColor(const unsigned int color);
|
||||
void SetType(const CursorType type);
|
||||
void SetColor(const unsigned int color) noexcept;
|
||||
void SetType(const CursorType type) noexcept;
|
||||
|
||||
private:
|
||||
TextBuffer& _parentBuffer;
|
||||
|
|
|
@ -49,7 +49,7 @@ TextBuffer::TextBuffer(const COORD screenBufferSize,
|
|||
// - OtherBuffer - The text buffer to copy properties from
|
||||
// Return Value:
|
||||
// - <none>
|
||||
void TextBuffer::CopyProperties(const TextBuffer& OtherBuffer)
|
||||
void TextBuffer::CopyProperties(const TextBuffer& OtherBuffer) noexcept
|
||||
{
|
||||
GetCursor().CopyProperties(OtherBuffer.GetCursor());
|
||||
}
|
||||
|
@ -60,7 +60,7 @@ void TextBuffer::CopyProperties(const TextBuffer& OtherBuffer)
|
|||
// - <none>
|
||||
// Return Value:
|
||||
// - Total number of rows in the buffer
|
||||
UINT TextBuffer::TotalRowCount() const
|
||||
UINT TextBuffer::TotalRowCount() const noexcept
|
||||
{
|
||||
return gsl::narrow<UINT>(_storage.size());
|
||||
}
|
||||
|
@ -640,7 +640,7 @@ COORD TextBuffer::_GetPreviousFromCursor() const
|
|||
return coordPosition;
|
||||
}
|
||||
|
||||
const SHORT TextBuffer::GetFirstRowIndex() const
|
||||
const SHORT TextBuffer::GetFirstRowIndex() const noexcept
|
||||
{
|
||||
return _firstRow;
|
||||
}
|
||||
|
@ -649,7 +649,7 @@ const Viewport TextBuffer::GetSize() const
|
|||
return Viewport::FromDimensions({ 0, 0 }, { gsl::narrow<SHORT>(_storage.at(0).size()), gsl::narrow<SHORT>(_storage.size()) });
|
||||
}
|
||||
|
||||
void TextBuffer::_SetFirstRowIndex(const SHORT FirstRowIndex)
|
||||
void TextBuffer::_SetFirstRowIndex(const SHORT FirstRowIndex) noexcept
|
||||
{
|
||||
_firstRow = FirstRowIndex;
|
||||
}
|
||||
|
@ -755,12 +755,12 @@ void TextBuffer::ScrollRows(const SHORT firstRow, const SHORT size, const SHORT
|
|||
_RefreshRowIDs(std::nullopt);
|
||||
}
|
||||
|
||||
Cursor& TextBuffer::GetCursor()
|
||||
Cursor& TextBuffer::GetCursor() noexcept
|
||||
{
|
||||
return _cursor;
|
||||
}
|
||||
|
||||
const Cursor& TextBuffer::GetCursor() const
|
||||
const Cursor& TextBuffer::GetCursor() const noexcept
|
||||
{
|
||||
return _cursor;
|
||||
}
|
||||
|
@ -795,7 +795,7 @@ void TextBuffer::Reset()
|
|||
// - newSize - new size of screen.
|
||||
// Return Value:
|
||||
// - Success if successful. Invalid parameter if screen buffer size is unexpected. No memory if allocation failed.
|
||||
[[nodiscard]] NTSTATUS TextBuffer::ResizeTraditional(const COORD newSize) noexcept
|
||||
[[nodiscard]] NTSTATUS TextBuffer::ResizeTraditional(const COORD newSize)
|
||||
{
|
||||
RETURN_HR_IF(E_INVALIDARG, newSize.X < 0 || newSize.Y < 0);
|
||||
|
||||
|
@ -843,12 +843,12 @@ void TextBuffer::Reset()
|
|||
return S_OK;
|
||||
}
|
||||
|
||||
const UnicodeStorage& TextBuffer::GetUnicodeStorage() const
|
||||
const UnicodeStorage& TextBuffer::GetUnicodeStorage() const noexcept
|
||||
{
|
||||
return _unicodeStorage;
|
||||
}
|
||||
|
||||
UnicodeStorage& TextBuffer::GetUnicodeStorage()
|
||||
UnicodeStorage& TextBuffer::GetUnicodeStorage() noexcept
|
||||
{
|
||||
return _unicodeStorage;
|
||||
}
|
||||
|
@ -932,7 +932,7 @@ ROW& TextBuffer::_GetPrevRowNoWrap(const ROW& Row)
|
|||
// - <none>
|
||||
// Return Value:
|
||||
// - This buffer's current render target.
|
||||
Microsoft::Console::Render::IRenderTarget& TextBuffer::GetRenderTarget()
|
||||
Microsoft::Console::Render::IRenderTarget& TextBuffer::GetRenderTarget() noexcept
|
||||
{
|
||||
return _renderTarget;
|
||||
}
|
||||
|
|
|
@ -72,7 +72,7 @@ public:
|
|||
~TextBuffer() = default;
|
||||
|
||||
// Used for duplicating properties to another text buffer
|
||||
void CopyProperties(const TextBuffer& OtherBuffer);
|
||||
void CopyProperties(const TextBuffer& OtherBuffer) noexcept;
|
||||
|
||||
// row manipulation
|
||||
const ROW& GetRowByOffset(const size_t index) const;
|
||||
|
@ -107,16 +107,16 @@ public:
|
|||
COORD GetLastNonSpaceCharacter() const;
|
||||
COORD GetLastNonSpaceCharacter(const Microsoft::Console::Types::Viewport viewport) const;
|
||||
|
||||
Cursor& GetCursor();
|
||||
const Cursor& GetCursor() const;
|
||||
Cursor& GetCursor() noexcept;
|
||||
const Cursor& GetCursor() const noexcept;
|
||||
|
||||
const SHORT GetFirstRowIndex() const;
|
||||
const SHORT GetFirstRowIndex() const noexcept;
|
||||
|
||||
const Microsoft::Console::Types::Viewport GetSize() const;
|
||||
|
||||
void ScrollRows(const SHORT firstRow, const SHORT size, const SHORT delta);
|
||||
|
||||
UINT TotalRowCount() const;
|
||||
UINT TotalRowCount() const noexcept;
|
||||
|
||||
[[nodiscard]] TextAttribute GetCurrentAttributes() const noexcept;
|
||||
|
||||
|
@ -124,12 +124,12 @@ public:
|
|||
|
||||
void Reset();
|
||||
|
||||
[[nodiscard]] HRESULT ResizeTraditional(const COORD newSize) noexcept;
|
||||
[[nodiscard]] HRESULT ResizeTraditional(const COORD newSize);
|
||||
|
||||
const UnicodeStorage& GetUnicodeStorage() const;
|
||||
UnicodeStorage& GetUnicodeStorage();
|
||||
const UnicodeStorage& GetUnicodeStorage() const noexcept;
|
||||
UnicodeStorage& GetUnicodeStorage() noexcept;
|
||||
|
||||
Microsoft::Console::Render::IRenderTarget& GetRenderTarget();
|
||||
Microsoft::Console::Render::IRenderTarget& GetRenderTarget() noexcept;
|
||||
|
||||
class TextAndColor
|
||||
{
|
||||
|
@ -165,7 +165,7 @@ private:
|
|||
|
||||
Microsoft::Console::Render::IRenderTarget& _renderTarget;
|
||||
|
||||
void _SetFirstRowIndex(const SHORT FirstRowIndex);
|
||||
void _SetFirstRowIndex(const SHORT FirstRowIndex) noexcept;
|
||||
|
||||
COORD _GetPreviousFromCursor() const;
|
||||
|
||||
|
|
|
@ -65,7 +65,7 @@ TextBufferCellIterator::operator bool() const noexcept
|
|||
// - it - The other iterator to compare to this one.
|
||||
// Return Value:
|
||||
// - True if it's the same text buffer and same cell position. False otherwise.
|
||||
bool TextBufferCellIterator::operator==(const TextBufferCellIterator& it) const noexcept
|
||||
bool TextBufferCellIterator::operator==(const TextBufferCellIterator& it) const
|
||||
{
|
||||
return _pos == it._pos &&
|
||||
&_buffer == &it._buffer &&
|
||||
|
@ -81,7 +81,7 @@ bool TextBufferCellIterator::operator==(const TextBufferCellIterator& it) const
|
|||
// - it - The other iterator to compare to this one.
|
||||
// Return Value:
|
||||
// - True if it's the same text buffer and different cell position or if they're different buffers. False otherwise.
|
||||
bool TextBufferCellIterator::operator!=(const TextBufferCellIterator& it) const noexcept
|
||||
bool TextBufferCellIterator::operator!=(const TextBufferCellIterator& it) const
|
||||
{
|
||||
return !(*this == it);
|
||||
}
|
||||
|
|
|
@ -32,8 +32,8 @@ public:
|
|||
|
||||
operator bool() const noexcept;
|
||||
|
||||
bool operator==(const TextBufferCellIterator& it) const noexcept;
|
||||
bool operator!=(const TextBufferCellIterator& it) const noexcept;
|
||||
bool operator==(const TextBufferCellIterator& it) const;
|
||||
bool operator!=(const TextBufferCellIterator& it) const;
|
||||
|
||||
TextBufferCellIterator& operator+=(const ptrdiff_t& movement);
|
||||
TextBufferCellIterator& operator-=(const ptrdiff_t& movement);
|
||||
|
|
|
@ -16,7 +16,7 @@ using namespace Microsoft::Console::Types;
|
|||
// - Narrows the view of a cell iterator into a text only iterator.
|
||||
// Arguments:
|
||||
// - A cell iterator
|
||||
TextBufferTextIterator::TextBufferTextIterator(const TextBufferCellIterator& cellIt) :
|
||||
TextBufferTextIterator::TextBufferTextIterator(const TextBufferCellIterator& cellIt) noexcept:
|
||||
TextBufferCellIterator(cellIt)
|
||||
{
|
||||
}
|
||||
|
@ -25,7 +25,7 @@ TextBufferTextIterator::TextBufferTextIterator(const TextBufferCellIterator& cel
|
|||
// - Returns the text information from the text buffer position addressed by this iterator.
|
||||
// Return Value:
|
||||
// - Read only UTF-16 text data
|
||||
const std::wstring_view TextBufferTextIterator::operator*() const
|
||||
const std::wstring_view TextBufferTextIterator::operator*() const noexcept
|
||||
{
|
||||
return _view.Chars();
|
||||
}
|
||||
|
@ -34,7 +34,7 @@ const std::wstring_view TextBufferTextIterator::operator*() const
|
|||
// - Returns the text information from the text buffer position addressed by this iterator.
|
||||
// Return Value:
|
||||
// - Read only UTF-16 text data
|
||||
const std::wstring_view* TextBufferTextIterator::operator->() const
|
||||
const std::wstring_view* TextBufferTextIterator::operator->() const noexcept
|
||||
{
|
||||
return &_view.Chars();
|
||||
}
|
||||
|
|
|
@ -22,10 +22,10 @@ class SCREEN_INFORMATION;
|
|||
class TextBufferTextIterator final : public TextBufferCellIterator
|
||||
{
|
||||
public:
|
||||
TextBufferTextIterator(const TextBufferCellIterator& cellIter);
|
||||
TextBufferTextIterator(const TextBufferCellIterator& cellIter) noexcept;
|
||||
|
||||
const std::wstring_view operator*() const;
|
||||
const std::wstring_view* operator->() const;
|
||||
const std::wstring_view operator*() const noexcept;
|
||||
const std::wstring_view* operator->() const noexcept;
|
||||
|
||||
protected:
|
||||
#if UNIT_TESTING
|
||||
|
|
|
@ -88,7 +88,7 @@ CustomTextLayout::CustomTextLayout(IDWriteFactory1* const factory,
|
|||
[[nodiscard]] HRESULT STDMETHODCALLTYPE CustomTextLayout::Draw(_In_opt_ void* clientDrawingContext,
|
||||
_In_ IDWriteTextRenderer* renderer,
|
||||
FLOAT originX,
|
||||
FLOAT originY)
|
||||
FLOAT originY) noexcept
|
||||
{
|
||||
RETURN_IF_FAILED(_AnalyzeRuns());
|
||||
RETURN_IF_FAILED(_ShapeGlyphRuns());
|
||||
|
@ -585,7 +585,7 @@ CustomTextLayout::CustomTextLayout(IDWriteFactory1* const factory,
|
|||
// - S_OK or appropriate STL/GSL failure code.
|
||||
[[nodiscard]] HRESULT STDMETHODCALLTYPE CustomTextLayout::GetTextBeforePosition(UINT32 textPosition,
|
||||
_Outptr_result_buffer_(*textLength) WCHAR const** textString,
|
||||
_Out_ UINT32* textLength)
|
||||
_Out_ UINT32* textLength) noexcept
|
||||
{
|
||||
*textString = nullptr;
|
||||
*textLength = 0;
|
||||
|
@ -606,7 +606,7 @@ CustomTextLayout::CustomTextLayout(IDWriteFactory1* const factory,
|
|||
// - <none>
|
||||
// Return Value:
|
||||
// - The reading direction held for this layout from construction
|
||||
[[nodiscard]] DWRITE_READING_DIRECTION STDMETHODCALLTYPE CustomTextLayout::GetParagraphReadingDirection()
|
||||
[[nodiscard]] DWRITE_READING_DIRECTION STDMETHODCALLTYPE CustomTextLayout::GetParagraphReadingDirection() noexcept
|
||||
{
|
||||
return _readingDirection;
|
||||
}
|
||||
|
@ -622,7 +622,7 @@ CustomTextLayout::CustomTextLayout(IDWriteFactory1* const factory,
|
|||
// - S_OK or appropriate STL/GSL failure code.
|
||||
[[nodiscard]] HRESULT STDMETHODCALLTYPE CustomTextLayout::GetLocaleName(UINT32 textPosition,
|
||||
_Out_ UINT32* textLength,
|
||||
_Outptr_result_z_ WCHAR const** localeName)
|
||||
_Outptr_result_z_ WCHAR const** localeName) noexcept
|
||||
{
|
||||
*localeName = _localeName.data();
|
||||
*textLength = gsl::narrow<UINT32>(_text.size()) - textPosition;
|
||||
|
@ -641,7 +641,7 @@ CustomTextLayout::CustomTextLayout(IDWriteFactory1* const factory,
|
|||
// - S_OK or appropriate STL/GSL failure code.
|
||||
[[nodiscard]] HRESULT STDMETHODCALLTYPE CustomTextLayout::GetNumberSubstitution(UINT32 textPosition,
|
||||
_Out_ UINT32* textLength,
|
||||
_COM_Outptr_ IDWriteNumberSubstitution** numberSubstitution)
|
||||
_COM_Outptr_ IDWriteNumberSubstitution** numberSubstitution) noexcept
|
||||
{
|
||||
*numberSubstitution = nullptr;
|
||||
*textLength = gsl::narrow<UINT32>(_text.size()) - textPosition;
|
||||
|
|
|
@ -32,7 +32,7 @@ namespace Microsoft::Console::Render
|
|||
[[nodiscard]] HRESULT STDMETHODCALLTYPE Draw(_In_opt_ void* clientDrawingContext,
|
||||
_In_ IDWriteTextRenderer* renderer,
|
||||
FLOAT originX,
|
||||
FLOAT originY);
|
||||
FLOAT originY) noexcept;
|
||||
|
||||
// IDWriteTextAnalysisSource methods
|
||||
[[nodiscard]] HRESULT STDMETHODCALLTYPE GetTextAtPosition(UINT32 textPosition,
|
||||
|
@ -40,14 +40,14 @@ namespace Microsoft::Console::Render
|
|||
_Out_ UINT32* textLength) override;
|
||||
[[nodiscard]] HRESULT STDMETHODCALLTYPE GetTextBeforePosition(UINT32 textPosition,
|
||||
_Outptr_result_buffer_(*textLength) WCHAR const** textString,
|
||||
_Out_ UINT32* textLength) override;
|
||||
[[nodiscard]] DWRITE_READING_DIRECTION STDMETHODCALLTYPE GetParagraphReadingDirection() override;
|
||||
_Out_ UINT32* textLength) noexcept override;
|
||||
[[nodiscard]] DWRITE_READING_DIRECTION STDMETHODCALLTYPE GetParagraphReadingDirection() noexcept override;
|
||||
[[nodiscard]] HRESULT STDMETHODCALLTYPE GetLocaleName(UINT32 textPosition,
|
||||
_Out_ UINT32* textLength,
|
||||
_Outptr_result_z_ WCHAR const** localeName) override;
|
||||
_Outptr_result_z_ WCHAR const** localeName) noexcept override;
|
||||
[[nodiscard]] HRESULT STDMETHODCALLTYPE GetNumberSubstitution(UINT32 textPosition,
|
||||
_Out_ UINT32* textLength,
|
||||
_COM_Outptr_ IDWriteNumberSubstitution** numberSubstitution) override;
|
||||
_COM_Outptr_ IDWriteNumberSubstitution** numberSubstitution) noexcept override;
|
||||
|
||||
// IDWriteTextAnalysisSink methods
|
||||
[[nodiscard]] HRESULT STDMETHODCALLTYPE SetScriptAnalysis(UINT32 textPosition,
|
||||
|
@ -93,12 +93,12 @@ namespace Microsoft::Console::Render
|
|||
::Microsoft::WRL::ComPtr<IDWriteFontFace1> fontFace;
|
||||
FLOAT fontScale;
|
||||
|
||||
inline bool ContainsTextPosition(UINT32 desiredTextPosition) const
|
||||
inline bool ContainsTextPosition(UINT32 desiredTextPosition) const noexcept
|
||||
{
|
||||
return desiredTextPosition >= textStart && desiredTextPosition < textStart + textLength;
|
||||
}
|
||||
|
||||
inline bool operator==(UINT32 desiredTextPosition) const
|
||||
inline bool operator==(UINT32 desiredTextPosition) const noexcept
|
||||
{
|
||||
// Search by text position using std::find
|
||||
return ContainsTextPosition(desiredTextPosition);
|
||||
|
|
|
@ -21,7 +21,7 @@ using namespace Microsoft::Console::Render;
|
|||
// Return Value:
|
||||
// - S_OK
|
||||
[[nodiscard]] HRESULT CustomTextRenderer::IsPixelSnappingDisabled(void* /*clientDrawingContext*/,
|
||||
_Out_ BOOL* isDisabled)
|
||||
_Out_ BOOL* isDisabled) noexcept
|
||||
{
|
||||
*isDisabled = false;
|
||||
return S_OK;
|
||||
|
@ -38,7 +38,7 @@ using namespace Microsoft::Console::Render;
|
|||
// Return Value:
|
||||
// - S_OK
|
||||
[[nodiscard]] HRESULT CustomTextRenderer::GetPixelsPerDip(void* clientDrawingContext,
|
||||
_Out_ FLOAT* pixelsPerDip)
|
||||
_Out_ FLOAT* pixelsPerDip) noexcept
|
||||
{
|
||||
DrawingContext* drawingContext = static_cast<DrawingContext*>(clientDrawingContext);
|
||||
|
||||
|
@ -58,7 +58,7 @@ using namespace Microsoft::Console::Render;
|
|||
// Return Value:
|
||||
// - S_OK
|
||||
[[nodiscard]] HRESULT CustomTextRenderer::GetCurrentTransform(void* clientDrawingContext,
|
||||
DWRITE_MATRIX* transform)
|
||||
DWRITE_MATRIX* transform) noexcept
|
||||
{
|
||||
DrawingContext* drawingContext = static_cast<DrawingContext*>(clientDrawingContext);
|
||||
|
||||
|
@ -88,7 +88,7 @@ using namespace Microsoft::Console::Render;
|
|||
FLOAT baselineOriginX,
|
||||
FLOAT baselineOriginY,
|
||||
_In_ const DWRITE_UNDERLINE* underline,
|
||||
IUnknown* clientDrawingEffect)
|
||||
IUnknown* clientDrawingEffect) noexcept
|
||||
{
|
||||
_FillRectangle(clientDrawingContext,
|
||||
clientDrawingEffect,
|
||||
|
@ -120,7 +120,7 @@ using namespace Microsoft::Console::Render;
|
|||
FLOAT baselineOriginX,
|
||||
FLOAT baselineOriginY,
|
||||
_In_ const DWRITE_STRIKETHROUGH* strikethrough,
|
||||
IUnknown* clientDrawingEffect)
|
||||
IUnknown* clientDrawingEffect) noexcept
|
||||
{
|
||||
_FillRectangle(clientDrawingContext,
|
||||
clientDrawingEffect,
|
||||
|
@ -153,7 +153,7 @@ void CustomTextRenderer::_FillRectangle(void* clientDrawingContext,
|
|||
float width,
|
||||
float thickness,
|
||||
DWRITE_READING_DIRECTION /*readingDirection*/,
|
||||
DWRITE_FLOW_DIRECTION /*flowDirection*/)
|
||||
DWRITE_FLOW_DIRECTION /*flowDirection*/) noexcept
|
||||
{
|
||||
DrawingContext* drawingContext = static_cast<DrawingContext*>(clientDrawingContext);
|
||||
|
||||
|
@ -189,7 +189,7 @@ void CustomTextRenderer::_FillRectangle(void* clientDrawingContext,
|
|||
IDWriteInlineObject* inlineObject,
|
||||
BOOL isSideways,
|
||||
BOOL isRightToLeft,
|
||||
IUnknown* clientDrawingEffect)
|
||||
IUnknown* clientDrawingEffect) noexcept
|
||||
{
|
||||
return inlineObject->Draw(clientDrawingContext,
|
||||
this,
|
||||
|
@ -433,7 +433,7 @@ void CustomTextRenderer::_FillRectangle(void* clientDrawingContext,
|
|||
D2D1_POINT_2F baselineOrigin,
|
||||
DWRITE_MEASURING_MODE /*measuringMode*/,
|
||||
_In_ const DWRITE_GLYPH_RUN* glyphRun,
|
||||
_In_ const DWRITE_GLYPH_RUN_DESCRIPTION* /*glyphRunDescription*/)
|
||||
_In_ const DWRITE_GLYPH_RUN_DESCRIPTION* /*glyphRunDescription*/) noexcept
|
||||
{
|
||||
// This is regular text but manually
|
||||
::Microsoft::WRL::ComPtr<ID2D1Factory> d2dFactory;
|
||||
|
@ -473,7 +473,7 @@ void CustomTextRenderer::_FillRectangle(void* clientDrawingContext,
|
|||
D2D1_POINT_2F baselineOrigin,
|
||||
DWRITE_MEASURING_MODE /*measuringMode*/,
|
||||
_In_ const DWRITE_GLYPH_RUN* glyphRun,
|
||||
_In_ const DWRITE_GLYPH_RUN_DESCRIPTION* /*glyphRunDescription*/)
|
||||
_In_ const DWRITE_GLYPH_RUN_DESCRIPTION* /*glyphRunDescription*/) noexcept
|
||||
{
|
||||
// This is glow text manually
|
||||
::Microsoft::WRL::ComPtr<ID2D1Factory> d2dFactory;
|
||||
|
|
|
@ -15,7 +15,7 @@ namespace Microsoft::Console::Render
|
|||
IDWriteFactory* dwriteFactory,
|
||||
const DWRITE_LINE_SPACING spacing,
|
||||
const D2D_SIZE_F cellSize,
|
||||
const D2D1_DRAW_TEXT_OPTIONS options = D2D1_DRAW_TEXT_OPTIONS_NONE)
|
||||
const D2D1_DRAW_TEXT_OPTIONS options = D2D1_DRAW_TEXT_OPTIONS_NONE) noexcept
|
||||
{
|
||||
this->renderTarget = renderTarget;
|
||||
this->foregroundBrush = foregroundBrush;
|
||||
|
@ -43,13 +43,13 @@ namespace Microsoft::Console::Render
|
|||
|
||||
// IDWritePixelSnapping methods
|
||||
[[nodiscard]] HRESULT STDMETHODCALLTYPE IsPixelSnappingDisabled(void* clientDrawingContext,
|
||||
_Out_ BOOL* isDisabled) override;
|
||||
_Out_ BOOL* isDisabled) noexcept override;
|
||||
|
||||
[[nodiscard]] HRESULT STDMETHODCALLTYPE GetPixelsPerDip(void* clientDrawingContext,
|
||||
_Out_ FLOAT* pixelsPerDip) override;
|
||||
_Out_ FLOAT* pixelsPerDip) noexcept override;
|
||||
|
||||
[[nodiscard]] HRESULT STDMETHODCALLTYPE GetCurrentTransform(void* clientDrawingContext,
|
||||
_Out_ DWRITE_MATRIX* transform) override;
|
||||
_Out_ DWRITE_MATRIX* transform) noexcept override;
|
||||
|
||||
// IDWriteTextRenderer methods
|
||||
[[nodiscard]] HRESULT STDMETHODCALLTYPE DrawGlyphRun(void* clientDrawingContext,
|
||||
|
@ -64,13 +64,13 @@ namespace Microsoft::Console::Render
|
|||
FLOAT baselineOriginX,
|
||||
FLOAT baselineOriginY,
|
||||
_In_ const DWRITE_UNDERLINE* underline,
|
||||
IUnknown* clientDrawingEffect) override;
|
||||
IUnknown* clientDrawingEffect) noexcept override;
|
||||
|
||||
[[nodiscard]] HRESULT STDMETHODCALLTYPE DrawStrikethrough(void* clientDrawingContext,
|
||||
FLOAT baselineOriginX,
|
||||
FLOAT baselineOriginY,
|
||||
_In_ const DWRITE_STRIKETHROUGH* strikethrough,
|
||||
IUnknown* clientDrawingEffect) override;
|
||||
IUnknown* clientDrawingEffect) noexcept override;
|
||||
|
||||
[[nodiscard]] HRESULT STDMETHODCALLTYPE DrawInlineObject(void* clientDrawingContext,
|
||||
FLOAT originX,
|
||||
|
@ -78,7 +78,7 @@ namespace Microsoft::Console::Render
|
|||
IDWriteInlineObject* inlineObject,
|
||||
BOOL isSideways,
|
||||
BOOL isRightToLeft,
|
||||
IUnknown* clientDrawingEffect) override;
|
||||
IUnknown* clientDrawingEffect) noexcept override;
|
||||
|
||||
private:
|
||||
void _FillRectangle(void* clientDrawingContext,
|
||||
|
@ -88,7 +88,7 @@ namespace Microsoft::Console::Render
|
|||
float width,
|
||||
float thickness,
|
||||
DWRITE_READING_DIRECTION readingDirection,
|
||||
DWRITE_FLOW_DIRECTION flowDirection);
|
||||
DWRITE_FLOW_DIRECTION flowDirection) noexcept;
|
||||
|
||||
[[nodiscard]] HRESULT _DrawBasicGlyphRun(DrawingContext* clientDrawingContext,
|
||||
D2D1_POINT_2F baselineOrigin,
|
||||
|
@ -101,12 +101,12 @@ namespace Microsoft::Console::Render
|
|||
D2D1_POINT_2F baselineOrigin,
|
||||
DWRITE_MEASURING_MODE measuringMode,
|
||||
_In_ const DWRITE_GLYPH_RUN* glyphRun,
|
||||
_In_ const DWRITE_GLYPH_RUN_DESCRIPTION* glyphRunDescription);
|
||||
_In_ const DWRITE_GLYPH_RUN_DESCRIPTION* glyphRunDescription) noexcept;
|
||||
|
||||
[[nodiscard]] HRESULT _DrawGlowGlyphRun(DrawingContext* clientDrawingContext,
|
||||
D2D1_POINT_2F baselineOrigin,
|
||||
DWRITE_MEASURING_MODE measuringMode,
|
||||
_In_ const DWRITE_GLYPH_RUN* glyphRun,
|
||||
_In_ const DWRITE_GLYPH_RUN_DESCRIPTION* glyphRunDescription);
|
||||
_In_ const DWRITE_GLYPH_RUN_DESCRIPTION* glyphRunDescription) noexcept;
|
||||
};
|
||||
}
|
||||
|
|
|
@ -129,7 +129,7 @@ DxEngine::~DxEngine()
|
|||
_ReleaseDeviceResources();
|
||||
}
|
||||
|
||||
auto freeOnFail = wil::scope_exit([&] { _ReleaseDeviceResources(); });
|
||||
auto freeOnFail = wil::scope_exit([&]() noexcept { _ReleaseDeviceResources(); });
|
||||
|
||||
RETURN_IF_FAILED(CreateDXGIFactory1(IID_PPV_ARGS(&_dxgiFactory2)));
|
||||
|
||||
|
@ -196,58 +196,62 @@ DxEngine::~DxEngine()
|
|||
SwapChainDesc.AlphaMode = DXGI_ALPHA_MODE_UNSPECIFIED;
|
||||
SwapChainDesc.Scaling = DXGI_SCALING_NONE;
|
||||
|
||||
switch (_chainMode)
|
||||
try
|
||||
{
|
||||
case SwapChainMode::ForHwnd:
|
||||
{
|
||||
// use the HWND's dimensions for the swap chain dimensions.
|
||||
RECT rect = { 0 };
|
||||
RETURN_IF_WIN32_BOOL_FALSE(GetClientRect(_hwndTarget, &rect));
|
||||
|
||||
SwapChainDesc.Width = rect.right - rect.left;
|
||||
SwapChainDesc.Height = rect.bottom - rect.top;
|
||||
|
||||
// We can't do alpha for HWNDs. Set to ignore. It will fail otherwise.
|
||||
SwapChainDesc.AlphaMode = DXGI_ALPHA_MODE_IGNORE;
|
||||
const auto createSwapChainResult = _dxgiFactory2->CreateSwapChainForHwnd(_d3dDevice.Get(),
|
||||
_hwndTarget,
|
||||
&SwapChainDesc,
|
||||
nullptr,
|
||||
nullptr,
|
||||
&_dxgiSwapChain);
|
||||
if (FAILED(createSwapChainResult))
|
||||
switch (_chainMode)
|
||||
{
|
||||
SwapChainDesc.Scaling = DXGI_SCALING_STRETCH;
|
||||
RETURN_IF_FAILED(_dxgiFactory2->CreateSwapChainForHwnd(_d3dDevice.Get(),
|
||||
_hwndTarget,
|
||||
&SwapChainDesc,
|
||||
nullptr,
|
||||
nullptr,
|
||||
&_dxgiSwapChain));
|
||||
case SwapChainMode::ForHwnd:
|
||||
{
|
||||
// use the HWND's dimensions for the swap chain dimensions.
|
||||
RECT rect = { 0 };
|
||||
RETURN_IF_WIN32_BOOL_FALSE(GetClientRect(_hwndTarget, &rect));
|
||||
|
||||
SwapChainDesc.Width = rect.right - rect.left;
|
||||
SwapChainDesc.Height = rect.bottom - rect.top;
|
||||
|
||||
// We can't do alpha for HWNDs. Set to ignore. It will fail otherwise.
|
||||
SwapChainDesc.AlphaMode = DXGI_ALPHA_MODE_IGNORE;
|
||||
const auto createSwapChainResult = _dxgiFactory2->CreateSwapChainForHwnd(_d3dDevice.Get(),
|
||||
_hwndTarget,
|
||||
&SwapChainDesc,
|
||||
nullptr,
|
||||
nullptr,
|
||||
&_dxgiSwapChain);
|
||||
if (FAILED(createSwapChainResult))
|
||||
{
|
||||
SwapChainDesc.Scaling = DXGI_SCALING_STRETCH;
|
||||
RETURN_IF_FAILED(_dxgiFactory2->CreateSwapChainForHwnd(_d3dDevice.Get(),
|
||||
_hwndTarget,
|
||||
&SwapChainDesc,
|
||||
nullptr,
|
||||
nullptr,
|
||||
&_dxgiSwapChain));
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case SwapChainMode::ForComposition:
|
||||
{
|
||||
// Use the given target size for compositions.
|
||||
SwapChainDesc.Width = _displaySizePixels.cx;
|
||||
SwapChainDesc.Height = _displaySizePixels.cy;
|
||||
|
||||
break;
|
||||
}
|
||||
case SwapChainMode::ForComposition:
|
||||
{
|
||||
// Use the given target size for compositions.
|
||||
SwapChainDesc.Width = _displaySizePixels.cx;
|
||||
SwapChainDesc.Height = _displaySizePixels.cy;
|
||||
// We're doing advanced composition pretty much for the purpose of pretty alpha, so turn it on.
|
||||
SwapChainDesc.AlphaMode = DXGI_ALPHA_MODE_PREMULTIPLIED;
|
||||
// It's 100% required to use scaling mode stretch for composition. There is no other choice.
|
||||
SwapChainDesc.Scaling = DXGI_SCALING_STRETCH;
|
||||
|
||||
// We're doing advanced composition pretty much for the purpose of pretty alpha, so turn it on.
|
||||
SwapChainDesc.AlphaMode = DXGI_ALPHA_MODE_PREMULTIPLIED;
|
||||
// It's 100% required to use scaling mode stretch for composition. There is no other choice.
|
||||
SwapChainDesc.Scaling = DXGI_SCALING_STRETCH;
|
||||
|
||||
RETURN_IF_FAILED(_dxgiFactory2->CreateSwapChainForComposition(_d3dDevice.Get(),
|
||||
&SwapChainDesc,
|
||||
nullptr,
|
||||
&_dxgiSwapChain));
|
||||
break;
|
||||
}
|
||||
default:
|
||||
THROW_HR(E_NOTIMPL);
|
||||
RETURN_IF_FAILED(_dxgiFactory2->CreateSwapChainForComposition(_d3dDevice.Get(),
|
||||
&SwapChainDesc,
|
||||
nullptr,
|
||||
&_dxgiSwapChain));
|
||||
break;
|
||||
}
|
||||
default:
|
||||
THROW_HR(E_NOTIMPL);
|
||||
}
|
||||
}
|
||||
CATCH_RETURN();
|
||||
|
||||
// With a new swap chain, mark the entire thing as invalid.
|
||||
RETURN_IF_FAILED(InvalidateAll());
|
||||
|
@ -265,9 +269,14 @@ DxEngine::~DxEngine()
|
|||
freeOnFail.release(); // don't need to release if we made it to the bottom and everything was good.
|
||||
|
||||
// Notify that swap chain changed.
|
||||
|
||||
if (_pfn)
|
||||
{
|
||||
_pfn();
|
||||
try
|
||||
{
|
||||
_pfn();
|
||||
}
|
||||
CATCH_LOG(); // A failure in the notification function isn't a failure to prepare, so just log it and go on.
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
|
@ -275,54 +284,57 @@ DxEngine::~DxEngine()
|
|||
|
||||
[[nodiscard]] HRESULT DxEngine::_PrepareRenderTarget() noexcept
|
||||
{
|
||||
RETURN_IF_FAILED(_dxgiSwapChain->GetBuffer(0, IID_PPV_ARGS(&_dxgiSurface)));
|
||||
|
||||
const D2D1_RENDER_TARGET_PROPERTIES props =
|
||||
D2D1::RenderTargetProperties(
|
||||
D2D1_RENDER_TARGET_TYPE_DEFAULT,
|
||||
D2D1::PixelFormat(DXGI_FORMAT_UNKNOWN, D2D1_ALPHA_MODE_PREMULTIPLIED),
|
||||
0.0f,
|
||||
0.0f);
|
||||
|
||||
RETURN_IF_FAILED(_d2dFactory->CreateDxgiSurfaceRenderTarget(_dxgiSurface.Get(),
|
||||
&props,
|
||||
&_d2dRenderTarget));
|
||||
|
||||
_d2dRenderTarget->SetTextAntialiasMode(D2D1_TEXT_ANTIALIAS_MODE_GRAYSCALE);
|
||||
RETURN_IF_FAILED(_d2dRenderTarget->CreateSolidColorBrush(D2D1::ColorF(D2D1::ColorF::DarkRed),
|
||||
&_d2dBrushBackground));
|
||||
|
||||
RETURN_IF_FAILED(_d2dRenderTarget->CreateSolidColorBrush(D2D1::ColorF(D2D1::ColorF::White),
|
||||
&_d2dBrushForeground));
|
||||
|
||||
const D2D1_STROKE_STYLE_PROPERTIES strokeStyleProperties{
|
||||
D2D1_CAP_STYLE_SQUARE, // startCap
|
||||
D2D1_CAP_STYLE_SQUARE, // endCap
|
||||
D2D1_CAP_STYLE_SQUARE, // dashCap
|
||||
D2D1_LINE_JOIN_MITER, // lineJoin
|
||||
0.f, // miterLimit
|
||||
D2D1_DASH_STYLE_SOLID, // dashStyle
|
||||
0.f, // dashOffset
|
||||
};
|
||||
RETURN_IF_FAILED(_d2dFactory->CreateStrokeStyle(&strokeStyleProperties, nullptr, 0, &_strokeStyle));
|
||||
|
||||
// If in composition mode, apply scaling factor matrix
|
||||
if (_chainMode == SwapChainMode::ForComposition)
|
||||
try
|
||||
{
|
||||
const auto fdpi = static_cast<float>(_dpi);
|
||||
_d2dRenderTarget->SetDpi(fdpi, fdpi);
|
||||
RETURN_IF_FAILED(_dxgiSwapChain->GetBuffer(0, IID_PPV_ARGS(&_dxgiSurface)));
|
||||
|
||||
DXGI_MATRIX_3X2_F inverseScale = { 0 };
|
||||
inverseScale._11 = 1.0f / _scale;
|
||||
inverseScale._22 = inverseScale._11;
|
||||
const D2D1_RENDER_TARGET_PROPERTIES props =
|
||||
D2D1::RenderTargetProperties(
|
||||
D2D1_RENDER_TARGET_TYPE_DEFAULT,
|
||||
D2D1::PixelFormat(DXGI_FORMAT_UNKNOWN, D2D1_ALPHA_MODE_PREMULTIPLIED),
|
||||
0.0f,
|
||||
0.0f);
|
||||
|
||||
::Microsoft::WRL::ComPtr<IDXGISwapChain2> sc2;
|
||||
RETURN_IF_FAILED(_dxgiSwapChain.As(&sc2));
|
||||
RETURN_IF_FAILED(_d2dFactory->CreateDxgiSurfaceRenderTarget(_dxgiSurface.Get(),
|
||||
&props,
|
||||
&_d2dRenderTarget));
|
||||
|
||||
RETURN_IF_FAILED(sc2->SetMatrixTransform(&inverseScale));
|
||||
_d2dRenderTarget->SetTextAntialiasMode(D2D1_TEXT_ANTIALIAS_MODE_GRAYSCALE);
|
||||
RETURN_IF_FAILED(_d2dRenderTarget->CreateSolidColorBrush(D2D1::ColorF(D2D1::ColorF::DarkRed),
|
||||
&_d2dBrushBackground));
|
||||
|
||||
RETURN_IF_FAILED(_d2dRenderTarget->CreateSolidColorBrush(D2D1::ColorF(D2D1::ColorF::White),
|
||||
&_d2dBrushForeground));
|
||||
|
||||
const D2D1_STROKE_STYLE_PROPERTIES strokeStyleProperties{
|
||||
D2D1_CAP_STYLE_SQUARE, // startCap
|
||||
D2D1_CAP_STYLE_SQUARE, // endCap
|
||||
D2D1_CAP_STYLE_SQUARE, // dashCap
|
||||
D2D1_LINE_JOIN_MITER, // lineJoin
|
||||
0.f, // miterLimit
|
||||
D2D1_DASH_STYLE_SOLID, // dashStyle
|
||||
0.f, // dashOffset
|
||||
};
|
||||
RETURN_IF_FAILED(_d2dFactory->CreateStrokeStyle(&strokeStyleProperties, nullptr, 0, &_strokeStyle));
|
||||
|
||||
// If in composition mode, apply scaling factor matrix
|
||||
if (_chainMode == SwapChainMode::ForComposition)
|
||||
{
|
||||
const auto fdpi = static_cast<float>(_dpi);
|
||||
_d2dRenderTarget->SetDpi(fdpi, fdpi);
|
||||
|
||||
DXGI_MATRIX_3X2_F inverseScale = { 0 };
|
||||
inverseScale._11 = 1.0f / _scale;
|
||||
inverseScale._22 = inverseScale._11;
|
||||
|
||||
::Microsoft::WRL::ComPtr<IDXGISwapChain2> sc2;
|
||||
RETURN_IF_FAILED(_dxgiSwapChain.As(&sc2));
|
||||
|
||||
RETURN_IF_FAILED(sc2->SetMatrixTransform(&inverseScale));
|
||||
}
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
CATCH_RETURN();
|
||||
}
|
||||
|
||||
// Routine Description:
|
||||
|
@ -333,31 +345,35 @@ DxEngine::~DxEngine()
|
|||
// - <none>
|
||||
void DxEngine::_ReleaseDeviceResources() noexcept
|
||||
{
|
||||
_haveDeviceResources = false;
|
||||
_d2dBrushForeground.Reset();
|
||||
_d2dBrushBackground.Reset();
|
||||
|
||||
if (nullptr != _d2dRenderTarget.Get() && _isPainting)
|
||||
try
|
||||
{
|
||||
_d2dRenderTarget->EndDraw();
|
||||
_haveDeviceResources = false;
|
||||
_d2dBrushForeground.Reset();
|
||||
_d2dBrushBackground.Reset();
|
||||
|
||||
if (nullptr != _d2dRenderTarget.Get() && _isPainting)
|
||||
{
|
||||
_d2dRenderTarget->EndDraw();
|
||||
}
|
||||
|
||||
_d2dRenderTarget.Reset();
|
||||
|
||||
_dxgiSurface.Reset();
|
||||
_dxgiSwapChain.Reset();
|
||||
|
||||
if (nullptr != _d3dDeviceContext.Get())
|
||||
{
|
||||
// To ensure the swap chain goes away we must unbind any views from the
|
||||
// D3D pipeline
|
||||
_d3dDeviceContext->OMSetRenderTargets(0, nullptr, nullptr);
|
||||
}
|
||||
_d3dDeviceContext.Reset();
|
||||
|
||||
_d3dDevice.Reset();
|
||||
|
||||
_dxgiFactory2.Reset();
|
||||
}
|
||||
|
||||
_d2dRenderTarget.Reset();
|
||||
|
||||
_dxgiSurface.Reset();
|
||||
_dxgiSwapChain.Reset();
|
||||
|
||||
if (nullptr != _d3dDeviceContext.Get())
|
||||
{
|
||||
// To ensure the swap chain goes away we must unbind any views from the
|
||||
// D3D pipeline
|
||||
_d3dDeviceContext->OMSetRenderTargets(0, nullptr, nullptr);
|
||||
}
|
||||
_d3dDeviceContext.Reset();
|
||||
|
||||
_d3dDevice.Reset();
|
||||
|
||||
_dxgiFactory2.Reset();
|
||||
CATCH_LOG();
|
||||
}
|
||||
|
||||
// Routine Description:
|
||||
|
@ -410,7 +426,7 @@ void DxEngine::SetCallback(std::function<void()> pfn)
|
|||
_pfn = pfn;
|
||||
}
|
||||
|
||||
Microsoft::WRL::ComPtr<IDXGISwapChain1> DxEngine::GetSwapChain() noexcept
|
||||
Microsoft::WRL::ComPtr<IDXGISwapChain1> DxEngine::GetSwapChain()
|
||||
{
|
||||
if (_dxgiSwapChain.Get() == nullptr)
|
||||
{
|
||||
|
@ -484,39 +500,43 @@ Microsoft::WRL::ComPtr<IDXGISwapChain1> DxEngine::GetSwapChain() noexcept
|
|||
{
|
||||
if (pcoordDelta->X != 0 || pcoordDelta->Y != 0)
|
||||
{
|
||||
POINT delta = { 0 };
|
||||
delta.x = pcoordDelta->X * _glyphCell.cx;
|
||||
delta.y = pcoordDelta->Y * _glyphCell.cy;
|
||||
|
||||
_InvalidOffset(delta);
|
||||
|
||||
_invalidScroll.cx += delta.x;
|
||||
_invalidScroll.cy += delta.y;
|
||||
|
||||
// Add the revealed portion of the screen from the scroll to the invalid area.
|
||||
const RECT display = _GetDisplayRect();
|
||||
RECT reveal = display;
|
||||
|
||||
// X delta first
|
||||
OffsetRect(&reveal, delta.x, 0);
|
||||
IntersectRect(&reveal, &reveal, &display);
|
||||
SubtractRect(&reveal, &display, &reveal);
|
||||
|
||||
if (!IsRectEmpty(&reveal))
|
||||
try
|
||||
{
|
||||
_InvalidOr(reveal);
|
||||
}
|
||||
POINT delta = { 0 };
|
||||
delta.x = pcoordDelta->X * _glyphCell.cx;
|
||||
delta.y = pcoordDelta->Y * _glyphCell.cy;
|
||||
|
||||
// Y delta second (subtract rect won't work if you move both)
|
||||
reveal = display;
|
||||
OffsetRect(&reveal, 0, delta.y);
|
||||
IntersectRect(&reveal, &reveal, &display);
|
||||
SubtractRect(&reveal, &display, &reveal);
|
||||
_InvalidOffset(delta);
|
||||
|
||||
if (!IsRectEmpty(&reveal))
|
||||
{
|
||||
_InvalidOr(reveal);
|
||||
_invalidScroll.cx += delta.x;
|
||||
_invalidScroll.cy += delta.y;
|
||||
|
||||
// Add the revealed portion of the screen from the scroll to the invalid area.
|
||||
const RECT display = _GetDisplayRect();
|
||||
RECT reveal = display;
|
||||
|
||||
// X delta first
|
||||
OffsetRect(&reveal, delta.x, 0);
|
||||
IntersectRect(&reveal, &reveal, &display);
|
||||
SubtractRect(&reveal, &display, &reveal);
|
||||
|
||||
if (!IsRectEmpty(&reveal))
|
||||
{
|
||||
_InvalidOr(reveal);
|
||||
}
|
||||
|
||||
// Y delta second (subtract rect won't work if you move both)
|
||||
reveal = display;
|
||||
OffsetRect(&reveal, 0, delta.y);
|
||||
IntersectRect(&reveal, &reveal, &display);
|
||||
SubtractRect(&reveal, &display, &reveal);
|
||||
|
||||
if (!IsRectEmpty(&reveal))
|
||||
{
|
||||
_InvalidOr(reveal);
|
||||
}
|
||||
}
|
||||
CATCH_RETURN();
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
|
@ -577,7 +597,7 @@ Microsoft::WRL::ComPtr<IDXGISwapChain1> DxEngine::GetSwapChain() noexcept
|
|||
return size;
|
||||
}
|
||||
default:
|
||||
THROW_HR(E_NOTIMPL);
|
||||
FAIL_FAST_HR(E_NOTIMPL);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -617,7 +637,7 @@ void _ScaleByFont(RECT& cellsToPixels, SIZE fontSize) noexcept
|
|||
// - -Y is up, Y is down, -X is left, X is right.
|
||||
// Return Value:
|
||||
// - <none>
|
||||
void DxEngine::_InvalidOffset(POINT delta) noexcept
|
||||
void DxEngine::_InvalidOffset(POINT delta)
|
||||
{
|
||||
if (_isInvalidUsed)
|
||||
{
|
||||
|
@ -706,37 +726,41 @@ void DxEngine::_InvalidOr(RECT rc) noexcept
|
|||
|
||||
if (_isEnabled)
|
||||
{
|
||||
const auto clientSize = _GetClientSize();
|
||||
if (!_haveDeviceResources)
|
||||
try
|
||||
{
|
||||
RETURN_IF_FAILED(_CreateDeviceResources(true));
|
||||
const auto clientSize = _GetClientSize();
|
||||
if (!_haveDeviceResources)
|
||||
{
|
||||
RETURN_IF_FAILED(_CreateDeviceResources(true));
|
||||
}
|
||||
else if (_displaySizePixels.cy != clientSize.cy ||
|
||||
_displaySizePixels.cx != clientSize.cx)
|
||||
{
|
||||
// OK, we're going to play a dangerous game here for the sake of optimizing resize
|
||||
// First, set up a complete clear of all device resources if something goes terribly wrong.
|
||||
auto resetDeviceResourcesOnFailure = wil::scope_exit([&]() noexcept {
|
||||
_ReleaseDeviceResources();
|
||||
});
|
||||
|
||||
// Now let go of a few of the device resources that get in the way of resizing buffers in the swap chain
|
||||
_dxgiSurface.Reset();
|
||||
_d2dRenderTarget.Reset();
|
||||
|
||||
// Change the buffer size and recreate the render target (and surface)
|
||||
RETURN_IF_FAILED(_dxgiSwapChain->ResizeBuffers(2, clientSize.cx, clientSize.cy, DXGI_FORMAT_B8G8R8A8_UNORM, 0));
|
||||
RETURN_IF_FAILED(_PrepareRenderTarget());
|
||||
|
||||
// OK we made it past the parts that can cause errors. We can release our failure handler.
|
||||
resetDeviceResourcesOnFailure.release();
|
||||
|
||||
// And persist the new size.
|
||||
_displaySizePixels = clientSize;
|
||||
}
|
||||
|
||||
_d2dRenderTarget->BeginDraw();
|
||||
_isPainting = true;
|
||||
}
|
||||
else if (_displaySizePixels.cy != clientSize.cy ||
|
||||
_displaySizePixels.cx != clientSize.cx)
|
||||
{
|
||||
// OK, we're going to play a dangerous game here for the sake of optimizing resize
|
||||
// First, set up a complete clear of all device resources if something goes terribly wrong.
|
||||
auto resetDeviceResourcesOnFailure = wil::scope_exit([&] {
|
||||
_ReleaseDeviceResources();
|
||||
});
|
||||
|
||||
// Now let go of a few of the device resources that get in the way of resizing buffers in the swap chain
|
||||
_dxgiSurface.Reset();
|
||||
_d2dRenderTarget.Reset();
|
||||
|
||||
// Change the buffer size and recreate the render target (and surface)
|
||||
RETURN_IF_FAILED(_dxgiSwapChain->ResizeBuffers(2, clientSize.cx, clientSize.cy, DXGI_FORMAT_B8G8R8A8_UNORM, 0));
|
||||
RETURN_IF_FAILED(_PrepareRenderTarget());
|
||||
|
||||
// OK we made it past the parts that can cause errors. We can release our failure handler.
|
||||
resetDeviceResourcesOnFailure.release();
|
||||
|
||||
// And persist the new size.
|
||||
_displaySizePixels = clientSize;
|
||||
}
|
||||
|
||||
_d2dRenderTarget->BeginDraw();
|
||||
_isPainting = true;
|
||||
CATCH_RETURN();
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
|
@ -811,13 +835,17 @@ void DxEngine::_InvalidOr(RECT rc) noexcept
|
|||
// - Any DirectX error, a memory error, etc.
|
||||
[[nodiscard]] HRESULT DxEngine::_CopyFrontToBack() noexcept
|
||||
{
|
||||
Microsoft::WRL::ComPtr<ID3D11Resource> backBuffer;
|
||||
Microsoft::WRL::ComPtr<ID3D11Resource> frontBuffer;
|
||||
try
|
||||
{
|
||||
Microsoft::WRL::ComPtr<ID3D11Resource> backBuffer;
|
||||
Microsoft::WRL::ComPtr<ID3D11Resource> frontBuffer;
|
||||
|
||||
RETURN_IF_FAILED(_dxgiSwapChain->GetBuffer(0, IID_PPV_ARGS(&backBuffer)));
|
||||
RETURN_IF_FAILED(_dxgiSwapChain->GetBuffer(1, IID_PPV_ARGS(&frontBuffer)));
|
||||
RETURN_IF_FAILED(_dxgiSwapChain->GetBuffer(0, IID_PPV_ARGS(&backBuffer)));
|
||||
RETURN_IF_FAILED(_dxgiSwapChain->GetBuffer(1, IID_PPV_ARGS(&frontBuffer)));
|
||||
|
||||
_d3dDeviceContext->CopyResource(backBuffer.Get(), frontBuffer.Get());
|
||||
_d3dDeviceContext->CopyResource(backBuffer.Get(), frontBuffer.Get());
|
||||
}
|
||||
CATCH_RETURN();
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
@ -833,16 +861,20 @@ void DxEngine::_InvalidOr(RECT rc) noexcept
|
|||
{
|
||||
if (_presentReady)
|
||||
{
|
||||
FAIL_FAST_IF_FAILED(_dxgiSwapChain->Present(1, 0));
|
||||
/*FAIL_FAST_IF_FAILED(_dxgiSwapChain->Present1(1, 0, &_presentParams));*/
|
||||
try
|
||||
{
|
||||
FAIL_FAST_IF_FAILED(_dxgiSwapChain->Present(1, 0));
|
||||
/*FAIL_FAST_IF_FAILED(_dxgiSwapChain->Present1(1, 0, &_presentParams));*/
|
||||
|
||||
RETURN_IF_FAILED(_CopyFrontToBack());
|
||||
_presentReady = false;
|
||||
RETURN_IF_FAILED(_CopyFrontToBack());
|
||||
_presentReady = false;
|
||||
|
||||
_presentDirty = { 0 };
|
||||
_presentOffset = { 0 };
|
||||
_presentScroll = { 0 };
|
||||
_presentParams = { 0 };
|
||||
_presentDirty = { 0 };
|
||||
_presentOffset = { 0 };
|
||||
_presentScroll = { 0 };
|
||||
_presentParams = { 0 };
|
||||
}
|
||||
CATCH_RETURN();
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
|
@ -945,7 +977,7 @@ void DxEngine::_InvalidOr(RECT rc) noexcept
|
|||
COORD const coordTarget) noexcept
|
||||
{
|
||||
const auto existingColor = _d2dBrushForeground->GetColor();
|
||||
const auto restoreBrushOnExit = wil::scope_exit([&] { _d2dBrushForeground->SetColor(existingColor); });
|
||||
const auto restoreBrushOnExit = wil::scope_exit([&]() noexcept { _d2dBrushForeground->SetColor(existingColor); });
|
||||
|
||||
_d2dBrushForeground->SetColor(_ColorFFromColorRef(color));
|
||||
|
||||
|
@ -1028,7 +1060,7 @@ void DxEngine::_InvalidOr(RECT rc) noexcept
|
|||
0.5f);
|
||||
|
||||
_d2dBrushForeground->SetColor(selectionColor);
|
||||
const auto resetColorOnExit = wil::scope_exit([&] { _d2dBrushForeground->SetColor(existingColor); });
|
||||
const auto resetColorOnExit = wil::scope_exit([&]() noexcept { _d2dBrushForeground->SetColor(existingColor); });
|
||||
|
||||
RECT pixels;
|
||||
pixels.left = rect.Left * _glyphCell.cx;
|
||||
|
@ -1202,19 +1234,24 @@ enum class CursorPaintType
|
|||
// - S_OK or relevant DirectX error
|
||||
[[nodiscard]] HRESULT DxEngine::UpdateFont(const FontInfoDesired& pfiFontInfoDesired, FontInfo& fiFontInfo) noexcept
|
||||
{
|
||||
const auto hr = _GetProposedFont(pfiFontInfoDesired,
|
||||
RETURN_IF_FAILED(_GetProposedFont(pfiFontInfoDesired,
|
||||
fiFontInfo,
|
||||
_dpi,
|
||||
_dwriteTextFormat,
|
||||
_dwriteTextAnalyzer,
|
||||
_dwriteFontFace);
|
||||
_dwriteFontFace));
|
||||
|
||||
const auto size = fiFontInfo.GetSize();
|
||||
try
|
||||
{
|
||||
const auto size = fiFontInfo.GetSize();
|
||||
|
||||
_glyphCell.cx = size.X;
|
||||
_glyphCell.cy = size.Y;
|
||||
|
||||
return hr;
|
||||
_glyphCell.cx = size.X;
|
||||
_glyphCell.cy = size.Y;
|
||||
}
|
||||
CATCH_RETURN();
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
[[nodiscard]] Viewport DxEngine::GetViewportInCharacters(const Viewport& viewInPixels) noexcept
|
||||
|
@ -1297,7 +1334,7 @@ float DxEngine::GetScaling() const noexcept
|
|||
// - <none>
|
||||
// Return Value:
|
||||
// - Rectangle describing dirty area in characters.
|
||||
[[nodiscard]] SMALL_RECT DxEngine::GetDirtyRectInChars() noexcept
|
||||
[[nodiscard]] SMALL_RECT DxEngine::GetDirtyRectInChars()
|
||||
{
|
||||
SMALL_RECT r;
|
||||
r.Top = gsl::narrow<SHORT>(floor(_invalidRect.top / _glyphCell.cy));
|
||||
|
@ -1345,20 +1382,24 @@ float DxEngine::GetScaling() const noexcept
|
|||
// - S_OK or relevant DirectWrite error.
|
||||
[[nodiscard]] HRESULT DxEngine::IsGlyphWideByFont(const std::wstring_view glyph, _Out_ bool* const pResult) noexcept
|
||||
{
|
||||
const Cluster cluster(glyph, 0); // columns don't matter, we're doing analysis not layout.
|
||||
try
|
||||
{
|
||||
const Cluster cluster(glyph, 0); // columns don't matter, we're doing analysis not layout.
|
||||
|
||||
// Create the text layout
|
||||
CustomTextLayout layout(_dwriteFactory.Get(),
|
||||
_dwriteTextAnalyzer.Get(),
|
||||
_dwriteTextFormat.Get(),
|
||||
_dwriteFontFace.Get(),
|
||||
{ &cluster, 1 },
|
||||
_glyphCell.cx);
|
||||
// Create the text layout
|
||||
CustomTextLayout layout(_dwriteFactory.Get(),
|
||||
_dwriteTextAnalyzer.Get(),
|
||||
_dwriteTextFormat.Get(),
|
||||
_dwriteFontFace.Get(),
|
||||
{ &cluster, 1 },
|
||||
_glyphCell.cx);
|
||||
|
||||
UINT32 columns = 0;
|
||||
RETURN_IF_FAILED(layout.GetColumns(&columns));
|
||||
UINT32 columns = 0;
|
||||
RETURN_IF_FAILED(layout.GetColumns(&columns));
|
||||
|
||||
*pResult = columns != 1;
|
||||
*pResult = columns != 1;
|
||||
}
|
||||
CATCH_RETURN();
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
@ -1733,7 +1774,7 @@ float DxEngine::GetScaling() const noexcept
|
|||
return D2D1::ColorF(rgb, aFloat);
|
||||
}
|
||||
default:
|
||||
THROW_HR(E_NOTIMPL);
|
||||
FAIL_FAST_HR(E_NOTIMPL);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -45,7 +45,7 @@ namespace Microsoft::Console::Render
|
|||
|
||||
void SetCallback(std::function<void()> pfn);
|
||||
|
||||
::Microsoft::WRL::ComPtr<IDXGISwapChain1> GetSwapChain() noexcept;
|
||||
::Microsoft::WRL::ComPtr<IDXGISwapChain1> GetSwapChain();
|
||||
|
||||
// IRenderEngine Members
|
||||
[[nodiscard]] HRESULT Invalidate(const SMALL_RECT* const psrRegion) noexcept override;
|
||||
|
@ -84,7 +84,7 @@ namespace Microsoft::Console::Render
|
|||
|
||||
[[nodiscard]] HRESULT GetProposedFont(const FontInfoDesired& fiFontInfoDesired, FontInfo& fiFontInfo, int const iDpi) noexcept override;
|
||||
|
||||
[[nodiscard]] SMALL_RECT GetDirtyRectInChars() noexcept override;
|
||||
[[nodiscard]] SMALL_RECT GetDirtyRectInChars() override;
|
||||
|
||||
[[nodiscard]] HRESULT GetFontSize(_Out_ COORD* const pFontSize) noexcept override;
|
||||
[[nodiscard]] HRESULT IsGlyphWideByFont(const std::wstring_view glyph, _Out_ bool* const pResult) noexcept override;
|
||||
|
@ -133,7 +133,7 @@ namespace Microsoft::Console::Render
|
|||
void _InvalidOr(SMALL_RECT sr) noexcept;
|
||||
void _InvalidOr(RECT rc) noexcept;
|
||||
|
||||
void _InvalidOffset(POINT pt) noexcept;
|
||||
void _InvalidOffset(POINT pt);
|
||||
|
||||
bool _presentReady;
|
||||
RECT _presentDirty;
|
||||
|
|
|
@ -14,7 +14,7 @@ namespace
|
|||
CodepointWidth width;
|
||||
};
|
||||
|
||||
static bool operator<(const UnicodeRange& range, const unsigned int searchTerm)
|
||||
static bool operator<(const UnicodeRange& range, const unsigned int searchTerm) noexcept
|
||||
{
|
||||
return range.upperBound < searchTerm;
|
||||
}
|
||||
|
@ -316,7 +316,7 @@ namespace
|
|||
// - glyph - the utf16 encoded codepoint to search for
|
||||
// Return Value:
|
||||
// - the width type of the codepoint
|
||||
CodepointWidth CodepointWidthDetector::GetWidth(const std::wstring_view glyph) const noexcept
|
||||
CodepointWidth CodepointWidthDetector::GetWidth(const std::wstring_view glyph) const
|
||||
{
|
||||
if (glyph.empty())
|
||||
{
|
||||
|
|
|
@ -18,7 +18,7 @@ bool IsGlyphFullWidth(const std::wstring_view glyph)
|
|||
// Function Description:
|
||||
// - determines if the glyph represented by the single character should be
|
||||
// wide or not. See CodepointWidthDetector::IsWide
|
||||
bool IsGlyphFullWidth(const wchar_t wch)
|
||||
bool IsGlyphFullWidth(const wchar_t wch) noexcept
|
||||
{
|
||||
return widthDetector.IsWide(wch);
|
||||
}
|
||||
|
@ -44,7 +44,7 @@ void SetGlyphWidthFallback(std::function<bool(const std::wstring_view)> pfnFallb
|
|||
// - <none>
|
||||
// Return Value:
|
||||
// - <none>
|
||||
void NotifyGlyphWidthFontChanged()
|
||||
void NotifyGlyphWidthFontChanged() noexcept
|
||||
{
|
||||
widthDetector.NotifyFontChanged();
|
||||
}
|
||||
|
|
|
@ -68,7 +68,7 @@ void KeyEvent::ActivateModifierKey(const ModifierKeyState modifierKey) noexcept
|
|||
WI_SetAllFlags(_activeModifierKeys, bitFlag);
|
||||
}
|
||||
|
||||
bool KeyEvent::DoActiveModifierKeysMatch(const std::unordered_set<ModifierKeyState>& consoleModifiers) const noexcept
|
||||
bool KeyEvent::DoActiveModifierKeysMatch(const std::unordered_set<ModifierKeyState>& consoleModifiers) const
|
||||
{
|
||||
DWORD consoleBits = 0;
|
||||
for (const ModifierKeyState& mod : consoleModifiers)
|
||||
|
|
|
@ -10,7 +10,7 @@ using namespace Microsoft::Console::Types;
|
|||
using namespace Microsoft::Console::Types::ScreenInfoUiaProviderTracing;
|
||||
|
||||
// A helper function to create a SafeArray Version of an int array of a specified length
|
||||
SAFEARRAY* BuildIntSafeArray(_In_reads_(length) const int* const data, const int length)
|
||||
SAFEARRAY* BuildIntSafeArray(_In_reads_(length) const int* const data, const int length) noexcept
|
||||
{
|
||||
SAFEARRAY* psa = SafeArrayCreateVector(VT_I4, 0, length);
|
||||
if (psa != nullptr)
|
||||
|
@ -133,7 +133,7 @@ IFACEMETHODIMP ScreenInfoUiaProviderBase::QueryInterface(_In_ REFIID riid,
|
|||
|
||||
// Implementation of IRawElementProviderSimple::get_ProviderOptions.
|
||||
// Gets UI Automation provider options.
|
||||
IFACEMETHODIMP ScreenInfoUiaProviderBase::get_ProviderOptions(_Out_ ProviderOptions* pOptions)
|
||||
IFACEMETHODIMP ScreenInfoUiaProviderBase::get_ProviderOptions(_Out_ ProviderOptions* pOptions) noexcept
|
||||
{
|
||||
// TODO GitHub #1914: Re-attach Tracing to UIA Tree
|
||||
//Tracing::s_TraceUia(this, ApiCall::GetProviderOptions, nullptr);
|
||||
|
@ -169,7 +169,7 @@ IFACEMETHODIMP ScreenInfoUiaProviderBase::GetPatternProvider(_In_ PATTERNID patt
|
|||
// Implementation of IRawElementProviderSimple::get_PropertyValue.
|
||||
// Gets custom properties.
|
||||
IFACEMETHODIMP ScreenInfoUiaProviderBase::GetPropertyValue(_In_ PROPERTYID propertyId,
|
||||
_Out_ VARIANT* pVariant)
|
||||
_Out_ VARIANT* pVariant) noexcept
|
||||
{
|
||||
// TODO GitHub #1914: Re-attach Tracing to UIA Tree
|
||||
//Tracing::s_TraceUia(this, ApiCall::GetPropertyValue, nullptr);
|
||||
|
@ -239,7 +239,7 @@ IFACEMETHODIMP ScreenInfoUiaProviderBase::GetPropertyValue(_In_ PROPERTYID prope
|
|||
return S_OK;
|
||||
}
|
||||
|
||||
IFACEMETHODIMP ScreenInfoUiaProviderBase::get_HostRawElementProvider(_COM_Outptr_result_maybenull_ IRawElementProviderSimple** ppProvider)
|
||||
IFACEMETHODIMP ScreenInfoUiaProviderBase::get_HostRawElementProvider(_COM_Outptr_result_maybenull_ IRawElementProviderSimple** ppProvider) noexcept
|
||||
{
|
||||
// TODO GitHub #1914: Re-attach Tracing to UIA Tree
|
||||
//Tracing::s_TraceUia(this, ApiCall::GetHostRawElementProvider, nullptr);
|
||||
|
@ -252,7 +252,7 @@ IFACEMETHODIMP ScreenInfoUiaProviderBase::get_HostRawElementProvider(_COM_Outptr
|
|||
|
||||
#pragma region IRawElementProviderFragment
|
||||
|
||||
IFACEMETHODIMP ScreenInfoUiaProviderBase::GetRuntimeId(_Outptr_result_maybenull_ SAFEARRAY** ppRuntimeId)
|
||||
IFACEMETHODIMP ScreenInfoUiaProviderBase::GetRuntimeId(_Outptr_result_maybenull_ SAFEARRAY** ppRuntimeId) noexcept
|
||||
{
|
||||
// TODO GitHub #1914: Re-attach Tracing to UIA Tree
|
||||
//Tracing::s_TraceUia(this, ApiCall::GetRuntimeId, nullptr);
|
||||
|
@ -270,7 +270,7 @@ IFACEMETHODIMP ScreenInfoUiaProviderBase::GetRuntimeId(_Outptr_result_maybenull_
|
|||
return S_OK;
|
||||
}
|
||||
|
||||
IFACEMETHODIMP ScreenInfoUiaProviderBase::GetEmbeddedFragmentRoots(_Outptr_result_maybenull_ SAFEARRAY** ppRoots)
|
||||
IFACEMETHODIMP ScreenInfoUiaProviderBase::GetEmbeddedFragmentRoots(_Outptr_result_maybenull_ SAFEARRAY** ppRoots) noexcept
|
||||
{
|
||||
// TODO GitHub #1914: Re-attach Tracing to UIA Tree
|
||||
//Tracing::s_TraceUia(this, ApiCall::GetEmbeddedFragmentRoots, nullptr);
|
||||
|
@ -298,7 +298,7 @@ IFACEMETHODIMP ScreenInfoUiaProviderBase::GetSelection(_Outptr_result_maybenull_
|
|||
//ApiMsgGetSelection apiMsg;
|
||||
|
||||
_LockConsole();
|
||||
auto Unlock = wil::scope_exit([&] {
|
||||
auto Unlock = wil::scope_exit([&]() noexcept {
|
||||
_UnlockConsole();
|
||||
});
|
||||
|
||||
|
@ -417,7 +417,7 @@ IFACEMETHODIMP ScreenInfoUiaProviderBase::GetVisibleRanges(_Outptr_result_mayben
|
|||
//Tracing::s_TraceUia(this, ApiCall::GetVisibleRanges, nullptr);
|
||||
|
||||
_LockConsole();
|
||||
auto Unlock = wil::scope_exit([&] {
|
||||
auto Unlock = wil::scope_exit([&]() noexcept {
|
||||
_UnlockConsole();
|
||||
});
|
||||
|
||||
|
@ -573,7 +573,7 @@ IFACEMETHODIMP ScreenInfoUiaProviderBase::get_DocumentRange(_COM_Outptr_result_m
|
|||
return hr;
|
||||
}
|
||||
|
||||
IFACEMETHODIMP ScreenInfoUiaProviderBase::get_SupportedTextSelection(_Out_ SupportedTextSelection* pRetVal)
|
||||
IFACEMETHODIMP ScreenInfoUiaProviderBase::get_SupportedTextSelection(_Out_ SupportedTextSelection* pRetVal) noexcept
|
||||
{
|
||||
// TODO GitHub #1914: Re-attach Tracing to UIA Tree
|
||||
//Tracing::s_TraceUia(this, ApiCall::GetSupportedTextSelection, nullptr);
|
||||
|
@ -589,12 +589,12 @@ const COORD ScreenInfoUiaProviderBase::_getScreenBufferCoords() const
|
|||
return _getTextBuffer().GetSize().Dimensions();
|
||||
}
|
||||
|
||||
const TextBuffer& ScreenInfoUiaProviderBase::_getTextBuffer() const
|
||||
const TextBuffer& ScreenInfoUiaProviderBase::_getTextBuffer() const noexcept
|
||||
{
|
||||
return _pData->GetTextBuffer();
|
||||
}
|
||||
|
||||
const Viewport ScreenInfoUiaProviderBase::_getViewport() const
|
||||
const Viewport ScreenInfoUiaProviderBase::_getViewport() const noexcept
|
||||
{
|
||||
return _pData->GetViewport();
|
||||
}
|
||||
|
|
|
@ -51,19 +51,19 @@ namespace Microsoft::Console::Types
|
|||
_COM_Outptr_result_maybenull_ void** ppInterface) override;
|
||||
|
||||
// IRawElementProviderSimple methods
|
||||
IFACEMETHODIMP get_ProviderOptions(_Out_ ProviderOptions* pOptions) override;
|
||||
IFACEMETHODIMP get_ProviderOptions(_Out_ ProviderOptions* pOptions) noexcept override;
|
||||
IFACEMETHODIMP GetPatternProvider(_In_ PATTERNID iid,
|
||||
_COM_Outptr_result_maybenull_ IUnknown** ppInterface) override;
|
||||
IFACEMETHODIMP GetPropertyValue(_In_ PROPERTYID idProp,
|
||||
_Out_ VARIANT* pVariant) override;
|
||||
IFACEMETHODIMP get_HostRawElementProvider(_COM_Outptr_result_maybenull_ IRawElementProviderSimple** ppProvider) override;
|
||||
_Out_ VARIANT* pVariant) noexcept override;
|
||||
IFACEMETHODIMP get_HostRawElementProvider(_COM_Outptr_result_maybenull_ IRawElementProviderSimple** ppProvider) noexcept override;
|
||||
|
||||
// IRawElementProviderFragment methods
|
||||
virtual IFACEMETHODIMP Navigate(_In_ NavigateDirection direction,
|
||||
_COM_Outptr_result_maybenull_ IRawElementProviderFragment** ppProvider) = 0;
|
||||
IFACEMETHODIMP GetRuntimeId(_Outptr_result_maybenull_ SAFEARRAY** ppRuntimeId) override;
|
||||
IFACEMETHODIMP GetRuntimeId(_Outptr_result_maybenull_ SAFEARRAY** ppRuntimeId) noexcept override;
|
||||
virtual IFACEMETHODIMP get_BoundingRectangle(_Out_ UiaRect* pRect) = 0;
|
||||
IFACEMETHODIMP GetEmbeddedFragmentRoots(_Outptr_result_maybenull_ SAFEARRAY** ppRoots) override;
|
||||
IFACEMETHODIMP GetEmbeddedFragmentRoots(_Outptr_result_maybenull_ SAFEARRAY** ppRoots) noexcept override;
|
||||
IFACEMETHODIMP SetFocus() override;
|
||||
virtual IFACEMETHODIMP get_FragmentRoot(_COM_Outptr_result_maybenull_ IRawElementProviderFragmentRoot** ppProvider) = 0;
|
||||
|
||||
|
@ -75,7 +75,7 @@ namespace Microsoft::Console::Types
|
|||
IFACEMETHODIMP RangeFromPoint(_In_ UiaPoint point,
|
||||
_COM_Outptr_result_maybenull_ ITextRangeProvider** ppRetVal) override;
|
||||
IFACEMETHODIMP get_DocumentRange(_COM_Outptr_result_maybenull_ ITextRangeProvider** ppRetVal) override;
|
||||
IFACEMETHODIMP get_SupportedTextSelection(_Out_ SupportedTextSelection* pRetVal) override;
|
||||
IFACEMETHODIMP get_SupportedTextSelection(_Out_ SupportedTextSelection* pRetVal) noexcept override;
|
||||
|
||||
protected:
|
||||
virtual std::deque<UiaTextRangeBase*> GetSelectionRanges(_In_ IRawElementProviderSimple* pProvider) = 0;
|
||||
|
@ -118,8 +118,8 @@ namespace Microsoft::Console::Types
|
|||
std::map<EVENTID, bool> _signalFiringMapping;
|
||||
|
||||
const COORD _getScreenBufferCoords() const;
|
||||
const TextBuffer& _getTextBuffer() const;
|
||||
const Viewport _getViewport() const;
|
||||
const TextBuffer& _getTextBuffer() const noexcept;
|
||||
const Viewport _getViewport() const noexcept;
|
||||
void _LockConsole() noexcept;
|
||||
void _UnlockConsole() noexcept;
|
||||
};
|
||||
|
|
|
@ -47,7 +47,7 @@ UiaTextRangeBase::MoveState::MoveState(const ScreenInfoRow startScreenInfoRow,
|
|||
const Column firstColumnInRow,
|
||||
const Column lastColumnInRow,
|
||||
const MovementIncrement increment,
|
||||
const MovementDirection direction) :
|
||||
const MovementDirection direction) noexcept :
|
||||
StartScreenInfoRow{ startScreenInfoRow },
|
||||
StartColumn{ startColumn },
|
||||
EndScreenInfoRow{ endScreenInfoRow },
|
||||
|
@ -184,7 +184,7 @@ void UiaTextRangeBase::Initialize(_In_ const UiaPoint point)
|
|||
_degenerate = true;
|
||||
}
|
||||
|
||||
UiaTextRangeBase::UiaTextRangeBase(const UiaTextRangeBase& a) :
|
||||
UiaTextRangeBase::UiaTextRangeBase(const UiaTextRangeBase& a) noexcept:
|
||||
_cRefs{ 1 },
|
||||
_pProvider{ a._pProvider },
|
||||
_start{ a._start },
|
||||
|
@ -201,17 +201,17 @@ UiaTextRangeBase::UiaTextRangeBase(const UiaTextRangeBase& a) :
|
|||
#endif
|
||||
}
|
||||
|
||||
const IdType UiaTextRangeBase::GetId() const
|
||||
const IdType UiaTextRangeBase::GetId() const noexcept
|
||||
{
|
||||
return _id;
|
||||
}
|
||||
|
||||
const Endpoint UiaTextRangeBase::GetStart() const
|
||||
const Endpoint UiaTextRangeBase::GetStart() const noexcept
|
||||
{
|
||||
return _start;
|
||||
}
|
||||
|
||||
const Endpoint UiaTextRangeBase::GetEnd() const
|
||||
const Endpoint UiaTextRangeBase::GetEnd() const noexcept
|
||||
{
|
||||
return _end;
|
||||
}
|
||||
|
@ -222,12 +222,12 @@ const Endpoint UiaTextRangeBase::GetEnd() const
|
|||
// - <none>
|
||||
// Return Value:
|
||||
// - true if range is degenerate, false otherwise.
|
||||
const bool UiaTextRangeBase::IsDegenerate() const
|
||||
const bool UiaTextRangeBase::IsDegenerate() const noexcept
|
||||
{
|
||||
return _degenerate;
|
||||
}
|
||||
|
||||
void UiaTextRangeBase::SetRangeValues(const Endpoint start, const Endpoint end, const bool isDegenerate)
|
||||
void UiaTextRangeBase::SetRangeValues(const Endpoint start, const Endpoint end, const bool isDegenerate) noexcept
|
||||
{
|
||||
_start = start;
|
||||
_end = end;
|
||||
|
@ -288,10 +288,10 @@ IFACEMETHODIMP UiaTextRangeBase::QueryInterface(_In_ REFIID riid, _COM_Outptr_re
|
|||
|
||||
#pragma region ITextRangeProvider
|
||||
|
||||
IFACEMETHODIMP UiaTextRangeBase::Compare(_In_opt_ ITextRangeProvider* pRange, _Out_ BOOL* pRetVal)
|
||||
IFACEMETHODIMP UiaTextRangeBase::Compare(_In_opt_ ITextRangeProvider* pRange, _Out_ BOOL* pRetVal) noexcept
|
||||
{
|
||||
_pData->LockConsole();
|
||||
auto Unlock = wil::scope_exit([&] {
|
||||
auto Unlock = wil::scope_exit([&]() noexcept{
|
||||
_pData->UnlockConsole();
|
||||
});
|
||||
|
||||
|
@ -317,7 +317,7 @@ IFACEMETHODIMP UiaTextRangeBase::Compare(_In_opt_ ITextRangeProvider* pRange, _O
|
|||
IFACEMETHODIMP UiaTextRangeBase::CompareEndpoints(_In_ TextPatternRangeEndpoint endpoint,
|
||||
_In_ ITextRangeProvider* pTargetRange,
|
||||
_In_ TextPatternRangeEndpoint targetEndpoint,
|
||||
_Out_ int* pRetVal)
|
||||
_Out_ int* pRetVal) noexcept
|
||||
{
|
||||
RETURN_HR_IF(E_INVALIDARG, pRetVal == nullptr);
|
||||
*pRetVal = 0;
|
||||
|
@ -369,7 +369,7 @@ IFACEMETHODIMP UiaTextRangeBase::CompareEndpoints(_In_ TextPatternRangeEndpoint
|
|||
IFACEMETHODIMP UiaTextRangeBase::ExpandToEnclosingUnit(_In_ TextUnit unit)
|
||||
{
|
||||
_pData->LockConsole();
|
||||
auto Unlock = wil::scope_exit([&] {
|
||||
auto Unlock = wil::scope_exit([&]() noexcept {
|
||||
_pData->UnlockConsole();
|
||||
});
|
||||
|
||||
|
@ -415,7 +415,7 @@ IFACEMETHODIMP UiaTextRangeBase::ExpandToEnclosingUnit(_In_ TextUnit unit)
|
|||
IFACEMETHODIMP UiaTextRangeBase::FindAttribute(_In_ TEXTATTRIBUTEID /*textAttributeId*/,
|
||||
_In_ VARIANT /*val*/,
|
||||
_In_ BOOL /*searchBackward*/,
|
||||
_Outptr_result_maybenull_ ITextRangeProvider** /*ppRetVal*/)
|
||||
_Outptr_result_maybenull_ ITextRangeProvider** /*ppRetVal*/) noexcept
|
||||
{
|
||||
// TODO GitHub #1914: Re-attach Tracing to UIA Tree
|
||||
//Tracing::s_TraceUia(this, ApiCall::FindAttribute, nullptr);
|
||||
|
@ -423,7 +423,7 @@ IFACEMETHODIMP UiaTextRangeBase::FindAttribute(_In_ TEXTATTRIBUTEID /*textAttrib
|
|||
}
|
||||
|
||||
IFACEMETHODIMP UiaTextRangeBase::GetAttributeValue(_In_ TEXTATTRIBUTEID textAttributeId,
|
||||
_Out_ VARIANT* pRetVal)
|
||||
_Out_ VARIANT* pRetVal) noexcept
|
||||
{
|
||||
RETURN_HR_IF(E_INVALIDARG, pRetVal == nullptr);
|
||||
|
||||
|
@ -445,7 +445,7 @@ IFACEMETHODIMP UiaTextRangeBase::GetAttributeValue(_In_ TEXTATTRIBUTEID textAttr
|
|||
IFACEMETHODIMP UiaTextRangeBase::GetBoundingRectangles(_Outptr_result_maybenull_ SAFEARRAY** ppRetVal)
|
||||
{
|
||||
_pData->LockConsole();
|
||||
auto Unlock = wil::scope_exit([&] {
|
||||
auto Unlock = wil::scope_exit([&]() noexcept {
|
||||
_pData->UnlockConsole();
|
||||
});
|
||||
|
||||
|
@ -516,7 +516,7 @@ IFACEMETHODIMP UiaTextRangeBase::GetEnclosingElement(_Outptr_result_maybenull_ I
|
|||
IFACEMETHODIMP UiaTextRangeBase::GetText(_In_ int maxLength, _Out_ BSTR* pRetVal)
|
||||
{
|
||||
_pData->LockConsole();
|
||||
auto Unlock = wil::scope_exit([&] {
|
||||
auto Unlock = wil::scope_exit([&]() noexcept {
|
||||
_pData->UnlockConsole();
|
||||
});
|
||||
|
||||
|
@ -619,7 +619,7 @@ IFACEMETHODIMP UiaTextRangeBase::Move(_In_ TextUnit unit,
|
|||
_Out_ int* pRetVal)
|
||||
{
|
||||
_pData->LockConsole();
|
||||
auto Unlock = wil::scope_exit([&] {
|
||||
auto Unlock = wil::scope_exit([&]() noexcept {
|
||||
_pData->UnlockConsole();
|
||||
});
|
||||
|
||||
|
@ -691,7 +691,7 @@ IFACEMETHODIMP UiaTextRangeBase::MoveEndpointByUnit(_In_ TextPatternRangeEndpoin
|
|||
_Out_ int* pRetVal)
|
||||
{
|
||||
_pData->LockConsole();
|
||||
auto Unlock = wil::scope_exit([&] {
|
||||
auto Unlock = wil::scope_exit([&]() noexcept {
|
||||
_pData->UnlockConsole();
|
||||
});
|
||||
|
||||
|
@ -758,7 +758,7 @@ IFACEMETHODIMP UiaTextRangeBase::MoveEndpointByRange(_In_ TextPatternRangeEndpoi
|
|||
_In_ TextPatternRangeEndpoint targetEndpoint)
|
||||
{
|
||||
_pData->LockConsole();
|
||||
auto Unlock = wil::scope_exit([&] {
|
||||
auto Unlock = wil::scope_exit([&]() noexcept {
|
||||
_pData->UnlockConsole();
|
||||
});
|
||||
|
||||
|
@ -866,7 +866,7 @@ IFACEMETHODIMP UiaTextRangeBase::MoveEndpointByRange(_In_ TextPatternRangeEndpoi
|
|||
IFACEMETHODIMP UiaTextRangeBase::Select()
|
||||
{
|
||||
_pData->LockConsole();
|
||||
auto Unlock = wil::scope_exit([&] {
|
||||
auto Unlock = wil::scope_exit([&]() noexcept {
|
||||
_pData->UnlockConsole();
|
||||
});
|
||||
|
||||
|
@ -895,7 +895,7 @@ IFACEMETHODIMP UiaTextRangeBase::Select()
|
|||
}
|
||||
|
||||
// we don't support this
|
||||
IFACEMETHODIMP UiaTextRangeBase::AddToSelection()
|
||||
IFACEMETHODIMP UiaTextRangeBase::AddToSelection() noexcept
|
||||
{
|
||||
// TODO GitHub #1914: Re-attach Tracing to UIA Tree
|
||||
//Tracing::s_TraceUia(this, ApiCall::AddToSelection, nullptr);
|
||||
|
@ -903,7 +903,7 @@ IFACEMETHODIMP UiaTextRangeBase::AddToSelection()
|
|||
}
|
||||
|
||||
// we don't support this
|
||||
IFACEMETHODIMP UiaTextRangeBase::RemoveFromSelection()
|
||||
IFACEMETHODIMP UiaTextRangeBase::RemoveFromSelection() noexcept
|
||||
{
|
||||
// TODO GitHub #1914: Re-attach Tracing to UIA Tree
|
||||
//Tracing::s_TraceUia(this, ApiCall::RemoveFromSelection, nullptr);
|
||||
|
@ -913,7 +913,7 @@ IFACEMETHODIMP UiaTextRangeBase::RemoveFromSelection()
|
|||
IFACEMETHODIMP UiaTextRangeBase::ScrollIntoView(_In_ BOOL alignToTop)
|
||||
{
|
||||
_pData->LockConsole();
|
||||
auto Unlock = wil::scope_exit([&] {
|
||||
auto Unlock = wil::scope_exit([&]() noexcept {
|
||||
_pData->UnlockConsole();
|
||||
});
|
||||
|
||||
|
@ -997,7 +997,7 @@ IFACEMETHODIMP UiaTextRangeBase::ScrollIntoView(_In_ BOOL alignToTop)
|
|||
return S_OK;
|
||||
}
|
||||
|
||||
IFACEMETHODIMP UiaTextRangeBase::GetChildren(_Outptr_result_maybenull_ SAFEARRAY** ppRetVal)
|
||||
IFACEMETHODIMP UiaTextRangeBase::GetChildren(_Outptr_result_maybenull_ SAFEARRAY** ppRetVal) noexcept
|
||||
{
|
||||
// TODO GitHub #1914: Re-attach Tracing to UIA Tree
|
||||
//Tracing::s_TraceUia(this, ApiCall::GetChildren, nullptr);
|
||||
|
@ -1037,7 +1037,7 @@ const COORD UiaTextRangeBase::_getScreenFontSize() const
|
|||
// - <none>
|
||||
// Return Value:
|
||||
// - The number of rows
|
||||
const unsigned int UiaTextRangeBase::_getTotalRows(IUiaData* pData)
|
||||
const unsigned int UiaTextRangeBase::_getTotalRows(IUiaData* pData) noexcept
|
||||
{
|
||||
return pData->GetTextBuffer().TotalRowCount();
|
||||
}
|
||||
|
@ -1109,7 +1109,7 @@ const unsigned int UiaTextRangeBase::_rowCountInRange(IUiaData* pData) const
|
|||
// Return Value:
|
||||
// - the equivalent ScreenInfoRow.
|
||||
const ScreenInfoRow UiaTextRangeBase::_textBufferRowToScreenInfoRow(IUiaData* pData,
|
||||
const TextBufferRow row)
|
||||
const TextBufferRow row) noexcept
|
||||
{
|
||||
const int firstRowIndex = pData->GetTextBuffer().GetFirstRowIndex();
|
||||
return _normalizeRow(pData, row - firstRowIndex);
|
||||
|
@ -1122,7 +1122,7 @@ const ScreenInfoRow UiaTextRangeBase::_textBufferRowToScreenInfoRow(IUiaData* pD
|
|||
// - row - the ScreenInfoRow to convert
|
||||
// Return Value:
|
||||
// - the equivalent ViewportRow.
|
||||
const ViewportRow UiaTextRangeBase::_screenInfoRowToViewportRow(IUiaData* pData, const ScreenInfoRow row)
|
||||
const ViewportRow UiaTextRangeBase::_screenInfoRowToViewportRow(IUiaData* pData, const ScreenInfoRow row) noexcept
|
||||
{
|
||||
const SMALL_RECT viewport = pData->GetViewport().ToInclusive();
|
||||
return _screenInfoRowToViewportRow(row, viewport);
|
||||
|
@ -1136,7 +1136,7 @@ const ViewportRow UiaTextRangeBase::_screenInfoRowToViewportRow(IUiaData* pData,
|
|||
// Return Value:
|
||||
// - the equivalent ViewportRow.
|
||||
const ViewportRow UiaTextRangeBase::_screenInfoRowToViewportRow(const ScreenInfoRow row,
|
||||
const SMALL_RECT viewport)
|
||||
const SMALL_RECT viewport) noexcept
|
||||
{
|
||||
return row - viewport.Top;
|
||||
}
|
||||
|
@ -1149,7 +1149,7 @@ const ViewportRow UiaTextRangeBase::_screenInfoRowToViewportRow(const ScreenInfo
|
|||
// - the non-normalized row index
|
||||
// Return Value:
|
||||
// - the normalized row index
|
||||
const Row UiaTextRangeBase::_normalizeRow(IUiaData* pData, const Row row)
|
||||
const Row UiaTextRangeBase::_normalizeRow(IUiaData* pData, const Row row) noexcept
|
||||
{
|
||||
const unsigned int totalRows = _getTotalRows(pData);
|
||||
return ((row + totalRows) % totalRows);
|
||||
|
@ -1161,7 +1161,7 @@ const Row UiaTextRangeBase::_normalizeRow(IUiaData* pData, const Row row)
|
|||
// - viewport - The viewport to measure
|
||||
// Return Value:
|
||||
// - The viewport height
|
||||
const unsigned int UiaTextRangeBase::_getViewportHeight(const SMALL_RECT viewport)
|
||||
const unsigned int UiaTextRangeBase::_getViewportHeight(const SMALL_RECT viewport) noexcept
|
||||
{
|
||||
FAIL_FAST_IF(!(viewport.Bottom >= viewport.Top));
|
||||
// + 1 because COORD is inclusive on both sides so subtracting top
|
||||
|
@ -1175,7 +1175,7 @@ const unsigned int UiaTextRangeBase::_getViewportHeight(const SMALL_RECT viewpor
|
|||
// - viewport - The viewport to measure
|
||||
// Return Value:
|
||||
// - The viewport width
|
||||
const unsigned int UiaTextRangeBase::_getViewportWidth(const SMALL_RECT viewport)
|
||||
const unsigned int UiaTextRangeBase::_getViewportWidth(const SMALL_RECT viewport) noexcept
|
||||
{
|
||||
FAIL_FAST_IF(!(viewport.Right >= viewport.Left));
|
||||
|
||||
|
@ -1192,8 +1192,8 @@ const unsigned int UiaTextRangeBase::_getViewportWidth(const SMALL_RECT viewport
|
|||
// Return Value:
|
||||
// - true if the row is within the bounds of the viewport
|
||||
const bool UiaTextRangeBase::_isScreenInfoRowInViewport(IUiaData* pData,
|
||||
const ScreenInfoRow row)
|
||||
{
|
||||
const ScreenInfoRow row) noexcept
|
||||
{
|
||||
return _isScreenInfoRowInViewport(row, pData->GetViewport().ToInclusive());
|
||||
}
|
||||
|
||||
|
@ -1205,7 +1205,7 @@ const bool UiaTextRangeBase::_isScreenInfoRowInViewport(IUiaData* pData,
|
|||
// Return Value:
|
||||
// - true if the row is within the bounds of the viewport
|
||||
const bool UiaTextRangeBase::_isScreenInfoRowInViewport(const ScreenInfoRow row,
|
||||
const SMALL_RECT viewport)
|
||||
const SMALL_RECT viewport) noexcept
|
||||
{
|
||||
const ViewportRow viewportRow = _screenInfoRowToViewportRow(row, viewport);
|
||||
return viewportRow >= 0 &&
|
||||
|
@ -1219,7 +1219,7 @@ const bool UiaTextRangeBase::_isScreenInfoRowInViewport(const ScreenInfoRow row,
|
|||
// Return Value:
|
||||
// - the equivalent TextBufferRow.
|
||||
const TextBufferRow UiaTextRangeBase::_screenInfoRowToTextBufferRow(IUiaData* pData,
|
||||
const ScreenInfoRow row)
|
||||
const ScreenInfoRow row) noexcept
|
||||
{
|
||||
const TextBufferRow firstRowIndex = pData->GetTextBuffer().GetFirstRowIndex();
|
||||
return _normalizeRow(pData, row + firstRowIndex);
|
||||
|
@ -1326,7 +1326,7 @@ void UiaTextRangeBase::_addScreenInfoRowBoundaries(IUiaData* pData,
|
|||
// - <none>
|
||||
// Return Value:
|
||||
// - the index of the first row (0-indexed) of the screen info
|
||||
const unsigned int UiaTextRangeBase::_getFirstScreenInfoRowIndex()
|
||||
const unsigned int UiaTextRangeBase::_getFirstScreenInfoRowIndex() noexcept
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
@ -1337,7 +1337,7 @@ const unsigned int UiaTextRangeBase::_getFirstScreenInfoRowIndex()
|
|||
// - <none>
|
||||
// Return Value:
|
||||
// - the index of the last row (0-indexed) of the screen info
|
||||
const unsigned int UiaTextRangeBase::_getLastScreenInfoRowIndex(IUiaData* pData)
|
||||
const unsigned int UiaTextRangeBase::_getLastScreenInfoRowIndex(IUiaData* pData) noexcept
|
||||
{
|
||||
return _getTotalRows(pData) - 1;
|
||||
}
|
||||
|
@ -1348,7 +1348,7 @@ const unsigned int UiaTextRangeBase::_getLastScreenInfoRowIndex(IUiaData* pData)
|
|||
// - <none>
|
||||
// Return Value:
|
||||
// - the index of the first column (0-indexed) of the screen info rows
|
||||
const Column UiaTextRangeBase::_getFirstColumnIndex()
|
||||
const Column UiaTextRangeBase::_getFirstColumnIndex() noexcept
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -129,7 +129,7 @@ namespace Microsoft::Console::Types
|
|||
const Column firstColumnInRow,
|
||||
const Column lastColumnInRow,
|
||||
const MovementIncrement increment,
|
||||
const MovementDirection direction);
|
||||
const MovementDirection direction) noexcept;
|
||||
|
||||
#ifdef UNIT_TESTING
|
||||
friend class ::UiaTextRangeTests;
|
||||
|
@ -139,14 +139,14 @@ namespace Microsoft::Console::Types
|
|||
public:
|
||||
virtual ~UiaTextRangeBase() = default;
|
||||
|
||||
const IdType GetId() const;
|
||||
const Endpoint GetStart() const;
|
||||
const Endpoint GetEnd() const;
|
||||
const bool IsDegenerate() const;
|
||||
const IdType GetId() const noexcept;
|
||||
const Endpoint GetStart() const noexcept;
|
||||
const Endpoint GetEnd() const noexcept;
|
||||
const bool IsDegenerate() const noexcept;
|
||||
|
||||
// TODO GitHub #605:
|
||||
// only used for UiaData::FindText. Remove after Search added properly
|
||||
void SetRangeValues(const Endpoint start, const Endpoint end, const bool isDegenerate);
|
||||
void SetRangeValues(const Endpoint start, const Endpoint end, const bool isDegenerate) noexcept;
|
||||
|
||||
// IUnknown methods
|
||||
IFACEMETHODIMP_(ULONG)
|
||||
|
@ -158,22 +158,22 @@ namespace Microsoft::Console::Types
|
|||
|
||||
// ITextRangeProvider methods
|
||||
virtual IFACEMETHODIMP Clone(_Outptr_result_maybenull_ ITextRangeProvider** ppRetVal) = 0;
|
||||
IFACEMETHODIMP Compare(_In_opt_ ITextRangeProvider* pRange, _Out_ BOOL* pRetVal) override;
|
||||
IFACEMETHODIMP Compare(_In_opt_ ITextRangeProvider* pRange, _Out_ BOOL* pRetVal) noexcept override;
|
||||
IFACEMETHODIMP CompareEndpoints(_In_ TextPatternRangeEndpoint endpoint,
|
||||
_In_ ITextRangeProvider* pTargetRange,
|
||||
_In_ TextPatternRangeEndpoint targetEndpoint,
|
||||
_Out_ int* pRetVal) override;
|
||||
_Out_ int* pRetVal) noexcept override;
|
||||
IFACEMETHODIMP ExpandToEnclosingUnit(_In_ TextUnit unit) override;
|
||||
IFACEMETHODIMP FindAttribute(_In_ TEXTATTRIBUTEID textAttributeId,
|
||||
_In_ VARIANT val,
|
||||
_In_ BOOL searchBackward,
|
||||
_Outptr_result_maybenull_ ITextRangeProvider** ppRetVal) override;
|
||||
_Outptr_result_maybenull_ ITextRangeProvider** ppRetVal) noexcept override;
|
||||
virtual IFACEMETHODIMP FindText(_In_ BSTR text,
|
||||
_In_ BOOL searchBackward,
|
||||
_In_ BOOL ignoreCase,
|
||||
_Outptr_result_maybenull_ ITextRangeProvider** ppRetVal) = 0;
|
||||
IFACEMETHODIMP GetAttributeValue(_In_ TEXTATTRIBUTEID textAttributeId,
|
||||
_Out_ VARIANT* pRetVal) override;
|
||||
_Out_ VARIANT* pRetVal) noexcept override;
|
||||
IFACEMETHODIMP GetBoundingRectangles(_Outptr_result_maybenull_ SAFEARRAY** ppRetVal) override;
|
||||
IFACEMETHODIMP GetEnclosingElement(_Outptr_result_maybenull_ IRawElementProviderSimple** ppRetVal) override;
|
||||
IFACEMETHODIMP GetText(_In_ int maxLength,
|
||||
|
@ -189,10 +189,10 @@ namespace Microsoft::Console::Types
|
|||
_In_ ITextRangeProvider* pTargetRange,
|
||||
_In_ TextPatternRangeEndpoint targetEndpoint) override;
|
||||
IFACEMETHODIMP Select() override;
|
||||
IFACEMETHODIMP AddToSelection() override;
|
||||
IFACEMETHODIMP RemoveFromSelection() override;
|
||||
IFACEMETHODIMP AddToSelection() noexcept override;
|
||||
IFACEMETHODIMP RemoveFromSelection() noexcept override;
|
||||
IFACEMETHODIMP ScrollIntoView(_In_ BOOL alignToTop) override;
|
||||
IFACEMETHODIMP GetChildren(_Outptr_result_maybenull_ SAFEARRAY** ppRetVal) override;
|
||||
IFACEMETHODIMP GetChildren(_Outptr_result_maybenull_ SAFEARRAY** ppRetVal) noexcept override;
|
||||
|
||||
protected:
|
||||
#if _DEBUG
|
||||
|
@ -225,7 +225,7 @@ namespace Microsoft::Console::Types
|
|||
|
||||
void Initialize(_In_ const UiaPoint point);
|
||||
|
||||
UiaTextRangeBase(const UiaTextRangeBase& a);
|
||||
UiaTextRangeBase(const UiaTextRangeBase& a) noexcept;
|
||||
|
||||
// used to debug objects passed back and forth
|
||||
// between the provider and the client
|
||||
|
@ -262,13 +262,13 @@ namespace Microsoft::Console::Types
|
|||
static const COORD _getScreenBufferCoords(IUiaData* pData);
|
||||
virtual const COORD _getScreenFontSize() const;
|
||||
|
||||
static const unsigned int _getTotalRows(IUiaData* pData);
|
||||
static const unsigned int _getTotalRows(IUiaData* pData) noexcept;
|
||||
static const unsigned int _getRowWidth(IUiaData* pData);
|
||||
|
||||
static const unsigned int _getFirstScreenInfoRowIndex();
|
||||
static const unsigned int _getLastScreenInfoRowIndex(IUiaData* pData);
|
||||
static const unsigned int _getFirstScreenInfoRowIndex() noexcept;
|
||||
static const unsigned int _getLastScreenInfoRowIndex(IUiaData* pData) noexcept;
|
||||
|
||||
static const Column _getFirstColumnIndex();
|
||||
static const Column _getFirstColumnIndex() noexcept;
|
||||
static const Column _getLastColumnIndex(IUiaData* pData);
|
||||
|
||||
const unsigned int _rowCountInRange(IUiaData* pData) const;
|
||||
|
@ -276,10 +276,10 @@ namespace Microsoft::Console::Types
|
|||
static const TextBufferRow _endpointToTextBufferRow(IUiaData* pData,
|
||||
const Endpoint endpoint);
|
||||
static const ScreenInfoRow _textBufferRowToScreenInfoRow(IUiaData* pData,
|
||||
const TextBufferRow row);
|
||||
const TextBufferRow row) noexcept;
|
||||
|
||||
static const TextBufferRow _screenInfoRowToTextBufferRow(IUiaData* pData,
|
||||
const ScreenInfoRow row);
|
||||
const ScreenInfoRow row) noexcept;
|
||||
static const Endpoint _textBufferRowToEndpoint(IUiaData* pData, const TextBufferRow row);
|
||||
|
||||
static const ScreenInfoRow _endpointToScreenInfoRow(IUiaData* pData,
|
||||
|
@ -295,20 +295,20 @@ namespace Microsoft::Console::Types
|
|||
static const Column _endpointToColumn(IUiaData* pData,
|
||||
const Endpoint endpoint);
|
||||
|
||||
static const Row _normalizeRow(IUiaData* pData, const Row row);
|
||||
static const Row _normalizeRow(IUiaData* pData, const Row row) noexcept;
|
||||
|
||||
static const ViewportRow _screenInfoRowToViewportRow(IUiaData* pData,
|
||||
const ScreenInfoRow row);
|
||||
const ScreenInfoRow row) noexcept;
|
||||
static const ViewportRow _screenInfoRowToViewportRow(const ScreenInfoRow row,
|
||||
const SMALL_RECT viewport);
|
||||
const SMALL_RECT viewport) noexcept;
|
||||
|
||||
static const bool _isScreenInfoRowInViewport(IUiaData* pData,
|
||||
const ScreenInfoRow row);
|
||||
const ScreenInfoRow row) noexcept;
|
||||
static const bool _isScreenInfoRowInViewport(const ScreenInfoRow row,
|
||||
const SMALL_RECT viewport);
|
||||
const SMALL_RECT viewport) noexcept;
|
||||
|
||||
static const unsigned int _getViewportHeight(const SMALL_RECT viewport);
|
||||
static const unsigned int _getViewportWidth(const SMALL_RECT viewport);
|
||||
static const unsigned int _getViewportHeight(const SMALL_RECT viewport) noexcept;
|
||||
static const unsigned int _getViewportWidth(const SMALL_RECT viewport) noexcept;
|
||||
|
||||
void _addScreenInfoRowBoundaries(IUiaData* pData,
|
||||
const ScreenInfoRow screenInfoRow,
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
// - wstr - The UTF-16 string to parse.
|
||||
// Return Value:
|
||||
// - A view into the string given of just the next codepoint unit.
|
||||
std::wstring_view Utf16Parser::ParseNext(std::wstring_view wstr)
|
||||
std::wstring_view Utf16Parser::ParseNext(std::wstring_view wstr) noexcept
|
||||
{
|
||||
for (size_t pos = 0; pos < wstr.size(); ++pos)
|
||||
{
|
||||
|
|
|
@ -29,7 +29,7 @@ public:
|
|||
~CodepointWidthDetector() = default;
|
||||
CodepointWidthDetector& operator=(const CodepointWidthDetector&) = delete;
|
||||
|
||||
CodepointWidth GetWidth(const std::wstring_view glyph) const noexcept;
|
||||
CodepointWidth GetWidth(const std::wstring_view glyph) const;
|
||||
bool IsWide(const std::wstring_view glyph) const;
|
||||
bool IsWide(const wchar_t wch) const noexcept;
|
||||
void SetFallbackMethod(std::function<bool(const std::wstring_view)> pfnFallback);
|
||||
|
|
|
@ -13,6 +13,6 @@ Abstract:
|
|||
#include <string_view>
|
||||
|
||||
bool IsGlyphFullWidth(const std::wstring_view glyph);
|
||||
bool IsGlyphFullWidth(const wchar_t wch);
|
||||
bool IsGlyphFullWidth(const wchar_t wch) noexcept;
|
||||
void SetGlyphWidthFallback(std::function<bool(std::wstring_view)> pfnFallback);
|
||||
void NotifyGlyphWidthFontChanged();
|
||||
void NotifyGlyphWidthFontChanged() noexcept;
|
||||
|
|
|
@ -245,7 +245,7 @@ public:
|
|||
void SetActiveModifierKeys(const DWORD activeModifierKeys) noexcept;
|
||||
void DeactivateModifierKey(const ModifierKeyState modifierKey) noexcept;
|
||||
void ActivateModifierKey(const ModifierKeyState modifierKey) noexcept;
|
||||
bool DoActiveModifierKeysMatch(const std::unordered_set<ModifierKeyState>& consoleModifiers) const noexcept;
|
||||
bool DoActiveModifierKeysMatch(const std::unordered_set<ModifierKeyState>& consoleModifiers) const;
|
||||
bool IsCommandLineEditingKey() const noexcept;
|
||||
bool IsPopupKey() const noexcept;
|
||||
|
||||
|
|
|
@ -28,7 +28,7 @@ private:
|
|||
|
||||
public:
|
||||
static std::vector<std::vector<wchar_t>> Parse(std::wstring_view wstr);
|
||||
static std::wstring_view ParseNext(std::wstring_view wstr);
|
||||
static std::wstring_view ParseNext(std::wstring_view wstr) noexcept;
|
||||
|
||||
// Routine Description:
|
||||
// - checks if wchar is a utf16 leading surrogate
|
||||
|
|
|
@ -15,7 +15,7 @@ namespace Microsoft::Console::Utils
|
|||
{
|
||||
bool IsValidHandle(const HANDLE handle) noexcept;
|
||||
|
||||
short ClampToShortMax(const long value, const short min);
|
||||
short ClampToShortMax(const long value, const short min) noexcept;
|
||||
|
||||
std::wstring GuidToString(const GUID guid);
|
||||
GUID GuidFromString(const std::wstring wstr);
|
||||
|
@ -28,7 +28,7 @@ namespace Microsoft::Console::Utils
|
|||
void InitializeCampbellColorTableForConhost(gsl::span<COLORREF>& table);
|
||||
void SwapANSIColorOrderForConhost(gsl::span<COLORREF>& table);
|
||||
void Initialize256ColorTable(gsl::span<COLORREF>& table);
|
||||
void SetColorTableAlpha(gsl::span<COLORREF>& table, const BYTE newAlpha);
|
||||
void SetColorTableAlpha(gsl::span<COLORREF>& table, const BYTE newAlpha) noexcept;
|
||||
|
||||
constexpr uint16_t EndianSwap(uint16_t value)
|
||||
{
|
||||
|
|
|
@ -59,7 +59,7 @@ namespace Microsoft::Console::Types
|
|||
bool IsInBounds(const COORD& pos) const noexcept;
|
||||
|
||||
void Clamp(COORD& pos) const;
|
||||
Viewport Clamp(const Viewport& other) const;
|
||||
Viewport Clamp(const Viewport& other) const noexcept;
|
||||
|
||||
bool MoveInBounds(const ptrdiff_t move, COORD& pos) const noexcept;
|
||||
bool IncrementInBounds(COORD& pos) const noexcept;
|
||||
|
|
|
@ -13,7 +13,7 @@ using namespace Microsoft::Console;
|
|||
// - min: the minimum value to clamp to
|
||||
// Return Value:
|
||||
// - The clamped value as a short.
|
||||
short Utils::ClampToShortMax(const long value, const short min)
|
||||
short Utils::ClampToShortMax(const long value, const short min) noexcept
|
||||
{
|
||||
return static_cast<short>(std::clamp(value,
|
||||
static_cast<long>(min),
|
||||
|
@ -454,7 +454,7 @@ void Utils::Initialize256ColorTable(gsl::span<COLORREF>& table)
|
|||
// - newAlpha: the new value to use as the alpha for all the entries in that table.
|
||||
// Return Value:
|
||||
// - <none>
|
||||
void Utils::SetColorTableAlpha(gsl::span<COLORREF>& table, const BYTE newAlpha)
|
||||
void Utils::SetColorTableAlpha(gsl::span<COLORREF>& table, const BYTE newAlpha) noexcept
|
||||
{
|
||||
const auto shiftedAlpha = newAlpha << 24;
|
||||
for (auto& color : table)
|
||||
|
|
|
@ -194,7 +194,7 @@ void Viewport::Clamp(COORD& pos) const
|
|||
// - other - Viewport to clamp to the inside of this viewport
|
||||
// Return Value:
|
||||
// - Clamped viewport
|
||||
Viewport Viewport::Clamp(const Viewport& other) const
|
||||
Viewport Viewport::Clamp(const Viewport& other) const noexcept
|
||||
{
|
||||
auto clampMe = other.ToInclusive();
|
||||
|
||||
|
|
Loading…
Reference in a new issue