Integrating Qt Quick components in Ministro

BogDan bog_dan_ro at yahoo.com
Thu Feb 2 13:28:16 UTC 2012



Hi,


Yes ! BorderImage seems to be exactly the same thing with NinePatch, thanks for the tip !


   Anyway, as I said before I'd like to have a QStyle plugin which paints the classic widget also the qml ones, because it seems classic widgets are sill use by a lot of people !

Cheers,

BogDan.



----- Original Message -----
> From: Kate Alhola <kate.alhola at gmail.com>
> Sent: Wednesday, February 1, 2012 10:59 PM
> Subject: Re: Integrating Qt Quick components in Ministro
> 
> Some quick look comments:
> 
> On Wed, Feb 1, 2012 at 9:20 PM, BogDan <bog_dan_ro at yahoo.com> wrote:
>>  Hello everyone,
>> 
>>    I have good news on this topic, I manage to check (a little bit) 
> Android's source code and to extract, the exact, android's look and 
> style informations for a few widgets (buttonStyle, editTextStyle, 
> radioButtonStyle, checkboxStyle, etc.) and store them into a .json file (check 
> the attachment). Because qt 4.x doesn't come with json support, IMHO we have 
> two options:
>>    1 - to use this [1] qt json implementation.
>>    2 - or to backport Qt 5.x json implementation (my favorite option, 
> because it seems more complex and complete than the first one).
>> 
>>    I need more time to finish the extraction class (which will be part of 
> the next Ministro release), so, if someone wants to step in and begin the Qt 
> implementation it will be very appreciated !
>> 
>>    To understand how android paints the widgets you have to check a simple 
> widget how it's painted. So let's check Button class [2], which extends 
> TextView class [3] which extends the View class [4].
>> 
>>  How it works:
>>    - Button class only pass to its super class (TextView)  the style 
> attribute (com.android.internal.R.attr.buttonStyle)
>>    - TextView class pass the same information to its super class (View) then 
> in its constructor (check "public TextView(Context context, AttributeSet 
> attrs, int defStyle)" ) extracts text informations 
> (e.g.TextAppearance_textColor,TextAppearance_textSize, TextAppearance_typeface, 
> etc.) which are used to draw the text (check onDraw (...)).
>>    - View class in its constructor (check "public View(Context context, 
> AttributeSet attrs, int defStyle)") extracts a few informations e.g. 
> View_background, View_paddingLeft, etc. which are used to paint the basic parts 
> of the widget (e.g. the background).
>> 
>>    If you check the json file, you'll see that there are more than one 
> .png files used to paint the background, one for every view state (enabled, 
> disabled, pressed, etc.). Android split every .png file into nine pieces (it 
> uses nine patch technique [5], [6]) which are used to seamlessly resize the 
> widget. AFAIK there is no support for such a thing into Qt, so IMHO this is the 
> first thing which must be implemented.
>> 
> 
> The nime patch looks exactly same than Qt BorderImage (
> http://developer.qt.nokia.com/doc/qt-4.8/qml-borderimage.html )
> 
>
> Also, system that uses different images for different states is
> exactly same that is used on components
> meegotouch-button-background-pressed.png
> meegotouch-button-background.png
> meegotouch-button-background-selected.png
> ....
> and this for all combinations, inverted, disabled ...
> 
> The problem then comes more than could we do some mapping of Android
> and MeeGotouch states like
> meegotouch-button-background -> buttonStyle_View-background_Enabled.png
> 
> MeeGocomponents uses mthemedaemon plugin that fetch images, so, if we
> could make just mapping names
> and json query, we could in theory get theme engine.
> 
> Symbian components uses svg images , meegocomponents borderimages .
> There is very little
> difference in component API's. Least what I have used, porting on apps
> were mostly changing import statements
> and change of some colors.
> 
> Kate
> 
>>  This weekend I hope to have enough time to create a wiki page which will 
> describe the content of the json file.
>> 
>>  Cheers,
>>  BogDan.
>> 
>> 
>>  [1] https://github.com/ereilin/qt-json
>>  [2] 
> http://www.java2s.com/Open-Source/Android/android-core/platform-frameworks-base/android/widget/Button.java.htm
>>  [3] 
> http://www.java2s.com/Open-Source/Android/android-core/platform-frameworks-base/android/widget/TextView.java.htm
>>  [4] 
> http://www.java2s.com/Open-Source/Android/android-core/platform-frameworks-base/android/view/View.java.htm
>>  [5] http://developer.android.com/reference/android/graphics/NinePatch.html
>> 
>>  [6] 
> http://developer.android.com/guide/topics/graphics/2d-graphics.html#nine-patch
>> 
>> 
>>> 
>>>  Hi,
>>> 
>>>     Yes, sadly we have to get our hands  very dirty.
>>>     First step is to identify all Qt components then we have to find
>>>  Android's corresponding components, then we must extract the style 
> &
>>>  look information to a central location (IMHO Ministro should do this 
> job), then
>>>  any application which starts will peek this infos from that location 
> and use
>>>  them to paint all controls.
>>>     Second step is to check how Android paints the controls, here the 
> things will
>>>  become dirty, we have to check
>>>  "frameworks/base/core/java/android/widget/TextView.java" from 
> Android
>>>  source code and it seems we have to use a lot of private data, I hope 
> the
>>>  Android versions are not so different.
>>>    Third step is to change Ministro in order to extract all the infos we 
> need to
>>>  paint our controls.
>>>     Fourth step is to create a QStyle plugin (which will be used by QML 
> as well)
>>>  which loads the data extracted by Ministro and use it to paint the 
> controls. If
>>>  the extract procedure is very fast (less than 10ms), I doubt it will be 
> that
>>>  fast :),  we can skip the third step and extract the data directly in  
> QStyle.
>>>     Fifth step, if everything works, we must get drunk !
>>> 
>>> 
>>>  Cheers,
>>>  BogDan.
>>> 
>>> 
>>>> 
>>>> 
>>>>  While I don't agree on "almost all applications have the 
> same
>>>  look" (as far as I can see, the only fully common UI element is 
> the
>>>  menu/toolbar combo), I respect your choice.
>>>> 
>>>>  The first step would be to define what is the "Android 
> style". Is
>>>  there some Google guidelines you plan to follow?
>>>> 
>>>>  Regards
>>>>  - Chris -
>>>> 
>>>> 
>>>>  On Tue, Jan 3, 2012 at 17:45, BogDan <bog_dan_ro at yahoo.com> 
> wrote:
>>>> 
>>>>  Hi,
>>>>> 
>>>>> 
>>>>>    I think none of your examples are good to follow :) The 
> reason why
>>>  meego doesn't use QtStyle to draw the widgets is because meego 
> doesn't
>>>  have a "native" style. Symbian is even worst, open any two
>>>  applications on symbian and you'll see that none of them have the 
> same look
>>>  & style :) On Android is a different story, almost all applications 
> have the
>>>  same look & style, so if we want to have a first class citizen 
> port, all Qt
>>>  applications *MUST* look the same as any android application. I'm 
> choosing
>>>  to make QStyle plugin because this way all Qt applications will benefit 
> from it,
>>>  either they are made using old-fashion widgets or QML components.
>>>>>  For me a good android style is a top priority, I don't 
> believe
>>>  I'll have enough time to finish it till beta 1 but who knows ...:) 
> maybe if
>>>  other people will join me we can split the work and we can have this 
> feature in
>>>  time for beta1.
>>>>> 
>>>>> 
>>>>>  Cheers,
>>>>>  BogDan.
>>>>> 
>>>>> 
>>>>> 
>>>>>> 
>>>>>>  and please note that the Qt quick components (either 
> symbian or
>>>  meego) don't use Qt widget styles. All the components are drawn in 
> qml so
>>>  the componenets would unfortunately not benefit from your work on a 
> widget
>>>  style.
>>>>>>>  - Chris -
>>>>> 
>>>>>> 
>>>>>> 
>>>>>>  On Thu, Dec 22, 2011 at 21:53, BogDan 
> <bog_dan_ro at yahoo.com>
>>>  wrote:
>>>>>> 
>>>>>> 
>>>>>>> 
>>>>>>>  Hi Chris,
>>>>>>> 
>>>>>>>  Please accept my apologize for the slow reply.
>>>>>>>  I think before we'll integrate the components into 
> Ministro,
>>>  we must do a few things:
>>>>>>>   - the components MUST use Android's style, next 
> year
>>>  I'm planning to create a style plugin for
>>>>>>> 
>>>>>>>  widgets which should be used by Qt Quick Components for 
> Android.
>>>>>>>   - wait until Nokia finishes to define the API for Qt 
> Quick
>>>  components [1]. We can't afford to break the API after we release 
> it :)
>>>>>>> 
>>>>>>> 
>>>>>>>  Cheers,
>>>>>>>  BogDan.
>>>>>>> 
>>>>>>> 
>>>>>>>  [1] 
> https://bugreports.qt.nokia.com/browse/QTCOMPONENTS-200
>>>>>>> 
>>>>>>> 
>>>>>>>> 
>>>>>>>>  Hi guys,
>>>>>>>> 
>>>>>>>>  What would the steps be to integrate the Qt quick 
> components
>>>  for Android to Ministro as a package?
>>>>>>>> 
>>>>>>>>  - Chris -
>>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> 
>>>>> 
>>>> 
>>>> 
>>>> 
>>>  _______________________________________________
>>>  Necessitas-devel mailing list
>>>  Necessitas-devel at kde.org
>>>  https://mail.kde.org/mailman/listinfo/necessitas-devel
>>> 
> 


More information about the Necessitas-devel mailing list