--- nono/wx/wxscrollbar.h 2026/04/29 17:05:08 1.1.1.1 +++ nono/wx/wxscrollbar.h 2026/04/29 17:05:44 1.1.1.4 @@ -10,21 +10,24 @@ #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 Fit() 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; } @@ -35,19 +38,21 @@ class WXScrollBar : public WXBitmapPanel 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 subpx {}; int thumbpos {}; // つまみの上(左)位置 int thumbsize {}; // つまみのサイズ + int thumbmin {}; // つまみの最小サイズ int range {}; // スクロール領域の高さ(幅) int pagesize {}; // ページアップ、ダウンの移動量 @@ -58,5 +63,10 @@ class WXScrollBar : public WXBitmapPanel int start_thumb; // ドラッグ開始時のつまみの位置 int start_px {}; // ドラッグ開始時のピクセル座標 + int mouse_px {}; // 直近のマウスカーソルのピクセル座標 + bool left_click {}; // 左クリック継続中か + + wxTimer timer {}; + wxDECLARE_EVENT_TABLE(); };