refactor: use Pango for font scaling instead of CSS classes

- Replace CSS-based zoom (px1-px99 classes) with Pango.FontDescription
- Fix bug in multi-insert: insert at start_itr instead of end_itr
- Add Pango-based font setup for mini-view widget
- Revamp stylesheet with Light Blue-Grey Glass theme
This commit is contained in:
2026-02-21 00:38:27 -06:00
parent eb9e124df5
commit 55d2d99d68
10 changed files with 131 additions and 209 deletions

View File

@@ -42,6 +42,9 @@ class CenterContainer(Gtk.Box):
glade_box = widget_registery.get_object("glade_box")
button = Gtk.Button(label = "Click Me!")
webkit_ui = WebkitUI()
webkit_ui.load_context_base_path()
button.connect("clicked", self._hello_world)
@@ -50,7 +53,7 @@ class CenterContainer(Gtk.Box):
self.add(button)
self.add(glade_box)
self.add( WebkitUI() )
self.add(webkit_ui)
def _hello_world(self, widget = None, eve = None):
logger.debug("Hello, World!")

View File

@@ -6,6 +6,7 @@ import gi
gi.require_version('GtkSource', '4')
from gi.repository import GtkSource
from gi.repository import Pango
# Application imports
@@ -18,6 +19,9 @@ def execute(
ctx = view.get_style_context()
if view.zoom_level < 99:
ctx.remove_class(f"px{view.zoom_level}")
view.zoom_level += 1
ctx.add_class(f"px{view.zoom_level}")
font_desc = \
Pango.FontDescription(f"Monospace {view.zoom_level}")
view.modify_font(font_desc)

View File

@@ -6,6 +6,7 @@ import gi
gi.require_version('GtkSource', '4')
from gi.repository import GtkSource
from gi.repository import Pango
# Application imports
@@ -18,6 +19,9 @@ def execute(
ctx = view.get_style_context()
if view.zoom_level > 1:
ctx.remove_class(f"px{view.zoom_level}")
view.zoom_level -= 1
ctx.add_class(f"px{view.zoom_level}")
font_desc = \
Pango.FontDescription(f"Monospace {view.zoom_level}")
view.modify_font(font_desc)

View File

@@ -11,6 +11,7 @@ from gi.repository import Gtk
from gi.repository import GtkSource
# Application imports
from libs.event_factory import Code_Event_Types
@@ -26,16 +27,16 @@ class ProviderResponseCacheBase:
self._icon_theme = Gtk.IconTheme.get_default()
def process_file_load(self, buffer: GtkSource.Buffer):
def process_file_load(self, event: Code_Event_Types.AddedNewFileEvent):
raise ProviderResponseCacheException("ProviderResponseCacheBase 'process_file_load' not implemented...")
def process_file_close(self, buffer: GtkSource.Buffer):
def process_file_close(self, event: Code_Event_Types.RemovedFileEvent):
raise ProviderResponseCacheException("ProviderResponseCacheBase 'process_file_close' not implemented...")
def process_file_save(self, buffer: GtkSource.Buffer):
def process_file_save(self, event: Code_Event_Types.SavedFileEvent):
raise ProviderResponseCacheException("ProviderResponseCacheBase 'process_file_save' not implemented...")
def process_file_change(self, buffer: GtkSource.Buffer):
def process_file_change(self, event: Code_Event_Types.TextChangedEvent):
raise ProviderResponseCacheException("ProviderResponseCacheBase 'process_change' not implemented...")
def filter(self, word: str) -> list[dict]:

View File

@@ -68,6 +68,8 @@ class CompletionController(ControllerBase):
def provider_process_file_load(self, event: Code_Event_Types.AddedNewFileEvent):
for provider in self._providers.values():
# if provider.get_name() == "Words Completion":
# provider.register(event.file.buffer)
provider.response_cache.process_file_load(event)
def provider_process_file_close(self, event: Code_Event_Types.RemovedFileEvent):

View File

@@ -71,7 +71,7 @@ class SourceViewsMultiInsertState(MarkEventsMixin):
end_itr.forward_word_end()
buffer.delete(start_itr, end_itr)
buffer.insert(end_itr, text, -1)
buffer.insert(start_itr, text, -1)
buffer.end_user_action()
buffer.unblock_insert_after_signal()

View File

@@ -4,7 +4,7 @@
import gi
gi.require_version('GtkSource', '4')
from gi.repository.GtkSource import Map
from gi.repository import Pango
# Application imports
@@ -25,6 +25,7 @@ class MiniViewWidget(Map):
ctx.add_class("mini-view")
self.set_hexpand(False)
self._set_font_desc()
def _setup_signals(self):
...
@@ -35,5 +36,13 @@ class MiniViewWidget(Map):
def _load_widgets(self):
...
def _set_font_desc(self):
default_font = 'Monospace 1'
desc = Pango.FontDescription(default_font)
desc.set_size(Pango.SCALE) # Set size to 1pt
desc.set_family('BuilderBlocks,' + desc.get_family())
self.set_property('font-desc', desc)
def set_smini_view(self, source_view):
self.set_view(source_view)

View File

@@ -45,8 +45,11 @@ class SourceFile(GtkSource.File):
def _changed(self, buffer: SourceBuffer):
self.check_file_on_disk()
event = Event_Factory.create_event("text_changed", buffer = buffer)
event.file = self
event = Event_Factory.create_event(
"text_changed",
file = self,
buffer = buffer
)
self.emit(event)
if self.is_deleted():

View File

@@ -39,7 +39,6 @@ class SourceView(GtkSource.View, SourceViewDnDMixin):
ctx = self.get_style_context()
ctx.add_class("source-view")
ctx.add_class(f"px{self.zoom_level}")
self.set_vexpand(True)
self.set_bottom_margin(800)