diff --git a/build.gradle.kts b/build.gradle.kts index 321dad1..6099299 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -6,7 +6,7 @@ plugins { } group = "com.tpuahsiew.wirc" -version = "0.1.9" +version = "0.1.10" // No project-level repositories{} block here: settings.gradle.kts sets // dependencyResolutionManagement.repositoriesMode = FAIL_ON_PROJECT_REPOS and already @@ -38,7 +38,7 @@ compose.desktop { appResourcesRootDir.set(project.file("installerResources")) targetFormats(TargetFormat.Msi, TargetFormat.Exe) packageName = "wIRC" - packageVersion = "0.1.9" + packageVersion = "0.1.10" windows { menuGroup = "wIRC" upgradeUuid = "8f14e45f-ceea-4a5e-9c3b-5b1f0e8c2b7a" diff --git a/src/main/kotlin/Main.kt b/src/main/kotlin/Main.kt index ad421d7..77229b3 100644 --- a/src/main/kotlin/Main.kt +++ b/src/main/kotlin/Main.kt @@ -108,7 +108,8 @@ fun main() = application { openBuffers = openBuffers + BufferKey(serverId, channelName) }, onExitApp = shutdownApp, - onUnreadChange = { mainUnread = it } + onUnreadChange = { mainUnread = it }, + onFontChange = { id -> prefsRepo.setFontId(MAIN_BUFFER_KEY.storageId(), id) } ) } } diff --git a/src/main/kotlin/data/WindowPrefsRepository.kt b/src/main/kotlin/data/WindowPrefsRepository.kt index f3509a3..b844847 100644 --- a/src/main/kotlin/data/WindowPrefsRepository.kt +++ b/src/main/kotlin/data/WindowPrefsRepository.kt @@ -14,6 +14,7 @@ data class WindowDisplaySettings( val backgroundAlpha: Float = 0.85f, // 0f = fully transparent, 1f = fully opaque val textColorMircIndex: Int = 0, // index into the standard mIRC palette; 0 = white val fontSize: Float = 14f, + val fontId: String = "monospace", // see ui/AppFonts.kt; unknown/missing ids fall back to monospace val showUserList: Boolean = true, val mentionHighlightColorArgb: Int = 0x40FFA500.toInt(), // translucent orange val nickColorsEnabled: Boolean = true, @@ -64,6 +65,8 @@ class WindowPrefsRepository(rootDir: File) { fun setFontSize(bufferKeyId: String, fontSize: Float) = update(bufferKeyId) { it.copy(fontSize = fontSize) } + fun setFontId(bufferKeyId: String, fontId: String) = update(bufferKeyId) { it.copy(fontId = fontId) } + fun setShowUserList(bufferKeyId: String, show: Boolean) = update(bufferKeyId) { it.copy(showUserList = show) } fun setMentionHighlightColor(bufferKeyId: String, colorArgb: Int) = update(bufferKeyId) { it.copy(mentionHighlightColorArgb = colorArgb) } @@ -107,6 +110,7 @@ class WindowPrefsRepository(rootDir: File) { backgroundAlpha = o.optDouble("backgroundAlpha", 0.85).toFloat(), textColorMircIndex = o.optInt("textColorMircIndex", 0), fontSize = o.optDouble("fontSize", 14.0).toFloat(), + fontId = o.optString("fontId", "monospace"), showUserList = o.optBoolean("showUserList", true), mentionHighlightColorArgb = o.optLong("mentionHighlightColorArgb", 0x40FFA500L).toInt(), nickColorsEnabled = o.optBoolean("nickColorsEnabled", true), @@ -138,6 +142,7 @@ class WindowPrefsRepository(rootDir: File) { put("backgroundAlpha", settings.backgroundAlpha) put("textColorMircIndex", settings.textColorMircIndex) put("fontSize", settings.fontSize) + put("fontId", settings.fontId) put("showUserList", settings.showUserList) put("mentionHighlightColorArgb", settings.mentionHighlightColorArgb) put("nickColorsEnabled", settings.nickColorsEnabled) diff --git a/src/main/kotlin/ui/AppFonts.kt b/src/main/kotlin/ui/AppFonts.kt new file mode 100644 index 0000000..9c76955 --- /dev/null +++ b/src/main/kotlin/ui/AppFonts.kt @@ -0,0 +1,111 @@ +package ui + +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.platform.Font +import java.io.File + +/** + * Fonts offered in each window's settings. Stored in window_prefs.json by [id], so the ids + * must never change once shipped. + * + * Two kinds: + * - Windows fonts (Segoe UI, Tahoma, Tw Cen MT) are Microsoft-licensed, so they are NOT + * bundled. They are loaded straight out of the Windows font folders at runtime and only + * listed when the file is actually there (Tw Cen MT only exists if Office is installed). + * - Rounded fonts (Nunito, Quicksand, Varela Round) are SIL OFL licensed and bundled in + * src/main/resources/fonts with their license files. + * + * Anything missing or failing to load falls back to Monospace, so a font uninstalled after + * being picked can never crash a window. + */ +data class FontOption(val id: String, val label: String, val family: FontFamily) + +object AppFonts { + const val DEFAULT_ID = "monospace" + + private val fontDirs: List = buildList { + add(File(System.getenv("WINDIR") ?: "C:\\Windows", "Fonts")) + System.getenv("LOCALAPPDATA")?.let { add(File(it, "Microsoft\\Windows\\Fonts")) } + } + + /** Case-insensitive lookup across the system and per-user font folders. */ + private fun findSystemFont(name: String): File? { + for (dir in fontDirs) { + val direct = File(dir, name) + if (direct.isFile) return direct + dir.listFiles()?.firstOrNull { it.name.equals(name, ignoreCase = true) }?.let { return it } + } + return null + } + + private fun systemFamily(regular: String, bold: String?): FontFamily? { + val reg = findSystemFont(regular) ?: return null + return try { + val fonts = mutableListOf(Font(reg, FontWeight.Normal)) + bold?.let { findSystemFont(it) }?.let { fonts.add(Font(it, FontWeight.Bold)) } + FontFamily(fonts) + } catch (e: Exception) { + null + } + } + + private fun bundledFamily(regular: String, bold: String?): FontFamily? = try { + val fonts = mutableListOf(Font("fonts/$regular", FontWeight.Normal)) + bold?.let { fonts.add(Font("fonts/$it", FontWeight.Bold)) } + FontFamily(fonts) + } catch (e: Exception) { + null + } + + /** Built once at startup; the font folders don't change while wIRC is running. */ + val options: List by lazy { + buildList { + add(FontOption(DEFAULT_ID, "Monospace", FontFamily.Monospace)) + systemFamily("segoeui.ttf", "segoeuib.ttf")?.let { add(FontOption("segoe-ui", "Segoe UI", it)) } + systemFamily("tahoma.ttf", "tahomabd.ttf")?.let { add(FontOption("tahoma", "Tahoma", it)) } + systemFamily("TCM_____.TTF", "TCB_____.TTF")?.let { add(FontOption("tw-cen-mt", "Tw Cen MT", it)) } + bundledFamily("Nunito-Regular.ttf", "Nunito-Bold.ttf")?.let { add(FontOption("nunito", "Nunito (rounded)", it)) } + bundledFamily("Quicksand-Regular.ttf", "Quicksand-Bold.ttf")?.let { add(FontOption("quicksand", "Quicksand (rounded)", it)) } + bundledFamily("VarelaRound-Regular.ttf", null)?.let { add(FontOption("varela-round", "Varela Round (rounded)", it)) } + } + } + + fun familyFor(id: String): FontFamily = + options.firstOrNull { it.id == id }?.family ?: FontFamily.Monospace +} + +/** + * The font list used in both the channel-window settings and wIRC main's Font dialog. Each + * name is drawn in its own font as a live preview; plain square-cornered rows, no dropdown. + */ +@Composable +fun FontPickerList(selectedId: String, textColor: Color, onPick: (String) -> Unit) { + val effectiveId = if (AppFonts.options.any { it.id == selectedId }) selectedId else AppFonts.DEFAULT_ID + Column { + AppFonts.options.forEach { option -> + Text( + text = option.label, + color = textColor, + fontFamily = option.family, + fontSize = 15.sp, + modifier = Modifier + .fillMaxWidth() + .background(if (option.id == effectiveId) Color.White.copy(alpha = 0.18f) else Color.Transparent) + .clickable { onPick(option.id) } + .padding(horizontal = 6.dp, vertical = 4.dp) + ) + } + } +} diff --git a/src/main/kotlin/ui/ChannelScreen.kt b/src/main/kotlin/ui/ChannelScreen.kt index 8b2d7ec..685f964 100644 --- a/src/main/kotlin/ui/ChannelScreen.kt +++ b/src/main/kotlin/ui/ChannelScreen.kt @@ -195,6 +195,7 @@ fun WindowScope.ChannelScreen( onAlphaChange: (Float) -> Unit, onTextColorChange: (Int) -> Unit, onFontSizeChange: (Float) -> Unit, + onFontChange: (String) -> Unit, onShowUserListChange: (Boolean) -> Unit, onNickColorsToggle: (Boolean) -> Unit, onMentionHighlightColorChange: (Int) -> Unit, @@ -370,7 +371,7 @@ fun WindowScope.ChannelScreen( horizontalArrangement = Arrangement.SpaceBetween, verticalAlignment = Alignment.CenterVertically ) { - Text(channelName, color = textColor, fontFamily = FontFamily.Monospace, style = MaterialTheme.typography.labelSmall) + Text(channelName, color = textColor, fontFamily = AppFonts.familyFor(displaySettings.fontId), style = MaterialTheme.typography.labelSmall) Row { FadingTitleBarButton(onClick = { onShowUserListChange(!displaySettings.showUserList) }) { Icon(Icons.Default.Person, contentDescription = "Toggle user list", tint = textColor, modifier = Modifier.size(16.dp)) @@ -420,6 +421,7 @@ fun WindowScope.ChannelScreen( onAlphaChange = onAlphaChange, onTextColorChange = onTextColorChange, onFontSizeChange = onFontSizeChange, + onFontChange = onFontChange, onNickColorsToggle = onNickColorsToggle, onMentionHighlightColorChange = onMentionHighlightColorChange, onShowImagePreviewsChange = onShowImagePreviewsChange @@ -453,7 +455,7 @@ fun WindowScope.ChannelScreen( Text( text = (if (user.isOp) "@" else if (user.isVoice) "+" else "") + user.nick, color = textColor, - fontFamily = FontFamily.Monospace, + fontFamily = AppFonts.familyFor(displaySettings.fontId), fontSize = displaySettings.fontSize.sp, modifier = Modifier .fillMaxWidth() @@ -491,7 +493,7 @@ fun WindowScope.ChannelScreen( onValueChange = { input = it }, singleLine = true, textStyle = androidx.compose.ui.text.TextStyle( - fontFamily = FontFamily.Monospace, + fontFamily = AppFonts.familyFor(displaySettings.fontId), color = textColor, fontSize = displaySettings.fontSize.sp ), @@ -840,11 +842,11 @@ fun MessageScrollback( // then converts that now-stale pixel value using the NEW density, so the // two silently disagreed until the window (and this remember scope) was // recreated by closing and reopening it. - val lineHeightPx = remember(displaySettings.fontSize, density) { + val lineHeightPx = remember(displaySettings.fontSize, displaySettings.fontId, density) { textMeasurer.measure( text = "Mg", style = androidx.compose.ui.text.TextStyle( - fontFamily = FontFamily.Monospace, + fontFamily = AppFonts.familyFor(displaySettings.fontId), fontSize = displaySettings.fontSize.sp ) ).size.height @@ -875,7 +877,7 @@ fun MessageScrollback( // second independent one. val textStyle = androidx.compose.ui.text.TextStyle( - fontFamily = FontFamily.Monospace, + fontFamily = AppFonts.familyFor(displaySettings.fontId), fontSize = displaySettings.fontSize.sp ) val selection = selectionState.selection @@ -1404,6 +1406,7 @@ private fun WindowSettingsPanel( onAlphaChange: (Float) -> Unit, onTextColorChange: (Int) -> Unit, onFontSizeChange: (Float) -> Unit, + onFontChange: (String) -> Unit, onNickColorsToggle: (Boolean) -> Unit, onMentionHighlightColorChange: (Int) -> Unit, onShowImagePreviewsChange: (Boolean) -> Unit @@ -1441,6 +1444,9 @@ private fun WindowSettingsPanel( colors = sliderColors ) Spacer(Modifier.height(4.dp)) + Text("Font:", color = textColor, style = MaterialTheme.typography.bodySmall) + FontPickerList(displaySettings.fontId, textColor, onFontChange) + Spacer(Modifier.height(4.dp)) Text("Text color:", color = textColor, style = MaterialTheme.typography.bodySmall) FlowSwatchGrid( selected = displaySettings.textColorMircIndex, diff --git a/src/main/kotlin/ui/ChannelWindow.kt b/src/main/kotlin/ui/ChannelWindow.kt index 05cc26c..5aa6998 100644 --- a/src/main/kotlin/ui/ChannelWindow.kt +++ b/src/main/kotlin/ui/ChannelWindow.kt @@ -181,6 +181,9 @@ fun ChannelWindow( onFontSizeChange = { size -> scope.launch(Dispatchers.IO) { prefsRepo.setFontSize(bufferKey.storageId(), size) } }, + onFontChange = { id -> + scope.launch(Dispatchers.IO) { prefsRepo.setFontId(bufferKey.storageId(), id) } + }, onShowUserListChange = { show -> scope.launch(Dispatchers.IO) { prefsRepo.setShowUserList(bufferKey.storageId(), show) } }, diff --git a/src/main/kotlin/ui/MainScreen.kt b/src/main/kotlin/ui/MainScreen.kt index 7b5a449..d1fdc5e 100644 --- a/src/main/kotlin/ui/MainScreen.kt +++ b/src/main/kotlin/ui/MainScreen.kt @@ -43,8 +43,10 @@ fun MainScreen( displaySettings: WindowDisplaySettings, onOpenChannel: (serverId: String, channelName: String) -> Unit, onExitApp: () -> Unit, - onUnreadChange: (Int) -> Unit + onUnreadChange: (Int) -> Unit, + onFontChange: (String) -> Unit ) { + var showFontDialog by remember { mutableStateOf(false) } var servers by remember { mutableStateOf(repo.loadAll()) } var showAddDialog by remember { mutableStateOf(false) } var editingServer by remember { mutableStateOf(null) } @@ -87,6 +89,12 @@ fun MainScreen( Text("+ Add Server") } Spacer(Modifier.width(8.dp)) + // Font for the server messages box (channel windows pick theirs in their own + // settings). + TextButton(onClick = { showFontDialog = true }) { + Text("Font") + } + Spacer(Modifier.width(8.dp)) // Disconnects every server and terminates the process. (A bare "/quit" in a // channel window only disconnects that window's server.) TextButton(onClick = onExitApp) { @@ -187,6 +195,25 @@ fun MainScreen( ) } + if (showFontDialog) { + DialogWindow( + onCloseRequest = { showFontDialog = false }, + title = "wIRC main font", + state = rememberDialogState(size = DpSize(300.dp, 360.dp)), + resizable = true + ) { + MaterialTheme(colorScheme = colorScheme) { + Surface { + Column(modifier = Modifier.fillMaxSize().padding(8.dp).verticalScroll(rememberScrollState())) { + Text("Server messages font:", color = textColor, style = MaterialTheme.typography.bodySmall) + Spacer(Modifier.height(4.dp)) + FontPickerList(displaySettings.fontId, textColor, onFontChange) + } + } + } + } + } + if (showAddDialog) { ServerEditDialog( existing = editingServer, diff --git a/src/main/resources/fonts/Nunito-Bold.ttf b/src/main/resources/fonts/Nunito-Bold.ttf new file mode 100644 index 0000000..7f5e190 Binary files /dev/null and b/src/main/resources/fonts/Nunito-Bold.ttf differ diff --git a/src/main/resources/fonts/Nunito-Regular.ttf b/src/main/resources/fonts/Nunito-Regular.ttf new file mode 100644 index 0000000..19d1b5f Binary files /dev/null and b/src/main/resources/fonts/Nunito-Regular.ttf differ diff --git a/src/main/resources/fonts/OFL-Nunito.txt b/src/main/resources/fonts/OFL-Nunito.txt new file mode 100644 index 0000000..c8210f0 --- /dev/null +++ b/src/main/resources/fonts/OFL-Nunito.txt @@ -0,0 +1,93 @@ +Copyright 2014 The Nunito Project Authors (https://github.com/googlefonts/nunito) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/src/main/resources/fonts/OFL-Quicksand.txt b/src/main/resources/fonts/OFL-Quicksand.txt new file mode 100644 index 0000000..5186b46 --- /dev/null +++ b/src/main/resources/fonts/OFL-Quicksand.txt @@ -0,0 +1,93 @@ +Copyright 2011 The Quicksand Project Authors (https://github.com/andrew-paglinawan/QuicksandFamily), with Reserved Font Name “Quicksand”. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/src/main/resources/fonts/OFL-VarelaRound.txt b/src/main/resources/fonts/OFL-VarelaRound.txt new file mode 100644 index 0000000..300cd6a --- /dev/null +++ b/src/main/resources/fonts/OFL-VarelaRound.txt @@ -0,0 +1,93 @@ +Copyright 2023 The Varela Round Project Authors (https://github.com/alefalefalef/Varela-Round-Hebrew/), with Reserved Font Names 'Varela' and ‘Varela Round’. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. \ No newline at end of file diff --git a/src/main/resources/fonts/Quicksand-Bold.ttf b/src/main/resources/fonts/Quicksand-Bold.ttf new file mode 100644 index 0000000..13261b2 Binary files /dev/null and b/src/main/resources/fonts/Quicksand-Bold.ttf differ diff --git a/src/main/resources/fonts/Quicksand-Regular.ttf b/src/main/resources/fonts/Quicksand-Regular.ttf new file mode 100644 index 0000000..92c5bf2 Binary files /dev/null and b/src/main/resources/fonts/Quicksand-Regular.ttf differ diff --git a/src/main/resources/fonts/VarelaRound-Regular.ttf b/src/main/resources/fonts/VarelaRound-Regular.ttf new file mode 100644 index 0000000..3a54b78 Binary files /dev/null and b/src/main/resources/fonts/VarelaRound-Regular.ttf differ