From 5369a0543e919a07f78f268fd0ef0c59e1b19e83 Mon Sep 17 00:00:00 2001 From: David Elliott Date: Wed, 23 Jun 2004 15:26:44 +0000 Subject: [PATCH] wxCocoa: Added wxScrollBar git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@27967 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- Makefile.in | 34 +++++++++ build/bakefiles/files.bkl | 4 + include/wx/cocoa/NSScroller.h | 39 ++++++++++ include/wx/cocoa/scrolbar.h | 74 +++++++++++++++++++ include/wx/scrolbar.h | 2 + src/cocoa/NSScroller.mm | 56 ++++++++++++++ src/cocoa/scrolbar.mm | 134 ++++++++++++++++++++++++++++++++++ 7 files changed, 343 insertions(+) create mode 100644 include/wx/cocoa/NSScroller.h create mode 100644 include/wx/cocoa/scrolbar.h create mode 100644 src/cocoa/NSScroller.mm create mode 100644 src/cocoa/scrolbar.mm diff --git a/Makefile.in b/Makefile.in index 1d92534dc6..f775bd92a9 100644 --- a/Makefile.in +++ b/Makefile.in @@ -1181,6 +1181,7 @@ COND_TOOLKIT_COCOA_GUI_HDR = \ wx/cocoa/NSControl.h \ wx/cocoa/NSMenu.h \ wx/cocoa/NSPanel.h \ + wx/cocoa/NSScroller.h \ wx/cocoa/NSTabView.h \ wx/cocoa/NSTableView.h \ wx/cocoa/NSTextField.h \ @@ -1226,6 +1227,7 @@ COND_TOOLKIT_COCOA_GUI_HDR = \ wx/cocoa/radiobox.h \ wx/cocoa/radiobut.h \ wx/cocoa/region.h \ + wx/cocoa/scrolbar.h \ wx/cocoa/slider.h \ wx/cocoa/spinbutt.h \ wx/cocoa/statbmp.h \ @@ -2571,6 +2573,7 @@ COND_TOOLKIT_COCOA___GUI_SRC_OBJECTS = \ monodll_NSControl.o \ monodll_NSMenu.o \ monodll_NSPanel.o \ + monodll_NSScroller.o \ monodll_NSTabView.o \ monodll_NSTableView.o \ monodll_NSTextField.o \ @@ -2616,6 +2619,7 @@ COND_TOOLKIT_COCOA___GUI_SRC_OBJECTS = \ monodll_radiobox.o \ monodll_radiobut.o \ monodll_region.o \ + monodll_scrolbar.o \ monodll_settings.o \ monodll_slider.o \ monodll_spinbutt.o \ @@ -3431,6 +3435,7 @@ COND_TOOLKIT_COCOA___GUI_SRC_OBJECTS_1 = \ monolib_NSControl.o \ monolib_NSMenu.o \ monolib_NSPanel.o \ + monolib_NSScroller.o \ monolib_NSTabView.o \ monolib_NSTableView.o \ monolib_NSTextField.o \ @@ -3476,6 +3481,7 @@ COND_TOOLKIT_COCOA___GUI_SRC_OBJECTS_1 = \ monolib_radiobox.o \ monolib_radiobut.o \ monolib_region.o \ + monolib_scrolbar.o \ monolib_settings.o \ monolib_slider.o \ monolib_spinbutt.o \ @@ -4463,6 +4469,7 @@ COND_TOOLKIT_COCOA___GUI_SRC_OBJECTS_2 = \ coredll_NSControl.o \ coredll_NSMenu.o \ coredll_NSPanel.o \ + coredll_NSScroller.o \ coredll_NSTabView.o \ coredll_NSTableView.o \ coredll_NSTextField.o \ @@ -4508,6 +4515,7 @@ COND_TOOLKIT_COCOA___GUI_SRC_OBJECTS_2 = \ coredll_radiobox.o \ coredll_radiobut.o \ coredll_region.o \ + coredll_scrolbar.o \ coredll_settings.o \ coredll_slider.o \ coredll_spinbutt.o \ @@ -5190,6 +5198,7 @@ COND_TOOLKIT_COCOA___GUI_SRC_OBJECTS_3 = \ corelib_NSControl.o \ corelib_NSMenu.o \ corelib_NSPanel.o \ + corelib_NSScroller.o \ corelib_NSTabView.o \ corelib_NSTableView.o \ corelib_NSTextField.o \ @@ -5235,6 +5244,7 @@ COND_TOOLKIT_COCOA___GUI_SRC_OBJECTS_3 = \ corelib_radiobox.o \ corelib_radiobut.o \ corelib_region.o \ + corelib_scrolbar.o \ corelib_settings.o \ corelib_slider.o \ corelib_spinbutt.o \ @@ -8147,6 +8157,9 @@ monodll_NSMenu.o: $(srcdir)/src/cocoa/NSMenu.mm $(MONODLL_ODEP) monodll_NSPanel.o: $(srcdir)/src/cocoa/NSPanel.mm $(MONODLL_ODEP) $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $< +monodll_NSScroller.o: $(srcdir)/src/cocoa/NSScroller.mm $(MONODLL_ODEP) + $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $< + monodll_NSTabView.o: $(srcdir)/src/cocoa/NSTabView.mm $(MONODLL_ODEP) $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $< @@ -10064,6 +10077,9 @@ monodll_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONODLL_ODEP) @COND_TOOLKIT_MAC_USE_GUI_1_WXUNIV_0@monodll_scrolbar.o: $(srcdir)/src/mac/carbon/scrolbar.cpp $(MONODLL_ODEP) @COND_TOOLKIT_MAC_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $< +@COND_TOOLKIT_COCOA_USE_GUI_1_WXUNIV_0@monodll_scrolbar.o: $(srcdir)/src/cocoa/scrolbar.mm $(MONODLL_ODEP) +@COND_TOOLKIT_COCOA_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $< + @COND_TOOLKIT_PM_USE_GUI_1_WXUNIV_0@monodll_scrolbar.o: $(srcdir)/src/os2/scrolbar.cpp $(MONODLL_ODEP) @COND_TOOLKIT_PM_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $< @@ -11090,6 +11106,9 @@ monolib_NSMenu.o: $(srcdir)/src/cocoa/NSMenu.mm $(MONOLIB_ODEP) monolib_NSPanel.o: $(srcdir)/src/cocoa/NSPanel.mm $(MONOLIB_ODEP) $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $< +monolib_NSScroller.o: $(srcdir)/src/cocoa/NSScroller.mm $(MONOLIB_ODEP) + $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $< + monolib_NSTabView.o: $(srcdir)/src/cocoa/NSTabView.mm $(MONOLIB_ODEP) $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $< @@ -13007,6 +13026,9 @@ monolib_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONOLIB_ODEP) @COND_TOOLKIT_MAC_USE_GUI_1_WXUNIV_0@monolib_scrolbar.o: $(srcdir)/src/mac/carbon/scrolbar.cpp $(MONOLIB_ODEP) @COND_TOOLKIT_MAC_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $< +@COND_TOOLKIT_COCOA_USE_GUI_1_WXUNIV_0@monolib_scrolbar.o: $(srcdir)/src/cocoa/scrolbar.mm $(MONOLIB_ODEP) +@COND_TOOLKIT_COCOA_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $< + @COND_TOOLKIT_PM_USE_GUI_1_WXUNIV_0@monolib_scrolbar.o: $(srcdir)/src/os2/scrolbar.cpp $(MONOLIB_ODEP) @COND_TOOLKIT_PM_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $< @@ -14519,6 +14541,9 @@ coredll_NSMenu.o: $(srcdir)/src/cocoa/NSMenu.mm $(COREDLL_ODEP) coredll_NSPanel.o: $(srcdir)/src/cocoa/NSPanel.mm $(COREDLL_ODEP) $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $< +coredll_NSScroller.o: $(srcdir)/src/cocoa/NSScroller.mm $(COREDLL_ODEP) + $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $< + coredll_NSTabView.o: $(srcdir)/src/cocoa/NSTabView.mm $(COREDLL_ODEP) $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $< @@ -16217,6 +16242,9 @@ coredll_win32.o: $(srcdir)/src/univ/themes/win32.cpp $(COREDLL_ODEP) @COND_TOOLKIT_MAC_USE_GUI_1_WXUNIV_0@coredll_scrolbar.o: $(srcdir)/src/mac/carbon/scrolbar.cpp $(COREDLL_ODEP) @COND_TOOLKIT_MAC_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $< +@COND_TOOLKIT_COCOA_USE_GUI_1_WXUNIV_0@coredll_scrolbar.o: $(srcdir)/src/cocoa/scrolbar.mm $(COREDLL_ODEP) +@COND_TOOLKIT_COCOA_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $< + @COND_TOOLKIT_PM_USE_GUI_1_WXUNIV_0@coredll_scrolbar.o: $(srcdir)/src/os2/scrolbar.cpp $(COREDLL_ODEP) @COND_TOOLKIT_PM_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $< @@ -16949,6 +16977,9 @@ corelib_NSMenu.o: $(srcdir)/src/cocoa/NSMenu.mm $(CORELIB_ODEP) corelib_NSPanel.o: $(srcdir)/src/cocoa/NSPanel.mm $(CORELIB_ODEP) $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $< +corelib_NSScroller.o: $(srcdir)/src/cocoa/NSScroller.mm $(CORELIB_ODEP) + $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $< + corelib_NSTabView.o: $(srcdir)/src/cocoa/NSTabView.mm $(CORELIB_ODEP) $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $< @@ -18647,6 +18678,9 @@ corelib_win32.o: $(srcdir)/src/univ/themes/win32.cpp $(CORELIB_ODEP) @COND_TOOLKIT_MAC_USE_GUI_1_WXUNIV_0@corelib_scrolbar.o: $(srcdir)/src/mac/carbon/scrolbar.cpp $(CORELIB_ODEP) @COND_TOOLKIT_MAC_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $< +@COND_TOOLKIT_COCOA_USE_GUI_1_WXUNIV_0@corelib_scrolbar.o: $(srcdir)/src/cocoa/scrolbar.mm $(CORELIB_ODEP) +@COND_TOOLKIT_COCOA_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $< + @COND_TOOLKIT_PM_USE_GUI_1_WXUNIV_0@corelib_scrolbar.o: $(srcdir)/src/os2/scrolbar.cpp $(CORELIB_ODEP) @COND_TOOLKIT_PM_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $< diff --git a/build/bakefiles/files.bkl b/build/bakefiles/files.bkl index 137e033651..c780dcaae1 100644 --- a/build/bakefiles/files.bkl +++ b/build/bakefiles/files.bkl @@ -1851,6 +1851,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file! src/cocoa/NSControl.mm src/cocoa/NSMenu.mm src/cocoa/NSPanel.mm + src/cocoa/NSScroller.mm src/cocoa/NSTabView.mm src/cocoa/NSTableView.mm src/cocoa/NSTextField.mm @@ -1896,6 +1897,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file! src/cocoa/radiobox.mm src/cocoa/radiobut.mm src/cocoa/region.mm + src/cocoa/scrolbar.mm src/cocoa/settings.cpp src/cocoa/slider.mm src/cocoa/spinbutt.mm @@ -1935,6 +1937,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file! wx/cocoa/NSControl.h wx/cocoa/NSMenu.h wx/cocoa/NSPanel.h + wx/cocoa/NSScroller.h wx/cocoa/NSTabView.h wx/cocoa/NSTableView.h wx/cocoa/NSTextField.h @@ -1980,6 +1983,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file! wx/cocoa/radiobox.h wx/cocoa/radiobut.h wx/cocoa/region.h + wx/cocoa/scrolbar.h wx/cocoa/slider.h wx/cocoa/spinbutt.h wx/cocoa/statbmp.h diff --git a/include/wx/cocoa/NSScroller.h b/include/wx/cocoa/NSScroller.h new file mode 100644 index 0000000000..948f41ea3f --- /dev/null +++ b/include/wx/cocoa/NSScroller.h @@ -0,0 +1,39 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: wx/cocoa/NSScroller.h +// Purpose: wxCocoaNSScroller class +// Author: David Elliott +// Modified by: +// Created: 2004/04/27 +// RCS-ID: $Id$ +// Copyright: (c) 2004 David Elliott +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_COCOA_NSSCROLLER_H__ +#define _WX_COCOA_NSSCROLLER_H__ + +#include "wx/hashmap.h" +#include "wx/cocoa/ObjcAssociate.h" +#include "wx/cocoa/ObjcRef.h" + +DECLARE_WXCOCOA_OBJC_CLASS(NSScroller); + +WX_DECLARE_OBJC_HASHMAP(NSScroller); + +class wxCocoaNSScroller +{ + WX_DECLARE_OBJC_INTERFACE_HASHMAP(NSScroller); +public: + void AssociateNSScroller(WX_NSScroller cocoaNSScroller); + inline void DisassociateNSScroller(WX_NSScroller cocoaNSScroller) + { + if(cocoaNSScroller) + sm_cocoaHash.erase(cocoaNSScroller); + } + + virtual void Cocoa_wxNSScrollerAction(void) = 0; +protected: + static const wxObjcAutoRefFromAlloc sm_cocoaTarget; +}; + +#endif // _WX_COCOA_NSSCROLLER_H__ diff --git a/include/wx/cocoa/scrolbar.h b/include/wx/cocoa/scrolbar.h new file mode 100644 index 0000000000..2eb0c0a8d3 --- /dev/null +++ b/include/wx/cocoa/scrolbar.h @@ -0,0 +1,74 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: wx/cocoa/scrolbar.h +// Purpose: wxScrollBar class +// Author: David Elliott +// Modified by: +// Created: 2004/04/25 +// RCS-ID: $Id$ +// Copyright: (c) 2004 David Elliott +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_COCOA_SCROLBAR_H__ +#define _WX_COCOA_SCROLBAR_H__ + +#include "wx/cocoa/NSScroller.h" + +// ======================================================================== +// wxScrollBar +// ======================================================================== +class WXDLLEXPORT wxScrollBar: public wxScrollBarBase, protected wxCocoaNSScroller +{ + DECLARE_DYNAMIC_CLASS(wxScrollBar) + DECLARE_EVENT_TABLE() + WX_DECLARE_COCOA_OWNER(NSScroller,NSControl,NSView) +// ------------------------------------------------------------------------ +// initialization +// ------------------------------------------------------------------------ +public: + wxScrollBar() { } + wxScrollBar(wxWindow *parent, wxWindowID winid, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxSL_HORIZONTAL, + const wxValidator& validator = wxDefaultValidator, + const wxString& name = wxScrollBarNameStr) + { + Create(parent, winid, pos, size, style, validator, name); + } + + bool Create(wxWindow *parent, wxWindowID winid, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxSL_HORIZONTAL, + const wxValidator& validator = wxDefaultValidator, + const wxString& name = wxScrollBarNameStr); + virtual ~wxScrollBar(); + +// ------------------------------------------------------------------------ +// Cocoa callbacks +// ------------------------------------------------------------------------ +protected: + virtual void Cocoa_wxNSScrollerAction(void); +// ------------------------------------------------------------------------ +// Implementation +// ------------------------------------------------------------------------ +public: + // accessors + virtual int GetThumbPosition() const; + virtual int GetThumbSize() const { return m_thumbSize; } + virtual int GetPageSize() const { return m_pageSize; } + virtual int GetRange() const { return m_range; } + + // operations + virtual void SetThumbPosition(int viewStart); + virtual void SetScrollbar(int position, int thumbSize, + int range, int pageSize, + bool refresh = TRUE); +protected: + int m_range; + int m_thumbSize; + int m_pageSize; +}; + +#endif // _WX_COCOA_SCROLBAR_H__ diff --git a/include/wx/scrolbar.h b/include/wx/scrolbar.h index 7411fabf39..512542a0b8 100644 --- a/include/wx/scrolbar.h +++ b/include/wx/scrolbar.h @@ -53,6 +53,8 @@ private: #include "wx/gtk/scrolbar.h" #elif defined(__WXMAC__) #include "wx/mac/scrolbar.h" +#elif defined(__WXCOCOA__) + #include "wx/cocoa/scrolbar.h" #elif defined(__WXPM__) #include "wx/os2/scrolbar.h" #endif diff --git a/src/cocoa/NSScroller.mm b/src/cocoa/NSScroller.mm new file mode 100644 index 0000000000..20c9b9d3a8 --- /dev/null +++ b/src/cocoa/NSScroller.mm @@ -0,0 +1,56 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: cocoa/NSScroller.mm +// Purpose: wxCocoaNSScroller +// Author: David Elliott +// Modified by: +// Created: 2004/04/27 +// RCS-ID: $Id$ +// Copyright: (c) 2004 David Elliott +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#include "wx/wxprec.h" +#ifndef WX_PRECOMP + #include "wx/log.h" +#endif // WX_PRECOMP + +#include "wx/cocoa/NSScroller.h" +#import + +WX_IMPLEMENT_OBJC_INTERFACE_HASHMAP(NSScroller) + +// ============================================================================ +// @class wxNSScrollerTarget +// ============================================================================ +@interface wxNSScrollerTarget : NSObject +{ +} + +- (void)wxNSScrollerAction: (id)sender; +@end // wxNSScrollerTarget + +@implementation wxNSScrollerTarget : NSObject +- (void)wxNSScrollerAction: (id)sender +{ + wxCocoaNSScroller *scroller = wxCocoaNSScroller::GetFromCocoa(sender); + wxCHECK_RET(scroller,wxT("wxNSScrollerAction received without associated wx object")); + scroller->Cocoa_wxNSScrollerAction(); +} + +@end // implementation wxNSScrollerTarget + +// ============================================================================ +// class wxCocoaNSScroller +// ============================================================================ +const wxObjcAutoRefFromAlloc wxCocoaNSScroller::sm_cocoaTarget = [[wxNSScrollerTarget alloc] init]; + +void wxCocoaNSScroller::AssociateNSScroller(WX_NSScroller cocoaNSScroller) +{ + if(cocoaNSScroller) + { + sm_cocoaHash.insert(wxCocoaNSScrollerHash::value_type(cocoaNSScroller,this)); + [cocoaNSScroller setTarget: sm_cocoaTarget]; + [cocoaNSScroller setAction: @selector(wxNSScrollerAction:)]; + } +} + diff --git a/src/cocoa/scrolbar.mm b/src/cocoa/scrolbar.mm new file mode 100644 index 0000000000..9a21343de6 --- /dev/null +++ b/src/cocoa/scrolbar.mm @@ -0,0 +1,134 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: cocoa/scrolbar.mm +// Purpose: wxScrollBar +// Author: David Elliott +// Modified by: +// Created: 2004/04/25 +// RCS-ID: $Id$ +// Copyright: (c) 2004 David Elliott +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#include "wx/wxprec.h" +#if wxUSE_SCROLLBAR + +#ifndef WX_PRECOMP + #include "wx/app.h" + #include "wx/scrolbar.h" +#endif //WX_PRECOMP + +#import + +IMPLEMENT_DYNAMIC_CLASS(wxScrollBar, wxControl) +BEGIN_EVENT_TABLE(wxScrollBar, wxScrollBarBase) +END_EVENT_TABLE() +WX_IMPLEMENT_COCOA_OWNER(wxScrollBar,NSScroller,NSControl,NSView) + +bool wxScrollBar::Create(wxWindow *parent, wxWindowID winid, + const wxPoint& pos, const wxSize& size, long style, + const wxValidator& validator, const wxString& name) +{ + if(!CreateControl(parent,winid,pos,size,style,validator,name)) + return false; + SetNSScroller([[NSScroller alloc] initWithFrame: MakeDefaultNSRect(size)]); + [m_cocoaNSView release]; + if(m_parent) + m_parent->CocoaAddChild(this); + SetInitialFrameRect(pos,size); + + return true; +} + +wxScrollBar::~wxScrollBar() +{ + DisassociateNSScroller(GetNSScroller()); +} + +/* A word about NSScroller vs. wxScrollbar: + +NSScroller uses two float values to represent the state of the scroller. +The floatValue indicates where the knob is positioned on a scale from +0.0 to 1.0. A value of 0.0 indicates the scroller is at the top or left, +a value of 1.0 indicates the scroller is at the bottom or right. A value +of 0.5 indicates the scroller is dead center. + +wxScrollBar uses three values. The position indicates the number of +scroll units where 0 is at the top or left. The range indicates how +many scroll units there are in the entire bar and the thumb size indicates +how many scroll units the thumb takes. The scrollbar is at the bottom +or right when position == range - thumbSize. + +It may be easier to consider wx position to be the top or left of the thumb. +In Cocoa, floatValue can be considered as if it were the center of the +thumb and the range is ALWAYS (no matter what the knobProportion is) the +distance between the center point of the knob from one extreme to the other. +*/ + +int wxScrollBar::GetThumbPosition() const +{ + return (int)((m_range-m_thumbSize)*[GetNSScroller() floatValue]); +} + +void wxScrollBar::SetThumbPosition(int position) +{ + [GetNSScroller() setFloatValue:((float)position)/(m_range-m_thumbSize)]; +} + +void wxScrollBar::SetScrollbar(int position, int thumbSize, + int range, int pageSize, bool refresh) +{ + m_range = range; + m_thumbSize = thumbSize; + m_pageSize = pageSize; + [GetNSScroller() setFloatValue:((float)position)/(m_range-m_thumbSize) + knobProportion:((float)m_thumbSize)/m_range]; +} + +void wxScrollBar::Cocoa_wxNSScrollerAction() +{ + NSScrollerPart hitPart = [GetNSScroller() hitPart]; + wxEventType command; + // Note: the comments about the part that is hit are for OS X, the + // constants are sort of a leftover from NeXT. It makes more sense if + // you remember that in NeXT clicking the knob slot used to do what + // option-clicking does now. + switch(hitPart) + { + // User dragged knob + case NSScrollerKnob: + command = wxEVT_SCROLL_THUMBTRACK; + break; + // User option-clicked slot + case NSScrollerKnobSlot: + command = wxEVT_SCROLL_THUMBTRACK; + break; + // User clicked Up/Left button + case NSScrollerDecrementLine: + command = wxEVT_SCROLL_LINEUP; + break; + // User option-clicked Up/left or clicked in slot + case NSScrollerDecrementPage: + command = wxEVT_SCROLL_PAGEUP; + break; + // User clicked Down/Right button + case NSScrollerIncrementLine: + command = wxEVT_SCROLL_LINEDOWN; + break; + // User option-clicked Down/Right or clicked in slot + case NSScrollerIncrementPage: + command = wxEVT_SCROLL_PAGEDOWN; + break; + // No-op + case NSScrollerNoPart: + default: + return; + } + // TODO: When scrolling by pages, readjust the floatValue using the + // pageSize (which may be different from thumbSize). + wxScrollEvent event(command, GetId(), GetThumbPosition(), + HasFlag(wxSB_VERTICAL)?wxVERTICAL:wxHORIZONTAL); + event.SetEventObject(this); + GetEventHandler()->ProcessEvent(event); +} + +#endif // wxUSE_SCROLLBAR -- 2.45.2