-
Notifications
You must be signed in to change notification settings - Fork 1
/
libscroll.livecode
345 lines (289 loc) · 12.8 KB
/
libscroll.livecode
1
script "libScroll"# libScroll v3.0.beta # Gurgen Hovhannisyan# Email: g.hovhannisyan@digitalpomegranate.com# DIGITAL POMEGRANATE LLC 2017---------------------------------------------------------------------------------------################################################################# SETTINGS###############################################################constant kScrollerName = "libScrollNative"constant kSendCallbacks = falseconstant kHIndicator= falseconstant kVIndicator= false---------------------------------------------------------------------------------------################################################################# System variable###############################################################local sLibScroll---------------------------------------------------------------------------------------################################################################# Public functions###############################################################----------------------------------------------------------------------------------------- DESCRIPTION-- Inits the scrolling library--CHANGES-- 04/04/2017: Gurgen - Created---------------------------------------------------------------------------------------command libScrollInit put the long id of this stack into tStack // Set the behavior of stack set the behavior of tStack to the long id of stack "libScroll" // Save settings put tStack into sLibScroll["stack"] put kScrollerName into sLibScroll["scrollerName"] put kSendCallbacks into sLibScroll["sendCallbacks"] // Check if already created if not sLibScroll["isCreated"] then put true into sLibScroll["isCreated"] // Do the creation part from stack message path to get native scroller callbacks send "_libScrollCreate sLibScroll" to tStack else dispatch "libScrollCreated" to sLibScroll["stack"] end ifend libScrollInit----------------------------------------------------------------------------------------- DESCRIPTION-- Inits the scrolling library-- PARAMETERS-- pGroupID: the long id of scrolling group-- pDirection: horizontal/vertical--CHANGES-- 04/04/2017: Gurgen - Created---------------------------------------------------------------------------------------command libScrollConnect pGroupID, pDirection // Get direction to scroll put pDirection into sLibScroll[pGroupID]["direction"] // Get the scroller rect put the rect of pGroupID into sLibScroll[pGroupID]["rect"] // Get the scrolling content rect put 0 into item 1 of tContentRect put 0 into item 2 of tContentRect put the formattedWidth of pGroupID into item 3 of tContentRect put the formattedHeight of pGroupID into item 4 of tContentRect put tContentRect into sLibScroll[pGroupID]["contentRect"] -- Mark as connected put true into sLibScroll[pGroupID]["isConnected"] -- Send callback if kSendCallbacks then dispatch "libScrollConnected" to sLibScroll["stack"] with sLibScroll[pGroupID]end libScrollConnect----------------------------------------------------------------------------------------- DESCRIPTION-- Enables the scrolling-- PARAMETERS-- pGroupID: the long id of scrolling group-- pReset: true/false. If true the library will reconnect the group--CHANGES-- 04/04/2017: Gurgen - Created---------------------------------------------------------------------------------------command libScrollEnable pGroupID, pReset, pDirection // Reset the group parameters if pReset then put false into sLibScroll[pGroupID]["isConnected"] end if // Double check if connected if not sLibScroll[pGroupID]["isConnected"] then libScrollConnect pGroupID, pDirection end if // Save the group h/v scroll size put the hScroll of pGroupID into tHScroll put the vScroll of pGroupID into tVScroll // Mark as enabled put true into sLibScroll["scrollerEnabled"] // Save current direction and scrolling group id put pDirection into sLibScroll["currentDirection"] put pGroupID into sLibScroll["currentGroup"] // Check the environment if not _libScrollIsMobile() then exit libScrollEnable // Set the scroller properties _libScrollSetProps sLibScroll[pGroupID] // Set the v/h scrolling to both native and livecode scrollers libScrollSetVScroll tVScroll libScrollSetHScroll tHScroll // Show the scroller libScrollSetVisible true // Send callback if kSendCallbacks then dispatch "libScrollEnabled" to sLibScroll["stack"] with pGroupIDend libScrollEnable----------------------------------------------------------------------------------------- DESCRIPTION-- Set the vertical scroll size-- PARAMETERS-- pValue: Integer. The value to set to native scroller--CHANGES-- 04/04/2017: Gurgen - Created---------------------------------------------------------------------------------------command libScrollSetVScroll pValue mobileControlSet kScrollerName, "vScroll", pValue set the vScroll of sLibScroll["currentGroup"] to pValueend libScrollSetVScroll----------------------------------------------------------------------------------------- DESCRIPTION-- Set the horizontal scroll size-- PARAMETERS-- pValue: Integer. The value to set to native scroller--CHANGES-- 04/04/2017: Gurgen - Created---------------------------------------------------------------------------------------command libScrollSetHScroll pValue mobileControlSet kScrollerName, "hScroll", pValue set the hScroll of sLibScroll["currentGroup"] to pValueend libScrollSetHScroll----------------------------------------------------------------------------------------- DESCRIPTION-- Sets the visible of native scroller-- PARAMETERS-- pValue: true/false. if true will set the scroller visible to true--CHANGES-- 04/04/2017: Gurgen - Created---------------------------------------------------------------------------------------command libScrollSetVisible pValue mobileControlSet kScrollerName, "visible", pValue mobileControlSet kScrollerName, "scrollingEnabled", pValueend libScrollSetVisible----------------------------------------------------------------------------------------- DESCRIPTION-- Disable the native scroller and hide--CHANGES-- 04/04/2017: Gurgen - Created---------------------------------------------------------------------------------------command libScrollDisable put false into sLibScroll["scrollerEnabled"] if _libScrollIsMobile() then libScrollSetVisible false if kSendCallbacks then dispatch "libScrollDisabled" to sLibScroll["stack"]end libScrollDisable----------------------------------------------------------------------------------------- DESCRIPTION-- Deletes the native scroller (usualy no need, use libScrollDisable instead)--CHANGES-- 04/04/2017: Gurgen - Created---------------------------------------------------------------------------------------command libScrollDelete if not _libScrollIsMobile() then exit libScrollDelete mobileControlDelete kScrollerName if kSendCallbacks then dispatch "libScrollDeleted" to sLibScroll["stack"] delete var sLibScrollend libScrollDelete---------------------------------------------------------------------------------------################################################################# Private functions###############################################################----------------------------------------------------------------------------------------- DESCRIPTION-- Sets the scroller properties-- PARAMETERS-- pProps: the scroller properties to set--CHANGES-- 04/04/2017: Gurgen - Created---------------------------------------------------------------------------------------private command _libScrollSetProps pProps mobileControlSet kScrollerName, "rect", pProps["rect"] mobileControlSet kScrollerName, "contentRect", pProps["contentRect"]end _libScrollSetProps----------------------------------------------------------------------------------------- DESCRIPTION-- Creats the native scroller-- PARAMETERS-- pLibScroll: properties to transfer from library to user stack--CHANGES-- 04/04/2017: Gurgen - Created---------------------------------------------------------------------------------------command _libScrollCreate pLibScroll put pLibScroll into sLibScroll if not _libScrollIsMobile() then exit _libScrollCreate mobileControlCreate "scroller", kScrollerName mobileControlSet kScrollerName, "visible", false mobileControlSet kScrollerName, "scrollingEnabled", true mobileControlSet kScrollerName, "vIndicator", kVIndicator mobileControlSet kScrollerName, "hIndicator", kHIndicator mobileControlSet kScrollerName, "canBounce", true if kSendCallbacks then dispatch "libScrollCreated" to sLibScroll["stack"]end _libScrollCreate----------------------------------------------------------------------------------------- DESCRIPTION-- Returns true if in mobile, else false--CHANGES-- 04/04/2017: Gurgen - Created---------------------------------------------------------------------------------------function _libScrollIsMobile if the environment is "mobile" then return true else return false end ifend _libScrollIsMobile---------------------------------------------------------------------------------------################################################################# Native callbacks###############################################################----------------------------------------------------------------------------------------- DESCRIPTION-- Sent when the properties of a scroller have changed.-- PARAMETERS-- hOffset: The horizontal scroll of an iOS scroller control. -- vOffset:The vertical scroll of an iOS scroller control. --CHANGES-- 04/04/2017: Gurgen - Created---------------------------------------------------------------------------------------command scrollerDidScroll hOffset, vOffset -- Check the direction to scroll switch sLibScroll["currentDirection"] case "horizontal" set the hScroll of sLibScroll["currentGroup"] to hOffset break case "vertical" set the vScroll of sLibScroll["currentGroup"] to vOffset break default set the vScroll of sLibScroll["currentGroup"] to vOffset set the hScroll of sLibScroll["currentGroup"] to hOffset end switch if kSendCallbacks then dispatch "libScrollDidScroll" to sLibScroll["currentGroup"] with hOffset, vOffset end scrollerDidScroll----------------------------------------------------------------------------------------- DESCRIPTION-- Sends libScrollEndDrag message to current scrolling object--CHANGES-- 04/04/2017: Gurgen - Created---------------------------------------------------------------------------------------on scrollerEndDrag if kSendCallbacks then dispatch "libScrollEndDrag" to sLibScroll["currentGroup"]end scrollerEndDrag-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- DESCRIPTION-- Sends libScrollStartDrag message to current scrolling object--CHANGES-- 04/04/2017: Gurgen - Created---------------------------------------------------------------------------------------on scrollerStartDrag if kSendCallbacks then dispatch "libScrollStartDrag" to sLibScroll["currentGroup"]end scrollerStartDrag------------------------------------------------------------------------------------------------------------------------------------------------------------------------------################################################################# Desktop scrolling###############################################################---------------------------------------------------------------------------------------on rawKeyDown pKey switch case sLibScroll["currentGroup"] is empty pass rawKeyDown break case pKey = 65309 set the vScroll of sLibScroll["currentGroup"] to the vScroll of sLibScroll["currentGroup"] - 50 break case pKey = 65308 set the vScroll of sLibScroll["currentGroup"] to the vScroll of sLibScroll["currentGroup"] + 50 break case pKey = 65311 set the hScroll of sLibScroll["currentGroup"] to the hScroll of sLibScroll["currentGroup"] - 50 break case pKey = 65310 set the hScroll of sLibScroll["currentGroup"] to the hScroll of sLibScroll["currentGroup"] +50 break default pass rawKeyDown end switchend rawKeyDown