kuuko pushed a commit to branch master.
commit 8033275e705f8edf583c07f973ecbd08a0539a1f
Author: Kai Huuhko <[email protected]>
Date: Wed Apr 17 13:57:57 2013 +0000
Elementary: Fix coords_finger_size_adjust and add commented out code for
fonts.
Need to find out why they're generating a parsing error in Cython.
---
efl/elementary/general.pxd | 52 +++++++-------
efl/elementary/general.pyx | 167 ++++++++++++++++++++++++++++++++++++++++++---
2 files changed, 180 insertions(+), 39 deletions(-)
diff --git a/efl/elementary/general.pxd b/efl/elementary/general.pxd
index 39c38b4..dabaea3 100644
--- a/efl/elementary/general.pxd
+++ b/efl/elementary/general.pxd
@@ -17,7 +17,6 @@
#
from efl.evas cimport Eina_List, Eina_Bool, const_Eina_List
-#from efl.evas cimport Eina_Rectangle, Eina_Compare_Cb
from efl.evas cimport Evas_Object, const_Evas_Object, Evas_Smart_Cb, \
Evas_Font_Size, Evas_Coord
from efl.evas.enums cimport Evas_Callback_Type
@@ -42,10 +41,6 @@ cdef extern from "time.h":
long int tm_gmtoff
const_char *tm_zone
-cdef extern from "Python.h":
- ctypedef struct PyTypeObject:
- PyTypeObject *ob_type
-
cdef extern from "Ecore.h":
ctypedef void (*Ecore_Cb)(void *data)
@@ -53,9 +48,6 @@ cdef extern from "Edje.h":
ctypedef void (*Edje_Signal_Cb)(void *data, Evas_Object *obj, const_char
*emission, const_char *source)
cdef extern from "Elementary.h":
-
- # types & structs
-
#colors
ctypedef struct Elm_Color_RGBA:
unsigned int r
@@ -68,7 +60,7 @@ cdef extern from "Elementary.h":
Eina_List *color_list
#event
- ctypedef Eina_Bool (*Elm_Event_Cb) (void *data,
Evas_Object *obj, Evas_Object *src, Evas_Callback_Type t, void *event_info)
+ ctypedef Eina_Bool (*Elm_Event_Cb) (void *data,
Evas_Object *obj, Evas_Object *src, Evas_Callback_Type t, void *event_info)
#font
ctypedef struct Elm_Font_Overlay:
@@ -81,16 +73,19 @@ cdef extern from "Elementary.h":
const_char *name
const_char *desc
- #tooltip
- ctypedef Evas_Object *(*Elm_Tooltip_Content_Cb) (void *data,
Evas_Object *obj, Evas_Object *tooltip)
- ctypedef Evas_Object *(*Elm_Tooltip_Item_Content_Cb) (void *data,
Evas_Object *obj, Evas_Object *tooltip, void *item)
+ ctypedef struct Elm_Font_Properties:
+ const_char *name
+ Eina_List *styles
+ #tooltip
+ ctypedef Evas_Object * (*Elm_Tooltip_Content_Cb) (void *data,
Evas_Object *obj, Evas_Object *tooltip)
+ ctypedef Evas_Object * (*Elm_Tooltip_Item_Content_Cb) (void *data,
Evas_Object *obj, Evas_Object *tooltip, void *item)
# General
- void elm_init(int argc, char** argv)
- void elm_shutdown()
- void elm_run() nogil
- void elm_exit()
+ void elm_init(int argc, char** argv)
+ void elm_shutdown()
+ void elm_run() nogil
+ void elm_exit()
# General - Quicklaunch (XXX: Only used by macros?)
# void elm_quicklaunch_init(int argc, char **argv)
@@ -105,21 +100,22 @@ cdef extern from "Elementary.h":
# char *elm_quicklaunch_exe_path_get(char *exe)
# General - Policy
- Eina_Bool elm_policy_set(unsigned int policy, int value)
- int elm_policy_get(unsigned int policy)
+ Eina_Bool elm_policy_set(unsigned int policy, int value)
+ int elm_policy_get(unsigned int policy)
- # General - Language (py3: TODO)
- void elm_language_set(const_char *lang)
+ # General - Language
+ # TODO: void elm_language_set(const_char *lang)
# Cache
void elm_cache_all_flush()
# Finger
- void elm_coords_finger_size_adjust(int times_w,
Evas_Coord *w, int times_h, Evas_Coord *h)
-
-#cdef int PY_REFCOUNT(object o)
-#cdef _METHOD_DEPRECATED(self, replacement=*, message=*)
-#cdef inline unicode _touni(char* s)
-#cdef inline unicode _ctouni(const_char *s)
-#cdef inline char* _fruni(s)
-#cdef inline const_char *_cfruni(s)
+ void elm_coords_finger_size_adjust(int times_w,
Evas_Coord *w, int times_h, Evas_Coord *h)
+
+ # Font (elm_font.h)
+ # TODO: Elm_Font_Properties * elm_font_properties_get(const_char *font)
+ # TODO: void
elm_font_properties_free(Elm_Font_Properties *efp)
+ # TODO: char * elm_font_fontconfig_name_get(const_char
*name, const_char *style)
+ # TODO: void elm_font_fontconfig_name_free(char *name)
+ # TODO: Eina_Hash * elm_font_available_hash_add(Eina_List
*list)
+ # TODO: void elm_font_available_hash_del(Eina_Hash
*hash)
diff --git a/efl/elementary/general.pyx b/efl/elementary/general.pyx
index 6106289..54d8126 100644
--- a/efl/elementary/general.pyx
+++ b/efl/elementary/general.pyx
@@ -18,6 +18,8 @@
"""
+.. _Elm_Policy:
+
.. rubric:: Policy types
.. data:: ELM_POLICY_QUIT
@@ -25,6 +27,8 @@
Under which circumstances the application should quit automatically.
+.. _Elm_Policy_Quit:
+
.. rubric:: Quit policy types
.. data:: ELM_POLICY_QUIT_NONE
@@ -42,7 +46,8 @@ from cpython cimport PyObject, Py_INCREF, Py_DECREF
from cpython cimport PyMem_Malloc, PyMem_Free
from cpython cimport bool
-from efl.eo cimport _touni, _ctouni
+from efl.eo cimport _touni, _ctouni, convert_python_list_strings_to_eina_list,
\
+ convert_eina_list_strings_to_python_list
import sys
import traceback
@@ -135,6 +140,33 @@ ELM_CURSOR_UR_ANGLE = "ur_angle"
ELM_CURSOR_WATCH = "watch"
ELM_CURSOR_XTERM = "xterm"
+cdef class FontProperties(object):
+
+ """
+
+ Elementary font properties
+
+ """
+
+ cdef Elm_Font_Properties *efp
+
+ property name:
+ """:type: unicode"""
+ def __set__(self, value):
+ if isinstance(value, unicode): value = value.encode("UTF-8")
+ self.efp.name = value
+
+ def __get__(self):
+ return _ctouni(self.efp.name)
+
+ property styles:
+ """:type: list of strings"""
+ def __set__(self, value):
+ self.efp.styles = convert_python_list_strings_to_eina_list(value)
+
+ def __get__(self):
+ return convert_eina_list_strings_to_python_list(self.efp.styles)
+
def init():
"""Initialize Elementary"""
@@ -172,42 +204,76 @@ def exit():
"""Exit main loop"""
elm_exit()
-def policy_set(policy, value):
- """Set new policy value.
+def policy_set(Elm_Policy policy, value):
+ """policy_set(Elm_Policy policy, value) -> bool
+
+ Set new policy value.
This will emit the ecore event ELM_EVENT_POLICY_CHANGED in the main
loop giving the event information Elm_Event_Policy_Changed with
policy identifier, new and old values.
:param policy: policy identifier as in Elm_Policy.
+ :type policy: :ref:`Policy type <Elm_Policy>`
:param value: policy value, depends on identifiers, usually there is
an enumeration with the same prefix as the policy name, for
example: ELM_POLICY_QUIT and Elm_Policy_Quit
(ELM_POLICY_QUIT_NONE, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED).
+ :type value: :ref:`Quit policy <Elm_Policy_Quit>`
:return: True on success or False on error (right
now just invalid policy identifier, but in future policy
value might be enforced).
"""
- return elm_policy_set(policy, value)
+ return bool(elm_policy_set(policy, value))
+
+def policy_get(Elm_Policy policy):
+ """policy_get(Elm_Policy policy) -> value
-def policy_get(policy):
- """Gets the policy value set for given identifier.
+ Gets the policy value set for given identifier.
:param policy: policy identifier as in Elm_Policy.
+ :type policy: :ref:`Policy type <Elm_Policy>`
:return: policy value. Will be 0 if policy identifier is invalid.
+ :rtype: :ref:`Quit policy <Elm_Policy_Quit>`
"""
return elm_policy_get(policy)
-def coords_finger_size_adjust(times_w, w, times_h, h):
- cdef Evas_Coord width
- cdef Evas_Coord height
- width = w
- height = h
+def coords_finger_size_adjust(int times_w, int w, int times_h, int h):
+ """coords_finger_size_adjust(int times_w, int w, int times_h, int h) ->
tuple
+
+ Adjust size of an element for finger usage.
+
+ :param times_w: How many fingers should fit horizontally
+ :type times_w: int
+ :param w: Width size to adjust
+ :type w: int
+ :param times_h: How many fingers should fit vertically
+ :type times_h: int
+ :param h: Height size to adjust
+ :type h: int
+
+ :return: The adjusted width and height
+ :rtype: (int **w**, int **h**)
+
+ This takes width and height sizes (in pixels) as input and a
+ size multiple (which is how many fingers you want to place
+ within the area, being "finger" the size set by
+ elm_config_finger_size_set()), and adjusts the size to be large enough
+ to accommodate the resulting size -- if it doesn't already
+ accommodate it.
+
+ .. note:: This is kind of low level Elementary call, most useful
+ on size evaluation times for widgets. An external user wouldn't
+ be calling, most of the time.
+
+ """
+ cdef Evas_Coord width = w, height = h
elm_coords_finger_size_adjust(times_w, &width, times_h, &height)
+ return (width, height)
def cache_all_flush():
"""cache_all_flush()
@@ -219,3 +285,82 @@ def cache_all_flush():
"""
elm_cache_all_flush()
+
+# XXX: These create some weird parsing error in Cython
+# def font_properties_get(font):
+# """Translate a font (family) name string in fontconfig's font names
+# syntax into a FontProperties object.
+
+# :param font: The font name and styles string
+# :return: the font properties object
+
+# .. note:: The reverse translation can be achieved with
+# :py:func:`font_fontconfig_name_get`, for one style only (single font
+# instance, not family).
+
+# """
+# if isinstance(font, unicode): font = font.encode("UTF-8")
+# cdef:
+# Elm_Font_Properties *efp
+# FontProperties ret = FontProperties.__new__()
+
+ #ret.efp = elm_font_properties_get(<const char *>font if font is not None
else NULL)
+
+ # elm_font_properties_free(efp)
+ # return ret
+
+# def font_fontconfig_name_get(font_name, style = None):
+# """font_fontconfig_name_get(unicode font_name, unicode style = None) ->
unicode
+
+# Translate a font name, bound to a style, into fontconfig's font names
+# syntax.
+
+# :param font_name: The font (family) name
+# :param style: The given style (may be None)
+
+# :return: the font name and style string
+
+# .. note:: The reverse translation can be achieved with
+# :py:func:`font_properties_get`, for one style only (single font
+# instance, not family).
+
+# """
+# cdef:
+# unicode ret
+# char *fc_name
+# if isinstance(font_name, unicode): font_name = font_name.encode("UTF-8")
+# if isinstance(style, unicode): style = style.encode("UTF-8")
+# fc_name = elm_font_fontconfig_name_get(<const char *>font_name,
+# <const char *>style if style is not None else NULL))
+
+# ret = _touni(fc_name)
+# elm_font_fontconfig_name_free(fc_name)
+# return ret
+
+# TODO: Create an Eina_Hash -> dict conversion function for this
+# def font_available_hash_add(list):
+# """Create a font hash table of available system fonts.
+
+# One must call it with @p list being the return value of
+# evas_font_available_list(). The hash will be indexed by font
+# (family) names, being its values @c Elm_Font_Properties blobs.
+
+# :param list: The list of available system fonts, as returned by
+# evas_font_available_list().
+# :return: the font hash.
+
+# .. note:: The user is supposed to get it populated at least with 3
+# default font families (Sans, Serif, Monospace), which should be
+# present on most systems.
+
+# """
+# EAPI Eina_Hash *elm_font_available_hash_add(Eina_List *list)
+
+
+# """Free the hash returned by elm_font_available_hash_add().
+
+# :param hash: the hash to be freed.
+
+# """
+# elm_font_available_hash_del(Eina_Hash *hash)
+
--
------------------------------------------------------------------------------
Precog is a next-generation analytics platform capable of advanced
analytics on semi-structured data. The platform includes APIs for building
apps and a phenomenal toolset for data science. Developers can use
our toolset for easy data analysis & visualization. Get a free account!
http://www2.precog.com/precogplatform/slashdotnewsletter