After i came up with the idea to look in original code ( i should have done it earlier) I got this.
Not perfect but it's doing the job.
import kivy
kivy.require('1.3.0')
from kivy.uix.scrollview import ScrollView
from kivy.animation import Animation
from kivy.clock import Clock
'''
Scroll View
===========
The :class:`ScrollView` widget provides a scrollable/pannable viewport that is
clipped at the ScrollViews bounding box.
The class deviate from the kivy.uix.scrollview class to support mouse wheel
scrolling in horizontal diraction.
'''
class ScrollView(ScrollView):Â Â Â Â Â Â Â
   def on_touch_down(self, touch):
           if self._touch:
               return super(ScrollView, self).on_touch_down(touch)
           if not self.collide_point(*touch.pos):
               return
           # support scrolling !
           if self._viewport and 'button' in touch.profile and \
                   touch.button.startswith('scroll'):
               # distance available to move, if no distance, do nothing
               vp = self._viewport
               scroll_x = self.__scroll_x(vp)
               scroll_y = self.__scroll_y(vp)
               if(
                  scroll_y or
                  scroll_x
               ):
                   if (scroll_y):
                       self.__do_y_scroll(touch, vp.height - self.height)
                   if (scroll_x):
                       self.__do_x_scroll(touch, vp.width - self.width)
                   Clock.unschedule(self._update_animation)
                   return True
  Â
           self._touch = touch
           uid = self._get_uid()
           touch.grab(self)
           touch.ud[uid] = {
               'mode': 'unknown',
               'sx': self.scroll_x,
               'sy': self.scroll_y,
               'dt': None,
               'time': touch.time_start}
           Clock.schedule_once(self._change_touch_mode, self.scroll_timeout/1000.)
           return True
      Â
   def __calculateDistance(self, seedValue, touch):
       d = self.scroll_distance / float(seedValue)
       if touch.button == 'scrollup':
           syd = self._scroll_y_mouse - d
       elif touch.button == 'scrolldown':
           syd = self._scroll_y_mouse + d
       self._scroll_y_mouse = min(max(syd, 0), 1)
       return self._scroll_y_mouse
   def __scroll_y(self, vp):
       return (
           (self.do_scroll_y == True) and
           (vp.height > self.height)
       )
   def __scroll_x(self, vp):
       return (
           (self.do_scroll_x == True) and
           (vp.width > self.width)
       )
   def __do_y_scroll(self, touch, distance):
       scroll_y = self.__calculateDistance(distance, touch)
       Animation.stop_all(self, 'scroll_y')
       Animation(scroll_y = scroll_y, d=.3, t='out_quart').start(self)
      Â
   def __do_x_scroll(self, touch, distance):
       scroll_x = self.__calculateDistance(distance, touch)
       Animation.stop_all(self, 'scroll_x')
       Animation(scroll_x = scroll_x, d=.3, t='out_quart').start(self)
wbr