diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/app.c | 21 | ||||
-rw-r--r-- | src/gmdocument.c | 13 | ||||
-rw-r--r-- | src/prefs.c | 2 | ||||
-rw-r--r-- | src/prefs.h | 2 | ||||
-rw-r--r-- | src/ui/util.c | 53 |
5 files changed, 71 insertions, 20 deletions
@@ -226,6 +226,8 @@ static iString *serializePrefs_App_(const iApp *d) { | |||
226 | /* TODO: Set up an array of booleans in Prefs and do these in a loop. */ | 226 | /* TODO: Set up an array of booleans in Prefs and do these in a loop. */ |
227 | appendFormat_String(str, "prefs.mono.gemini.changed arg:%d\n", d->prefs.monospaceGemini); | 227 | appendFormat_String(str, "prefs.mono.gemini.changed arg:%d\n", d->prefs.monospaceGemini); |
228 | appendFormat_String(str, "prefs.mono.gopher.changed arg:%d\n", d->prefs.monospaceGopher); | 228 | appendFormat_String(str, "prefs.mono.gopher.changed arg:%d\n", d->prefs.monospaceGopher); |
229 | appendFormat_String(str, "prefs.boldlink.dark.changed arg:%d\n", d->prefs.boldLinkDark); | ||
230 | appendFormat_String(str, "prefs.boldlink.light.changed arg:%d\n", d->prefs.boldLinkLight); | ||
229 | appendFormat_String(str, "prefs.biglede.changed arg:%d\n", d->prefs.bigFirstParagraph); | 231 | appendFormat_String(str, "prefs.biglede.changed arg:%d\n", d->prefs.bigFirstParagraph); |
230 | appendFormat_String(str, "prefs.plaintext.wrap.changed arg:%d\n", d->prefs.plainTextWrap); | 232 | appendFormat_String(str, "prefs.plaintext.wrap.changed arg:%d\n", d->prefs.plainTextWrap); |
231 | appendFormat_String(str, "prefs.sideicon.changed arg:%d\n", d->prefs.sideIcon); | 233 | appendFormat_String(str, "prefs.sideicon.changed arg:%d\n", d->prefs.sideIcon); |
@@ -1697,6 +1699,19 @@ iBool handleCommand_App(const char *cmd) { | |||
1697 | postCommand_App("window.unfreeze"); | 1699 | postCommand_App("window.unfreeze"); |
1698 | return iTrue; | 1700 | return iTrue; |
1699 | } | 1701 | } |
1702 | else if (equal_Command(cmd, "prefs.boldlink.dark.changed") || | ||
1703 | equal_Command(cmd, "prefs.boldlink.light.changed")) { | ||
1704 | const iBool isSet = (arg_Command(cmd) != 0); | ||
1705 | if (startsWith_CStr(cmd, "prefs.boldlink.dark")) { | ||
1706 | d->prefs.boldLinkDark = isSet; | ||
1707 | } | ||
1708 | else { | ||
1709 | d->prefs.boldLinkLight = isSet; | ||
1710 | } | ||
1711 | resetFonts_Text(); /* clear the glyph cache */ | ||
1712 | postCommand_App("font.changed"); | ||
1713 | return iTrue; | ||
1714 | } | ||
1700 | else if (equal_Command(cmd, "prefs.biglede.changed")) { | 1715 | else if (equal_Command(cmd, "prefs.biglede.changed")) { |
1701 | d->prefs.bigFirstParagraph = arg_Command(cmd) != 0; | 1716 | d->prefs.bigFirstParagraph = arg_Command(cmd) != 0; |
1702 | postCommand_App("document.layout.changed"); | 1717 | postCommand_App("document.layout.changed"); |
@@ -1938,6 +1953,12 @@ iBool handleCommand_App(const char *cmd) { | |||
1938 | setFlags_Widget(findChild_Widget(dlg, "prefs.mono.gopher"), | 1953 | setFlags_Widget(findChild_Widget(dlg, "prefs.mono.gopher"), |
1939 | selected_WidgetFlag, | 1954 | selected_WidgetFlag, |
1940 | d->prefs.monospaceGopher); | 1955 | d->prefs.monospaceGopher); |
1956 | setFlags_Widget(findChild_Widget(dlg, "prefs.boldlink.dark"), | ||
1957 | selected_WidgetFlag, | ||
1958 | d->prefs.boldLinkDark); | ||
1959 | setFlags_Widget(findChild_Widget(dlg, "prefs.boldlink.light"), | ||
1960 | selected_WidgetFlag, | ||
1961 | d->prefs.boldLinkLight); | ||
1941 | setFlags_Widget( | 1962 | setFlags_Widget( |
1942 | findChild_Widget(dlg, format_CStr("prefs.linewidth.%d", d->prefs.lineWidth)), | 1963 | findChild_Widget(dlg, format_CStr("prefs.linewidth.%d", d->prefs.lineWidth)), |
1943 | selected_WidgetFlag, | 1964 | selected_WidgetFlag, |
diff --git a/src/gmdocument.c b/src/gmdocument.c index 184951d3..2a31fe77 100644 --- a/src/gmdocument.c +++ b/src/gmdocument.c | |||
@@ -336,8 +336,11 @@ static void alignDecoration_GmRun_(iGmRun *run, iBool isCentered) { | |||
336 | } | 336 | } |
337 | 337 | ||
338 | static void doLayout_GmDocument_(iGmDocument *d) { | 338 | static void doLayout_GmDocument_(iGmDocument *d) { |
339 | const iBool isMono = isForcedMonospace_GmDocument_(d); | 339 | const iPrefs *prefs = prefs_App(); |
340 | const iBool isNarrow = d->size.x < 90 * gap_Text; | 340 | const iBool isMono = isForcedMonospace_GmDocument_(d); |
341 | const iBool isNarrow = d->size.x < 90 * gap_Text; | ||
342 | const iBool isDarkBg = isDark_GmDocumentTheme( | ||
343 | isDark_ColorTheme(colorTheme_App()) ? prefs->docThemeDark : prefs->docThemeLight); | ||
341 | /* TODO: Collect these parameters into a GmTheme. */ | 344 | /* TODO: Collect these parameters into a GmTheme. */ |
342 | const int fonts[max_GmLineType] = { | 345 | const int fonts[max_GmLineType] = { |
343 | isMono ? regularMonospace_FontId : paragraph_FontId, | 346 | isMono ? regularMonospace_FontId : paragraph_FontId, |
@@ -347,7 +350,10 @@ static void doLayout_GmDocument_(iGmDocument *d) { | |||
347 | heading1_FontId, | 350 | heading1_FontId, |
348 | heading2_FontId, | 351 | heading2_FontId, |
349 | heading3_FontId, | 352 | heading3_FontId, |
350 | isMono ? regularMonospace_FontId : bold_FontId, | 353 | isMono ? regularMonospace_FontId |
354 | : ((isDarkBg && prefs->boldLinkDark) || (!isDarkBg && prefs->boldLinkLight)) | ||
355 | ? bold_FontId | ||
356 | : paragraph_FontId, | ||
351 | }; | 357 | }; |
352 | static const int colors[max_GmLineType] = { | 358 | static const int colors[max_GmLineType] = { |
353 | tmParagraph_ColorId, | 359 | tmParagraph_ColorId, |
@@ -376,7 +382,6 @@ static void doLayout_GmDocument_(iGmDocument *d) { | |||
376 | static const char *quote = "\u201c"; | 382 | static const char *quote = "\u201c"; |
377 | static const char *magnifyingGlass = "\U0001f50d"; | 383 | static const char *magnifyingGlass = "\U0001f50d"; |
378 | static const char *pointingFinger = "\U0001f449"; | 384 | static const char *pointingFinger = "\U0001f449"; |
379 | const iPrefs *prefs = prefs_App(); | ||
380 | clear_Array(&d->layout); | 385 | clear_Array(&d->layout); |
381 | clearLinks_GmDocument_(d); | 386 | clearLinks_GmDocument_(d); |
382 | clear_Array(&d->headings); | 387 | clear_Array(&d->headings); |
diff --git a/src/prefs.c b/src/prefs.c index bb0bb3ee..4c1d8dc2 100644 --- a/src/prefs.c +++ b/src/prefs.c | |||
@@ -47,6 +47,8 @@ void init_Prefs(iPrefs *d) { | |||
47 | d->headingFont = nunito_TextFont; | 47 | d->headingFont = nunito_TextFont; |
48 | d->monospaceGemini = iFalse; | 48 | d->monospaceGemini = iFalse; |
49 | d->monospaceGopher = iFalse; | 49 | d->monospaceGopher = iFalse; |
50 | d->boldLinkDark = iTrue; | ||
51 | d->boldLinkLight = iTrue; | ||
50 | d->lineWidth = 38; | 52 | d->lineWidth = 38; |
51 | d->bigFirstParagraph = iTrue; | 53 | d->bigFirstParagraph = iTrue; |
52 | d->quoteIcon = iTrue; | 54 | d->quoteIcon = iTrue; |
diff --git a/src/prefs.h b/src/prefs.h index 232c6fc3..6be7fd41 100644 --- a/src/prefs.h +++ b/src/prefs.h | |||
@@ -71,6 +71,8 @@ struct Impl_Prefs { | |||
71 | enum iTextFont headingFont; | 71 | enum iTextFont headingFont; |
72 | iBool monospaceGemini; | 72 | iBool monospaceGemini; |
73 | iBool monospaceGopher; | 73 | iBool monospaceGopher; |
74 | iBool boldLinkDark; | ||
75 | iBool boldLinkLight; | ||
74 | int lineWidth; | 76 | int lineWidth; |
75 | iBool bigFirstParagraph; | 77 | iBool bigFirstParagraph; |
76 | iBool quoteIcon; | 78 | iBool quoteIcon; |
diff --git a/src/ui/util.c b/src/ui/util.c index 4793f447..cdc58154 100644 --- a/src/ui/util.c +++ b/src/ui/util.c | |||
@@ -1933,7 +1933,7 @@ iWidget *makePreferences_Widget(void) { | |||
1933 | setBackgroundColor_Widget(findChild_Widget(tabs, "tabs.buttons"), uiBackgroundSidebar_ColorId); | 1933 | setBackgroundColor_Widget(findChild_Widget(tabs, "tabs.buttons"), uiBackgroundSidebar_ColorId); |
1934 | setId_Widget(tabs, "prefs.tabs"); | 1934 | setId_Widget(tabs, "prefs.tabs"); |
1935 | iWidget *headings, *values; | 1935 | iWidget *headings, *values; |
1936 | const int lineGap = lineHeight_Text(uiLabel_FontId); | 1936 | const int bigGap = lineHeight_Text(uiLabel_FontId) * 3 / 4; |
1937 | /* General preferences. */ { | 1937 | /* General preferences. */ { |
1938 | appendTwoColumnPage_(tabs, "${heading.prefs.general}", '1', &headings, &values); | 1938 | appendTwoColumnPage_(tabs, "${heading.prefs.general}", '1', &headings, &values); |
1939 | #if defined (LAGRANGE_DOWNLOAD_EDIT) | 1939 | #if defined (LAGRANGE_DOWNLOAD_EDIT) |
@@ -1942,8 +1942,8 @@ iWidget *makePreferences_Widget(void) { | |||
1942 | #endif | 1942 | #endif |
1943 | addChild_Widget(headings, iClob(makeHeading_Widget("${prefs.searchurl}"))); | 1943 | addChild_Widget(headings, iClob(makeHeading_Widget("${prefs.searchurl}"))); |
1944 | setId_Widget(addChild_Widget(values, iClob(new_InputWidget(0))), "prefs.searchurl"); | 1944 | setId_Widget(addChild_Widget(values, iClob(new_InputWidget(0))), "prefs.searchurl"); |
1945 | addChild_Widget(headings, iClob(makePadding_Widget(lineGap))); | 1945 | addChild_Widget(headings, iClob(makePadding_Widget(bigGap))); |
1946 | addChild_Widget(values, iClob(makePadding_Widget(lineGap))); | 1946 | addChild_Widget(values, iClob(makePadding_Widget(bigGap))); |
1947 | addChild_Widget(headings, iClob(makeHeading_Widget("${prefs.collapsepreonload}"))); | 1947 | addChild_Widget(headings, iClob(makeHeading_Widget("${prefs.collapsepreonload}"))); |
1948 | addChild_Widget(values, iClob(makeToggle_Widget("prefs.collapsepreonload"))); | 1948 | addChild_Widget(values, iClob(makeToggle_Widget("prefs.collapsepreonload"))); |
1949 | addChild_Widget(headings, iClob(makeHeading_Widget("${prefs.plaintext.wrap}"))); | 1949 | addChild_Widget(headings, iClob(makeHeading_Widget("${prefs.plaintext.wrap}"))); |
@@ -1952,8 +1952,8 @@ iWidget *makePreferences_Widget(void) { | |||
1952 | addChild_Widget(values, iClob(makeToggle_Widget("prefs.centershort"))); | 1952 | addChild_Widget(values, iClob(makeToggle_Widget("prefs.centershort"))); |
1953 | addChild_Widget(headings, iClob(makeHeading_Widget("${prefs.hoverlink}"))); | 1953 | addChild_Widget(headings, iClob(makeHeading_Widget("${prefs.hoverlink}"))); |
1954 | addChild_Widget(values, iClob(makeToggle_Widget("prefs.hoverlink"))); | 1954 | addChild_Widget(values, iClob(makeToggle_Widget("prefs.hoverlink"))); |
1955 | addChild_Widget(headings, iClob(makePadding_Widget(lineGap))); | 1955 | addChild_Widget(headings, iClob(makePadding_Widget(bigGap))); |
1956 | addChild_Widget(values, iClob(makePadding_Widget(lineGap))); | 1956 | addChild_Widget(values, iClob(makePadding_Widget(bigGap))); |
1957 | /* UI languages. */ { | 1957 | /* UI languages. */ { |
1958 | iArray *uiLangs = collectNew_Array(sizeof(iMenuItem)); | 1958 | iArray *uiLangs = collectNew_Array(sizeof(iMenuItem)); |
1959 | const iMenuItem langItems[] = { | 1959 | const iMenuItem langItems[] = { |
@@ -2076,17 +2076,36 @@ iWidget *makePreferences_Widget(void) { | |||
2076 | addChild_Widget(headings, iClob(makeHeading_Widget("${prefs.font}"))); | 2076 | addChild_Widget(headings, iClob(makeHeading_Widget("${prefs.font}"))); |
2077 | addFontButtons_(values, "font"); | 2077 | addFontButtons_(values, "font"); |
2078 | addChild_Widget(headings, iClob(makeHeading_Widget("${prefs.mono}"))); | 2078 | addChild_Widget(headings, iClob(makeHeading_Widget("${prefs.mono}"))); |
2079 | iWidget *mono = new_Widget(); | 2079 | iWidget *mono = new_Widget(); { |
2080 | iWidget *tog; | 2080 | iWidget *tog; |
2081 | setTextCStr_LabelWidget( | 2081 | setTextCStr_LabelWidget( |
2082 | addChild_Widget(mono, tog = iClob(makeToggle_Widget("prefs.mono.gemini"))), "${prefs.mono.gemini}"); | 2082 | addChild_Widget(mono, tog = iClob(makeToggle_Widget("prefs.mono.gemini"))), |
2083 | setFlags_Widget(tog, fixedWidth_WidgetFlag, iFalse); | 2083 | "${prefs.mono.gemini}"); |
2084 | updateSize_LabelWidget((iLabelWidget *) tog); | 2084 | setFlags_Widget(tog, fixedWidth_WidgetFlag, iFalse); |
2085 | setTextCStr_LabelWidget( | 2085 | updateSize_LabelWidget((iLabelWidget *) tog); |
2086 | addChild_Widget(mono, tog = iClob(makeToggle_Widget("prefs.mono.gopher"))), "${prefs.mono.gopher}"); | 2086 | setTextCStr_LabelWidget( |
2087 | setFlags_Widget(tog, fixedWidth_WidgetFlag, iFalse); | 2087 | addChild_Widget(mono, tog = iClob(makeToggle_Widget("prefs.mono.gopher"))), |
2088 | updateSize_LabelWidget((iLabelWidget *) tog); | 2088 | "${prefs.mono.gopher}"); |
2089 | setFlags_Widget(tog, fixedWidth_WidgetFlag, iFalse); | ||
2090 | updateSize_LabelWidget((iLabelWidget *) tog); | ||
2091 | } | ||
2089 | addChildFlags_Widget(values, iClob(mono), arrangeHorizontal_WidgetFlag | arrangeSize_WidgetFlag); | 2092 | addChildFlags_Widget(values, iClob(mono), arrangeHorizontal_WidgetFlag | arrangeSize_WidgetFlag); |
2093 | addChild_Widget(headings, iClob(makeHeading_Widget("${prefs.boldlink}"))); | ||
2094 | iWidget *boldLink = new_Widget(); { | ||
2095 | /* TODO: Add a utility function for this type of toggles? (also for above) */ | ||
2096 | iWidget *tog; | ||
2097 | setTextCStr_LabelWidget( | ||
2098 | addChild_Widget(boldLink, tog = iClob(makeToggle_Widget("prefs.boldlink.dark"))), | ||
2099 | "${prefs.boldlink.dark}"); | ||
2100 | setFlags_Widget(tog, fixedWidth_WidgetFlag, iFalse); | ||
2101 | updateSize_LabelWidget((iLabelWidget *) tog); | ||
2102 | setTextCStr_LabelWidget( | ||
2103 | addChild_Widget(boldLink, tog = iClob(makeToggle_Widget("prefs.boldlink.light"))), | ||
2104 | "${prefs.boldlink.light}"); | ||
2105 | setFlags_Widget(tog, fixedWidth_WidgetFlag, iFalse); | ||
2106 | updateSize_LabelWidget((iLabelWidget *) tog); | ||
2107 | } | ||
2108 | addChildFlags_Widget(values, iClob(boldLink), arrangeHorizontal_WidgetFlag | arrangeSize_WidgetFlag); | ||
2090 | } | 2109 | } |
2091 | makeTwoColumnHeading_("${heading.prefs.paragraph}", headings, values); | 2110 | makeTwoColumnHeading_("${heading.prefs.paragraph}", headings, values); |
2092 | addChild_Widget(headings, iClob(makeHeading_Widget("${prefs.linewidth}"))); | 2111 | addChild_Widget(headings, iClob(makeHeading_Widget("${prefs.linewidth}"))); |
@@ -2108,7 +2127,9 @@ iWidget *makePreferences_Widget(void) { | |||
2108 | addChildFlags_Widget(values, iClob(quote), arrangeHorizontal_WidgetFlag | arrangeSize_WidgetFlag); | 2127 | addChildFlags_Widget(values, iClob(quote), arrangeHorizontal_WidgetFlag | arrangeSize_WidgetFlag); |
2109 | addChild_Widget(headings, iClob(makeHeading_Widget("${prefs.biglede}"))); | 2128 | addChild_Widget(headings, iClob(makeHeading_Widget("${prefs.biglede}"))); |
2110 | addChild_Widget(values, iClob(makeToggle_Widget("prefs.biglede"))); | 2129 | addChild_Widget(values, iClob(makeToggle_Widget("prefs.biglede"))); |
2111 | makeTwoColumnHeading_("${heading.prefs.widelayout}", headings, values); | 2130 | // makeTwoColumnHeading_("${heading.prefs.widelayout}", headings, values); |
2131 | addChild_Widget(headings, iClob(makePadding_Widget(bigGap))); | ||
2132 | addChild_Widget(values, iClob(makePadding_Widget(bigGap))); | ||
2112 | addChild_Widget(headings, iClob(makeHeading_Widget("${prefs.sideicon}"))); | 2133 | addChild_Widget(headings, iClob(makeHeading_Widget("${prefs.sideicon}"))); |
2113 | addChild_Widget(values, iClob(makeToggle_Widget("prefs.sideicon"))); | 2134 | addChild_Widget(values, iClob(makeToggle_Widget("prefs.sideicon"))); |
2114 | } | 2135 | } |