adium 5995:2bfcb17b7076: Adjust auto-scroll code to use more com...

commits at adium.im commits at adium.im
Mon Nov 4 12:16:51 UTC 2019


details:	http://hg.adium.im/adium/rev/2bfcb17b7076
revision:	5995:2bfcb17b7076
branch:		fix-autoscroll
author:		<kcochran at trolans.net>
date:		Sat Oct 19 17:34:22 2019 -0700

Adjust auto-scroll code to use more compatible APIs, adding support for macOS Catalina
Subject: adium 5996:1894c44cfd13: Merged in trolan/adium/fix-autoscroll (pull request #12)

details:	http://hg.adium.im/adium/rev/1894c44cfd13
revision:	5996:1894c44cfd13
branch:		adium-1.5.10.5
author:		Robbie <robertvehse at fastmail.fm>
date:		Mon Nov 04 10:23:55 2019 +0000

Merged in trolan/adium/fix-autoscroll (pull request #12)

Adjust auto-scroll code to use more compatible APIs, adding support for macOS Catalina

Unterschiede (172 Zeilen):

diff -r 1b816aafafdd -r 1894c44cfd13 Frameworks/AIUtilities Framework/Source/JVMarkedScroller.h
--- a/Frameworks/AIUtilities Framework/Source/JVMarkedScroller.h	Wed Oct 16 20:22:26 2019 +0100
+++ b/Frameworks/AIUtilities Framework/Source/JVMarkedScroller.h	Mon Nov 04 10:23:55 2019 +0000
@@ -23,6 +23,9 @@
 	NSUInteger _currentMark;
 	BOOL _jumpingToMark;
 }
+
+ at property (readonly) BOOL isHorizontalScroller;
+
 - (void) setLocationOfCurrentMark:(NSUInteger) location;
 - (unsigned long long) locationOfCurrentMark;
 
diff -r 1b816aafafdd -r 1894c44cfd13 Frameworks/AIUtilities Framework/Source/JVMarkedScroller.m
--- a/Frameworks/AIUtilities Framework/Source/JVMarkedScroller.m	Wed Oct 16 20:22:26 2019 +0100
+++ b/Frameworks/AIUtilities Framework/Source/JVMarkedScroller.m	Mon Nov 04 10:23:55 2019 +0000
@@ -53,6 +53,10 @@
 
 #pragma mark -
 
+- (BOOL)isHorizontalScroller {
+    return self.enclosingScrollView.horizontalScroller == self;
+}
+
 + (BOOL)isCompatibleWithOverlayScrollers {
     return self == [JVMarkedScroller class];
 }
@@ -65,10 +69,10 @@
 	CGFloat width = [[self class] scrollerWidthForControlSize:[self controlSize]];
 	
 	CGFloat scale = [self scaleToContentView];
-	[transform scaleXBy:( sFlags.isHoriz ? scale : 1.f ) yBy:( sFlags.isHoriz ? 1.f : scale )];
+	[transform scaleXBy:( self.isHorizontalScroller ? scale : 1.f ) yBy:( self.isHorizontalScroller ? 1.f : scale )];
 	
 	CGFloat offset = [self rectForPart:NSScrollerKnobSlot].origin.y;
-	[transform translateXBy:( sFlags.isHoriz ? offset / scale : 0.f ) yBy:( sFlags.isHoriz ? 0.f : offset / scale )];
+	[transform translateXBy:( self.isHorizontalScroller ? offset / scale : 0.f ) yBy:( self.isHorizontalScroller ? 0.f : offset / scale )];
 	
 	NSBezierPath *shades = [NSBezierPath bezierPath];
 	NSEnumerator *enumerator = [_shades objectEnumerator];
@@ -80,7 +84,7 @@
 		NSUInteger stop = [stopNum unsignedIntegerValue];
 		
 		NSRect shadesRect = NSZeroRect;
-		if( sFlags.isHoriz ) shadesRect = NSMakeRect( start, 0.f, ( stop - start ), width );
+		if( self.isHorizontalScroller ) shadesRect = NSMakeRect( start, 0.f, ( stop - start ), width );
 		else shadesRect = NSMakeRect( 0.f, start, width, ( stop - start ) );
 		
 		shadesRect.origin = [transform transformPoint:shadesRect.origin];
@@ -94,7 +98,7 @@
 		NSUInteger start = [[_shades lastObject] unsignedIntegerValue];
 		CGFloat stop = [self contentViewLength];
 		
-		if( sFlags.isHoriz ) shadesRect = NSMakeRect( start, 0.f, ( stop - start ), width );
+		if( self.isHorizontalScroller ) shadesRect = NSMakeRect( start, 0.f, ( stop - start ), width );
 		else shadesRect = NSMakeRect( 0.f, start, width, ( stop - start ) );
 		
 		shadesRect.origin = [transform transformPoint:shadesRect.origin];
@@ -134,17 +138,17 @@
 			foundNext = YES;
 		}
 		
-		NSPoint point = NSMakePoint( ( sFlags.isHoriz ? value : 0 ), ( sFlags.isHoriz ? 0 : value ) );
+		NSPoint point = NSMakePoint( ( self.isHorizontalScroller ? value : 0 ), ( self.isHorizontalScroller ? 0 : value ) );
 		point = [transform transformPoint:point];
-		point.x = ( sFlags.isHoriz ? AIround( point.x ) + 0.5f : point.x );
-		point.y = ( sFlags.isHoriz ? point.y : AIround( point.y ) + 0.5f );
+		point.x = ( self.isHorizontalScroller ? AIround( point.x ) + 0.5f : point.x );
+		point.y = ( self.isHorizontalScroller ? point.y : AIround( point.y ) + 0.5f );
 		
 		if( ! NSPointInRect( point, knobRect ) ) {
 			if( mark.color ) {
 				NSBezierPath *line = [NSBezierPath bezierPath];
 				[line moveToPoint:point];
 				
-				point = NSMakePoint( ( sFlags.isHoriz ? 0.f : width ), ( sFlags.isHoriz ? width : 0.f ) );
+				point = NSMakePoint( ( self.isHorizontalScroller ? 0.f : width ), ( self.isHorizontalScroller ? width : 0.f ) );
 				[line relativeLineToPoint:point];
 				[line setLineWidth:2];
 				[lineArray addObject:mark.color];
@@ -152,7 +156,7 @@
 			} else {
 				[lines moveToPoint:point];
 				
-				point = NSMakePoint( ( sFlags.isHoriz ? 0.f : width ), ( sFlags.isHoriz ? width : 0.f ) );
+				point = NSMakePoint( ( self.isHorizontalScroller ? 0.f : width ), ( self.isHorizontalScroller ? width : 0.f ) );
 				[lines relativeLineToPoint:point];
 			}
 		}
@@ -204,7 +208,7 @@
 	[item setTarget:self];
 	[menu addItem:item];
 	
-	if( sFlags.isHoriz ) {
+	if( self.isHorizontalScroller ) {
 		item = [[[NSMenuItem alloc] initWithTitle:AILocalizedStringFromTableInBundle( @"Clear Marks from Here Left", nil, [NSBundle bundleWithIdentifier:AIUTILITIES_BUNDLE_ID], "clear marks from here left contextual menu") 
 										   action:@selector( clearMarksHereLess: ) 
 									keyEquivalent:@""] autorelease];
@@ -291,7 +295,7 @@
 	NSPoint where = [self convertPoint:[event locationInWindow] fromView:nil];
 	NSRect slotRect = [self rectForPart:NSScrollerKnobSlot];
 	CGFloat scale = [self scaleToContentView];
-	[self removeMarksLessThan:( ( sFlags.isHoriz ? where.x - NSMinX( slotRect ) : where.y - NSMinY( slotRect ) ) / scale )];
+	[self removeMarksLessThan:( ( self.isHorizontalScroller ? where.x - NSMinX( slotRect ) : where.y - NSMinY( slotRect ) ) / scale )];
 }
 
 - (IBAction) clearMarksHereGreater:(id) sender {
@@ -299,7 +303,7 @@
 	NSPoint where = [self convertPoint:[event locationInWindow] fromView:nil];
 	NSRect slotRect = [self rectForPart:NSScrollerKnobSlot];
 	CGFloat scale = [self scaleToContentView];
-	[self removeMarksGreaterThan:( ( sFlags.isHoriz ? where.x - NSMinX( slotRect ) : where.y - NSMinY( slotRect ) ) / scale )];
+	[self removeMarksGreaterThan:( ( self.isHorizontalScroller ? where.x - NSMinX( slotRect ) : where.y - NSMinY( slotRect ) ) / scale )];
 }
 
 #pragma mark -
@@ -589,18 +593,18 @@
 #pragma mark -
 
 - (CGFloat) contentViewLength {
-	if( sFlags.isHoriz ) return ( NSWidth( [self frame] ) / [self knobProportion] );
+	if( self.isHorizontalScroller ) return ( NSWidth( [self frame] ) / [self knobProportion] );
 	else return ( NSHeight( [self frame] ) / [self knobProportion] );
 }
 
 - (CGFloat) scaleToContentView {
-	if( sFlags.isHoriz ) return NSWidth( [self rectForPart:NSScrollerKnobSlot] ) / NSWidth( [[(NSScrollView *)[self superview] contentView] documentRect] );
+	if( self.isHorizontalScroller ) return NSWidth( [self rectForPart:NSScrollerKnobSlot] ) / NSWidth( [[(NSScrollView *)[self superview] contentView] documentRect] );
 	else return NSHeight( [self rectForPart:NSScrollerKnobSlot] ) / NSHeight( [[(NSScrollView *)[self superview] contentView] documentRect] );
 }
 
 - (CGFloat) shiftAmountToCenterAlign {
 	CGFloat scale = [self scaleToContentView];
-	if( sFlags.isHoriz ) return ( ( NSWidth( [self rectForPart:NSScrollerKnobSlot] ) * [self knobProportion] ) / 2.f ) / scale;
+	if( self.isHorizontalScroller ) return ( ( NSWidth( [self rectForPart:NSScrollerKnobSlot] ) * [self knobProportion] ) / 2.f ) / scale;
 	else return ( ( NSHeight( [self rectForPart:NSScrollerKnobSlot] ) * [self knobProportion] ) / 2.f ) / scale;
 }
 @end
diff -r 1b816aafafdd -r 1894c44cfd13 Plugins/WebKit Message View/Template.html
--- a/Plugins/WebKit Message View/Template.html	Wed Oct 16 20:22:26 2019 +0100
+++ b/Plugins/WebKit Message View/Template.html	Mon Nov 04 10:23:55 2019 +0000
@@ -214,10 +214,10 @@
 
 		//Auto-scroll to bottom.  Use nearBottom to determine if a scrollToBottom is desired.
 		function nearBottom() {
-			return ( document.body.scrollTop >= ( document.body.offsetHeight - ( window.innerHeight * 1.2 ) ) );
+			return ( window.scrollY >= ( document.body.offsetHeight - ( window.innerHeight * 1.2 ) ) );
 		}
 		function scrollToBottom() {
-			document.body.scrollTop = document.body.offsetHeight;
+			window.scrollTo(0, document.body.scrollHeight);
 		}
 
 		//Dynamically exchange the active stylesheet
diff -r 1b816aafafdd -r 1894c44cfd13 Resources/Message Styles/Renkoo.AdiumMessageStyle/Contents/Resources/Footer.html
--- a/Resources/Message Styles/Renkoo.AdiumMessageStyle/Contents/Resources/Footer.html	Wed Oct 16 20:22:26 2019 +0100
+++ b/Resources/Message Styles/Renkoo.AdiumMessageStyle/Contents/Resources/Footer.html	Mon Nov 04 10:23:55 2019 +0000
@@ -184,10 +184,10 @@
 		if ( intervall_scroll ) clearInterval( intervall_scroll );
 		intervall_scroll = setInterval( function() {
 			var target_scroll = (document.body.scrollHeight-window.innerHeight);
-			var scrolldiff = target_scroll - document.body.scrollTop;
-			if ( document.body.scrollTop != target_scroll ) {
-				var saved_scroll = document.body.scrollTop;
-				document.body.scrollTop += scrolldiff / 5 + ( scrolldiff >= 0 ? (scrolldiff != 0 ) : -1 );
+			var scrolldiff = target_scroll - window.scrollY;
+			if ( window.scrollY != target_scroll ) {
+				var saved_scroll = window.scrollY;
+				window.scrollTo(0, window.scrollY + scrolldiff / 5 + ( scrolldiff >= 0 ? (scrolldiff != 0 ) : -1 ));
 			} else {
 				saved_scroll = -1;
 				clearInterval( intervall_scroll );



More information about the commits mailing list