Add autoscroll: support to CPView, CPClipView, and the dragging server (which may not be generic enough)

This commit is contained in:
Ross Boucher committed 2009-04-04 22:16:24 -07:00
1 parent 64b41ffb8e
commit 43af999d41
4 files changed
+47 -12

No files matched your search

+16
View File
@@ -177,6 +177,22 @@
[superview reflectScrolledClipView:self];
}
- (BOOL)autoscroll:(CPEvent)anEvent
{
var bounds = [self bounds],
eventLocation = [self convertPoint:[anEvent locationInWindow] fromView:nil];
if (CPRectContainsPoint(bounds, eventLocation))
return NO;
var newRect = CGRectMakeZero();
newRect.origin = eventLocation;
newRect.size = CPSizeMake(10, 10);
return [_documentView scrollRectToVisible:newRect];
}
@end
+29 -9
View File
@@ -32,14 +32,16 @@
var CPSharedDragServer = nil;
var CPDragServerView = nil,
CPDragServerSource = nil,
CPDragServerWindow = nil,
CPDragServerOffset = nil,
CPDragServerLocation = nil,
CPDragServerPasteboard = nil,
CPDragServerDestination = nil,
CPDragServerDraggingInfo = nil;
var CPDragServerView = nil,
CPDragServerSource = nil,
CPDragServerWindow = nil,
CPDragServerOffset = nil,
CPDragServerLocation = nil,
CPDragServerPasteboard = nil,
CPDragServerDestination = nil,
CPDragServerDraggingInfo = nil,
CPDragServerPreviousEvent = nil,
CPDragServerAutoscrollInterval = nil;
var CPDragServerIsDraggingImage = NO,
@@ -49,6 +51,11 @@ var CPDragServerIsDraggingImage = NO,
CPDragServerShouldSendDraggedViewEndedAtOperation = NO,
CPDragServerShouldSendDraggedImageEndedAtOperation = NO;
var CPDragServerAutoscroll = function()
{
[CPDragServerSource autoscroll:CPDragServerPreviousEvent];
}
var CPDragServerStartDragging = function(anEvent)
{
CPDragServerUpdateDragging(anEvent);
@@ -59,6 +66,11 @@ var CPDragServerUpdateDragging = function(anEvent)
// If this is a mouse up, then complete the drag.
if([anEvent type] == CPLeftMouseUp)
{
if (CPDragServerAutoscrollInterval !== nil)
clearInterval(CPDragServerAutoscrollInterval);
CPDragServerAutoscrollInterval = nil;
CPDragServerLocation = [DRAGGING_WINDOW(CPDragServerDestination) convertBridgeToBase:[[anEvent window] convertBaseToBridge:[anEvent locationInWindow]]];
[CPDragServerView removeFromSuperview];
@@ -77,10 +89,18 @@ var CPDragServerUpdateDragging = function(anEvent)
CPDragServerIsDraggingImage = NO;
CPDragServerDestination = nil;
return;
}
if (CPDragServerAutoscrollInterval === nil)
{
if ([CPDragServerSource respondsToSelector:@selector(autoscroll:)])
CPDragServerAutoscrollInterval = setInterval(CPDragServerAutoscroll, 100);
}
CPDragServerPreviousEvent = anEvent;
// If we're not a mouse up, then we're going to want to grab the next event.
[CPApp setCallback:CPDragServerUpdateDragging
forNextEventMatchingMask:CPMouseMovedMask | CPLeftMouseDraggedMask | CPLeftMouseUpMask
+1 -1
View File
@@ -354,7 +354,7 @@
/*!
Returns <code>YES</code> if the scroll view can have a vertical scroller.
*/
- (BOOL)hasHorizontalScroller
- (BOOL)hasVerticalScroller
{
return _hasHorizontalScroller;
}
+1 -2
View File
@@ -1727,8 +1727,7 @@ setBoundsOrigin:
*/
- (BOOL)autoscroll:(CPEvent)anEvent
{
// FIXME: Implement.
return NO;
return [[self superview] autoscroll:anEvent];
}
/*!