Commit Graph

144 Commits

Author SHA1 Message Date
Julian Winkler
37d9b13470 View.onMeasure: handle MEASURE_SPEC_AT_MOST properly
We decide between simple widgets which handles MEASURE_SPEC_AT_MOST the same way as
MEASURE_SPEC_EXACTLY, and complex widgets which handles MEASURE_SPEC_AT_MOST by measuring the content
2023-10-14 10:01:01 +00:00
Mis012
24353378be api-impl: implement Canvas text drawing as used by Gravity Defied
implements android.graphics.Typeface (always uses default
typeface for now), one version of Canvas.drawText, one version
of Paint.measureText, and Paint.ascend
2023-09-12 19:30:29 +02:00
Mis012
90cb1c925a api-impl: use liblog for android.util.Log; use Log.v for debugging prints and Log.w for stub tracing 2023-09-12 13:41:52 +02:00
Mis012
897a1e68a4 TextView: implement setTextColor
also uncomment Resources.getCachedColorStateList
2023-09-12 13:37:41 +02:00
Mis012
1e47824a79 src/api-impl: use skia instead of cairo
Using the C API provided by SkiaSharp's skia fork instead of using cairo
significantly improves performance. The API is also closer to the android
Canvas API, which makes the implementation more straightforward.
2023-09-12 13:37:41 +02:00
Julian Winkler
255eed3e59 setLayoutParams(): better match Androids behaviour
View.setGravity() specifies gravity of children, not of the view itself
LayoutParams.weight > 0 should cause expansion of widget
2023-09-08 20:10:45 +02:00
Julian Winkler
a27cb27638 ScrollView: use GtkScrolledWindow for implementation 2023-09-08 18:31:02 +02:00
Julian Winkler
b35cbea099 implement URL opening using libportal 2023-09-01 16:05:26 +02:00
Julian Winkler
3b6e4dc217 Always use addView() and removeView() implementation from ViewGroup
This makes sure, that the index argument is handled correctly everywhere
2023-09-01 16:05:26 +02:00
Julian Winkler
a35879c633 RelativeLayout: copy AOSP implementation
As we already support custom ViewGroups, there is no need to reimplement
this highly complex class.
2023-09-01 16:05:26 +02:00
Julian Winkler
ceb5df9d39 implement BitmapFactory.decodeStream() using gdk_pixbuf_new_from_stream
The java InputStream is wrapped into a custom GInputStream
implementation
2023-09-01 16:05:26 +02:00
Julian Winkler
30b990f60a EditText: implement addTextChangedListener() 2023-09-01 16:05:26 +02:00
Julian Winkler
f968bcd7c4 add menu APIs and use Activity as Window.Callbacks implementation 2023-09-01 12:34:57 +02:00
Julian Winkler
253932f985 rewrite android.database.CursorWindow in pure java
there is no need to implement it in native code, as we don't want to
pass this between processes
2023-08-27 11:17:33 +02:00
Julian Winkler
2e0c18d755 add complete java side of sqlite implementation
Mostly taken from https://www.sqlite.org/android which is forked from
AOSPs implementation
2023-08-27 11:17:33 +02:00
Julian Winkler
0f7548f189 refactor Dialog implementation to support custom content 2023-08-23 14:52:56 +02:00
Julian Winkler
ca975a0e7c add support for ViewGroups with custom onLayout()
A custom GtkLayoutManager is set to these objects, which calls into the
java handlers when measure or layout is requested.

Androids onMeasure method is quite different from GTKs measure method,
because Android already defines the final size during onMeasure.
Therefore, we call onMeasure from GTKs allocate callback instead of the
measure callback.
2023-08-23 12:39:10 +02:00
Julian Winkler
4434de4a58 implement android.widget.EditText using GtkEntry 2023-08-23 11:47:05 +02:00
Julian Winkler
f9a85017c1 implement android.widget.ImageButton using GtkButton 2023-08-23 11:47:05 +02:00
Julian Winkler
f2e71cd50f implement android.widget.Button using GtkButton 2023-08-23 11:47:05 +02:00
Julian Winkler
36b6132324 fix reference counting for GtkWidgets created from java
GtkWidgets extend GInitiallyUnowned and are automatically freed when
removing from parent widget. We need to add an extra reference, to make
sure the object keeps alive as long as the java widget has a reference
to it
2023-08-23 11:47:05 +02:00
Julian Winkler
6547e66d4f implement android.app.AlertDialog using GtkDialog 2023-08-22 19:39:57 +02:00
Julian Winkler
4d90002ec6 Simplify native interface of widget implementations
Makes it easier to overwrite behavior in subclasses. Have a fallback
implementation for ViewGroup.
Save some _GET_LONG_FIELD / _SET_LONG_FIELD calls by directly passing
the native pointers to and from native methods.
2023-08-22 15:53:09 +02:00
Julian Winkler
82744e9e5e add bunch of new java APIs: mostly stubs or copied from AOSP
Many of these classes are only needed to be subclassed by androidx
support library, which is used in many android apps
2023-08-22 15:53:09 +02:00
Julian Winkler
c60e97f13f implement obtainStyledAttributes() functions properly 2023-08-22 15:51:13 +02:00