From 900346b89e01c7d7e95134736a1f8725f665f54e Mon Sep 17 00:00:00 2001 From: akshayaurora Date: Wed, 27 Jan 2016 20:21:20 +0530 Subject: [PATCH] kivy:Improve startup speed --- .gitignore | 2 + electrum | 45 +- electrum-env | 8 +- gui/kivy/__init__.py | 3 + gui/kivy/data/glsl/default.fs | 4 + gui/kivy/data/glsl/default.png | Bin 0 -> 224 bytes gui/kivy/data/glsl/default.vs | 6 + gui/kivy/data/glsl/header.fs | 10 + gui/kivy/data/glsl/header.vs | 17 + gui/kivy/data/images/defaulttheme-0.png | Bin 0 -> 72519 bytes gui/kivy/data/images/defaulttheme.atlas | 1 + gui/kivy/data/logo/kivy-icon-128.png | Bin 0 -> 3229 bytes gui/kivy/data/logo/kivy-icon-16.png | Bin 0 -> 420 bytes gui/kivy/data/logo/kivy-icon-24.png | Bin 0 -> 614 bytes gui/kivy/data/logo/kivy-icon-256.png | Bin 0 -> 7435 bytes gui/kivy/data/logo/kivy-icon-32.png | Bin 0 -> 825 bytes gui/kivy/data/logo/kivy-icon-48.png | Bin 0 -> 1169 bytes gui/kivy/data/logo/kivy-icon-512.png | Bin 0 -> 16577 bytes gui/kivy/data/logo/kivy-icon-64.ico | Bin 0 -> 34494 bytes gui/kivy/data/logo/kivy-icon-64.png | Bin 0 -> 1616 bytes gui/kivy/data/style.kv | 736 ++++++++++++++++++++++++ gui/kivy/main.kv | 8 - gui/kivy/main_window.py | 22 +- gui/kivy/tools/buildozer.spec | 12 +- 24 files changed, 813 insertions(+), 61 deletions(-) mode change 100755 => 100644 electrum-env create mode 100644 gui/kivy/data/glsl/default.fs create mode 100644 gui/kivy/data/glsl/default.png create mode 100644 gui/kivy/data/glsl/default.vs create mode 100644 gui/kivy/data/glsl/header.fs create mode 100644 gui/kivy/data/glsl/header.vs create mode 100644 gui/kivy/data/images/defaulttheme-0.png create mode 100644 gui/kivy/data/images/defaulttheme.atlas create mode 100644 gui/kivy/data/logo/kivy-icon-128.png create mode 100644 gui/kivy/data/logo/kivy-icon-16.png create mode 100644 gui/kivy/data/logo/kivy-icon-24.png create mode 100644 gui/kivy/data/logo/kivy-icon-256.png create mode 100644 gui/kivy/data/logo/kivy-icon-32.png create mode 100644 gui/kivy/data/logo/kivy-icon-48.png create mode 100644 gui/kivy/data/logo/kivy-icon-512.png create mode 100644 gui/kivy/data/logo/kivy-icon-64.ico create mode 100644 gui/kivy/data/logo/kivy-icon-64.png create mode 100644 gui/kivy/data/style.kv diff --git a/.gitignore b/.gitignore index 6bd87787..91c873b1 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,5 @@ locale/ packages env/ .tox/ +.buildozer/ +bin/ diff --git a/electrum b/electrum index a75bd2d8..c100fd8a 100755 --- a/electrum +++ b/electrum @@ -31,31 +31,32 @@ if is_local or is_android: elif is_bundle and sys.platform=='darwin': sys.path.insert(0, os.getcwd() + "/lib/python2.7/packages") -# pure-python dependencies need to be imported here for pyinstaller -try: - import dns - import aes - import ecdsa - import requests - import six - import qrcode - import pbkdf2 - import google.protobuf -except ImportError as e: - sys.exit("Error: %s. Try 'sudo pip install '"%e.message) +if not is_android: + # pure-python dependencies need to be imported here for pyinstaller + try: + import dns + import aes + import ecdsa + import requests + import six + import qrcode + import pbkdf2 + import google.protobuf + except ImportError as e: + sys.exit("Error: %s. Try 'sudo pip install '"%e.message) -# the following imports are for pyinstaller -from google.protobuf import descriptor -from google.protobuf import message -from google.protobuf import reflection -from google.protobuf import descriptor_pb2 + # the following imports are for pyinstaller + from google.protobuf import descriptor + from google.protobuf import message + from google.protobuf import reflection + from google.protobuf import descriptor_pb2 -# check that we have the correct version of ecdsa -try: - from ecdsa.ecdsa import curve_secp256k1, generator_secp256k1 -except Exception: - sys.exit("cannot import ecdsa.curve_secp256k1. You probably need to upgrade ecdsa.\nTry: sudo pip install --upgrade ecdsa") + # check that we have the correct version of ecdsa + try: + from ecdsa.ecdsa import curve_secp256k1, generator_secp256k1 + except Exception: + sys.exit("cannot import ecdsa.curve_secp256k1. You probably need to upgrade ecdsa.\nTry: sudo pip install --upgrade ecdsa") # load local module as electrum diff --git a/electrum-env b/electrum-env old mode 100755 new mode 100644 index 0c9c1d7c..a1af5a8a --- a/electrum-env +++ b/electrum-env @@ -10,11 +10,11 @@ # your package manager. if [ -e ./env/bin/activate ]; then - source ./env/bin/activate + source ./env/bin/activate else - virtualenv env - source ./env/bin/activate - python setup.py install + virtualenv env + source ./env/bin/activate + python setup.py install fi export PYTHONPATH="/usr/local/lib/python2.7/site-packages:$PYTHONPATH" diff --git a/gui/kivy/__init__.py b/gui/kivy/__init__.py index 7a5ea716..44329358 100644 --- a/gui/kivy/__init__.py +++ b/gui/kivy/__init__.py @@ -19,6 +19,9 @@ # Kivy GUI import sys +import os +os.environ['KIVY_DATA_DIR'] = os.path.abspath(os.path.dirname(__file__)) + '/data/' + try: sys.argv = [''] import kivy diff --git a/gui/kivy/data/glsl/default.fs b/gui/kivy/data/glsl/default.fs new file mode 100644 index 00000000..19145d65 --- /dev/null +++ b/gui/kivy/data/glsl/default.fs @@ -0,0 +1,4 @@ +$HEADER$ +void main (void){ + gl_FragColor = frag_color * texture2D(texture0, tex_coord0); +} diff --git a/gui/kivy/data/glsl/default.png b/gui/kivy/data/glsl/default.png new file mode 100644 index 0000000000000000000000000000000000000000..a14255e4de12573962e0f5700f4ea6161ac15469 GIT binary patch literal 224 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1SD0tpLGH$#^NA%Cx&(BWL^R}oCO|{#S9GG z!XV7ZFl&wkP>{XE)7O>#7B@SygwV4|r#XQ_k|nMYCC>S|xv6<249-QVi6yBi3gww4 z84B*6z5(HleBwYwzMd|QAsP4Ho_FMBVBla;*joSGxRu{L!$E!J`DOEj1xNuqwim5p Vu8q5yJP&9vgQu&X%Q~loCID}3GN%9l literal 0 HcmV?d00001 diff --git a/gui/kivy/data/glsl/default.vs b/gui/kivy/data/glsl/default.vs new file mode 100644 index 00000000..ac9ac4d6 --- /dev/null +++ b/gui/kivy/data/glsl/default.vs @@ -0,0 +1,6 @@ +$HEADER$ +void main (void) { + frag_color = color * vec4(1.0, 1.0, 1.0, opacity); + tex_coord0 = vTexCoords0; + gl_Position = projection_mat * modelview_mat * vec4(vPosition.xy, 0.0, 1.0); +} diff --git a/gui/kivy/data/glsl/header.fs b/gui/kivy/data/glsl/header.fs new file mode 100644 index 00000000..e9f887ba --- /dev/null +++ b/gui/kivy/data/glsl/header.fs @@ -0,0 +1,10 @@ +#ifdef GL_ES + precision highp float; +#endif + +/* Outputs from the vertex shader */ +varying vec4 frag_color; +varying vec2 tex_coord0; + +/* uniform texture samplers */ +uniform sampler2D texture0; diff --git a/gui/kivy/data/glsl/header.vs b/gui/kivy/data/glsl/header.vs new file mode 100644 index 00000000..a2638bff --- /dev/null +++ b/gui/kivy/data/glsl/header.vs @@ -0,0 +1,17 @@ +#ifdef GL_ES + precision highp float; +#endif + +/* Outputs to the fragment shader */ +varying vec4 frag_color; +varying vec2 tex_coord0; + +/* vertex attributes */ +attribute vec2 vPosition; +attribute vec2 vTexCoords0; + +/* uniform variables */ +uniform mat4 modelview_mat; +uniform mat4 projection_mat; +uniform vec4 color; +uniform float opacity; diff --git a/gui/kivy/data/images/defaulttheme-0.png b/gui/kivy/data/images/defaulttheme-0.png new file mode 100644 index 0000000000000000000000000000000000000000..8cfc82455124cf6387042dcab0fc4b6f4c66f32a GIT binary patch literal 72519 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 P00000NkvXXu0mjfU|IK9 literal 0 HcmV?d00001 diff --git a/gui/kivy/data/logo/kivy-icon-16.png b/gui/kivy/data/logo/kivy-icon-16.png new file mode 100644 index 0000000000000000000000000000000000000000..0b55e584fbcda0be267d7f372f51a0ea57585d04 GIT binary patch literal 420 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbMfq5z)|S0D`mb`B2q4vzMYP9|pN zK++D(29nmcb{1CFmR8ob_6|07_7Euu1Fj6t@bd8ui-=50Ny*90%gZk)EibREu5M^* zYHe%p>gk;@Y0}i`Gghozxq9u|&0Dr?-M-_%p+l#E;OyBeSFc{Xe*Mv-N3Y+$ee>?! z+js9ie){zN`}dzee;P{&8UvjuSrX(I%)rbhARr)YVCdlJ;_hBt($F;R{DnvFKYW^Q z!E+3#XojbYV~B(#>p}0lW&;t10~_VHaRp9xU3%|-(_I$9eP(k#56rlu?V-^xm2tdC zXv*{OwivH$r^>JfiN1NZStl5$D``&8`r=vJR{ABsul2A{`^o-V(a5h^ z`t|H7`P+8o&;8ju?fSDhf9GD~f9J1p^xpcnQ4fB!ggHHK%FbK3U6JAX9`0LmmJjWo h&1JbHvQl66ALGuoE)wsbYNvt1+SAp~Wt~$(699&(ttS8g literal 0 HcmV?d00001 diff --git a/gui/kivy/data/logo/kivy-icon-24.png b/gui/kivy/data/logo/kivy-icon-24.png new file mode 100644 index 0000000000000000000000000000000000000000..86d464368d836f50fda89b3424157d16e2b775f3 GIT binary patch literal 614 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaAy$bLNaRt(tz|O(Z-qFd{-oez& z+|bxqPv1aWM;9(=Wn*JuWepTJFf;-xv$O_r%`7Z|Y@iw&J9{7k3R+rO14Zl|9Ib8b z;8H*{A#8|BkOHtSh~W@6Pzyxd%g5K-*Ec>fDJv&8FTbF&y1KQky{o5p>hu|N=FVHN zXwiz5D_5^wyKepZ&0Dr?-M(Z0fddB)9XbsJXU|@{e*N{^x9{G+fB)gbw{PEm{`~pn z%5P8*7?%Y31v4-*F|)982nYxYi;77oC@3ncXlfalnpqSSmXuc4Oqe)x!J=i$4jepu z^8SNIPu_p{`0?ZY&zHS{+JAVuIEGZ*YVExlbSQzxEm-7;sJTnQ!L3{wtLv0Rqa9sy zukQK(dd8pBTlb3|?mT(Ma&pVR#n(z|4;0Tf-L!Js#Ea{m?Yr0Px_w?HfBlDLsT;eQ z_Oc518658XRmxB(e{gl|HI*$XMR)jb=;?BbOIh$moc^02(Dt6cpwp{Ps_o35Pct== z4P8=a1W)FFHvfrlca=qEhq}%~>x)S?UMA(r%1Lr3n?C$uSt5OIX^;D}j4w+STNa(q zls_~Y)f3W%9+`H}XUB1*c^Pc{z sY1NtY_Hf^=a|fq6v(716YBc|Lyjf2uYoGMFGEi#qboFyt=akR{0R4*o7XSbN literal 0 HcmV?d00001 diff --git a/gui/kivy/data/logo/kivy-icon-256.png b/gui/kivy/data/logo/kivy-icon-256.png new file mode 100644 index 0000000000000000000000000000000000000000..9df4c879ee99d8f15f94223ae2970d31fc77854f GIT binary patch literal 7435 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 literal 0 HcmV?d00001 diff --git a/gui/kivy/data/logo/kivy-icon-48.png b/gui/kivy/data/logo/kivy-icon-48.png new file mode 100644 index 0000000000000000000000000000000000000000..c295e64eb2de0779869164a52f93f40bdea7d6f2 GIT binary patch literal 1169 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

?*A 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 F{XZQhHKG6j literal 0 HcmV?d00001 diff --git a/gui/kivy/data/logo/kivy-icon-64.ico b/gui/kivy/data/logo/kivy-icon-64.ico new file mode 100644 index 0000000000000000000000000000000000000000..98f36cdafafdf56df9887a0a2506ff0ec2843300 GIT binary patch literal 34494 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: + canvas: + Color: + rgba: self.disabled_color if self.disabled else (self.color if not self.markup else (1, 1, 1, 1)) + Rectangle: + texture: self.texture + size: self.texture_size + pos: int(self.center_x - self.texture_size[0] / 2.), int(self.center_y - self.texture_size[1] / 2.) + +<-Button,-ToggleButton>: + state_image: self.background_normal if self.state == 'normal' else self.background_down + disabled_image: self.background_disabled_normal if self.state == 'normal' else self.background_disabled_down + canvas: + Color: + rgba: self.background_color + BorderImage: + border: self.border + pos: self.pos + size: self.size + source: self.disabled_image if self.disabled else self.state_image + Color: + rgba: self.disabled_color if self.disabled else self.color + Rectangle: + texture: self.texture + size: self.texture_size + pos: int(self.center_x - self.texture_size[0] / 2.), int(self.center_y - self.texture_size[1] / 2.) + + + opacity: .7 if self.disabled else 1 + rows: 1 + canvas: + Color: + rgba: self.parent.background_color if self.parent else (1, 1, 1, 1) + BorderImage: + border: self.parent.border if self.parent else (16, 16, 16, 16) + texture: root.parent._bk_img.texture if root.parent else None + size: self.size + pos: self.pos + +: + background_normal: 'atlas://data/images/defaulttheme/bubble_btn' + background_down: 'atlas://data/images/defaulttheme/bubble_btn_pressed' + background_disabled_normal: 'atlas://data/images/defaulttheme/bubble_btn' + background_disabled_down: 'atlas://data/images/defaulttheme/bubble_btn_pressed' + border: (0, 0, 0, 0) + +: + canvas.before: + PushMatrix + Translate: + xy: self.pos + canvas.after: + PopMatrix + +: + canvas: + Color: + rgba: self.color + Rectangle: + texture: self.texture + size: self.norm_image_size + pos: self.center_x - self.norm_image_size[0] / 2., self.center_y - self.norm_image_size[1] / 2. + + + rows: 1 + padding: 3 + canvas: + Color: + rgba: self.parent.background_color if self.parent else (1, 1, 1, 1) + BorderImage: + border: self.parent.border if self.parent else (16, 16, 16, 16) + source: (root.parent.background_disabled_image if self.disabled else root.parent.background_image) if root.parent else None + size: self.size + pos: self.pos + + + rows: 1 + + + padding: '2dp', '2dp', '2dp', '2dp' + canvas.before: + BorderImage: + pos: self.pos + size: self.size + border: root.border + source: root.background_image + +: + halign: 'center' + valign: 'middle' + background_normal: 'atlas://data/images/defaulttheme/tab_btn' + background_disabled_normal: 'atlas://data/images/defaulttheme/tab_btn_disabled' + background_down: 'atlas://data/images/defaulttheme/tab_btn_pressed' + background_disabled_down: 'atlas://data/images/defaulttheme/tab_btn_pressed' + border: (8, 8, 8, 8) + font_size: '15sp' + + + allow_stretch: True + +: + canvas.before: + Color: + rgba: self.background_color + BorderImage: + border: self.border + pos: self.pos + size: self.size + source: (self.background_disabled_active if self.disabled else self.background_active) if self.focus else (self.background_disabled_normal if self.disabled else self.background_normal) + Color: + rgba: (self.cursor_color if self.focus and not self.cursor_blink else (0, 0, 0, 0)) + Rectangle: + pos: [int(x) for x in self.cursor_pos] + size: 1, -self.line_height + Color: + rgba: self.disabled_foreground_color if self.disabled else (self.hint_text_color if not self.text and not self.focus else self.foreground_color) + +: + but_cut: cut.__self__ + but_copy: copy.__self__ + but_paste: paste.__self__ + but_selectall: selectall.__self__ + + size_hint: None, None + size: '150sp', '50sp' + BubbleButton: + id: cut + text: 'Cut' + on_release: root.do('cut') + BubbleButton: + id: copy + text: 'Copy' + on_release: root.do('copy') + BubbleButton: + id: paste + text: 'Paste' + on_release: root.do('paste') + BubbleButton: + id: selectall + text: 'Select All' + on_release: root.do('selectall') + +: + font_name: 'data/fonts/RobotoMono-Regular.ttf' + + +: + canvas.before: + Color: + rgba: self.color_selected if self.is_selected else self.odd_color if self.odd else self.even_color + Rectangle: + pos: [self.parent.x, self.y] if self.parent else [0, 0] + size: [self.parent.width, self.height] if self.parent else [1, 1] + Color: + rgba: 1, 1, 1, int(not self.is_leaf) + Rectangle: + source: 'atlas://data/images/defaulttheme/tree_%s' % ('opened' if self.is_open else 'closed') + size: 16, 16 + pos: self.x - 20, self.center_y - 8 + canvas.after: + Color: + rgba: .5, .5, .5, .2 + Line: + points: [self.parent.x, self.y, self.parent.right, self.y] if self.parent else [] + + +: + width: self.texture_size[0] + height: max(self.texture_size[1] + dp(10), dp(24)) + text_size: self.width, None + + +: + canvas.before: + StencilPush + Rectangle: + pos: self.pos + size: self.size + StencilUse + + canvas.after: + StencilUnUse + Rectangle: + pos: self.pos + size: self.size + StencilPop + + +: + on_entry_added: treeview.add_node(args[1]) + on_entries_cleared: treeview.root.nodes = [] + on_subentry_to_entry: not args[2].locked and treeview.add_node(args[1], args[2]) + on_remove_subentry: args[2].nodes = [] + BoxLayout: + pos: root.pos + size: root.size + size_hint: None, None + orientation: 'vertical' + BoxLayout: + size_hint_y: None + height: 30 + orientation: 'horizontal' + Widget: + # Just for spacing + width: 10 + size_hint_x: None + Label: + text: 'Name' + text_size: self.size + halign: 'left' + bold: True + Label: + text: 'Size' + text_size: self.size + size_hint_x: None + halign: 'right' + bold: True + Widget: + # Just for spacing + width: 10 + size_hint_x: None + ScrollView: + id: scrollview + do_scroll_x: False + Scatter: + do_rotation: False + do_scale: False + do_translation: False + size: treeview.size + size_hint_y: None + TreeView: + id: treeview + hide_root: True + size_hint_y: None + width: scrollview.width + height: self.minimum_height + on_node_expand: root.controller.entry_subselect(args[1]) + on_node_collapse: root.controller.close_subselection(args[1]) + +: + layout: layout + FileChooserListLayout: + id: layout + controller: root + +[FileListEntry@FloatLayout+TreeViewNode]: + locked: False + entries: [] + path: ctx.path + # FIXME: is_selected is actually a read_only treeview property. In this + # case, however, we're doing this because treeview only has single-selection + # hardcoded in it. The fix to this would be to update treeview to allow + # multiple selection. + is_selected: self.path in ctx.controller().selection + + orientation: 'horizontal' + size_hint_y: None + height: '48dp' if dp(1) > 1 else '24dp' + # Don't allow expansion of the ../ node + is_leaf: not ctx.isdir or ctx.name.endswith('..' + ctx.sep) or self.locked + on_touch_down: self.collide_point(*args[1].pos) and ctx.controller().entry_touched(self, args[1]) + on_touch_up: self.collide_point(*args[1].pos) and ctx.controller().entry_released(self, args[1]) + BoxLayout: + pos: root.pos + Label: + id: filename + text_size: self.width, None + halign: 'left' + shorten: True + text: ctx.name + Label: + text_size: self.width, None + size_hint_x: None + halign: 'right' + text: '{}'.format(ctx.get_nice_size()) + + +: + on_entry_added: stacklayout.add_widget(args[1]) + on_entries_cleared: stacklayout.clear_widgets() + ScrollView: + id: scrollview + pos: root.pos + size: root.size + size_hint: None, None + do_scroll_x: False + Scatter: + do_rotation: False + do_scale: False + do_translation: False + size_hint_y: None + height: stacklayout.height + StackLayout: + id: stacklayout + width: scrollview.width + size_hint_y: None + height: self.minimum_height + spacing: '10dp' + padding: '10dp' + +: + layout: layout + FileChooserIconLayout: + id: layout + controller: root + +[FileIconEntry@Widget]: + locked: False + path: ctx.path + selected: self.path in ctx.controller().selection + size_hint: None, None + + on_touch_down: self.collide_point(*args[1].pos) and ctx.controller().entry_touched(self, args[1]) + on_touch_up: self.collide_point(*args[1].pos) and ctx.controller().entry_released(self, args[1]) + size: '100dp', '100dp' + + canvas: + Color: + rgba: 1, 1, 1, 1 if self.selected else 0 + BorderImage: + border: 8, 8, 8, 8 + pos: root.pos + size: root.size + source: 'atlas://data/images/defaulttheme/filechooser_selected' + + Image: + size: '48dp', '48dp' + source: 'atlas://data/images/defaulttheme/filechooser_%s' % ('folder' if ctx.isdir else 'file') + pos: root.x + dp(24), root.y + dp(40) + Label: + text: ctx.name + text_size: (root.width, self.height) + halign: 'center' + shorten: True + size: '100dp', '16dp' + pos: root.x, root.y + dp(16) + + Label: + text: '{}'.format(ctx.get_nice_size()) + font_size: '11sp' + color: .8, .8, .8, 1 + size: '100dp', '16sp' + pos: root.pos + halign: 'center' + +: + pos_hint: {'x': 0, 'y': 0} + canvas: + Color: + rgba: 0, 0, 0, .8 + Rectangle: + pos: self.pos + size: self.size + Label: + pos_hint: {'x': .2, 'y': .6} + size_hint: .6, .2 + text: 'Opening %s' % root.path + FloatLayout: + pos_hint: {'x': .2, 'y': .4} + size_hint: .6, .2 + ProgressBar: + id: pb + pos_hint: {'x': 0, 'center_y': .5} + max: root.total + value: root.index + Label: + pos_hint: {'x': 0} + text: '%d / %d' % (root.index, root.total) + size_hint_y: None + height: self.texture_size[1] + y: pb.center_y - self.height - 8 + font_size: '13sp' + color: (.8, .8, .8, .8) + + AnchorLayout: + pos_hint: {'x': .2, 'y': .2} + size_hint: .6, .2 + + Button: + text: 'Cancel' + size_hint: None, None + size: 150, 44 + on_release: root.cancel() + + + +# Switch widget +: + active_norm_pos: max(0., min(1., (int(self.active) + self.touch_distance / sp(41)))) + canvas: + Color: + rgb: 1, 1, 1 + Rectangle: + source: 'atlas://data/images/defaulttheme/switch-background{}'.format('_disabled' if self.disabled else '') + size: sp(83), sp(32) + pos: int(self.center_x - sp(41)), int(self.center_y - sp(16)) + Rectangle: + source: 'atlas://data/images/defaulttheme/switch-button{}'.format('_disabled' if self.disabled else '') + size: sp(43), sp(32) + pos: int(self.center_x - sp(41) + self.active_norm_pos * sp(41)), int(self.center_y - sp(16)) + + +# ModalView widget +: + canvas: + Color: + rgba: root.background_color[:3] + [root.background_color[-1] * self._anim_alpha] + Rectangle: + size: self._window.size if self._window else (0, 0) + + Color: + rgb: 1, 1, 1 + BorderImage: + source: root.background + border: root.border + pos: self.pos + size: self.size + + +# Popup widget +: + _container: container + GridLayout: + padding: '12dp' + cols: 1 + size_hint: None, None + pos: root.pos + size: root.size + + Label: + text: root.title + color: root.title_color + size_hint_y: None + height: self.texture_size[1] + dp(16) + text_size: self.width - dp(16), None + font_size: root.title_size + font_name: root.title_font + halign: root.title_align + + Widget: + size_hint_y: None + height: dp(4) + canvas: + Color: + rgba: root.separator_color + Rectangle: + pos: self.x, self.y + root.separator_height / 2. + size: self.width, root.separator_height + + BoxLayout: + id: container + +# ============================================================================= +# Spinner widget +# ============================================================================= + +: + size_hint_y: None + height: '48dp' + +: + background_normal: 'atlas://data/images/defaulttheme/spinner' + background_disabled_normal: 'atlas://data/images/defaulttheme/spinner_disabled' + background_down: 'atlas://data/images/defaulttheme/spinner_pressed' + +# ============================================================================= +# ActionBar widget +# ============================================================================= + +: + height: '48dp' + size_hint_y: None + spacing: '4dp' + canvas: + Color: + rgba: self.background_color + BorderImage: + border: root.border + pos: self.pos + size: self.size + source: self.background_image + +: + orientation: 'horizontal' + canvas: + Color: + rgba: self.background_color + BorderImage: + pos: self.pos + size: self.size + source: self.background_image + +: + size_hint_x: None + minimum_width: '2sp' + width: self.minimum_width + canvas: + Rectangle: + pos: self.x, self.y + sp(4) + size: self.width, self.height - sp(8) + source: self.background_image + +: + background_normal: 'atlas://data/images/defaulttheme/' + ('action_bar' if self.inside_group else 'action_item') + background_down: 'atlas://data/images/defaulttheme/action_item_down' + size_hint_x: None if not root.inside_group else 1 + width: [dp(48) if (root.icon and not root.inside_group) else max(dp(48), (self.texture_size[0] + dp(32))), self.size_hint_x][0] + color: self.color[:3] + [0 if (root.icon and not root.inside_group) else 1] + + Image: + allow_stretch: True + opacity: 1 if (root.icon and not root.inside_group) else 0 + source: root.icon + mipmap: root.mipmap + pos: root.x + dp(4), root.y + dp(4) + size: root.width - dp(8), root.height - sp(8) + +: + size_hint_x: None if not root.inside_group else 1 + width: self.texture_size[0] + dp(32) + +: + size_hint_x: None + width: self.texture_size[0] + dp(32) + +: + background_normal: 'atlas://data/images/defaulttheme/action_bar' if self.inside_group else 'atlas://data/images/defaulttheme/action_item' + +: + temp_width: 0 + temp_height: 0 + +: + background_normal: 'atlas://data/images/defaulttheme/action_item' + background_down: 'atlas://data/images/defaulttheme/action_item_down' + +: + size_hint_x: 1 + minimum_width: layout.minimum_width + min(sp(100), title.width) + important: True + GridLayout: + id: layout + rows: 1 + pos: root.pos + size_hint_x: None + width: self.minimum_width + ActionPreviousButton: + on_press: root.dispatch('on_press') + on_release: root.dispatch('on_release') + size_hint_x: None + width: prevlayout.width + GridLayout: + id: prevlayout + rows: 1 + width: self.minimum_width + height: self.parent.height + pos: self.parent.pos + ActionPreviousImage: + id: prev_icon_image + source: root.previous_image + opacity: 1 if root.with_previous else 0 + allow_stretch: True + size_hint_x: None + temp_width: root.previous_image_width or dp(prev_icon_image.texture_size[0]) + temp_height: root.previous_image_height or dp(prev_icon_image.texture_size[1]) + width: + (self.temp_width if self.temp_height <= self.height else \ + self.temp_width * (self.height / self.temp_height)) \ + if self.texture else dp(8) + mipmap: root.mipmap + ActionPreviousImage: + id: app_icon_image + source: root.app_icon + allow_stretch: True + size_hint_x: None + temp_width: root.app_icon_width or dp(app_icon_image.texture_size[0]) + temp_height: root.app_icon_height or dp(app_icon_image.texture_size[1]) + width: + (self.temp_width if self.temp_height <= self.height else \ + self.temp_width * (self.height / self.temp_height)) \ + if self.texture else dp(8) + mipmap: root.mipmap + Widget: + size_hint_x: None + width: '5sp' + Label: + id: title + text: root.title + text_size: self.size + color: root.color + shorten: True + shorten_from: 'right' + halign: 'left' + valign: 'middle' + +: + background_normal: 'atlas://data/images/defaulttheme/action_group' + background_down: 'atlas://data/images/defaulttheme/action_group_down' + background_disabled_normal: 'atlas://data/images/defaulttheme/action_group_disabled' + border: 30, 30, 3, 3 + ActionSeparator: + pos: root.pos + size: root.separator_width, root.height + opacity: 1 if root.use_separator else 0 + background_image: root.separator_image if root.use_separator else 'action_view' + +: + border: 3, 3, 3, 3 + background_normal: 'atlas://data/images/defaulttheme/action_item' + background_down: 'atlas://data/images/defaulttheme/action_item_down' + background_disabled_normal: 'atlas://data/images/defaulttheme/button_disabled' + size_hint_x: None + minimum_width: '48sp' + width: self.texture_size[0] if self.texture else self.minimum_width + canvas.after: + Color: + rgb: 1, 1, 1 + Rectangle: + pos: root.center_x - sp(16), root.center_y - sp(16) + size: sp(32), sp(32) + source: root.overflow_image + +: + auto_width: False + + +# ============================================================================= +# Accordion widget +# ============================================================================= + +[AccordionItemTitle@Label]: + text: ctx.title + normal_background: ctx.item.background_normal if ctx.item.collapse else ctx.item.background_selected + disabled_background: ctx.item.background_disabled_normal if ctx.item.collapse else ctx.item.background_disabled_selected + canvas.before: + Color: + rgba: self.disabled_color if self.disabled else self.color + BorderImage: + source: self.disabled_background if self.disabled else self.normal_background + pos: self.pos + size: self.size + PushMatrix + Translate: + xy: self.center_x, self.center_y + Rotate: + angle: 90 if ctx.item.orientation == 'horizontal' else 0 + axis: 0, 0, 1 + Translate: + xy: -self.center_x, -self.center_y + canvas.after: + PopMatrix + + +: + container: container + container_title: container_title + + BoxLayout: + orientation: root.orientation + pos: root.pos + BoxLayout: + size_hint_x: None if root.orientation == 'horizontal' else 1 + size_hint_y: None if root.orientation == 'vertical' else 1 + width: root.min_space if root.orientation == 'horizontal' else 100 + height: root.min_space if root.orientation == 'vertical' else 100 + id: container_title + + StencilView: + id: sv + + BoxLayout: + id: container + pos: sv.pos + size: root.content_size + + +: + canvas.after: + Color: + rgba: self._bar_color if (self.do_scroll_y and self.viewport_size[1] > self.height) else [0, 0, 0, 0] + Rectangle: + pos: (self.right - self.bar_width - self.bar_margin) if self.bar_pos_y == 'right' else (self.x + self.bar_margin), self.y + self.height * self.vbar[0] + size: min(self.bar_width, self.width), self.height * self.vbar[1] + Color: + rgba: self._bar_color if (self.do_scroll_x and self.viewport_size[0] > self.width) else [0, 0, 0, 0] + Rectangle: + pos: self.x + self.width * self.hbar[0], (self.y + self.bar_margin) if self.bar_pos_x == 'bottom' else (self.top - self.bar_margin - self.bar_width) + size: self.width * self.hbar[1], min(self.bar_width, self.height) + + +: + _checkbox_state_image: + self.background_checkbox_down \ + if self.active else self.background_checkbox_normal + _checkbox_disabled_image: + self.background_checkbox_disabled_down \ + if self.active else self.background_checkbox_disabled_normal + _radio_state_image: + self.background_radio_down \ + if self.active else self.background_radio_normal + _radio_disabled_image: + self.background_radio_disabled_down \ + if self.active else self.background_radio_disabled_normal + _checkbox_image: + self._checkbox_disabled_image \ + if self.disabled else self._checkbox_state_image + _radio_image: + self._radio_disabled_image \ + if self.disabled else self._radio_state_image + canvas: + Color: + rgb: 1, 1, 1 + Rectangle: + source: self._radio_image if self.group else self._checkbox_image + size: sp(32), sp(32) + pos: int(self.center_x - sp(16)), int(self.center_y - sp(16)) + +# ============================================================================= +# Screen Manager +# ============================================================================= + +: + canvas.before: + StencilPush + Rectangle: + pos: self.pos + size: self.size + StencilUse + canvas.after: + StencilUnUse + Rectangle: + pos: self.pos + size: self.size + StencilPop diff --git a/gui/kivy/main.kv b/gui/kivy/main.kv index e378f19d..571f8882 100644 --- a/gui/kivy/main.kv +++ b/gui/kivy/main.kv @@ -193,7 +193,6 @@ - #border: 0, 0, 16, 0 border: 0, 0, 16, 0 markup: False text_size: self.size @@ -203,13 +202,6 @@ font_size: '12.5sp' background_normal: 'atlas://gui/kivy/theming/light/tab_btn' background_down: 'atlas://gui/kivy/theming/light/tab_btn_pressed' - #canvas.before: - # Color: - # rgba: .6, .6, .6, .7 - # Rectangle: - # size: self.size - # pos: self.x + 1, self.y - 1 - # texture: self.texture : diff --git a/gui/kivy/main_window.py b/gui/kivy/main_window.py index a0e64ab6..ac628b45 100644 --- a/gui/kivy/main_window.py +++ b/gui/kivy/main_window.py @@ -285,6 +285,7 @@ class ElectrumWindow(App): def on_start(self): ''' This is the start point of the kivy ui ''' + import time; print 'python time to on_start:', time.clock(), '<<<<<<<<<' Logger.info("dpi: {} {}".format(metrics.dpi, metrics.dpi_rounded)) win = Window win.bind(size=self.on_size, @@ -300,10 +301,7 @@ class ElectrumWindow(App): 'data/fonts/Roboto-Bold.ttf', 'data/fonts/Roboto-Bold.ttf') - if platform == 'android': - # bind to keyboard height so we can get the window contents to - # behave the way we want when the keyboard appears. - win.bind(keyboard_height=self.on_keyboard_height) + win.softinput_mode = 'below_target' self.on_size(win, win.size) self.init_ui() @@ -338,22 +336,6 @@ class ElectrumWindow(App): if self.wallet: self.wallet.stop_threads() - def on_keyboard_height(self, window, height): - win = window - active_widg = win.children[0] - if not issubclass(active_widg.__class__, Factory.Popup): - try: - active_widg = self.root.children[0] - except IndexError: - return - try: - fw = self._focused_widget - except AttributeError: - return - if height > 0 and fw.to_window(*fw.pos)[1] > height: - return - Factory.Animation(y=win.keyboard_height, d=.1).start(active_widg) - def on_key_down(self, instance, key, keycode, codepoint, modifiers): if 'ctrl' in modifiers: # q=24 w=25 diff --git a/gui/kivy/tools/buildozer.spec b/gui/kivy/tools/buildozer.spec index 0f066f2b..cd643ddf 100644 --- a/gui/kivy/tools/buildozer.spec +++ b/gui/kivy/tools/buildozer.spec @@ -4,7 +4,7 @@ title = Electrum # (str) Package name -package.name = kivy +package.name = Electrum # (str) Package domain (needed for android/ios packaging) package.domain = org.electrum @@ -13,17 +13,15 @@ package.domain = org.electrum source.dir = . # (list) Source files to include (let empty to include all the files) -source.include_exts = py,png,jpg,kv,atlas,ttf,txt, gif, pem, mo +source.include_exts = py,png,jpg,kv,atlas,ttf,txt,gif,pem,mo,vs,fs # (list) Source files to exclude (let empty to not exclude anything) source.exclude_exts = spec # (list) List of directory to exclude (let empty to not exclude anything) -source.exclude_dirs = bin, build, contrib, gui/android, gui/gtk, gui/qt, gui/kivy/tools - - +source.exclude_dirs = bin, build, dist, contrib, gui/android, gui/qt, gui/kivy/tools # (list) List of exclusions using pattern matching -#source.exclude_patterns = license,images/*/*.jpg +source.exclude_patterns = Makefile,setup* # (str) Application versioning (method 1) version.regex = ELECTRUM_VERSION = '(.*)' @@ -85,7 +83,7 @@ android.private_storage = True # down the build process. Allows wildcards matching, for example: # OUYA-ODK/libs/*.jar #android.add_jars = foo.jar,bar.jar,path/to/more/*.jar -android.add_jars = lib/android/zbar.jar +#android.add_jars = lib/android/zbar.jar # (list) List of Java files to add to the android project (can be java or a # directory containing the files)