Changeset 181 in xtideuniversalbios for trunk/Assembly_Library/Src/Menu/MenuScrollbars.asm
- Timestamp:
- Nov 13, 2011, 3:38:40 PM (13 years ago)
- google:author:
- krille_n_@hotmail.com
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Assembly_Library/Src/Menu/MenuScrollbars.asm
r133 r181 37 37 MenuScrollbars_GetScrollCharacterToALForLineInDI: 38 38 call MenuScrollbars_GetMaxVisibleItemsOnPageToCX 39 call .GetFirstThumbLineToAX 39 ; Get first thumb line to AX 40 mov ax, [bp+MENU.wFirstVisibleItem] 41 call .CalculateFirstOrLastThumbLineToAX 42 40 43 cmp di, ax ; Before first thumb line? 41 44 jb SHORT .ReturnTrackCharacter 42 45 call .GetLastThumbLineToAX 43 cmp di, ax ; After last thumb line? 44 ja SHORT .ReturnTrackCharacter 45 mov al, SCROLL_THUMB_CHARACTER 46 ret 46 cmp ax, di ; After last thumb line? 47 47 ALIGN JUMP_ALIGN 48 48 .ReturnTrackCharacter: 49 49 mov al, SCROLL_TRACK_CHARACTER 50 jb SHORT .Return 51 mov al, SCROLL_THUMB_CHARACTER 52 ALIGN JUMP_ALIGN, ret 53 .Return: 50 54 ret 51 55 … … 63 67 .GetLastThumbLineToAX: 64 68 call MenuScrollbars_GetLastVisibleItemOnPageToAX 65 jmp SHORT .CalculateFirstOrLastThumbLineToAX 66 67 ;-------------------------------------------------------------------- 68 ; .GetFirstThumbLineToAX 69 ; Parameters 69 ; Fall to .CalculateFirstOrLastThumbLineToAX 70 71 ;-------------------------------------------------------------------- 72 ; .CalculateFirstOrLastThumbLineToAX 73 ; Parameters 74 ; AX: Index of first or last visible item on page 70 75 ; CX: Max visible items on page 71 76 ; SS:BP: Ptr to MENU … … 76 81 ;-------------------------------------------------------------------- 77 82 ALIGN JUMP_ALIGN 78 .GetFirstThumbLineToAX:79 mov ax, [bp+MENU.wFirstVisibleItem]80 83 .CalculateFirstOrLastThumbLineToAX: 81 84 mul cx … … 98 101 mov cx, [bp+MENUINIT.wHighlightedItem] 99 102 add cx, ax 100 call .RotateItemInCX 103 ; Fall to .RotateItemInCX 104 105 ;-------------------------------------------------------------------- 106 ; .RotateItemInCX 107 ; Parameters 108 ; CX: Possibly under of overflown item to be rotated 109 ; SS:BP: Ptr to MENU 110 ; Returns: 111 ; CX: Valid item index 112 ; Corrupts registers: 113 ; DX 114 ;-------------------------------------------------------------------- 115 ;.RotateItemInCX: 116 mov dx, [bp+MENUINIT.wItems] 117 test cx, cx 118 js SHORT .RotateNegativeItemInCX 119 sub cx, dx 120 jae SHORT .ScrollPageForNewItemInCX 121 122 ALIGN JUMP_ALIGN 123 .RotateNegativeItemInCX: 124 add cx, dx 101 125 ; Fall to .ScrollPageForNewItemInCX 102 126 … … 111 135 ; AX, BX, CX, DX, SI, DI 112 136 ;-------------------------------------------------------------------- 137 ALIGN JUMP_ALIGN 113 138 .ScrollPageForNewItemInCX: 114 139 call MenuScrollbars_IsItemInCXonVisiblePage … … 117 142 mov dx, [bp+MENU.wFirstVisibleItem] 118 143 sub dx, [bp+MENUINIT.wHighlightedItem] 144 145 ; Get MaxFirstVisibleItem to AX 146 push cx 147 call MenuScrollbars_GetMaxVisibleItemsOnPageToCX 148 mov ax, [bp+MENUINIT.wItems] 149 sub ax, cx 150 pop cx 151 119 152 add dx, cx 120 MAX_S dx, 0 121 call .GetMaxFirstVisibleItemToAX 122 MIN_U ax, dx 153 jns .DXisPositive 154 cwd ; This won't work if MaxFirstVisibleItem > 32767 155 156 ALIGN JUMP_ALIGN 157 .DXisPositive: 158 cmp ax, dx 159 jb .AXisLessThanDX 160 xchg dx, ax 161 162 ALIGN JUMP_ALIGN 163 .AXisLessThanDX: 123 164 mov [bp+MENU.wFirstVisibleItem], ax 124 165 call MenuText_RefreshAllItems … … 127 168 .HighlightNewItemOnCX: 128 169 jmp MenuEvent_HighlightItemFromCX 129 130 ;--------------------------------------------------------------------131 ; .GetMaxFirstVisibleItemToAX132 ; Parameters133 ; SS:BP: Ptr to MENU134 ; Returns:135 ; AX: Max first visible item136 ; Corrupts registers:137 ; Nothing138 ;--------------------------------------------------------------------139 ALIGN JUMP_ALIGN140 .GetMaxFirstVisibleItemToAX:141 push cx142 143 call MenuScrollbars_GetMaxVisibleItemsOnPageToCX144 mov ax, [bp+MENUINIT.wItems]145 sub ax, cx146 147 pop cx148 ret149 150 ;--------------------------------------------------------------------151 ; .RotateItemInCX152 ; Parameters153 ; CX: Possibly under of overflown item to be rotated154 ; SS:BP: Ptr to MENU155 ; Returns:156 ; CX: Valid item index157 ; Corrupts registers:158 ; DX159 ;--------------------------------------------------------------------160 ALIGN JUMP_ALIGN161 .RotateItemInCX:162 mov dx, [bp+MENUINIT.wItems]163 test cx, cx164 js SHORT .RotateNegativeItemInCX165 cmp cx, dx166 jae SHORT .RotatePositiveItemInCX167 ret168 169 ALIGN JUMP_ALIGN170 .RotatePositiveItemInCX:171 sub cx, dx172 ;jae SHORT .RotatePositiveItemInCX ; Not needed by scrolling173 ret174 175 ALIGN JUMP_ALIGN176 .RotateNegativeItemInCX:177 add cx, dx178 ;js SHORT .RotateNegativeItemInCX ; Not needed by scrolling179 ret180 170 181 171 … … 216 206 ALIGN JUMP_ALIGN 217 207 MenuScrollbars_GetLastVisibleItemOnPageToAX: 218 push cx 219 208 xchg cx, ax 220 209 call MenuScrollbars_GetActualVisibleItemsOnPageToCX 221 210 xchg ax, cx 222 211 dec ax 223 212 add ax, [bp+MENU.wFirstVisibleItem] 224 225 pop cx226 213 ret 227 214 … … 239 226 MenuScrollbars_GetActualVisibleItemsOnPageToCX: 240 227 call MenuScrollbars_GetMaxVisibleItemsOnPageToCX 241 MIN_U cx, [bp+MENUINIT.wItems] 228 cmp cx, [bp+MENUINIT.wItems] 229 jb SHORT .Return 230 mov cx, [bp+MENUINIT.wItems] 231 ALIGN JUMP_ALIGN, ret 232 .Return: 242 233 ret 243 234
Note: See TracChangeset
for help on using the changeset viewer.