ドキュメント
Box[IN]Component
4 min read
Box[IN]Componentは[IN]コンポーネントをBoxComponent以下に配置するコンポーネントです。以下のコンポーネントが標準で用意してあります。
- BoxImageComponent
- BoxSliderComponent
- BoxTextComponent
box_image_component.hpp
class BoxImageComponent : public Component
{
public:
BoxImageComponent(
MOD mod,
unsigned int box_width,
unsigned int box_height,
unsigned char box_bg_color_R,
unsigned char box_bg_color_G,
unsigned char box_bg_color_B,
unsigned char box_bg_color_A,
spa::gui::box::POS box_pos,
std::string image_filename
);
BoxImageComponent(
MOD mod,
unsigned int box_width,
unsigned int box_height,
unsigned char box_bg_color_R,
unsigned char box_bg_color_G,
unsigned char box_bg_color_B,
unsigned char box_bg_color_A,
spa::gui::box::POS box_pos,
unsigned int image_width,
unsigned int image_height,
unsigned char image_bg_color_R,
unsigned char image_bg_color_G,
unsigned char image_bg_color_B,
unsigned char image_bg_color_A,
spa::gui::box::POS image_pos,
std::string image_filename
);
~BoxImageComponent() = default;
BoxImageComponent(BoxImageComponent const&);
BoxImageComponent& operator=(BoxImageComponent const&);
spa::gui::Image<>* get();
void mod_image_color(
unsigned char mod_color_R,
unsigned char mod_color_G,
unsigned char mod_color_B);
void margin(int x, int y);
void configure();
void recapture();
private:
std::unique_ptr<BoxComponent> box;
std::unique_ptr<BoxComponent> image_box;
std::unique_ptr<ImageComponent> image;
};
imageコンポーネントは親コンポーネント全体に画像を描画するためimage_boxを用意してboxに対してimage_boxを配置できるように待っています。
mod_image_color、margin、recaptureメソッドがあります。
box_slider_component.hpp
class BoxSliderComponent : public Component
{
public:
BoxSliderComponent
(
MOD mod,
unsigned int box_width,
unsigned int box_height,
unsigned char box_bg_color_R,
unsigned char box_bg_color_G,
unsigned char box_bg_color_B,
unsigned char box_bg_color_A,
spa::gui::box::POS pos,
unsigned int slider_min,
unsigned int slider_max,
unsigned int slider_value,
unsigned int slider_size,
unsigned char slider_bg_color_R,
unsigned char slider_bg_color_G,
unsigned char slider_bg_color_B,
unsigned char slider_bg_color_A,
std::function<void(unsigned int)> slider_event
);
~BoxSliderComponent() = default;;
BoxSliderComponent(BoxSliderComponent const&);
BoxSliderComponent& operator=(BoxSliderComponent const&);
spa::gui::Slider<>* get();
void configure();
private:
std::unique_ptr<SliderComponent> slider;
std::unique_ptr<BoxComponent> box;
};
boxにsliderをattachします。
box_text_component.hpp
class BoxTextComponent : public Component
{
public:
BoxTextComponent
(
MOD mod,
unsigned int box_width,
unsigned int box_height,
unsigned char box_bg_color_R,
unsigned char box_bg_color_G,
unsigned char box_bg_color_B,
unsigned char box_bg_color_A,
spa::gui::box::POS pos,
bool text_update,
std::string text_str,
unsigned int text_c_size,
unsigned char text_color_R,
unsigned char text_color_G,
unsigned char text_color_B
);
~BoxTextComponent() = default;
BoxTextComponent(BoxTextComponent const&);
BoxTextComponent& operator=(BoxTextComponent const&);
spa::gui::Text<>* get();
void attach_inner(ComponentPlugin* component);
void attach_inner(FcComponent component);
unsigned int get_inner_height();
void mask();
void configure();
void recapture();
private:
std::unique_ptr<TextComponent> text;
std::unique_ptr<BoxComponent> inner;
std::unique_ptr<BoxComponent> outer;
};
テキストをセンターリングするためにinnerボックスを中間に入れています。
attach_innerはinnerコンポーネントにattachするためのメソッドです。textにはclickコンポーネントをattachすると文字入力とクリック操作を区別できないためinnerにattachします。SelectBoxComponentで使用しています。
get_inner_height、mask、recaptureメソッドがあります。
2026/02/02 追記
void attach_inner(FcComponent component);←削除
void attach_inner(std::weak_ptr<DOM> dom);
FcComponentを引数にする場合、コンポーネントのコピーが行われます。
コピー元のコンポーネントを操作しても変更が反映されない場合があるため、configure内でFcComponentのコピーは禁止です。
代わりにcomponent()で得られるdomのポインタを引数にします。
これに伴い、意図しないコードが発生する可能性(configure内でFcComponentの値渡し)があるため、domをもともとは生ポインタでしたが、weak_ptrで管理して、lock時にshared_ptrを確認します。
コメントを残す