--- nono/wx/wxscrollbar.h 2026/04/29 17:05:08 1.1 +++ nono/wx/wxscrollbar.h 2026/04/29 17:05:19 1.1.1.3 @@ -10,44 +10,48 @@ #pragma once -#include "wxbitmappanel.h" +#include "wxtextpanel.h" wxDECLARE_EVENT(NONO_EVT_SCROLL, wxScrollEvent); -class WXScrollBar : public WXBitmapPanel +class WXScrollBar : public WXTextPanel { - using inherited = WXBitmapPanel; + using inherited = WXTextPanel; public: WXScrollBar(wxWindow *parent, wxWindowID id, long style); ~WXScrollBar() override; + void FontChanged() override; + void SetScrollParam(int pos_, int thumbsize_, int range_, int pagesize_); - void SetThumbPosition(int pos_); + bool SetThumbPosition(int pos_); int GetThumbPosition() const { return thumbpos; } int GetThumbSize() const { return thumbsize; } int GetRange() const { return range; } + // コントロールの主方向(スクロール方向)の最小ピクセル数 + int GetMinLength() const; + void Draw() override; private: void OnSize(wxSizeEvent& event); void OnMouse(wxMouseEvent& event); - - // つまみの位置を計算して再描画 - void RefreshThumb(); + void OnTimer(wxTimerEvent& event); // つまみの位置を変更する (内部用) void MoveThumb(int pos_); - int PosCmp(const wxPoint& pt) const; + int PosCmp() const; bool is_vertical {}; int thumbpos {}; // つまみの上(左)位置 int thumbsize {}; // つまみのサイズ + int thumbmin {}; // つまみの最小サイズ int range {}; // スクロール領域の高さ(幅) int pagesize {}; // ページアップ、ダウンの移動量 @@ -58,5 +62,10 @@ class WXScrollBar : public WXBitmapPanel int start_thumb; // ドラッグ開始時のつまみの位置 int start_px {}; // ドラッグ開始時のピクセル座標 + int mouse_px {}; // 直近のマウスカーソルのピクセル座標 + bool left_click {}; // 左クリック継続中か + + wxTimer timer {}; + wxDECLARE_EVENT_TABLE(); };