This commit is contained in:
Nomango 2019-08-21 12:47:19 +08:00
parent 79fa3d8048
commit 7039d00e61
4 changed files with 41 additions and 10 deletions

View File

@ -31,6 +31,7 @@ namespace kiwano
: opacity_(1.f)
, collecting_status_(false)
, antialias_(true)
, fast_global_transform_(true)
, text_antialias_(TextAntialias::GrayScale)
{
status_.primitives = 0;
@ -537,7 +538,7 @@ namespace kiwano
Matrix3x2 RenderTarget::GetGlobalTransform() const
{
return global_matrix_;
return global_transform_;
}
void RenderTarget::SetTransform(const Matrix3x2& matrix)
@ -550,8 +551,16 @@ namespace kiwano
if (SUCCEEDED(hr))
{
Matrix3x2 result = matrix * global_matrix_;
render_target_->SetTransform(DX::ConvertToMatrix3x2F(&result));
if (fast_global_transform_)
{
render_target_->SetTransform(DX::ConvertToMatrix3x2F(&matrix));
}
else
{
Matrix3x2 result = matrix * global_transform_;
render_target_->SetTransform(DX::ConvertToMatrix3x2F(&result));
}
}
ThrowIfFailed(hr);
@ -559,7 +568,20 @@ namespace kiwano
void RenderTarget::SetGlobalTransform(const Matrix3x2& matrix)
{
global_matrix_ = matrix;
SetGlobalTransform(&matrix);
}
void RenderTarget::SetGlobalTransform(const Matrix3x2* matrix)
{
if (matrix)
{
global_transform_ = *matrix;
fast_global_transform_ = false;
}
else
{
fast_global_transform_ = true;
}
}
void RenderTarget::SetOpacity(Float32 opacity)
@ -638,9 +660,12 @@ namespace kiwano
bool RenderTarget::CheckVisibility(Rect const& bounds, Matrix3x2 const& transform)
{
return Rect{ Point{}, reinterpret_cast<const Size&>(render_target_->GetSize()) }.Intersects(
Matrix3x2(transform * global_matrix_).Transform(bounds)
);
Rect visible_size = { Point{}, reinterpret_cast<const Size&>(render_target_->GetSize()) };
if (fast_global_transform_)
{
return visible_size.Intersects(transform.Transform(bounds));
}
return visible_size.Intersects(Matrix3x2(transform * global_transform_).Transform(bounds));
}
void RenderTarget::SetCollectingStatus(bool collecting)

View File

@ -154,6 +154,10 @@ namespace kiwano
const Matrix3x2& matrix
);
void SetGlobalTransform(
const Matrix3x2* matrix
);
// ÉèÖÿ¹¾â³Ýģʽ
void SetAntialiasMode(
bool enabled
@ -164,6 +168,7 @@ namespace kiwano
TextAntialias mode
);
// 检查边界是否在视区内
bool CheckVisibility(
Rect const& bounds,
Matrix3x2 const& transform
@ -200,6 +205,7 @@ namespace kiwano
protected:
Float32 opacity_;
bool antialias_;
bool fast_global_transform_;
mutable bool collecting_status_;
mutable Status status_;
TextAntialias text_antialias_;
@ -208,7 +214,7 @@ namespace kiwano
ComPtr<ID2D1SolidColorBrush> default_brush_;
ComPtr<ID2D1Brush> current_brush_;
ComPtr<ID2DDeviceResources> device_resources_;
Matrix3x2 global_matrix_;
Matrix3x2 global_transform_;
};

View File

@ -732,7 +732,7 @@ namespace kiwano
{
case ResolutionMode::Fixed:
{
SetGlobalTransform(Matrix3x2{});
SetGlobalTransform(nullptr);
break;
}

View File

@ -470,7 +470,7 @@ namespace kiwano
font.italic ? DWRITE_FONT_STYLE_ITALIC : DWRITE_FONT_STYLE_NORMAL,
DWRITE_FONT_STRETCH_NORMAL,
font.size,
L"en-us",
L"",
&output
);