
In doing so, this removes all uses of the Encoder's stream operator, except for where it is currently still used in the generated IPC code. So the stream operator currently discards any errors, which is the existing behavior. A subsequent commit will propagate the errors.
73 lines
1.7 KiB
C++
73 lines
1.7 KiB
C++
/*
|
|
* Copyright (c) 2020-2021, Andreas Kling <kling@serenityos.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#include <AK/DeprecatedString.h>
|
|
#include <LibGfx/Point.h>
|
|
#include <LibGfx/Rect.h>
|
|
#include <LibIPC/Decoder.h>
|
|
#include <LibIPC/Encoder.h>
|
|
|
|
namespace Gfx {
|
|
|
|
template<typename T>
|
|
void Point<T>::constrain(Rect<T> const& rect)
|
|
{
|
|
m_x = AK::clamp<T>(x(), rect.left(), rect.right());
|
|
m_y = AK::clamp<T>(y(), rect.top(), rect.bottom());
|
|
}
|
|
|
|
template<typename T>
|
|
[[nodiscard]] Point<T> Point<T>::end_point_for_aspect_ratio(Point<T> const& previous_end_point, float aspect_ratio) const
|
|
{
|
|
VERIFY(aspect_ratio > 0);
|
|
const T x_sign = previous_end_point.x() >= x() ? 1 : -1;
|
|
const T y_sign = previous_end_point.y() >= y() ? 1 : -1;
|
|
T dx = AK::abs(previous_end_point.x() - x());
|
|
T dy = AK::abs(previous_end_point.y() - y());
|
|
if (dx > dy) {
|
|
dy = (T)((float)dx / aspect_ratio);
|
|
} else {
|
|
dx = (T)((float)dy * aspect_ratio);
|
|
}
|
|
return { x() + x_sign * dx, y() + y_sign * dy };
|
|
}
|
|
|
|
template<>
|
|
DeprecatedString IntPoint::to_deprecated_string() const
|
|
{
|
|
return DeprecatedString::formatted("[{},{}]", x(), y());
|
|
}
|
|
|
|
template<>
|
|
DeprecatedString FloatPoint::to_deprecated_string() const
|
|
{
|
|
return DeprecatedString::formatted("[{},{}]", x(), y());
|
|
}
|
|
|
|
}
|
|
|
|
namespace IPC {
|
|
|
|
template<>
|
|
ErrorOr<void> encode(Encoder& encoder, Gfx::IntPoint const& point)
|
|
{
|
|
TRY(encoder.encode(point.x()));
|
|
TRY(encoder.encode(point.y()));
|
|
return {};
|
|
}
|
|
|
|
template<>
|
|
ErrorOr<Gfx::IntPoint> decode(Decoder& decoder)
|
|
{
|
|
auto x = TRY(decoder.decode<int>());
|
|
auto y = TRY(decoder.decode<int>());
|
|
return Gfx::IntPoint { x, y };
|
|
}
|
|
|
|
}
|
|
|
|
template class Gfx::Point<int>;
|
|
template class Gfx::Point<float>;
|