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