Option 1: use spice-gtk with a gtk android backend<br>
a) compiling gtk for it would be possible.<br>
b) write a partial gtk backend, good enough for spice-gtk.<br>
c) no changes to spice-gtk.<br> Yep,that's really a good hope,but it's another project(too huge and far away for me now):<br>Project:"GTK for Android.". So now I can use only the Android SDK to finish the UI(the new native UI APIs in NDK is not reliable in versions).<br>
And also you've referred that "spicec is already platform independent", that's true to Linux and Windows,but not to Android,for such independence is based on the C++ independence over the os which cannot stand through the JAVA UIed android.So there is no way to just add a subdir ./android under spice/client along with ./x11 and ./windows. It should be a combined proj. of C/C++ and Java. (That's why I hate Android and yearn for Maemo/Meego.)<br>
Regards.<br><br><div class="gmail_quote">On Fri, Mar 4, 2011 at 7:04 PM, Alon Levy <span dir="ltr"><<a href="mailto:alevy@redhat.com">alevy@redhat.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div class="im">On Fri, Mar 04, 2011 at 06:21:19PM +0800, Shuxiang Lim wrote:<br>
> Hi, friends,<br>
> Thanks for your replies. It's definitely right till now I've been<br>
> working a tougher way compared to spice-gtk.And actually I've considered to<br>
> steer my way to the latter in fear of the troublesome and crippled C++<br>
> support in Android NDK:C is more "simple and safe" in Android than C++.<br>
> But,AFAIK,there is no gtk port for Android yet. And the biggest obstacle is<br>
> the framework of Android:in its design,all UI should be done in JAVA powered<br>
> by SKIA libs.Therefore the port of UI libs(GTK,etc) will be choked by the<br>
> I/O level because Android don't completely expose them at all!(I once<br>
> managed to port Xfbdev onto it,but that's not commercially practical at all,<br>
> it's just a geeky trick maybe,an app in Android SHOULD NOT do this.) Only<br>
> the algorithm/data computing-related C/C++ libs are welcomed to be the JNI<br>
> servants to JAVA UI apps in Android.<br>
> You see, in such aspect, there is not too much diff between the C++ way<br>
> and gtk way in the porting of UI part.<br>
<br>
</div>I'm going to try to prove that wrong by grepping hoping it makes sense, I never<br>
actually coded in gtk:<br>
<br>
$ git grep GObjectClass<br>
gtk/channel-cursor.c: GObjectClass *gobject_class = G_OBJECT_CLASS(klass);<br>
gtk/channel-display.c: GObjectClass *gobject_class = G_OBJECT_CLASS(klass);<br>
gtk/channel-inputs.c: GObjectClass *gobject_class = G_OBJECT_CLASS(klass);<br>
gtk/channel-main.c: GObjectClass *gobject_class = G_OBJECT_CLASS(klass);<br>
gtk/channel-playback.c: GObjectClass *gobject_class = G_OBJECT_CLASS(klass);<br>
gtk/channel-record.c: GObjectClass *gobject_class = G_OBJECT_CLASS(klass);<br>
gtk/spice-audio.h: GObjectClass parent_class;<br>
gtk/spice-channel.c: GObjectClass *gobject_class = G_OBJECT_CLASS (klass);<br>
gtk/spice-channel.h: GObjectClass parent_class;<br>
gtk/spice-gstaudio.c: GObjectClass *gobject_class = G_OBJECT_CLASS(klass);<br>
gtk/spice-pulse.c: GObjectClass *gobject_class = G_OBJECT_CLASS(klass);<br>
gtk/spice-session.c: GObjectClass *gobject_class = G_OBJECT_CLASS(klass);<br>
gtk/spice-session.h: GObjectClass parent_class;<br>
gtk/spice-widget.c: GObjectClass *gobject_class = G_OBJECT_CLASS(klass);<br>
<br>
otoh:<br>
U playa:spice-gtk alon (master)$ git grep --name-only GdkWindow<br>
gtk/spice-widget-cairo.c<br>
gtk/spice-widget.c<br>
<br>
(if you grep Window you get false negatives because of the compression window).<br>
<br>
Anyway, this is a lame attempt to prove the gtk stuff that does ui (read: uses X)<br>
is separated in the code/architecture level :)<br>
<div class="im"><br>
> So for me the shining light of spicec-gtk is not in "GTK" but in "C". I<br>
> dare not to say I'm clear about every nook in spicec at all. My best hope is<br>
> that the IO in spicec shall be straight and succinct ,the inner<br>
> graphic/sound computing(decompress,etc) shall have NO relation with upper UI<br>
> libs at all, so I can pipe the Finished image flow into UI through JNI<br>
> interfaces and direct the user input backward. (That's why I can borrow the<br>
> UI from AndroidVNCViewer)<br>
<br>
</div>Yeah, I think it is generally so, but again, it's so in spice-gtk too, and that's<br>
our only future supported client (*).<br>
<br>
(*) plans do change.<br>
<div class="im">><br>
> libspicec.so(do most jobs)<br>
</div>> <==finishedimages/audio>>===<<inputs==>spicec.java.ui(only UI)<br>
<div class="im">><br>
> Am I right? Is there any design that will frustrate this in spicec or<br>
> spice-gtk?<br>
<br>
</div>spicec is already separated at the platform level, since it uses low level<br>
libraries directly, unlike spice-gtk (X and GDI). So you would basically<br>
be adding a platform/android.<br>
<br>
In gtk I really haven't done android development, ever, at least not in the<br>
C level, but I was hoping:<br>
Option 1: use spice-gtk with a gtk android backend<br>
a) compiling gtk for it would be possible.<br>
b) write a partial gtk backend, good enough for spice-gtk.<br>
c) no changes to spice-gtk.<br>
<br>
Option 2 is of course to make spice-gtk also have platform separation, while<br>
still using gtk/gobject for all stuff that would Just Work when doing 1.a (the<br>
data structures, the signals, the macros, the introspection?).<br>
<div><div></div><div class="h5"><br>
> Regards.<br>
><br>
><br>
> On Fri, Mar 4, 2011 at 4:36 PM, Alon Levy <<a href="mailto:alevy@redhat.com">alevy@redhat.com</a>> wrote:<br>
><br>
> > On Fri, Mar 04, 2011 at 03:38:51PM +0800, Shuxiang Lim wrote:<br>
> > > Hi all,<br>
> > > I'm trying these days to port spicec into Android.But it's a rather<br>
> > TOUGH<br>
> > > way to go because the structure of spicec and android are desperately<br>
> > > inappropriate:the linux version of spicec is based on the X11,which is<br>
> > not<br>
> > > available in Android,thus the UI of spicec should be rewritten from<br>
> > > scratch...More troublesome is that the UI part and data part in current<br>
> ><br>
> > Haven't looked at your proposal below yet, but did you check the spice-gtk<br>
> > work? maybe it is easier to start from that? are gtk libraries available on<br>
> > android? not talking about X. spice-gtk has objects for connection and<br>
> > channels<br>
> > that afaik don't do any output, that's separate from the actual widget that<br>
> > uses X. Also, gtk 3 has backends - did anyone do a backend for android?<br>
> ><br>
> > Since going forward we plan to ditch the spicec client, that would be<br>
> > really<br>
> > preffered. Now that I see what you have planned it sounds good, but better<br>
> > to use spice-gtk.<br>
> ><br>
> > of course that's not to say we won't love to see this working anyway :)<br>
> ><br>
> > > spicec is entangled in the hierarchical system in C++! So my plan is<br>
> > this:<br>
> > > first split the spicec into two parts,data and UI,transform the data part<br>
> > > into libspicec.so;then rewrite the UI part in JAVA. Besides, I should<br>
> > also<br>
> > > tinker some problems caused by the Crippled NDK C++ support and the Lamed<br>
> > > bionic c lib in android .<br>
> > > And now the first step is roughly done,hence the change of the spicec<br>
> > > structure:<br>
> > > From<br>
> > > |-->playback<br>
> > > thread<br>
> > > |-->cursor<br>
> > > thread<br>
> > > spicec:spicec process(application process)-->main thread->|-->*record<br>
> > thread<br>
> > > *<br>
> > > |-->inputs<br>
> > > thread<br>
> > > |-->display<br>
> > > thread<br>
> > > To:<br>
> > > ===========================><br>
> > > |-->libspicec.so:application thread-->main<br>
> > > thread------>|<br>
> > > |<br>
> > > |<br>
> > > | |<--display thread<--|<br>
> > > |<br>
> > > | |--->|<--cursor<br>
> > > thread<---|<------------------|<br>
> > > | | |<--inputs thread<---|<br>
> > > spicec:spicec process--->| | |<--playback thread<-|<br>
> > > | |<br>
> > > | |<br>
> > > | |<br>
> > > <---------------------------------------------|<br>
> > > |<br>
> > > |<br>
> > > |<br>
> > > |<br>
> > > |-->spicec:platform<br>
> > > thread------------------------------>|<br>
> > ><br>
> > > The hierarchical relationship has been unleashed with one thread(record<br>
> > > channel) deleted and two new threads (app and platform) created. The<br>
> > first<br>
> > > as the "data thread",the other as the "work thread" which is driven by<br>
> > the<br>
> > > signals from the first thread as well as its sub threads and requested to<br>
> > do<br>
> > > the UI-related work:<br>
> > ><br>
> > > platform thread:------------>blocked and waiting:-->job<br>
> > > request-<--------------|<br>
> > > | |<br>
> > > |<br>
> > > ^ |<br>
> > > |<br>
> > > |<br>
> > > | |<br>
> > > |<----------|-<-|<br>
> > > |<br>
> > > | |<br>
> > > |<br>
> > > platform thread over<----------if(job==die)<--| send req. blocked<br>
> > > and waiting<br>
> > > | ^ |<br>
> > > |<br>
> > > | | |<br>
> > > ^<br>
> > > | | |<br>
> > > _________|_________<br>
> > > | | |<br>
> > > | app/plbk/cusor<br>
> > > thd<br>
> > > |<---job done----dojob()<--else--| | |->go on->|<br>
> > > __________________<br>
> > > | |<br>
> > > |------------------------------->feed back-->|<br>
> > ><br>
> > ><br>
> > > So the next work is to expose the native JNI interface in platform thread<br>
> > to<br>
> > > the UI written in Android SDK. I try to use the UI<br>
> > > frame of AndroidVNCViewer in<br>
> > > <a href="http://code.google.com/p/*android*-*vnc*-viewer/,then" target="_blank">code.google.com/p/*android*-*vnc*-viewer/,then</a> the work of platform<br>
> > > thread will be replaced by UI but the msg<br>
> > > communication to libspicec will be remained. That's the easiest way I can<br>
> > > envisage except rewriting all parts in spicec from scratch.<br>
> > > It's tough too, for I have poor experiance in Java...<br>
> > > Anyway, is there any other guy working on this? Is my way<br>
> > feasible??Any<br>
> > > Ideas or help is appreciated.<br>
> ><br>
> > See above for ideas, don't read them as a criticism, I think this is<br>
> > fantastic<br>
> > what you've done so far. I remember someone posting "we are working on<br>
> > andriod<br>
> > in our spare time" post to spice-devel, please grep the archive.<br>
> ><br>
> > Alon<br>
> ><br>
> > > Best regards.<br>
> ><br>
> > > _______________________________________________<br>
> > > Spice-devel mailing list<br>
> > > <a href="mailto:Spice-devel@lists.freedesktop.org">Spice-devel@lists.freedesktop.org</a><br>
> > > <a href="http://lists.freedesktop.org/mailman/listinfo/spice-devel" target="_blank">http://lists.freedesktop.org/mailman/listinfo/spice-devel</a><br>
> ><br>
> ><br>
<br>
> _______________________________________________<br>
> Spice-devel mailing list<br>
> <a href="mailto:Spice-devel@lists.freedesktop.org">Spice-devel@lists.freedesktop.org</a><br>
> <a href="http://lists.freedesktop.org/mailman/listinfo/spice-devel" target="_blank">http://lists.freedesktop.org/mailman/listinfo/spice-devel</a><br>
<br>
</div></div></blockquote></div><br>