Skip to content

Commit

Permalink
progress -day 1
Browse files Browse the repository at this point in the history
  • Loading branch information
T-Dynamos committed Apr 11, 2024
1 parent ea56649 commit 9ecb636
Show file tree
Hide file tree
Showing 4 changed files with 198 additions and 3 deletions.
4 changes: 2 additions & 2 deletions kivymd/uix/scrollview.py
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ def get_component(self, pos):
def convert_overscroll(self, touch):
if (
self.scroll_view
and self.scroll_view.collide_point(*touch.pos)
and self.target_widget.collide_point(*touch.pos)
and self.is_top_or_bottom()
and getattr(self.scroll_view, "do_scroll_" + self.scale_axis)
and self.velocity == 0
Expand Down Expand Up @@ -190,7 +190,7 @@ class MDScrollView(DeclarativeBehavior, BackgroundColorBehavior, ScrollView):
classes documentation.
"""

_internal_scale = None
_internal_scale = None | Scale

def __init__(self, *args, **kwargs):
self.effect_cls = StretchOverScrollStencil
Expand Down
2 changes: 2 additions & 0 deletions kivymd/uix/transition/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,6 @@
MDFadeSlideTransition,
MDSlideTransition,
MDSwapTransition,
MDSharedAxisTransistion,
MDSharedAxisOptions,
)
53 changes: 52 additions & 1 deletion kivymd/uix/transition/transition.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,17 +33,21 @@
"MDSlideTransition",
"MDSwapTransition",
"MDTransitionBase",
"MDSharedAxisTransistion",
"MDSharedAxisOptions"
)

from kivy import Logger
from kivy.animation import Animation, AnimationTransition
from kivy.properties import DictProperty
from kivy.properties import DictProperty, OptionProperty, NumericProperty, BooleanProperty
from kivy.uix.screenmanager import (
ScreenManagerException,
SlideTransition,
SwapTransition,
TransitionBase,
)
from kivy.animation import Animation, AnimationTransition
from kivy.metrics import dp

from kivymd.uix.hero import MDHeroFrom, MDHeroTo
from kivymd.uix.screenmanager import MDScreenManager
Expand Down Expand Up @@ -298,3 +302,50 @@ def on_progress(self, progression: float) -> None:
self.manager.y - self.manager.height * progression
)
self.screen_out.opacity = 1 - progression


class MDSharedAxisOptions:
'''Class contaning constants'''
# Axis
X = "x"
Y = "y"
# durations
DURATION_S1 = 75 / 1000
DURATION_S2 = 150 / 1000
DURATION_M1 = 200 / 1000
DURATION_M2 = 250 / 1000
DURATION_L1 = 300 / 1000
DURATION_L2 = 350 / 1000
# slide distance
SLIDE_DISTANCE = dp(30)


class MDSharedAxisTransistion(TransitionBase):
transition_axis = OptionProperty(
MDSharedAxisOptions.X, options=[MDSharedAxisOptions.X, MDSharedAxisOptions.Y]
)
duration = OptionProperty(
MDSharedAxisOptions.DURATION_S2,
options=[
MDSharedAxisOptions.DURATION_S1,
MDSharedAxisOptions.DURATION_S2,
MDSharedAxisOptions.DURATION_M1,
MDSharedAxisOptions.DURATION_M2,
MDSharedAxisOptions.DURATION_L1,
MDSharedAxisOptions.DURATION_L2,
],
)
slide_distance = NumericProperty(MDSharedAxisOptions.SLIDE_DISTANCE)
opposite = BooleanProperty(False)

def on_progress(self, progress):
progress = AnimationTransition.out_cubic(progress)
const = (1 if self.opposite else -1) * self.slide_distance * 2
if progress < 0.5:
setattr(self.screen_out, self.transition_axis, const * progress)
self.screen_out.opacity = 1 - (2 * progress)
self.screen_in.opacity = 0
else:
self.screen_in.opacity = (2 * progress) - 1
setattr(self.screen_in, self.transition_axis, -const * (1 - progress))
self.screen_out.opacity = 0
142 changes: 142 additions & 0 deletions main.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,142 @@
from kivy.lang import Builder
from kivymd.app import MDApp
from kivy.uix.screenmanager import ScreenManager
from kivymd.uix.screen import MDScreen
from kivymd.uix.transition import MDSharedAxisTransistion
from examples.common_app import CommonApp

KV = """
<SettingsItem@ButtonBehavior+BoxLayout>:
icon:"wifi"
size_hint_y:None
height:dp(70)
padding:dp(10)
MDIconButton:
style: "tonal"
size_hint:None, 1
width:self.height
icon:root.icon
BoxLayout:
orientation:"vertical"
MDLabel:
MDLabel:
<SettingsScreen@MDScreen>:
name:"main"
md_bg_color:app.theme_cls.surfaceContainerHighColor
MDScrollView:
MDBoxLayout:
padding:[dp(10), 0]
adaptive_height:True
orientation:"vertical"
BoxLayout:
size_hint_y:None
height:dp(70)
padding:[0, dp(10)]
MDIconButton:
size_hint:None, None
size:[dp(50)] * 2
on_release: app.open_menu(self)
icon: "menu"
Widget:
MDIconButton:
size_hint:None, None
size:[dp(50)] * 2
on_release: app.open_menu(self)
icon: "magnify"
MDIconButton:
size_hint:None, None
size:[dp(50)] * 2
on_release: app.open_menu(self)
icon: "dots-vertical"
MDLabel:
text:"Settings"
halign:"center"
theme_font_size:"Custom"
font_size:"30sp"
style:"bold"
size_hint_y:None
height:dp(70)
MDBoxLayout:
md_bg_color:app.theme_cls.surfaceContainerLowColor
padding:[dp(10), 0]
radius:[self.height / 2]*4
size_hint_y:None
height:dp(50)
BoxLayout:
size_hint_y:None
height:dp(20)
MDBoxLayout:
md_bg_color:app.theme_cls.surfaceContainerColor
radius:[dp(25)] * 4
adaptive_height:True
orientation:"vertical"
SettingsItem:
icon:"wifi"
on_release:
app.root.transition.opposite = False
app.root.current = "battery"
SettingsItem:
icon:"battery-90"
on_release:
app.root.transition.opposite = False
app.root.current = "battery"
SettingsItem:
icon:"battery-full"
on_release:
app.root.transition.opposite = False
app.root.current = "battery"
SettingsItem:
icon:"battery-full"
on_release:
app.root.transition.opposite = False
app.root.current = "battery"
<BatteryScreen@MDScreen>:
name:"battery"
md_bg_color:app.theme_cls.backgroundColor
BoxLayout:
orientation:"vertical"
MDLabel:
text:"Battery"
halign:"center"
theme_font_size:"Custom"
font_size:"30sp"
style:"bold"
size_hint_y:None
height:dp(100)
MDButton:
style: "filled"
on_release:
app.root.transition.opposite = True
app.root.current = "main"
MDButtonText:
text: "Filled"
Widget:
ScreenManager:
transition:app.transition
canvas:
Color:
rgba:app.theme_cls.backgroundColor
Rectangle:
pos:self.pos
size:self.size
SettingsScreen:
BatteryScreen:
"""


class ExampleApp(MDApp, CommonApp):

def build(self):
self.transition = MDSharedAxisTransistion()
return Builder.load_string(KV)

ExampleApp().run()

0 comments on commit 9ecb636

Please sign in to comment.