Merge branch 'polyfont' into 'master'
Use custom font for Greek polytonic See merge request World/Phosh/squeekboard!569
This commit is contained in:
@ -5,6 +5,12 @@ sq_view {
|
|||||||
font-size: 1.5em;
|
font-size: 1.5em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Becomes readable with a special font */
|
||||||
|
sq_view.gr_polytonic {
|
||||||
|
font-family: GFSDidotClassic, cantarell, sans-serif;
|
||||||
|
font-size: 2em;
|
||||||
|
}
|
||||||
|
|
||||||
sq_button {
|
sq_button {
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
margin: 2px;
|
margin: 2px;
|
||||||
|
|||||||
3
debian/control
vendored
3
debian/control
vendored
@ -8,6 +8,7 @@ Build-Depends:
|
|||||||
meson (>=0.51.0),
|
meson (>=0.51.0),
|
||||||
ninja-build,
|
ninja-build,
|
||||||
pkg-config,
|
pkg-config,
|
||||||
|
libbsd-dev,
|
||||||
libglib2.0-dev,
|
libglib2.0-dev,
|
||||||
libgnome-desktop-3-dev,
|
libgnome-desktop-3-dev,
|
||||||
libgtk-3-dev,
|
libgtk-3-dev,
|
||||||
@ -36,6 +37,8 @@ Homepage: https://source.puri.sm/Librem5/squeekboard
|
|||||||
Package: squeekboard
|
Package: squeekboard
|
||||||
Architecture: linux-any
|
Architecture: linux-any
|
||||||
Depends:
|
Depends:
|
||||||
|
# for Greek polytonic readability
|
||||||
|
fonts-gfs-didot-classic,
|
||||||
# for the Adwaita-dark theme
|
# for the Adwaita-dark theme
|
||||||
gnome-themes-extra-data,
|
gnome-themes-extra-data,
|
||||||
${shlibs:Depends},
|
${shlibs:Depends},
|
||||||
|
|||||||
3
debian/control-newer
vendored
3
debian/control-newer
vendored
@ -8,6 +8,7 @@ Build-Depends:
|
|||||||
meson (>=0.51.0),
|
meson (>=0.51.0),
|
||||||
ninja-build,
|
ninja-build,
|
||||||
pkg-config,
|
pkg-config,
|
||||||
|
libbsd-dev,
|
||||||
libglib2.0-dev,
|
libglib2.0-dev,
|
||||||
libgnome-desktop-3-dev,
|
libgnome-desktop-3-dev,
|
||||||
libgtk-3-dev,
|
libgtk-3-dev,
|
||||||
@ -36,6 +37,8 @@ Homepage: https://source.puri.sm/Librem5/squeekboard
|
|||||||
Package: squeekboard
|
Package: squeekboard
|
||||||
Architecture: linux-any
|
Architecture: linux-any
|
||||||
Depends:
|
Depends:
|
||||||
|
# for Greek polytonic readability
|
||||||
|
fonts-gfs-didot-classic,
|
||||||
# for the Adwaita-dark theme
|
# for the Adwaita-dark theme
|
||||||
gnome-themes-extra-data,
|
gnome-themes-extra-data,
|
||||||
${shlibs:Depends},
|
${shlibs:Depends},
|
||||||
|
|||||||
@ -53,7 +53,6 @@ typedef struct _EekGtkKeyboardPrivate
|
|||||||
struct squeek_state_manager *state_manager; // shared reference
|
struct squeek_state_manager *state_manager; // shared reference
|
||||||
struct submission *submission; // unowned reference
|
struct submission *submission; // unowned reference
|
||||||
|
|
||||||
struct squeek_layout_state *layout; // unowned
|
|
||||||
LevelKeyboard *keyboard; // unowned reference; it's kept in server-context
|
LevelKeyboard *keyboard; // unowned reference; it's kept in server-context
|
||||||
|
|
||||||
GdkEventSequence *sequence; // unowned reference
|
GdkEventSequence *sequence; // unowned reference
|
||||||
|
|||||||
@ -21,6 +21,7 @@
|
|||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
#define _XOPEN_SOURCE 500
|
#define _XOPEN_SOURCE 500
|
||||||
|
#include <bsd/string.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@ -91,12 +92,13 @@ void level_keyboard_free(LevelKeyboard *self) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
LevelKeyboard*
|
LevelKeyboard*
|
||||||
level_keyboard_new (struct squeek_layout *layout)
|
level_keyboard_new (char *style_name, struct squeek_layout *layout)
|
||||||
{
|
{
|
||||||
LevelKeyboard *keyboard = g_new0(LevelKeyboard, 1);
|
LevelKeyboard *keyboard = g_new0(LevelKeyboard, 1);
|
||||||
if (!keyboard) {
|
if (!keyboard) {
|
||||||
g_error("Failed to create a keyboard");
|
g_error("Failed to create a keyboard");
|
||||||
}
|
}
|
||||||
keyboard->layout = layout;
|
keyboard->layout = layout;
|
||||||
|
strlcpy(keyboard->style_name, style_name, 19);
|
||||||
return keyboard;
|
return keyboard;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -38,17 +38,17 @@ struct keymap {
|
|||||||
size_t fd_len; // length of the data inside keymap_fd
|
size_t fd_len; // length of the data inside keymap_fd
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Keyboard state holder
|
/// Keyboard info holder
|
||||||
struct _LevelKeyboard {
|
struct _LevelKeyboard {
|
||||||
|
char style_name[20]; // The name of the css class on layout
|
||||||
struct squeek_layout *layout; // owned
|
struct squeek_layout *layout; // owned
|
||||||
// FIXME: This no longer needs to exist, keymap was folded into layout.
|
|
||||||
};
|
};
|
||||||
typedef struct _LevelKeyboard LevelKeyboard;
|
typedef struct _LevelKeyboard LevelKeyboard;
|
||||||
|
|
||||||
gchar *eek_keyboard_get_keymap(LevelKeyboard *keyboard);
|
gchar *eek_keyboard_get_keymap(LevelKeyboard *keyboard);
|
||||||
|
|
||||||
LevelKeyboard*
|
LevelKeyboard*
|
||||||
level_keyboard_new (struct squeek_layout *layout);
|
level_keyboard_new (char *style_name, struct squeek_layout *layout);
|
||||||
void level_keyboard_free(LevelKeyboard *self);
|
void level_keyboard_free(LevelKeyboard *self);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|||||||
@ -335,6 +335,7 @@ eek_renderer_new (LevelKeyboard *keyboard,
|
|||||||
if (squeek_layout_get_kind(keyboard->layout) == ARRANGEMENT_KIND_WIDE) {
|
if (squeek_layout_get_kind(keyboard->layout) == ARRANGEMENT_KIND_WIDE) {
|
||||||
gtk_style_context_add_class(renderer->view_context, "wide");
|
gtk_style_context_add_class(renderer->view_context, "wide");
|
||||||
}
|
}
|
||||||
|
gtk_style_context_add_class(renderer->view_context, (char*)&keyboard->style_name);
|
||||||
gtk_style_context_add_provider (renderer->view_context,
|
gtk_style_context_add_provider (renderer->view_context,
|
||||||
GTK_STYLE_PROVIDER(renderer->css_provider),
|
GTK_STYLE_PROVIDER(renderer->css_provider),
|
||||||
GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
|
GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
|
||||||
|
|||||||
@ -126,8 +126,8 @@ settings_get_layout(GSettings *settings, char **type, char **layout)
|
|||||||
g_variant_unref(inputs);
|
g_variant_unref(inputs);
|
||||||
}
|
}
|
||||||
|
|
||||||
void eekboard_context_service_set_layout(EekboardContextService *context, struct squeek_layout *layout, uint32_t timestamp) {
|
void eekboard_context_service_set_layout(EekboardContextService *context, char *style_name, struct squeek_layout *layout, uint32_t timestamp) {
|
||||||
LevelKeyboard *keyboard = level_keyboard_new(layout);
|
LevelKeyboard *keyboard = level_keyboard_new(style_name, layout);
|
||||||
// set as current
|
// set as current
|
||||||
LevelKeyboard *previous_keyboard = context->keyboard;
|
LevelKeyboard *previous_keyboard = context->keyboard;
|
||||||
context->keyboard = keyboard;
|
context->keyboard = keyboard;
|
||||||
|
|||||||
@ -253,14 +253,14 @@ fn load_layout_data_with_fallback(
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn load_layout(
|
pub fn load_layout(
|
||||||
name: String,
|
name: &String,
|
||||||
kind: ArrangementKind,
|
kind: ArrangementKind,
|
||||||
variant: ContentPurpose,
|
variant: ContentPurpose,
|
||||||
overlay: Option<String>,
|
overlay: &Option<String>,
|
||||||
) -> layout::Layout {
|
) -> layout::Layout {
|
||||||
let overlay = overlay.as_ref().map(String::as_str);
|
let overlay = overlay.as_ref().map(String::as_str);
|
||||||
let (found_kind, layout)
|
let (found_kind, layout)
|
||||||
= load_layout_data_with_fallback(&name, kind, variant, overlay);
|
= load_layout_data_with_fallback(name, kind, variant, overlay);
|
||||||
layout::Layout::new(layout, found_kind, variant)
|
layout::Layout::new(layout, found_kind, variant)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
16
src/main.rs
16
src/main.rs
@ -13,7 +13,8 @@ use glib::{Continue, MainContext, PRIORITY_DEFAULT, Receiver};
|
|||||||
|
|
||||||
mod c {
|
mod c {
|
||||||
use super::*;
|
use super::*;
|
||||||
use std::os::raw::c_void;
|
use std::ffi::CString;
|
||||||
|
use std::os::raw::{c_char, c_void};
|
||||||
use std::ptr;
|
use std::ptr;
|
||||||
use std::rc::Rc;
|
use std::rc::Rc;
|
||||||
use std::time::Instant;
|
use std::time::Instant;
|
||||||
@ -83,7 +84,7 @@ mod c {
|
|||||||
#[allow(improper_ctypes)]
|
#[allow(improper_ctypes)]
|
||||||
fn init_wayland(wayland: *mut Wayland);
|
fn init_wayland(wayland: *mut Wayland);
|
||||||
#[allow(improper_ctypes)]
|
#[allow(improper_ctypes)]
|
||||||
fn eekboard_context_service_set_layout(service: HintManager, layout: *const layout::Layout, timestamp: u32);
|
fn eekboard_context_service_set_layout(service: HintManager, name: *const c_char, layout: *const layout::Layout, timestamp: u32);
|
||||||
// This should probably only get called from the gtk main loop,
|
// This should probably only get called from the gtk main loop,
|
||||||
// given that dbus handler is using glib.
|
// given that dbus handler is using glib.
|
||||||
fn dbus_handler_set_visible(dbus: *const DBusHandler, visible: u8);
|
fn dbus_handler_set_visible(dbus: *const DBusHandler, visible: u8);
|
||||||
@ -187,10 +188,17 @@ mod c {
|
|||||||
purpose,
|
purpose,
|
||||||
} = description;
|
} = description;
|
||||||
actors::popover::set_overlay(popover, overlay_name.clone());
|
actors::popover::set_overlay(popover, overlay_name.clone());
|
||||||
let layout = loading::load_layout(name, kind, purpose, overlay_name);
|
let layout = loading::load_layout(&name, kind, purpose, &overlay_name);
|
||||||
let layout = Box::into_raw(Box::new(layout));
|
let layout = Box::into_raw(Box::new(layout));
|
||||||
|
// CSS can't express "+" in the class
|
||||||
|
let name = overlay_name.unwrap_or(name).replace('+', "_");
|
||||||
|
let name = CString::new(name).unwrap_or(
|
||||||
|
CString::new("").unwrap()
|
||||||
|
);
|
||||||
unsafe {
|
unsafe {
|
||||||
eekboard_context_service_set_layout(hint_manager, layout, 0);
|
// Take out the pointer to a temp variable so that it outlives the set_layout call.
|
||||||
|
let name = name.as_ptr();
|
||||||
|
eekboard_context_service_set_layout(hint_manager, name, layout, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -45,6 +45,7 @@ deps = [
|
|||||||
dependency('gio-unix-2.0'),
|
dependency('gio-unix-2.0'),
|
||||||
dependency('gnome-desktop-3.0', version: '>=3.0'),
|
dependency('gnome-desktop-3.0', version: '>=3.0'),
|
||||||
dependency('gtk+-3.0', version: '>=3.0'),
|
dependency('gtk+-3.0', version: '>=3.0'),
|
||||||
|
dependency('libbsd'),
|
||||||
dependency('libfeedback-0.0'),
|
dependency('libfeedback-0.0'),
|
||||||
dependency('wayland-client', version: '>=1.14'),
|
dependency('wayland-client', version: '>=1.14'),
|
||||||
dependency('xkbcommon'),
|
dependency('xkbcommon'),
|
||||||
|
|||||||
Reference in New Issue
Block a user