Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Slider's ticks не выровнены относительно slider's track (http://www.flasher.ru/forum/showthread.php?t=123180)

: hr : 26.03.2009 14:45

Slider's ticks не выровнены относительно slider's track
 
Друзья, существует такой баг http://bugs.adobe.com/jira/browse/SDK-15529 - в слайдере tick'и не правильно выравниваются по x-координате, что особенно хреново выглядит при кастомном скине track'а. Нашел внутри класса слайдера метод layoutTicks, где с помощью xOffset можно было бы поправить глюк, однако метод private.

Код:

+ private function layoutTicks():void
+    {
+        if (ticks)
+        {
+            var g:Graphics = ticks.graphics;
+            var tLength:Number = getStyle("tickLength");
+            var tOffset:Number = getStyle("tickOffset");
+            var tickWidth:Number = getStyle("tickThickness");
+            var xOffset:Number = tickWidth / 2;
+            var xPos:Number;
+            var tColor:Number = getStyle("tickColor");
+           
+            var usePositions:Boolean = _tickValues && _tickValues.length > 0 ? true : false;
+            var positionIndex:int = 0;
+            var val:Number = usePositions ? _tickValues[positionIndex++] : minimum;
+           
+            g.clear();
+           
+            if (_tickInterval > 0 || usePositions)
+            {
+                g.lineStyle(tickWidth,tColor,100);
+
+                do
+                {
+                    xPos = Math.round(getXFromValue(val) - xOffset);
+                    g.moveTo(xPos, tLength);
+                    g.lineTo(xPos, 0);
+                    val = usePositions ? (positionIndex < _tickValues.length ? _tickValues[positionIndex++] : NaN) : _tickInterval + val;
+                } while (val < maximum || (usePositions && positionIndex < _tickValues.length))
+
+                // draw the last tick
+                if (!usePositions || val == maximum)
+                {
+                    xPos = track.x + track.width - 1 - xOffset;
+                    g.moveTo(xPos, tLength);
+                    g.lineTo(xPos, 0);
+                }
+
+                ticks.y = Math.round(track.y + tOffset - tLength);
+            }
+        }
+    }

Посоветуйте плз, что можно сделать в данной ситуации.

wvxvw 26.03.2009 15:48

А что будет если просто скопировать к себе этот класс, в нем поправить и скомпилировать? (в смысле, а вдруг ваш исправленный класс компилятор первым увидит... не красиво конечно, но чет ничего другого не придумывается... ну или отнаследоваться от него, найти кто вызывает этот метод из того, что можно оверрайдить и там заменить на вызов кастом метода типа layoutTicks2 :)

: hr : 26.03.2009 17:05

Спасибо, wvxvw! Сделал копию и скомпилировал - подхватило мой класс (хотя логика процесса мне не совсем ясна, почему мой класс первый...).


Часовой пояс GMT +4, время: 07:41.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.