OSCON/WRTKit/UI/Scrollbar.js
author John Kern <johnk@symbian.org>
Fri, 17 Jul 2009 15:52:45 -0700
changeset 7 97dcd250e5be
permissions -rwxr-xr-x
checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
     1
/*
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
     2
© Copyright 2008 Nokia Corporation. All rights reserved.
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
     3
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
     4
IMPORTANT:  The Nokia software ("WRTKit and Example Widget files") is supplied to you by Nokia
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
     5
Corporation (“Nokia”) in consideration of your agreement to the following terms. Your use, installation
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
     6
and/or redistribution of the WRTKit and Example Widget files constitutes acceptance of these terms. If
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
     7
you do not agree with these terms, please do not use, install, or redistribute the WRTKit and Example
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
     8
Widget files.
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
     9
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    10
In consideration of your agreement to abide by the following terms, and subject to these terms, Nokia
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    11
grants you a personal, non-exclusive license, under Nokia’s copyrights in the WRTKit and Example
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    12
Widget files, to use, reproduce, and redistribute the WRTKit and Example files, in text form (for HTML,
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    13
CSS, or JavaScript files) or binary form (for associated images), for the sole purpose of creating S60
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    14
Widgets.
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    15
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    16
If you redistribute the WRTKit and Example files, you must retain this entire notice in all such
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    17
redistributions of the WRTKit and Example files.
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    18
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    19
You may not use the name, trademarks, service marks or logos of Nokia to endorse or promote products
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    20
that include the WRTKit and Example files without the prior written explicit agreement with Nokia.
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    21
Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    22
Nokia herein, including but not limited to any patent rights that may be infringed by your products that
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    23
incorporate the WRTKit and Example files or by other works in which the WRTKit and Example files
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    24
may be incorporated.
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    25
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    26
The WRTKit and Example files are provided on an "AS IS" basis.  NOKIA MAKES NO
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    27
WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    28
WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    29
PARTICULAR PURPOSE, REGARDING THE EXAMPLES OR ITS USE AND OPERATION
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    30
ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    31
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    32
IN NO EVENT SHALL NOKIA BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    33
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    34
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    35
INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, AND/OR
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    36
DISTRIBUTION OF THE EXAMPLES, HOWEVER CAUSED AND WHETHER UNDER THEORY
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    37
OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE,
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    38
EVEN IF NOKIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    39
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    40
*/
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    41
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    42
///////////////////////////////////////////////////////////////////////////////
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    43
// The Scrollbar class is an implementation of a user interface element that
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    44
// indicates the current viewport position in a document.
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    45
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    46
// Constructor.
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    47
function Scrollbar(parentElement) {
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    48
    uiLogger.debug("Scrollbar(" + parentElement + ")");
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    49
    
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    50
    // get the parent element
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    51
    this.parentElement = parentElement;
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    52
    
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    53
    // create the root element
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    54
    this.rootElement = document.createElement("div");
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    55
    this.rootElement.className = "Scrollbar";
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    56
    this.rootElement.style.visibility = "hidden";
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    57
    
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    58
    // create the scrollbar
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    59
    // the scrollbar consists of a root element with six children
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    60
    // (three track elements and three thumb elements)
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    61
    
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    62
    // track
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    63
    this.trackTopElement = document.createElement("div");
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    64
    this.trackTopElement.className = "ScrollbarTrackTop";
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    65
    this.trackMiddleElement = document.createElement("div");
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    66
    this.trackMiddleElement.className = "ScrollbarTrackMiddle";
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    67
    this.trackBottomElement = document.createElement("div");
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    68
    this.trackBottomElement.className = "ScrollbarTrackBottom";
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    69
    
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    70
    // thumb
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    71
    this.thumbTopElement = document.createElement("div");
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    72
    this.thumbTopElement.className = "ScrollbarThumbTop";
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    73
    this.thumbMiddleElement = document.createElement("div");
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    74
    this.thumbMiddleElement.className = "ScrollbarThumbMiddle";
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    75
    this.thumbBottomElement = document.createElement("div");
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    76
    this.thumbBottomElement.className = "ScrollbarThumbBottom";
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    77
    
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    78
    // assemble and attach the scrollbar
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    79
    this.rootElement.appendChild(this.trackTopElement);
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    80
    this.rootElement.appendChild(this.trackMiddleElement);
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    81
    this.rootElement.appendChild(this.trackBottomElement);
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    82
    this.rootElement.appendChild(this.thumbTopElement);
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    83
    this.rootElement.appendChild(this.thumbMiddleElement);
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    84
    this.rootElement.appendChild(this.thumbBottomElement);
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    85
    this.parentElement.appendChild(this.rootElement);
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    86
    
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    87
    // bring the scrollbar up to date
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    88
    this.update(0, 100, 100);
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    89
}
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    90
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    91
// Parent element for the scrollbar.
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    92
Scrollbar.prototype.parentElement = null;
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    93
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    94
// Root HTML element in the scrollbar.
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    95
Scrollbar.prototype.rootElement = null;
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    96
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    97
// Scrollbar track top element.
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    98
Scrollbar.prototype.trackTopElement = null;
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
    99
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   100
// Scrollbar track middle element.
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   101
Scrollbar.prototype.trackMiddleElement = null;
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   102
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   103
// Scrollbar track bottom element.
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   104
Scrollbar.prototype.trackBottomElement = null;
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   105
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   106
// Scrollbar thumb top element.
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   107
Scrollbar.prototype.thumbTopElement = null;
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   108
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   109
// Scrollbar thumb middle element.
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   110
Scrollbar.prototype.thumbMiddleElement = null;
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   111
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   112
// Scrollbar thumb bottom element.
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   113
Scrollbar.prototype.thumbBottomElement = null;
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   114
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   115
// Is the scrollbar needed?
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   116
Scrollbar.prototype.scrollbarNeeded = false;
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   117
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   118
// Updates the scrollbar.
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   119
Scrollbar.prototype.update = function(scrollY, viewportHeight, documentHeight) {
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   120
    // figure out current heights
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   121
    var scrollbarHeight = this.rootElement.clientHeight;
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   122
    var trackTopHeight = this.trackTopElement.clientHeight;
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   123
    var trackBottomHeight = this.trackBottomElement.clientHeight;
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   124
    var thumbTopHeight = this.thumbTopElement.clientHeight;
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   125
    var thumbBottomHeight = this.thumbBottomElement.clientHeight;
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   126
    
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   127
    // scrollable height is the larger of document and viewport heights
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   128
    var scrollableHeight = documentHeight;
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   129
    var scrollbarNeeded = true;
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   130
    if (viewportHeight >= documentHeight) {
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   131
        scrollableHeight = viewportHeight;
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   132
        scrollbarNeeded = false;
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   133
    }
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   134
    
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   135
    // show or hide scrollbar?
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   136
    if (scrollbarNeeded != this.scrollbarNeeded) {
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   137
        this.scrollbarNeeded = scrollbarNeeded;
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   138
        this.rootElement.style.visibility = scrollbarNeeded ? "visible" : "hidden";
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   139
    }
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   140
    
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   141
    // calculate thumb top position...
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   142
    var thumbTopPct = scrollY / scrollableHeight;
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   143
    var thumbTop = scrollbarHeight * thumbTopPct;
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   144
    // ...and bottom position...
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   145
    var thumbBottomPct = (scrollY + viewportHeight) / scrollableHeight;
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   146
    var thumbBottom = scrollbarHeight * thumbBottomPct;
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   147
    
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   148
    // ...and thumb height
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   149
    var thumbHeight = thumbBottom - thumbTop;
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   150
    
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   151
    // ensure that the thumb is not too small
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   152
    var thumbMinHeight = thumbTopHeight + thumbBottomHeight;
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   153
    if (thumbHeight < thumbMinHeight) {
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   154
        var underflow = thumbMinHeight - thumbHeight;
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   155
        // adjust thumb top pos assuming a shorter scrollbar track
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   156
        var thumbMid = (scrollbarHeight - underflow) * ((thumbTopPct + thumbBottomPct) / 2) + (underflow / 2);
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   157
        thumbTop = thumbMid - (thumbMinHeight / 2);
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   158
        thumbBottom = thumbTop + thumbMinHeight;
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   159
        thumbHeight = thumbBottom - thumbTop;
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   160
    }
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   161
    
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   162
    // position and size track element (add 1 to the middle section height for rounding errors)
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   163
    this.trackTopElement.style.top = "0px";
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   164
    this.trackMiddleElement.style.top = Math.round(trackTopHeight) + "px";
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   165
    this.trackMiddleElement.style.height = Math.round(scrollbarHeight - trackTopHeight - trackBottomHeight + 1) + "px";
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   166
    this.trackBottomElement.style.top = Math.round(scrollbarHeight - trackTopHeight) + "px";
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   167
    
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   168
    // position and size thumb element (add 1 to the middle section height for rounding errors)
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   169
    this.thumbTopElement.style.top = Math.round(thumbTop) + "px";
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   170
    this.thumbMiddleElement.style.top = Math.round(thumbTop + thumbTopHeight) + "px";
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   171
    this.thumbMiddleElement.style.height = Math.round(thumbHeight - thumbTopHeight - thumbBottomHeight + 1) + "px";
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   172
    this.thumbBottomElement.style.top = Math.round(thumbBottom - thumbBottomHeight) + "px";
97dcd250e5be checking in an application written by Ivan Litovski. If you're going to OSCon, this is a must.
John Kern <johnk@symbian.org>
parents:
diff changeset
   173
}