- Changed text renderer for Voice Overlay
- Changed generic overlay font handling - Fixes #123 - Breaks #115 again? I can't tell
This commit is contained in:
parent
83caf06371
commit
49f49c9d78
5 changed files with 46 additions and 45 deletions
|
|
@ -108,12 +108,11 @@ class OverlayWindow(Gtk.Window):
|
|||
Draw overlay
|
||||
"""
|
||||
|
||||
def set_font(self, name, size):
|
||||
def set_font(self, font):
|
||||
"""
|
||||
Set the font used by the overlay
|
||||
"""
|
||||
self.text_font = name
|
||||
self.text_size = size
|
||||
self.text_font = font
|
||||
self.redraw()
|
||||
|
||||
def set_floating(self, floating, pos_x, pos_y, width, height):
|
||||
|
|
|
|||
|
|
@ -92,15 +92,16 @@ class TextOverlayWindow(OverlayWindow):
|
|||
"""
|
||||
self.popup_style = boolean
|
||||
|
||||
def set_font(self, name, size):
|
||||
def set_font(self, font):
|
||||
"""
|
||||
Set font used to render text
|
||||
"""
|
||||
self.text_font = name
|
||||
self.text_size = size
|
||||
self.text_font = font
|
||||
|
||||
self.pango_rect = Pango.Rectangle()
|
||||
self.pango_rect.width = self.text_size * Pango.SCALE
|
||||
self.pango_rect.height = self.text_size * Pango.SCALE
|
||||
font = Pango.FontDescription(self.text_font)
|
||||
self.pango_rect.width = font.get_size() * Pango.SCALE
|
||||
self.pango_rect.height = font.get_size() * Pango.SCALE
|
||||
self.redraw()
|
||||
|
||||
def make_line(self, message):
|
||||
|
|
@ -254,8 +255,7 @@ class TextOverlayWindow(OverlayWindow):
|
|||
layout.set_width(Pango.SCALE * self.width)
|
||||
layout.set_spacing(Pango.SCALE * 3)
|
||||
if self.text_font:
|
||||
font = Pango.FontDescription(
|
||||
"%s %s" % (self.text_font, self.text_size))
|
||||
font = Pango.FontDescription(self.text_font)
|
||||
layout.set_font_description(font)
|
||||
_tw, text_height = layout.get_pixel_size()
|
||||
self.col(self.bg_col)
|
||||
|
|
|
|||
|
|
@ -432,13 +432,9 @@ class TextSettingsWindow(SettingsWindow):
|
|||
Font settings changed
|
||||
"""
|
||||
font = button.get_font()
|
||||
desc = Pango.FontDescription.from_string(font)
|
||||
size = desc.get_size()
|
||||
if not desc.get_size_is_absolute():
|
||||
size = size / Pango.SCALE
|
||||
self.overlay.set_font(desc.get_family(), size)
|
||||
self.overlay.set_font(font)
|
||||
|
||||
self.font = desc.to_string()
|
||||
self.font = font
|
||||
self.save_config()
|
||||
|
||||
def change_channel(self, button):
|
||||
|
|
|
|||
|
|
@ -15,6 +15,11 @@ import math
|
|||
import cairo
|
||||
from .overlay import OverlayWindow
|
||||
from .image_getter import get_surface, draw_img_to_rect
|
||||
import gi
|
||||
gi.require_version("Gtk", "3.0")
|
||||
gi.require_version('PangoCairo', '1.0')
|
||||
# pylint: disable=wrong-import-position,wrong-import-order
|
||||
from gi.repository import Pango, PangoCairo
|
||||
|
||||
|
||||
class VoiceOverlayWindow(OverlayWindow):
|
||||
|
|
@ -376,43 +381,48 @@ class VoiceOverlayWindow(OverlayWindow):
|
|||
"""
|
||||
Draw username & background at given position
|
||||
"""
|
||||
layout = self.create_pango_layout(string)
|
||||
layout.set_markup(string, -1)
|
||||
|
||||
layout.set_width(Pango.SCALE * self.width)
|
||||
layout.set_spacing(Pango.SCALE * 3)
|
||||
font=None
|
||||
if self.text_font:
|
||||
context.set_font_face(cairo.ToyFontFace(
|
||||
self.text_font, cairo.FontSlant.NORMAL, cairo.FontWeight.NORMAL))
|
||||
context.set_font_size(self.text_size)
|
||||
|
||||
# Get text size details
|
||||
f_ascent, f_descent, f_height, f_max_dx, f_max_dy = context.font_extents()
|
||||
_xb, _yb, width, height, _dx, _dy = context.text_extents(string)
|
||||
|
||||
height_offset = (self.avatar_size / 2) - (f_height / 2)
|
||||
text_y_offset = height_offset + f_height - f_descent + self.text_baseline_adj
|
||||
font = Pango.FontDescription(self.text_font)
|
||||
layout.set_font_description(font)
|
||||
(_ink_rect, logical_rect) = layout.get_pixel_extents()
|
||||
text_height = logical_rect.height
|
||||
text_width = logical_rect.width
|
||||
|
||||
self.set_text_col()
|
||||
height_offset = (self.avatar_size / 2) - (text_height / 2)
|
||||
text_y_offset=height_offset + self.text_baseline_adj
|
||||
|
||||
if self.align_right:
|
||||
context.move_to(0, 0)
|
||||
self.set_norm_col()
|
||||
context.rectangle(
|
||||
pos_x - width - (self.text_pad * 2),
|
||||
pos_x - text_width - (self.text_pad * 2),
|
||||
pos_y + height_offset - self.text_pad,
|
||||
width + (self.text_pad * 4),
|
||||
f_height + (self.text_pad * 2)
|
||||
text_width + (self.text_pad * 4),
|
||||
text_height + (self.text_pad * 2)
|
||||
)
|
||||
context.fill()
|
||||
|
||||
self.set_text_col()
|
||||
context.move_to(
|
||||
pos_x - width - self.text_pad,
|
||||
pos_x - text_width - self.text_pad,
|
||||
pos_y + text_y_offset
|
||||
)
|
||||
context.show_text(string)
|
||||
PangoCairo.show_layout(self.context, layout)
|
||||
else:
|
||||
context.move_to(0, 0)
|
||||
self.set_norm_col()
|
||||
context.rectangle(
|
||||
pos_x - (self.text_pad * 2),
|
||||
pos_y + height_offset - self.text_pad,
|
||||
width + (self.text_pad * 4),
|
||||
f_height + (self.text_pad * 2)
|
||||
text_width + (self.text_pad * 4),
|
||||
text_height + (self.text_pad * 2)
|
||||
)
|
||||
context.fill()
|
||||
|
||||
|
|
@ -421,7 +431,11 @@ class VoiceOverlayWindow(OverlayWindow):
|
|||
pos_x + self.text_pad,
|
||||
pos_y + text_y_offset
|
||||
)
|
||||
context.show_text(string)
|
||||
PangoCairo.show_layout(self.context, layout)
|
||||
|
||||
|
||||
|
||||
return pos_y - text_height
|
||||
|
||||
def draw_avatar_pix(self, context, pixbuf, pos_x, pos_y, border_colour):
|
||||
"""
|
||||
|
|
|
|||
|
|
@ -136,11 +136,7 @@ class VoiceSettingsWindow(SettingsWindow):
|
|||
self.floating, self.floating_x, self.floating_y, self.floating_w, self.floating_h)
|
||||
|
||||
if self.font:
|
||||
desc = Pango.FontDescription.from_string(self.font)
|
||||
size = desc.get_size()
|
||||
if not desc.get_size_is_absolute():
|
||||
size = size / Pango.SCALE
|
||||
self.overlay.set_font(desc.get_family(), size)
|
||||
self.overlay.set_font(self.font)
|
||||
|
||||
def save_config(self):
|
||||
"""
|
||||
|
|
@ -400,13 +396,9 @@ class VoiceSettingsWindow(SettingsWindow):
|
|||
Font settings changed
|
||||
"""
|
||||
font = button.get_font()
|
||||
desc = Pango.FontDescription.from_string(font)
|
||||
size = desc.get_size()
|
||||
if not desc.get_size_is_absolute():
|
||||
size = size / Pango.SCALE
|
||||
self.overlay.set_font(desc.get_family(), size)
|
||||
self.overlay.set_font(font)
|
||||
|
||||
self.font = desc.to_string()
|
||||
self.font = font
|
||||
self.save_config()
|
||||
|
||||
def change_bg(self, button):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue