104 lines
2.7 KiB
C++
104 lines
2.7 KiB
C++
#include <gtest/gtest.h>
|
|
|
|
#include "panels/ViewportPanelContent.h"
|
|
|
|
#include <imgui.h>
|
|
|
|
namespace {
|
|
|
|
class ImGuiContextScope {
|
|
public:
|
|
ImGuiContextScope() {
|
|
IMGUI_CHECKVERSION();
|
|
ImGui::CreateContext();
|
|
}
|
|
|
|
~ImGuiContextScope() {
|
|
ImGui::DestroyContext();
|
|
}
|
|
};
|
|
|
|
void BeginTestFrame() {
|
|
ImGuiIO& io = ImGui::GetIO();
|
|
io.DisplaySize = ImVec2(640.0f, 480.0f);
|
|
io.DeltaTime = 1.0f / 60.0f;
|
|
unsigned char* fontPixels = nullptr;
|
|
int fontWidth = 0;
|
|
int fontHeight = 0;
|
|
io.Fonts->GetTexDataAsRGBA32(&fontPixels, &fontWidth, &fontHeight);
|
|
io.Fonts->SetTexID(static_cast<ImTextureID>(1));
|
|
ImGui::GetStyle().WindowPadding = ImVec2(0.0f, 0.0f);
|
|
|
|
ImGui::NewFrame();
|
|
ImGui::SetNextWindowPos(ImVec2(0.0f, 0.0f));
|
|
ImGui::SetNextWindowSize(ImVec2(320.0f, 240.0f));
|
|
ASSERT_TRUE(ImGui::Begin(
|
|
"ViewportPanelContentTestWindow",
|
|
nullptr,
|
|
ImGuiWindowFlags_NoResize |
|
|
ImGuiWindowFlags_NoMove |
|
|
ImGuiWindowFlags_NoTitleBar |
|
|
ImGuiWindowFlags_NoCollapse |
|
|
ImGuiWindowFlags_NoSavedSettings));
|
|
}
|
|
|
|
void EndTestFrame() {
|
|
ImGui::End();
|
|
ImGui::EndFrame();
|
|
}
|
|
|
|
} // namespace
|
|
|
|
TEST(ViewportPanelContentTest, AllowOverlapDefaultItemClickMissesMiddleClickOnFirstFrame) {
|
|
ImGuiContextScope contextScope;
|
|
ImGuiIO& io = ImGui::GetIO();
|
|
|
|
BeginTestFrame();
|
|
EndTestFrame();
|
|
|
|
io.MousePos = ImVec2(32.0f, 32.0f);
|
|
io.MouseDown[ImGuiMouseButton_Middle] = true;
|
|
BeginTestFrame();
|
|
|
|
ImGui::SetCursorScreenPos(ImVec2(16.0f, 16.0f));
|
|
|
|
ImGui::SetNextItemAllowOverlap();
|
|
ImGui::InvisibleButton(
|
|
"##ViewportOverlapProbe",
|
|
ImVec2(120.0f, 90.0f),
|
|
ImGuiButtonFlags_MouseButtonMiddle);
|
|
|
|
EXPECT_FALSE(ImGui::IsItemHovered());
|
|
EXPECT_FALSE(ImGui::IsItemClicked(ImGuiMouseButton_Middle));
|
|
EXPECT_TRUE(ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenOverlappedByItem));
|
|
|
|
EndTestFrame();
|
|
}
|
|
|
|
TEST(ViewportPanelContentTest, InteractionSurfaceCapturesMiddleClickOnFirstHoveredFrame) {
|
|
ImGuiContextScope contextScope;
|
|
ImGuiIO& io = ImGui::GetIO();
|
|
|
|
BeginTestFrame();
|
|
EndTestFrame();
|
|
|
|
io.MousePos = ImVec2(32.0f, 32.0f);
|
|
io.MouseDown[ImGuiMouseButton_Middle] = true;
|
|
BeginTestFrame();
|
|
|
|
ImGui::SetCursorScreenPos(ImVec2(16.0f, 16.0f));
|
|
|
|
XCEngine::Editor::ViewportPanelContentResult result = {};
|
|
XCEngine::Editor::RenderViewportInteractionSurface(
|
|
result,
|
|
XCEngine::Editor::EditorViewportKind::Scene,
|
|
ImVec2(120.0f, 90.0f));
|
|
|
|
EXPECT_TRUE(result.hovered);
|
|
EXPECT_TRUE(result.clickedMiddle);
|
|
EXPECT_FALSE(result.clickedLeft);
|
|
EXPECT_FALSE(result.clickedRight);
|
|
|
|
EndTestFrame();
|
|
}
|