Просмотр исходного кода

clean up calculation of visible pdf pages and display on redraw

Brian Gough 11 лет назад
Родитель
Сommit
c9e019b4a7
1 измененных файлов с 22 добавлено и 21 удалено
  1. 22 21
      services/web/public/coffee/ide/pdfng/directives/pdfViewer.coffee

+ 22 - 21
services/web/public/coffee/ide/pdfng/directives/pdfViewer.coffee

@@ -144,18 +144,18 @@ define [
 			# find first visible page
 			visible = $scope.pages.some (page, i) ->
 				[topPageIdx, topPage] = [i, page] if page.visible
-			if visible
+			if visible && topPage.element?
 				# console.log 'found it', topPageIdx
 			else
 				# console.log 'CANNOT FIND TOP PAGE'
 				return
 
 			# console.log 'top page is', topPage.pageNum, topPage.elemTop, topPage.elemBottom, topPage
-			top = topPage.elemTop
-			bottom = topPage.elemBottom
-			viewportTop = 0
-			viewportHeight = $element.height()
-			topVisible = (top >= viewportTop && top < viewportTop + viewportHeight)
+			top = topPage.element.offset().top
+			bottom = top + topPage.element.innerHeight()
+			viewportTop = $element.offset().top
+			viewportBottom = viewportTop + $element.height()
+			topVisible = (top >= viewportTop && top < viewportBottom)
 			someContentVisible = (top < viewportTop && bottom > viewportTop)
 			# console.log 'in PdfListView', top, topVisible, someContentVisible, viewportTop
 			if topVisible
@@ -237,13 +237,10 @@ define [
 				layoutReady.promise.then () ->
 					# console.log 'layoutReady was resolved'
 
-				# TODO can we combine this with scope.parentSize, need to finalize boxes
-				updateContainer = () ->
-					scope.containerSize = [
-						element.innerWidth()
-						element.innerHeight()
-						element.offset().top
-					]
+				renderVisiblePages = () ->
+					visiblePages = getVisiblePages()
+					pages = getExtraPages visiblePages
+					scope.document.renderPages(pages)
 
 				getVisiblePages = () ->
 					top = element.offset().top
@@ -252,7 +249,11 @@ define [
 						pageTop = pageElement.offset().top
 						pageBottom = pageTop + pageElement.innerHeight()
 						return pageTop < bottom and pageBottom > top
-					return (page for page in scope.pages when isVisible(page.element))
+					visiblePages = []
+					for page in scope.pages
+						page.visible = visible = isVisible(page.element)
+						visiblePages.push page if visible
+					return visiblePages
 
 				getExtraPages = (visiblePages) ->
 					extra = []
@@ -282,6 +283,7 @@ define [
 						ctrl.setScale(scale, h, w).then () ->
 							spinner.remove(element)
 							ctrl.redraw(origposition)
+							$timeout renderVisiblePages, 0
 
 				checkElementReady = () ->
 					# if element is zero-sized keep checking until it is ready
@@ -297,7 +299,7 @@ define [
 				scope.$on 'layout-ready', () ->
 					# console.log 'GOT LAYOUT READY EVENT'
 					# console.log 'calling refresh'
-					updateContainer()
+					# updateContainer()
 					spinner.add(element)
 					layoutReady.resolve 'layout is ready'
 					scope.parentSize = [
@@ -336,21 +338,20 @@ define [
 
 				element.on 'scroll', () ->
 					#console.log 'scroll event', element.scrollTop(), 'adjusting?', scope.adjustingScroll
-					scope.scrollPosition = element.scrollTop()
+					#scope.scrollPosition = element.scrollTop()
 					if scope.adjustingScroll
-						updateContainer()
+						renderVisiblePages()
+						# updateContainer()
 						scope.$apply()
 						scope.adjustingScroll = false
 						return
-					scope.scrolled = true
+					#scope.scrolled = true
 					if scope.scrollHandlerTimeout
 						$timeout.cancel(scope.scrollHandlerTimeout)
 					scope.scrollHandlerTimeout = $timeout scrollHandler, 25
 
 				scrollHandler = () ->
-					visiblePages = getVisiblePages()
-					pages = getExtraPages visiblePages
-					scope.document.renderPages(pages)
+					renderVisiblePages()
 					scope.$apply()
 					newPosition = ctrl.getPdfPosition()
 					if newPosition?