Hi there,

I am back and now I have some time to get in touch with the meld source
code. As promised, I will ask questions whenever something is unclear. ;-)

I want to start with "Bug 633515 - Text ignored by filters should have
some visual indication" [1]. I spent a few hours by browsing through the
source code and playing around with it.

As you, Kai, suggested, I tried to do it with a gtk.TextTag.
Unfortunately it only works to make something bold but not to make
something light. It also works to make the font smaller, but that does
not look to nice.
I attached three diffs, maybe you could have a look at them? As I said,
bold and small works, light does not.
This was only for testing, so the way I hacked it into the code is
probably not the cleanest way. As you also mentioned, the nicest would
be to rely on gtk.SourceView, but I haven't checked that too intensively
so far. But I had a look at the gtk.SourceStyle class [2], which is
probably the place to start and it also only supports bold text, no
light text. So maybe that causes the problem I had.
Is the font-weight even what you had in mind? I don't know if it is
possible to make the font color transparent or something. That would be
nice. But I really don't know how to handle this, especially not to get
in conflict with the style schemes.

I hope you (or someone on this list) can help me.

Regards
  David



[1] https://bugzilla.gnome.org/show_bug.cgi?id=633515
[2]
https://developer.gnome.org/gtksourceview/stable/GtkSourceStyle.html#GtkSourceStyle--foreground
diff --git a/meld/filediff.py b/meld/filediff.py
index 0aabdba..0403dfa 100644
--- a/meld/filediff.py
+++ b/meld/filediff.py
@@ -762,7 +762,9 @@ class FileDiff(melddoc.MeldDoc, gnomeglade.Component):
                                                 None, True)
             self.queue_draw()
 
-    def _filter_text(self, txt):
+    def _filter_text(self, txt, buf):
+        dimmed_tag = buf.get_tag_table().lookup("dimmed")
+        buf.remove_tag(dimmed_tag, buf.get_start_iter(), buf.get_end_iter())
         def killit(m):
             assert m.group().count("\n") == 0
             if len(m.groups()):
@@ -772,6 +774,8 @@ class FileDiff(melddoc.MeldDoc, gnomeglade.Component):
                         s = s.replace(g,"")
                 return s
             else:
+                dimmed_tag = buf.get_tag_table().lookup("dimmed")
+                buf.apply_tag(dimmed_tag, buf.get_iter_at_offset(m.start()), 
buf.get_iter_at_offset(m.end()))
                 return ""
         try:
             for filt in self.text_filters:
diff --git a/meld/meldbuffer.py b/meld/meldbuffer.py
index 9c89999..7cfd471 100644
--- a/meld/meldbuffer.py
+++ b/meld/meldbuffer.py
@@ -223,7 +223,7 @@ class BufferLines(object):
             end = self.buf.get_iter_at_line_or_eof(hi)
             txt = text_type(self.buf.get_text(start, end, False), 'utf8')
 
-            filter_txt = self.textfilter(txt)
+            filter_txt = self.textfilter(txt, self.buf)
             lines = filter_txt.splitlines()
             ends = filter_txt.splitlines(True)
 
@@ -269,7 +269,7 @@ class BufferLines(object):
             if not line_end.ends_line():
                 line_end.forward_to_line_end()
             txt = self.buf.get_text(line_start, line_end, False)
-            return text_type(self.textfilter(txt), 'utf8')
+            return text_type(self.textfilter(txt, self.buf), 'utf8')
 
     def __len__(self):
         return self.buf.get_line_count()
diff --git a/meld/sourceview.py b/meld/sourceview.py
index 0d142f3..4bf072d 100644
--- a/meld/sourceview.py
+++ b/meld/sourceview.py
@@ -124,6 +124,10 @@ class MeldSourceView(GtkSource.View):
 
         buf = meldbuffer.MeldBuffer()
         buf.create_tag("inline")
+        buf.create_tag("dimmed")
+        dimmed_tag = buf.get_tag_table().lookup("dimmed")
+        dimmed_tag.set_property("weight", 700)
+        dimmed_tag.set_property("weight-set", True)       
         self.set_buffer(buf)
 
         meldsettings.connect('changed', self.on_setting_changed)
diff --git a/meld/filediff.py b/meld/filediff.py
index 0aabdba..0403dfa 100644
--- a/meld/filediff.py
+++ b/meld/filediff.py
@@ -762,7 +762,9 @@ class FileDiff(melddoc.MeldDoc, gnomeglade.Component):
                                                 None, True)
             self.queue_draw()
 
-    def _filter_text(self, txt):
+    def _filter_text(self, txt, buf):
+        dimmed_tag = buf.get_tag_table().lookup("dimmed")
+        buf.remove_tag(dimmed_tag, buf.get_start_iter(), buf.get_end_iter())
         def killit(m):
             assert m.group().count("\n") == 0
             if len(m.groups()):
@@ -772,6 +774,8 @@ class FileDiff(melddoc.MeldDoc, gnomeglade.Component):
                         s = s.replace(g,"")
                 return s
             else:
+                dimmed_tag = buf.get_tag_table().lookup("dimmed")
+                buf.apply_tag(dimmed_tag, buf.get_iter_at_offset(m.start()), 
buf.get_iter_at_offset(m.end()))
                 return ""
         try:
             for filt in self.text_filters:
diff --git a/meld/meldbuffer.py b/meld/meldbuffer.py
index 9c89999..7cfd471 100644
--- a/meld/meldbuffer.py
+++ b/meld/meldbuffer.py
@@ -223,7 +223,7 @@ class BufferLines(object):
             end = self.buf.get_iter_at_line_or_eof(hi)
             txt = text_type(self.buf.get_text(start, end, False), 'utf8')
 
-            filter_txt = self.textfilter(txt)
+            filter_txt = self.textfilter(txt, self.buf)
             lines = filter_txt.splitlines()
             ends = filter_txt.splitlines(True)
 
@@ -269,7 +269,7 @@ class BufferLines(object):
             if not line_end.ends_line():
                 line_end.forward_to_line_end()
             txt = self.buf.get_text(line_start, line_end, False)
-            return text_type(self.textfilter(txt), 'utf8')
+            return text_type(self.textfilter(txt, self.buf), 'utf8')
 
     def __len__(self):
         return self.buf.get_line_count()
diff --git a/meld/sourceview.py b/meld/sourceview.py
index 0d142f3..4bd81eb 100644
--- a/meld/sourceview.py
+++ b/meld/sourceview.py
@@ -124,6 +124,10 @@ class MeldSourceView(GtkSource.View):
 
         buf = meldbuffer.MeldBuffer()
         buf.create_tag("inline")
+        buf.create_tag("dimmed")
+        dimmed_tag = buf.get_tag_table().lookup("dimmed")
+        dimmed_tag.set_property("weight", 200)
+        dimmed_tag.set_property("weight-set", True)       
         self.set_buffer(buf)
 
         meldsettings.connect('changed', self.on_setting_changed)
diff --git a/meld/filediff.py b/meld/filediff.py
index 0aabdba..0403dfa 100644
--- a/meld/filediff.py
+++ b/meld/filediff.py
@@ -762,7 +762,9 @@ class FileDiff(melddoc.MeldDoc, gnomeglade.Component):
                                                 None, True)
             self.queue_draw()
 
-    def _filter_text(self, txt):
+    def _filter_text(self, txt, buf):
+        dimmed_tag = buf.get_tag_table().lookup("dimmed")
+        buf.remove_tag(dimmed_tag, buf.get_start_iter(), buf.get_end_iter())
         def killit(m):
             assert m.group().count("\n") == 0
             if len(m.groups()):
@@ -772,6 +774,8 @@ class FileDiff(melddoc.MeldDoc, gnomeglade.Component):
                         s = s.replace(g,"")
                 return s
             else:
+                dimmed_tag = buf.get_tag_table().lookup("dimmed")
+                buf.apply_tag(dimmed_tag, buf.get_iter_at_offset(m.start()), 
buf.get_iter_at_offset(m.end()))
                 return ""
         try:
             for filt in self.text_filters:
diff --git a/meld/meldbuffer.py b/meld/meldbuffer.py
index 9c89999..7cfd471 100644
--- a/meld/meldbuffer.py
+++ b/meld/meldbuffer.py
@@ -223,7 +223,7 @@ class BufferLines(object):
             end = self.buf.get_iter_at_line_or_eof(hi)
             txt = text_type(self.buf.get_text(start, end, False), 'utf8')
 
-            filter_txt = self.textfilter(txt)
+            filter_txt = self.textfilter(txt, self.buf)
             lines = filter_txt.splitlines()
             ends = filter_txt.splitlines(True)
 
@@ -269,7 +269,7 @@ class BufferLines(object):
             if not line_end.ends_line():
                 line_end.forward_to_line_end()
             txt = self.buf.get_text(line_start, line_end, False)
-            return text_type(self.textfilter(txt), 'utf8')
+            return text_type(self.textfilter(txt, self.buf), 'utf8')
 
     def __len__(self):
         return self.buf.get_line_count()
diff --git a/meld/sourceview.py b/meld/sourceview.py
index 0d142f3..86d8bc9 100644
--- a/meld/sourceview.py
+++ b/meld/sourceview.py
@@ -124,6 +124,10 @@ class MeldSourceView(GtkSource.View):
 
         buf = meldbuffer.MeldBuffer()
         buf.create_tag("inline")
+        buf.create_tag("dimmed")
+        dimmed_tag = buf.get_tag_table().lookup("dimmed")
+        dimmed_tag.set_property("scale", (1 / 1.2))
+        dimmed_tag.set_property("scale-set", True)      
         self.set_buffer(buf)
 
         meldsettings.connect('changed', self.on_setting_changed)
_______________________________________________
meld-list mailing list
[email protected]
https://mail.gnome.org/mailman/listinfo/meld-list

Reply via email to