--- /dev/null
+/////////////////////////////////////////////////////////////////////////////
+// Name: wx/cocoa/scrollview.h
+// Purpose: wxWindowCocoaScrollView
+// Author: David Elliott
+// Modified by:
+// Created: 2008/02/14
+// RCS-ID: $Id$
+// Copyright: (c) 2003- David Elliott
+// Licence: wxWidgets licence
+/////////////////////////////////////////////////////////////////////////////
+
+#ifndef _WX_COCOA_SCROLLVIEW_H__
+#define _WX_COCOA_SCROLLVIEW_H__
+
+@class NSScroller;
+
+// ========================================================================
+// wxWindowCocoaScrollView
+// ========================================================================
+class wxWindowCocoaScrollView: protected wxCocoaNSView
+{
+ DECLARE_NO_COPY_CLASS(wxWindowCocoaScrollView)
+public:
+ wxWindowCocoaScrollView(wxWindow *owner);
+ virtual ~wxWindowCocoaScrollView();
+ inline WX_NSScrollView GetNSScrollView() { return m_cocoaNSScrollView; }
+ void ClientSizeToSize(int &width, int &height);
+ void DoGetClientSize(int *x, int *y) const;
+ void Encapsulate();
+ void Unencapsulate();
+
+ // wxWindow calls this to do the work. Note that we don't have the refresh parameter
+ // because wxWindow handles that itself.
+ void SetScrollbar(int orientation, int position, int thumbSize, int range);
+ int GetScrollPos(wxOrientation orient);
+ void SetScrollPos(wxOrientation orient, int position);
+ int GetScrollRange(wxOrientation orient);
+ int GetScrollThumb(wxOrientation orient);
+ void ScrollWindow(int dx, int dy, const wxRect*);
+ void UpdateSizes();
+
+ void _wx_doScroller(NSScroller *sender);
+
+protected:
+ wxWindowCocoa *m_owner;
+ WX_NSScrollView m_cocoaNSScrollView;
+ virtual void Cocoa_FrameChanged(void);
+ virtual void Cocoa_synthesizeMouseMoved(void) {}
+ /*!
+ Flag as to whether we're scrolling for a native view or a custom
+ wxWindow. This controls the scrolling behavior. When providing
+ scrolling for a native view we don't catch scroller action messages
+ and thus don't send scroll events and we don't actually scroll the
+ window when the application calls ScrollWindow.
+
+ When providing scrolling for a custom wxWindow, we make the NSScroller
+ send their action messages to us which we in turn package as wx window
+ scrolling events. At this point, the window will not physically be
+ scrolled. The application will most likely handle the event by calling
+ ScrollWindow which will do the real scrolling. On the other hand,
+ the application may instead not call ScrollWindow until some threshold
+ is reached. This causes the window to only scroll in steps which is
+ what, for instance, wxScrolledWindow does.
+ */
+ bool m_isNativeView;
+ /*!
+ The range as the application code wishes to see it. That is, the
+ range from the last SetScrollbar call for the appropriate dimension.
+ The horizontal dimension is the first [0] element and the vertical
+ dimension the second [1] element.
+
+ In wxMSW, a SCROLLINFO with nMin=0 and nMax=range-1 is used which
+ gives exactly range possible positions so long as nPage (which is
+ the thumb size) is less than or equal to 1.
+ */
+ int m_scrollRange[2];
+ /*!
+ The thumb size is intended to reflect the size of the visible portion
+ of the scrolled document. As the document size increases, the thumb
+ visible thumb size decreases. As document size decreases, the visible
+ thumb size increases. However, the thumb size on wx is defined in
+ terms of scroll units (which are effectively defined by the scroll
+ range) and so increasing the number of scroll units to reflect increased
+ document size will have the effect of decreasing the visible thumb
+ size even though the number doesn't change.
+
+ It's also important to note that subtracting the thumb size from the
+ full range gives you the real range that can be used. Microsoft
+ defines nPos (the current scrolling position) to be within the range
+ from nMin to nMax - max(nPage - 1, 0). We know that wxMSW code always
+ sets nMin = 0 and nMax = range -1. So let's algebraically reduce the
+ definition of the maximum allowed position:
+
+ Begin:
+ = nMax - max(nPage - 1, 0)
+ Substitute (range - 1) for nMax and thumbSize for nPage:
+ = range - 1 - max(thumbSize - 1, 0)
+ Add one inside the max conditional and subtract one outside of it:
+ = range - 1 - (max(thumbSize - 1 + 1, 1) - 1)
+ Reduce some constants:
+ = range - 1 - (max(thumbSize, 1) - 1)
+ Distribute the negative across the parenthesis:
+ = range - 1 - max(thumbSize, 1) + 1
+ Reduce the constants:
+ = range - max(thumbSize, 1)
+
+ Also keep in mind that thumbSize may never be greater than range but
+ can be equal to it. Thus for the smallest possible thumbSize there
+ are exactly range possible scroll positions (numbered from 0 to
+ range - 1) and for the largest possible thumbSize there is exactly
+ one possible scroll position (numbered 0).
+ */
+ int m_scrollThumb[2];
+
+ /*!
+ The origin of the virtual coordinate space expressed in terms of client
+ coordinates. Starts at (0,0) and each call to ScrollWindow accumulates
+ into it. Thus if the user scrolls the window right (thus causing the
+ contents to move left with respect to the client origin, the
+ application code (typically wxScrolledWindow) will be called with
+ dx of -something, for example -20. This is added to m_virtualOrigin
+ and thus m_virtualOrigin will be (-20,0) in this example.
+ */
+ wxPoint m_virtualOrigin;
+private:
+ wxWindowCocoaScrollView();
+};
+
+#endif //ndef _WX_COCOA_SCROLLVIEW_H__
#include "wx/cocoa/autorelease.h"
#include "wx/cocoa/string.h"
#include "wx/cocoa/trackingrectmanager.h"
+#include "wx/cocoa/private/scrollview.h"
#include "wx/mac/corefoundation/cfref.h"
#include "wx/cocoa/ObjcRef.h"
wxWindowCocoaHider();
};
-// ========================================================================
-// wxWindowCocoaScrollView
-// ========================================================================
-class wxWindowCocoaScrollView: protected wxCocoaNSView
-{
- DECLARE_NO_COPY_CLASS(wxWindowCocoaScrollView)
-public:
- wxWindowCocoaScrollView(wxWindow *owner);
- virtual ~wxWindowCocoaScrollView();
- inline WX_NSScrollView GetNSScrollView() { return m_cocoaNSScrollView; }
- void ClientSizeToSize(int &width, int &height);
- void DoGetClientSize(int *x, int *y) const;
- void Encapsulate();
- void Unencapsulate();
-
- // wxWindow calls this to do the work. Note that we don't have the refresh parameter
- // because wxWindow handles that itself.
- void SetScrollbar(int orientation, int position, int thumbSize, int range);
- int GetScrollPos(wxOrientation orient);
- void SetScrollPos(wxOrientation orient, int position);
- int GetScrollRange(wxOrientation orient);
- int GetScrollThumb(wxOrientation orient);
- void ScrollWindow(int dx, int dy, const wxRect*);
- void UpdateSizes();
-
- void _wx_doScroller(NSScroller *sender);
-
-protected:
- wxWindowCocoa *m_owner;
- WX_NSScrollView m_cocoaNSScrollView;
- virtual void Cocoa_FrameChanged(void);
- virtual void Cocoa_synthesizeMouseMoved(void) {}
- /*!
- Flag as to whether we're scrolling for a native view or a custom
- wxWindow. This controls the scrolling behavior. When providing
- scrolling for a native view we don't catch scroller action messages
- and thus don't send scroll events and we don't actually scroll the
- window when the application calls ScrollWindow.
-
- When providing scrolling for a custom wxWindow, we make the NSScroller
- send their action messages to us which we in turn package as wx window
- scrolling events. At this point, the window will not physically be
- scrolled. The application will most likely handle the event by calling
- ScrollWindow which will do the real scrolling. On the other hand,
- the application may instead not call ScrollWindow until some threshold
- is reached. This causes the window to only scroll in steps which is
- what, for instance, wxScrolledWindow does.
- */
- bool m_isNativeView;
- /*!
- The range as the application code wishes to see it. That is, the
- range from the last SetScrollbar call for the appropriate dimension.
- The horizontal dimension is the first [0] element and the vertical
- dimension the second [1] element.
-
- In wxMSW, a SCROLLINFO with nMin=0 and nMax=range-1 is used which
- gives exactly range possible positions so long as nPage (which is
- the thumb size) is less than or equal to 1.
- */
- int m_scrollRange[2];
- /*!
- The thumb size is intended to reflect the size of the visible portion
- of the scrolled document. As the document size increases, the thumb
- visible thumb size decreases. As document size decreases, the visible
- thumb size increases. However, the thumb size on wx is defined in
- terms of scroll units (which are effectively defined by the scroll
- range) and so increasing the number of scroll units to reflect increased
- document size will have the effect of decreasing the visible thumb
- size even though the number doesn't change.
-
- It's also important to note that subtracting the thumb size from the
- full range gives you the real range that can be used. Microsoft
- defines nPos (the current scrolling position) to be within the range
- from nMin to nMax - max(nPage - 1, 0). We know that wxMSW code always
- sets nMin = 0 and nMax = range -1. So let's algebraically reduce the
- definition of the maximum allowed position:
-
- Begin:
- = nMax - max(nPage - 1, 0)
- Substitute (range - 1) for nMax and thumbSize for nPage:
- = range - 1 - max(thumbSize - 1, 0)
- Add one inside the max conditional and subtract one outside of it:
- = range - 1 - (max(thumbSize - 1 + 1, 1) - 1)
- Reduce some constants:
- = range - 1 - (max(thumbSize, 1) - 1)
- Distribute the negative across the parenthesis:
- = range - 1 - max(thumbSize, 1) + 1
- Reduce the constants:
- = range - max(thumbSize, 1)
-
- Also keep in mind that thumbSize may never be greater than range but
- can be equal to it. Thus for the smallest possible thumbSize there
- are exactly range possible scroll positions (numbered from 0 to
- range - 1) and for the largest possible thumbSize there is exactly
- one possible scroll position (numbered 0).
- */
- int m_scrollThumb[2];
-
- /*!
- The origin of the virtual coordinate space expressed in terms of client
- coordinates. Starts at (0,0) and each call to ScrollWindow accumulates
- into it. Thus if the user scrolls the window right (thus causing the
- contents to move left with respect to the client origin, the
- application code (typically wxScrolledWindow) will be called with
- dx of -something, for example -20. This is added to m_virtualOrigin
- and thus m_virtualOrigin will be (-20,0) in this example.
- */
- wxPoint m_virtualOrigin;
-private:
- wxWindowCocoaScrollView();
-};
-
// ========================================================================
// wxDummyNSView
// ========================================================================