新的布局语法,修复部分编译警告
This commit is contained in:
parent
7f37e2098d
commit
bbfe5ab665
@ -32,6 +32,8 @@ function(set_cpp_standard standard)
|
|||||||
# GCC/Clang 特定选项
|
# GCC/Clang 特定选项
|
||||||
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
||||||
add_compile_options(-Wall -Wextra)
|
add_compile_options(-Wall -Wextra)
|
||||||
|
# 禁用未使用参数的警告
|
||||||
|
add_compile_options(-Wno-unused-parameter)
|
||||||
# 根据 C++ 标准添加特定选项
|
# 根据 C++ 标准添加特定选项
|
||||||
if(${standard} GREATER 14) # 更兼容的写法,避免使用 GREATER_EQUAL
|
if(${standard} GREATER 14) # 更兼容的写法,避免使用 GREATER_EQUAL
|
||||||
add_compile_options(-Wshadow -Wnon-virtual-dtor)
|
add_compile_options(-Wshadow -Wnon-virtual-dtor)
|
||||||
|
@ -75,9 +75,7 @@ int main(int argc, char* argv[]) {
|
|||||||
mslot(mbutton)
|
mslot(mbutton)
|
||||||
.margin({10})
|
.margin({10})
|
||||||
.visibility(visibility_t::visible)
|
.visibility(visibility_t::visible)
|
||||||
[
|
(text_block)
|
||||||
text_block
|
|
||||||
]
|
|
||||||
);
|
);
|
||||||
|
|
||||||
// const auto button2 = mnew(mbutton)
|
// const auto button2 = mnew(mbutton)
|
||||||
@ -89,14 +87,12 @@ int main(int argc, char* argv[]) {
|
|||||||
|
|
||||||
const auto& window = mwindow::create({ 800, 600 }, L"Hello, World!");
|
const auto& window = mwindow::create({ 800, 600 }, L"Hello, World!");
|
||||||
window->set_content(
|
window->set_content(
|
||||||
mborder()
|
mnew(mborder)
|
||||||
[
|
[
|
||||||
mslot(mborder)
|
mslot(mborder)
|
||||||
.h_alignment(horizontal_alignment_t::center)
|
.h_alignment(horizontal_alignment_t::center)
|
||||||
.v_alignment(vertical_alignment_t::center)
|
.v_alignment(vertical_alignment_t::center)
|
||||||
[
|
(button)
|
||||||
button
|
|
||||||
]
|
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -68,7 +68,7 @@ enum class key_code : uint16_t {
|
|||||||
p = 0x29,
|
p = 0x29,
|
||||||
left_bracket = 0x2A, // [
|
left_bracket = 0x2A, // [
|
||||||
right_bracket = 0x2B, // ]
|
right_bracket = 0x2B, // ]
|
||||||
backslash = 0x2C, // \
|
backslash = 0x2C, // 左斜杠
|
||||||
|
|
||||||
caps_lock = 0x2D,
|
caps_lock = 0x2D,
|
||||||
a = 0x2E,
|
a = 0x2E,
|
||||||
|
@ -137,14 +137,14 @@ std::optional<linear_color> parse_rgb_rgba_color(const std::string& in_str) {
|
|||||||
|
|
||||||
// **按逗号分割**
|
// **按逗号分割**
|
||||||
const auto& components_str = split_string(content, ',');
|
const auto& components_str = split_string(content, ',');
|
||||||
const size_t expected_components = is_rgba ? 4 : 3;
|
const auto expected_components = is_rgba ? 4uz : 3uz;
|
||||||
|
|
||||||
if (components_str.size() != expected_components) {
|
if (components_str.size() != expected_components) {
|
||||||
return std::nullopt; // 组件数量不正确
|
return std::nullopt; // 组件数量不正确
|
||||||
}
|
}
|
||||||
|
|
||||||
std::array<float, 4> components;
|
std::array<float, 4> components;
|
||||||
int32_t index = 0;
|
auto index = 0uz;
|
||||||
bool uses_float = false;
|
bool uses_float = false;
|
||||||
bool uses_int = false;
|
bool uses_int = false;
|
||||||
|
|
||||||
|
@ -48,6 +48,7 @@ bool windows_render_state::init(ID3D11Device* in_device, IDXGIFactory* in_factor
|
|||||||
.Denominator = 1
|
.Denominator = 1
|
||||||
},
|
},
|
||||||
.Format = format,
|
.Format = format,
|
||||||
|
.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED,
|
||||||
},
|
},
|
||||||
.SampleDesc = {
|
.SampleDesc = {
|
||||||
.Count = 1,
|
.Count = 1,
|
||||||
@ -181,13 +182,11 @@ void windows_render_state::rebuild_swapchain(const Eigen::Vector2i& size) {
|
|||||||
context->Flush();
|
context->Flush();
|
||||||
|
|
||||||
// 2. 释放当前渲染目标视图
|
// 2. 释放当前渲染目标视图
|
||||||
DXGI_FORMAT format = DXGI_FORMAT_B8G8R8A8_UNORM; // 默认格式
|
|
||||||
auto dx_render_target_view = get_dx_render_target_view();
|
auto dx_render_target_view = get_dx_render_target_view();
|
||||||
if (dx_render_target_view) {
|
if (dx_render_target_view) {
|
||||||
// 保存格式以便稍后使用
|
// 保存格式以便稍后使用
|
||||||
D3D11_RENDER_TARGET_VIEW_DESC rtv_desc = {};
|
D3D11_RENDER_TARGET_VIEW_DESC rtv_desc = {};
|
||||||
dx_render_target_view->GetDesc(&rtv_desc);
|
dx_render_target_view->GetDesc(&rtv_desc);
|
||||||
format = rtv_desc.Format;
|
|
||||||
|
|
||||||
// 释放资源
|
// 释放资源
|
||||||
dx_render_target_view->Release();
|
dx_render_target_view->Release();
|
||||||
|
@ -48,7 +48,6 @@ void rw_texture2d::create(const texture_data& in_data) {
|
|||||||
desc.sample_count = 1;
|
desc.sample_count = 1;
|
||||||
|
|
||||||
auto d3d_device = (ID3D11Device*)sg_d3d11_device();
|
auto d3d_device = (ID3D11Device*)sg_d3d11_device();
|
||||||
auto d3d_context = (ID3D11DeviceContext*)sg_d3d11_device_context();
|
|
||||||
|
|
||||||
// 创建纹理
|
// 创建纹理
|
||||||
ID3D11Texture2D* tex2d = nullptr;
|
ID3D11Texture2D* tex2d = nullptr;
|
||||||
|
@ -39,7 +39,7 @@ public:
|
|||||||
auto get_line_spacing() const { return line_spacing_; }
|
auto get_line_spacing() const { return line_spacing_; }
|
||||||
auto get_max_width() const { return max_width_; }
|
auto get_max_width() const { return max_width_; }
|
||||||
|
|
||||||
hit_test_handle on_mouse_move(const Eigen::Vector2f& in_position) override { return hit_test_handle::handled(); }
|
hit_test_handle on_mouse_move(const Eigen::Vector2f& in_position) override { (void)in_position; return hit_test_handle::handled(); }
|
||||||
auto compute_desired_size(float in_layout_scale_multiplier) const -> Eigen::Vector2f override;
|
auto compute_desired_size(float in_layout_scale_multiplier) const -> Eigen::Vector2f override;
|
||||||
hit_test_handle on_mouse_wheel(const Eigen::Vector2f& in_position, const wheel_event& in_delta) override;
|
hit_test_handle on_mouse_wheel(const Eigen::Vector2f& in_position, const wheel_event& in_delta) override;
|
||||||
private:
|
private:
|
||||||
|
@ -7,5 +7,5 @@
|
|||||||
*/
|
*/
|
||||||
class mleaf_widget : public mwidget {
|
class mleaf_widget : public mwidget {
|
||||||
public:
|
public:
|
||||||
void arrange_children(const geometry_t& in_allotted_geometry) override {}
|
void arrange_children(const geometry_t& in_allotted_geometry) override { (void)in_allotted_geometry; }
|
||||||
};
|
};
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
return me(); \
|
return me(); \
|
||||||
} \
|
} \
|
||||||
const auto& get() const { return widget_; } \
|
const auto& get() const { return widget_; } \
|
||||||
auto& operator[](const std::shared_ptr<mwidget>& in_widget) { \
|
auto& operator()(const std::shared_ptr<mwidget>& in_widget) { \
|
||||||
set(in_widget); \
|
set(in_widget); \
|
||||||
return me(); \
|
return me(); \
|
||||||
} \
|
} \
|
||||||
|
@ -6,29 +6,6 @@
|
|||||||
#include "widget_new.h"
|
#include "widget_new.h"
|
||||||
#include "compound_widget/mbutton.h"
|
#include "compound_widget/mbutton.h"
|
||||||
|
|
||||||
// 前向声明
|
|
||||||
template<typename WidgetType>
|
|
||||||
struct mwidget_decl;
|
|
||||||
|
|
||||||
template<typename T>
|
|
||||||
concept has_add_slot = requires(T& t) {
|
|
||||||
{ t.add_slot() };
|
|
||||||
};
|
|
||||||
|
|
||||||
template<typename T>
|
|
||||||
concept has_set_content = requires(T& t, std::shared_ptr<mwidget> in_widget) {
|
|
||||||
t.set_content(in_widget);
|
|
||||||
};
|
|
||||||
|
|
||||||
template<typename WidgetType>
|
|
||||||
struct mwidget_slot_guard {
|
|
||||||
auto& operator+(const typename WidgetType::slot_type& in_slot) {
|
|
||||||
slots_.push_back(in_slot);
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
std::vector<typename WidgetType::slot_type> slots_;
|
|
||||||
};
|
|
||||||
|
|
||||||
template<typename WidgetType>
|
template<typename WidgetType>
|
||||||
struct mwidget_decl {
|
struct mwidget_decl {
|
||||||
mwidget_decl() {
|
mwidget_decl() {
|
||||||
@ -44,16 +21,14 @@ struct mwidget_decl {
|
|||||||
mwidget_decl(const mwidget_decl&) = delete;
|
mwidget_decl(const mwidget_decl&) = delete;
|
||||||
mwidget_decl& operator=(const mwidget_decl&) = delete;
|
mwidget_decl& operator=(const mwidget_decl&) = delete;
|
||||||
|
|
||||||
std::shared_ptr<WidgetType> operator<<=(const mwidget_slot_guard<WidgetType>& in_guard) {
|
template<typename ...Args>
|
||||||
for (const auto& slot: in_guard.slots_) {
|
auto operator[](Args&&... in_args) {
|
||||||
widget_->push_slot(slot);
|
return (*widget_)[std::forward<Args>(in_args)...];
|
||||||
}
|
}
|
||||||
return widget_;
|
|
||||||
}
|
|
||||||
|
|
||||||
operator std::shared_ptr<mwidget>() const { return widget_; }
|
operator std::shared_ptr<mwidget>() const { return widget_; }
|
||||||
std::shared_ptr<WidgetType> widget_;
|
std::shared_ptr<WidgetType> widget_;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define mslot(type) type::slot_type()
|
#define mslot(type) type::slot_type()
|
||||||
#define mnew(type, ...) mwidget_decl<type>(__VA_ARGS__) <<= mwidget_slot_guard<type>()
|
#define mnew(type, ...) mwidget_decl<type>(__VA_ARGS__)
|
||||||
|
@ -288,7 +288,7 @@ public:
|
|||||||
mouse_.position = window_pos;
|
mouse_.position = window_pos;
|
||||||
|
|
||||||
// 执行命中测试,查找鼠标位置下的控件
|
// 执行命中测试,查找鼠标位置下的控件
|
||||||
const auto& result = perform_hit_test(window_pos, [this](mwidget* widget, const Eigen::Vector2f& local_pos) {
|
const auto& result = perform_hit_test(window_pos, [](mwidget* widget, const Eigen::Vector2f& local_pos) {
|
||||||
return widget->on_mouse_move(local_pos);
|
return widget->on_mouse_move(local_pos);
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -330,7 +330,6 @@ public:
|
|||||||
return widget->on_mouse_button_up(local_pos, button);
|
return widget->on_mouse_button_up(local_pos, button);
|
||||||
});
|
});
|
||||||
|
|
||||||
const auto& hit_widget = hit_result.widget;
|
|
||||||
const auto& widget_local_pos = hit_result.widget_space_pos;
|
const auto& widget_local_pos = hit_result.widget_space_pos;
|
||||||
|
|
||||||
// 获取之前点击的控件
|
// 获取之前点击的控件
|
||||||
|
Loading…
x
Reference in New Issue
Block a user