aboutsummaryrefslogtreecommitdiffstats
path: root/ports
diff options
context:
space:
mode:
Diffstat (limited to 'ports')
-rw-r--r--ports/servoshell/Cargo.toml4
-rw-r--r--ports/servoshell/egl/app_state.rs16
-rw-r--r--ports/servoshell/egl/ohos.rs35
-rw-r--r--ports/servoshell/egl/ohos/simpleservo.rs5
-rw-r--r--ports/servoshell/prefs.rs6
5 files changed, 56 insertions, 10 deletions
diff --git a/ports/servoshell/Cargo.toml b/ports/servoshell/Cargo.toml
index e000900e4ea..a77bd885549 100644
--- a/ports/servoshell/Cargo.toml
+++ b/ports/servoshell/Cargo.toml
@@ -131,13 +131,13 @@ libservo = { path = "../../components/servo", features = ["no-wgl"] }
windows-sys = { workspace = true, features = ["Win32_Graphics_Gdi"] }
[target.'cfg(target_os = "macos")'.dependencies]
-objc2-app-kit = { version = "0.2.2", default-features = false, features = [
+objc2-app-kit = { version = "0.3.1", default-features = false, features = [
"std",
"NSColorSpace",
"NSResponder",
"NSView",
"NSWindow",
] }
-objc2-foundation = { version = "0.2.2", default-features = false, features = [
+objc2-foundation = { version = "0.3.1", default-features = false, features = [
"std",
] }
diff --git a/ports/servoshell/egl/app_state.rs b/ports/servoshell/egl/app_state.rs
index a65ed7424f4..737a2f23b7d 100644
--- a/ports/servoshell/egl/app_state.rs
+++ b/ports/servoshell/egl/app_state.rs
@@ -38,6 +38,14 @@ impl Coordinates {
viewport: Rect::new(Point2D::new(x, y), Size2D::new(width, height)),
}
}
+
+ pub fn origin(&self) -> Point2D<i32, DevicePixel> {
+ self.viewport.origin
+ }
+
+ pub fn size(&self) -> Size2D<i32, DevicePixel> {
+ self.viewport.size
+ }
}
pub(super) struct ServoWindowCallbacks {
@@ -115,11 +123,13 @@ impl ServoDelegate for ServoShellServoDelegate {
impl WebViewDelegate for RunningAppState {
fn screen_geometry(&self, _webview: WebView) -> Option<ScreenGeometry> {
let coord = self.callbacks.coordinates.borrow();
- let screen_size = DeviceIntSize::new(coord.viewport.size.width, coord.viewport.size.height);
+ let offset = coord.origin();
+ let available_size = coord.size();
+ let screen_size = coord.size();
Some(ScreenGeometry {
size: screen_size,
- available_size: screen_size,
- offset: Point2D::zero(),
+ available_size,
+ offset,
})
}
diff --git a/ports/servoshell/egl/ohos.rs b/ports/servoshell/egl/ohos.rs
index 236f1d842da..79172d368ab 100644
--- a/ports/servoshell/egl/ohos.rs
+++ b/ports/servoshell/egl/ohos.rs
@@ -28,8 +28,9 @@ use servo::{
use xcomponent_sys::{
OH_NativeXComponent, OH_NativeXComponent_Callback, OH_NativeXComponent_GetKeyEvent,
OH_NativeXComponent_GetKeyEventAction, OH_NativeXComponent_GetKeyEventCode,
- OH_NativeXComponent_GetTouchEvent, OH_NativeXComponent_GetXComponentSize,
- OH_NativeXComponent_KeyAction, OH_NativeXComponent_KeyCode, OH_NativeXComponent_KeyEvent,
+ OH_NativeXComponent_GetTouchEvent, OH_NativeXComponent_GetXComponentOffset,
+ OH_NativeXComponent_GetXComponentSize, OH_NativeXComponent_KeyAction,
+ OH_NativeXComponent_KeyCode, OH_NativeXComponent_KeyEvent,
OH_NativeXComponent_RegisterCallback, OH_NativeXComponent_RegisterKeyEventCallback,
OH_NativeXComponent_TouchEvent, OH_NativeXComponent_TouchEventType,
};
@@ -267,6 +268,33 @@ extern "C" fn on_surface_created_cb(xcomponent: *mut OH_NativeXComponent, window
info!("Returning from on_surface_created_cb");
}
+/// Returns the offset of the surface relative to its parent's top left corner
+///
+/// # Safety
+///
+/// `xcomponent` and `native_window` must be valid, non-null and aligned pointers to a
+/// live xcomponent and associated native window surface.
+unsafe fn get_xcomponent_offset(
+ xcomponent: *mut OH_NativeXComponent,
+ native_window: *mut c_void,
+) -> Result<(i32, i32), i32> {
+ let mut x: f64 = 0.0;
+ let mut y: f64 = 0.0;
+
+ let result = unsafe {
+ OH_NativeXComponent_GetXComponentOffset(xcomponent, native_window, &raw mut x, &raw mut y)
+ };
+ if result != 0 {
+ error!("OH_NativeXComponent_GetXComponentOffset failed with {result}");
+ return Err(result);
+ }
+
+ Ok((
+ (x.round() as i64).try_into().expect("X offset too large"),
+ (y.round() as i64).try_into().expect("Y offset too large"),
+ ))
+}
+
/// Returns the size of the surface
///
/// # Safety
@@ -387,6 +415,7 @@ extern "C" fn on_dispatch_key_event(xc: *mut OH_NativeXComponent, _window: *mut
static LOGGER: LazyLock<hilog::Logger> = LazyLock::new(|| {
let mut builder = hilog::Builder::new();
+ builder.set_domain(hilog::LogDomain::new(0xE0C3));
let filters = [
"fonts",
"servo",
@@ -678,7 +707,7 @@ impl EventLoopWaker for WakeupCallback {
}
fn wake(&self) {
- info!("wake called!");
+ log::trace!("wake called!");
self.chan.send(ServoAction::WakeUp).unwrap_or_else(|e| {
error!("Failed to send wake message with: {e}");
});
diff --git a/ports/servoshell/egl/ohos/simpleservo.rs b/ports/servoshell/egl/ohos/simpleservo.rs
index 9815c0fe4fd..c867c7a5330 100644
--- a/ports/servoshell/egl/ohos/simpleservo.rs
+++ b/ports/servoshell/egl/ohos/simpleservo.rs
@@ -97,7 +97,10 @@ pub fn init(
let Ok(window_size) = (unsafe { super::get_xcomponent_size(xcomponent, native_window) }) else {
return Err("Failed to get xcomponent size");
};
- let coordinates = Coordinates::new(0, 0, window_size.width, window_size.height);
+ let Ok((x, y)) = (unsafe { super::get_xcomponent_offset(xcomponent, native_window) }) else {
+ return Err("Failed to get xcomponent offset");
+ };
+ let coordinates = Coordinates::new(x, y, window_size.width, window_size.height);
let display_handle = RawDisplayHandle::Ohos(OhosDisplayHandle::new());
let display_handle = unsafe { DisplayHandle::borrow_raw(display_handle) };
diff --git a/ports/servoshell/prefs.rs b/ports/servoshell/prefs.rs
index a2efe3bab3b..a3ebda231d0 100644
--- a/ports/servoshell/prefs.rs
+++ b/ports/servoshell/prefs.rs
@@ -428,7 +428,11 @@ pub(crate) fn parse_command_line_arguments(args: Vec<String>) -> ArgumentParsing
#[cfg(target_env = "ohos")]
let log_filter = {
let filters = opt_match.opt_strs("log-filter").join(",");
- (!filters.is_empty()).then_some(filters)
+ let log_filter = (!filters.is_empty()).then_some(filters).or_else(|| {
+ (!preferences.log_filter.is_empty()).then_some(preferences.log_filter.clone())
+ });
+ log::debug!("Set log_filter to: {:?}", log_filter);
+ log_filter
};
let mut debug_options = DebugOptions::default();