Commit c82e6b4
Update scroll bar when content size changes
Changed files (13)
modifiedlibbirdfont/DescriptionDisplay.valamodifiedlibbirdfont/FileDialogTab.valamodifiedlibbirdfont/FileTab.valamodifiedlibbirdfont/FontDisplay.valamodifiedlibbirdfont/GlyphCanvas.valamodifiedlibbirdfont/KerningList.valamodifiedlibbirdfont/LanguageSelectionTab.valamodifiedlibbirdfont/OverView.valamodifiedlibbirdfont/OverviewTools.valamodifiedlibbirdfont/SettingsDisplay.valamodifiedlibbirdfont/TabContent.valamodifiedlibbirdfont/Table.valamodifiedlibbirdfont/ZoomBar.vala
Diff
@@ -325,7 +325,7 @@ public class DescriptionDisplay : FontDisplay { GlyphCanvas.redraw (); } - public void update_scrollbar () {+ public override void update_scrollbar () { double h = content_height - allocation.height; MainWindow.set_scrollbar_size (allocation.height / content_height); MainWindow.set_scrollbar_position (scroll / h);@@ -307,7 +307,7 @@ public class FileDialogTab : FontDisplay { redraw_area (0, 0, allocation.width, allocation.height); } - public void update_scrollbar () {+ public override void update_scrollbar () { uint rows = files.size + directories.size; if (rows == 0 || visible_rows == 0) {@@ -383,7 +383,7 @@ public class FileTab : FontDisplay { redraw_area (0, 0, allocation.width, allocation.height); } - public void update_scrollbar () {+ public override void update_scrollbar () { int r = rows (); if (r == 0 || visible_rows == 0) {@@ -22,6 +22,8 @@ public abstract class FontDisplay : GLib.Object { private static double last_tap_y = -1; private static double last_tap_time = 0; + public static bool dirty_scrollbar = true;+ /** Queue redraw area */ public signal void redraw_area (double x, double y, double w, double h); @@ -42,6 +44,9 @@ public abstract class FontDisplay : GLib.Object { return false; } + public virtual void update_scrollbar () {+ }+ public virtual void scroll_to (double percent) { } @@ -56,6 +56,7 @@ public class GlyphCanvas : GLib.Object { if (signal_selected) { current_display.selected_canvas (); + current_display.dirty_scrollbar = true; } current_display.redraw_area.connect ((x, y, w, h) => { @@ -248,7 +248,7 @@ public class KerningList : FontDisplay { redraw_area (0, 0, allocation.width, allocation.height); } - public void update_scrollbar () {+ public override void update_scrollbar () { KerningClasses classes = BirdFont.get_current_font ().get_kerning_classes (); uint rows = classes.get_number_of_pairs (); @@ -132,7 +132,7 @@ public class LanguageSelectionTab : FontDisplay { redraw_area (0, 0, allocation.width, allocation.height); } - public void update_scrollbar () {+ public override void update_scrollbar () { uint rows = DefaultLanguages.names.size; if (rows == 0 || visible_rows == 0) {@@ -1043,7 +1043,7 @@ public class OverView : FontDisplay { open_overview_item (selected_item); } - public void update_scrollbar () {+ public override void update_scrollbar () { Font f; double nrows = 0; double pos = 0;@@ -50,6 +50,7 @@ public class OverviewTools : ToolCollection { OverView overview = get_overview (); overview.display_all_available_glyphs (); update_overview_characterset ();+ overview.dirty_scrollbar = true; }); character_sets.add_tool (all_glyphs); @@ -61,6 +62,7 @@ public class OverviewTools : ToolCollection { DefaultCharacterSet.use_default_range (gr); overview.set_glyph_range (gr); update_overview_characterset ();+ overview.dirty_scrollbar = true; }); character_sets.add_tool (default_glyphs); @@ -72,6 +74,7 @@ public class OverviewTools : ToolCollection { DefaultCharacterSet.use_full_unicode_range (gr); overview.set_glyph_range (gr); update_overview_characterset ();+ overview.dirty_scrollbar = true; }); character_sets.add_tool (unicode); @@ -409,7 +409,7 @@ public class SettingsDisplay : FontDisplay { GlyphCanvas.redraw (); } - public void update_scrollbar () {+ public override void update_scrollbar () { double h = content_height - allocation.height; MainWindow.set_scrollbar_size (allocation.height / content_height); MainWindow.set_scrollbar_position (scroll / h);@@ -84,6 +84,11 @@ public class TabContent : GLib.Object { if (menu.show_menu) { menu.draw (allocation, cr); }+ + if (GlyphCanvas.current_display.dirty_scrollbar) {+ GlyphCanvas.current_display.update_scrollbar ();+ GlyphCanvas.current_display.dirty_scrollbar = false;+ } } } @@ -162,7 +162,7 @@ public abstract class Table : FontDisplay { redraw_area (0, 0, allocation.width, allocation.height); } - public void update_scrollbar () {+ public override void update_scrollbar () { uint rows = get_rows ().size; if (rows == 0 || visible_rows == 0) {@@ -76,6 +76,8 @@ public class ZoomBar : Tool { if (!MenuTab.suppress_event) { new_zoom (zoom_level); }+ + GlyphCanvas.current_display.dirty_scrollbar = true; } public override void draw (Context cr) {