Skip to content

Commit abdefb0

Browse files
authored
Improve line numbers (PR #2470)
1 parent e6421bd commit abdefb0

File tree

7 files changed

+410
-227
lines changed

7 files changed

+410
-227
lines changed

app/src/main/java/net/gsantner/markor/activity/DocumentEditAndViewFragment.java

+21-15
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import android.webkit.JavascriptInterface;
3434
import android.webkit.WebSettings;
3535
import android.webkit.WebView;
36+
import android.widget.FrameLayout;
3637
import android.widget.HorizontalScrollView;
3738
import android.widget.SearchView;
3839
import android.widget.Toast;
@@ -51,6 +52,7 @@
5152
import net.gsantner.markor.frontend.MarkorDialogFactory;
5253
import net.gsantner.markor.frontend.filebrowser.MarkorFileBrowserFactory;
5354
import net.gsantner.markor.frontend.textview.HighlightingEditor;
55+
import net.gsantner.markor.frontend.textview.LineNumbersTextView;
5456
import net.gsantner.markor.frontend.textview.TextViewUtils;
5557
import net.gsantner.markor.model.AppSettings;
5658
import net.gsantner.markor.model.Document;
@@ -91,10 +93,12 @@ public static DocumentEditAndViewFragment newInstance(final @NonNull Document do
9193
private HighlightingEditor _hlEditor;
9294
private WebView _webView;
9395
private MarkorWebViewClient _webViewClient;
96+
private FrameLayout _editorHolder;
9497
private ViewGroup _textActionsBar;
9598

9699
private DraggableScrollbarScrollView _primaryScrollView;
97100
private HorizontalScrollView _hsView;
101+
private LineNumbersTextView _lineNumbersView;
98102
private SearchView _menuSearchViewForViewMode;
99103
private Document _document;
100104
private FormatRegistry _format;
@@ -132,9 +136,12 @@ public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
132136
final Activity activity = getActivity();
133137

134138
_hlEditor = view.findViewById(R.id.document__fragment__edit__highlighting_editor);
139+
_editorHolder = view.findViewById(R.id.document__fragment__edit__editor_holder);
135140
_textActionsBar = view.findViewById(R.id.document__fragment__edit__text_actions_bar);
136141
_webView = view.findViewById(R.id.document__fragment_view_webview);
137142
_primaryScrollView = view.findViewById(R.id.document__fragment__edit__content_editor__scrolling_parent);
143+
_lineNumbersView = view.findViewById(R.id.document__fragment__edit__line_numbers_view);
144+
138145
_cu = new MarkorContextUtils(activity);
139146

140147
// Using `if (_document != null)` everywhere is dangerous
@@ -148,6 +155,9 @@ public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
148155
return;
149156
}
150157

158+
_lineNumbersView.setup(_hlEditor);
159+
_lineNumbersView.setLineNumbersEnabled(_appSettings.getDocumentLineNumbersEnabled(_document.path));
160+
151161
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && _appSettings.getSetWebViewFulldrawing()) {
152162
WebView.enableSlowWholeDocumentDraw();
153163
}
@@ -202,7 +212,6 @@ public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
202212
_hlEditor.setTextColor(_appSettings.getEditorForegroundColor());
203213
_hlEditor.setGravity(_appSettings.isEditorStartEditingInCenter() ? Gravity.CENTER : Gravity.NO_GRAVITY);
204214
_hlEditor.setHighlightingEnabled(_appSettings.getDocumentHighlightState(_document.path, _hlEditor.getText()));
205-
_hlEditor.setLineNumbersEnabled(_appSettings.getDocumentLineNumbersEnabled(_document.path));
206215
_hlEditor.setAutoFormatEnabled(_appSettings.getDocumentAutoFormatEnabled(_document.path));
207216
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
208217
// Do not need to send contents to accessibility
@@ -526,7 +535,7 @@ public boolean onOptionsItemSelected(@NonNull final MenuItem item) {
526535
if (saveDocument(false)) {
527536
TextConverterBase converter = FormatRegistry.getFormat(_document.getFormat(), activity, _document).getConverter();
528537
_cu.shareText(getActivity(),
529-
converter.convertMarkup(getTextString(), getActivity(), false, _hlEditor.isLineNumbersEnabled(), _document.file),
538+
converter.convertMarkup(getTextString(), getActivity(), false, _lineNumbersView.isLineNumbersEnabled(), _document.file),
530539
"text/" + (item.getItemId() == R.id.action_share_html ? "html" : "plain")
531540
);
532541
}
@@ -615,9 +624,9 @@ public void onFsViewerConfig(GsFileBrowserOptions.Options dopt) {
615624
return true;
616625
}
617626
case R.id.action_line_numbers: {
618-
final boolean newState = !_hlEditor.isLineNumbersEnabled();
627+
final boolean newState = !_lineNumbersView.isLineNumbersEnabled();
619628
_appSettings.setDocumentLineNumbersEnabled(_document.path, newState);
620-
_hlEditor.setLineNumbersEnabled(newState);
629+
_lineNumbersView.setLineNumbersEnabled(newState);
621630
updateMenuToggleStates(0);
622631
return true;
623632
}
@@ -738,7 +747,7 @@ private void updateMenuToggleStates(final int selectedFormatActionId) {
738747
mi.setChecked(_hlEditor.getHighlightingEnabled());
739748
}
740749
if ((mi = _fragmentMenu.findItem(R.id.action_line_numbers)) != null) {
741-
mi.setChecked(_hlEditor.isLineNumbersEnabled());
750+
mi.setChecked(_lineNumbersView.isLineNumbersEnabled());
742751
}
743752
if ((mi = _fragmentMenu.findItem(R.id.action_enable_auto_format)) != null) {
744753
mi.setChecked(_hlEditor.getAutoFormatEnabled());
@@ -756,19 +765,17 @@ private void updateMenuToggleStates(final int selectedFormatActionId) {
756765
}
757766

758767
private boolean isWrapped() {
759-
return _hsView == null || (_hlEditor.getParent() == _primaryScrollView);
768+
return _hsView == null || (_hlEditor.getParent() == _editorHolder);
760769
}
761770

762771
private void setHorizontalScrollMode(final boolean wrap) {
763772
final Context context = getContext();
764773
if (context != null && _hlEditor != null && isWrapped() != wrap) {
765-
766774
final int[] sel = TextViewUtils.getSelection(_hlEditor);
767-
768775
final boolean hlEnabled = _hlEditor.getHighlightingEnabled();
769776
_hlEditor.setHighlightingEnabled(false);
770777

771-
_primaryScrollView.removeAllViews();
778+
_editorHolder.removeAllViews();
772779
if (_hsView != null) {
773780
_hsView.removeAllViews();
774781
}
@@ -778,15 +785,14 @@ private void setHorizontalScrollMode(final boolean wrap) {
778785
_hsView.setFillViewport(true);
779786
}
780787
_hsView.addView(_hlEditor);
781-
_primaryScrollView.addView(_hsView);
788+
_editorHolder.addView(_hsView);
782789
} else {
783-
_primaryScrollView.addView(_hlEditor);
790+
_editorHolder.addView(_hlEditor);
784791
}
785792

786793
_hlEditor.setHighlightingEnabled(hlEnabled);
787-
788794
// Run after layout() of immediate parent completes
789-
(wrap ? _primaryScrollView : _hsView).post(() -> TextViewUtils.setSelectionAndShow(_hlEditor, sel));
795+
(wrap ? _editorHolder : _hsView).post(() -> TextViewUtils.setSelectionAndShow(_hlEditor, sel));
790796
}
791797
}
792798

@@ -860,9 +866,9 @@ private boolean isDisplayedAtMainActivity() {
860866
public void updateViewModeText() {
861867
// Don't let text to view mode crash app
862868
try {
863-
_format.getConverter().convertMarkupShowInWebView(_document, getTextString(), getActivity(), _webView, _nextConvertToPrintMode, _hlEditor.isLineNumbersEnabled());
869+
_format.getConverter().convertMarkupShowInWebView(_document, getTextString(), getActivity(), _webView, _nextConvertToPrintMode, _lineNumbersView.isLineNumbersEnabled());
864870
} catch (OutOfMemoryError e) {
865-
_format.getConverter().convertMarkupShowInWebView(_document, "updateViewModeText getTextString(): OutOfMemory " + e, getActivity(), _webView, _nextConvertToPrintMode, _hlEditor.isLineNumbersEnabled());
871+
_format.getConverter().convertMarkupShowInWebView(_document, "updateViewModeText getTextString(): OutOfMemory " + e, getActivity(), _webView, _nextConvertToPrintMode, _lineNumbersView.isLineNumbersEnabled());
866872
}
867873
}
868874

app/src/main/java/net/gsantner/markor/format/markdown/MarkdownSyntaxHighlighter.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public class MarkdownSyntaxHighlighter extends SyntaxHighlighterBase {
3636
private static final int MD_COLOR_LINK = 0xff1ea3fe;
3737
private static final int MD_COLOR_LIST = 0xffdaa521;
3838
private static final int MD_COLOR_QUOTE = 0xff88b04c;
39-
private static final int MD_COLOR_CODEBLOCK = 0x448c8c8c;
39+
private static final int MD_COLOR_CODEBLOCK = 0x2bafafaf;
4040

4141
public MarkdownSyntaxHighlighter(AppSettings as) {
4242
super(as);

0 commit comments

Comments
 (0)