Imugui에서 탭 구름 단추 구름을 실현하는 예
다음은 Imugui를 사용할 때 라벨 클라우드 부품을 설치하고자 하는 경우의 실시 사례를 소개한다.
설치 예
소스 코드
namespace usagi
{
namespace imgui
{
class small_button_cloud
: public std::multimap
< std::string
, std::function< auto () -> void >
>
{
float _width = 0.0f;
public:
auto width() { return _width; }
auto width( const decltype( _width ) in ) { return _width = in; }
auto get_width_pointer() { return &_width; }
auto operator()()
{
ImGui::BeginGroup();
const auto s = ImGui::GetStyle();
const auto iis2 = s.ItemInnerSpacing.x * 2;
const auto is = s.ItemSpacing.x;
auto current_line_width = 0.0f;
for ( const auto& p : *this )
{
const auto entity_width = ImGui::CalcTextSize( p.first.c_str() ).x;
const auto tmp_line_width = current_line_width + is + iis2 + entity_width;
if ( current_line_width > 0.0f and tmp_line_width < _width )
{
ImGui::SameLine();
current_line_width = tmp_line_width;
}
else
current_line_width = iis2 + entity_width;
if ( ImGui::SmallButton( p.first.c_str() ) )
p.second();
}
ImGui::EndGroup();
}
};
}
}
사용된 ImuGi API 그룹ImGui::SmallButton
ImGui::BeginGroup
ImGui::EndGroup
ImGui::CalcTextSize
ImGui::GetStyle
ImGui::SameLine
SmallButton
에서 라벨 구름식의 작은 버튼 구름을 실현한다.SmallButton
의 가로 너비는 CalcTextSize()
+GetStyle().ItemInnerSpacing
*2SmallButton
가 정의하기 전에 계산할 수 있다.가로로 여러 개
SmallButton
SameLine
의 항목 사이의 간격은 GetStyle().ItemSpacing
에서 얻을 수 있다.동작 테스트
using usagi::imgui::small_button_cloud;
static small_button_cloud c;
ImGui::SliderFloat( "width", c.get_width_pointer(), 0.0f, 1024.0f );
if ( c.empty() )
for ( auto n = 0; n < 32; ++n )
c.emplace( "hoge-" + std::to_string( n ), [=]{ std::cerr << "hoge-" << n << '\n'; } );
c();
Reference
이 문제에 관하여(Imugui에서 탭 구름 단추 구름을 실현하는 예), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/usagi/items/f26be05cce73e4798d56텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)