mirror of
https://gitlab.com/2009scape/rt4-client.git
synced 2025-12-09 16:45:46 -07:00
Move themes to a new file, add color boost
This commit is contained in:
parent
2a059d1c02
commit
5948810ca7
3 changed files with 160 additions and 123 deletions
|
|
@ -66,9 +66,15 @@ object SpriteToBufferedImage {
|
|||
* @param sprite The sprite to be converted.
|
||||
* @param tint An optional Color to tint the image.
|
||||
* @param grayscale If true, converts the image to grayscale.
|
||||
* @param brightnessBoost A multiplier to boost the brightness of the image.
|
||||
* @return The BufferedImage created from the sprite.
|
||||
*/
|
||||
fun convertToBufferedImage(sprite: BaseSprite, tint: Color? = null, grayscale: Boolean = false): BufferedImage {
|
||||
fun convertToBufferedImage(
|
||||
sprite: BaseSprite,
|
||||
tint: Color? = null,
|
||||
grayscale: Boolean = false,
|
||||
brightnessBoost: Float = 1.0f
|
||||
): BufferedImage {
|
||||
val width = sprite.width
|
||||
val height = sprite.height
|
||||
val image = BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB)
|
||||
|
|
@ -86,11 +92,11 @@ object SpriteToBufferedImage {
|
|||
|
||||
// Apply grayscale or tint if provided
|
||||
val finalColor = if (grayscale) {
|
||||
applyGrayscale(Color(color, true))
|
||||
applyGrayscale(Color(color, true), brightnessBoost)
|
||||
} else if (tint != null) {
|
||||
applyTint(Color(color, true), tint)
|
||||
applyTint(Color(color, true), tint, brightnessBoost)
|
||||
} else {
|
||||
Color(color, true)
|
||||
applyBrightness(Color(color, true), brightnessBoost)
|
||||
}
|
||||
|
||||
image.setRGB(x, y, finalColor.rgb)
|
||||
|
|
@ -107,11 +113,11 @@ object SpriteToBufferedImage {
|
|||
|
||||
// Apply grayscale or tint if provided
|
||||
val finalColor = if (grayscale) {
|
||||
applyGrayscale(Color(color, true))
|
||||
applyGrayscale(Color(color, true), brightnessBoost)
|
||||
} else if (tint != null) {
|
||||
applyTint(Color(color, true), tint)
|
||||
applyTint(Color(color, true), tint, brightnessBoost)
|
||||
} else {
|
||||
Color(color, true)
|
||||
applyBrightness(Color(color, true), brightnessBoost)
|
||||
}
|
||||
|
||||
image.setRGB(x, y, finalColor.rgb)
|
||||
|
|
@ -127,32 +133,44 @@ object SpriteToBufferedImage {
|
|||
* Applies a tint to a given color using the tint's alpha value to control the intensity.
|
||||
*
|
||||
* @param original The original color.
|
||||
* @param tint The tint color to be applied, with alpha controlling the intensity.
|
||||
* @param tint The tint color to be applied.
|
||||
* @param brightnessBoost A multiplier to boost the brightness of the image.
|
||||
* @return The tinted color.
|
||||
*/
|
||||
fun applyTint(original: Color, tint: Color): Color {
|
||||
val alpha = tint.alpha / 255.0 // Normalize alpha to range [0, 1]
|
||||
val invAlpha = 1.0 - alpha
|
||||
|
||||
// Blend the tint with the original color based on the alpha
|
||||
val r = (original.red * invAlpha + tint.red * alpha).toInt().coerceIn(0, 255)
|
||||
val g = (original.green * invAlpha + tint.green * alpha).toInt().coerceIn(0, 255)
|
||||
val b = (original.blue * invAlpha + tint.blue * alpha).toInt().coerceIn(0, 255)
|
||||
fun applyTint(original: Color, tint: Color, brightnessBoost: Float): Color {
|
||||
val boostedColor = applyBrightness(original, brightnessBoost)
|
||||
val r = (boostedColor.red * tint.red / 255).coerceIn(0, 255)
|
||||
val g = (boostedColor.green * tint.green / 255).coerceIn(0, 255)
|
||||
val b = (boostedColor.blue * tint.blue / 255).coerceIn(0, 255)
|
||||
return Color(r, g, b, boostedColor.alpha)
|
||||
}
|
||||
|
||||
/**
|
||||
* Boosts the brightness of a given color.
|
||||
*
|
||||
* @param original The original color.
|
||||
* @param factor The multiplier to boost the brightness.
|
||||
* @return The color with boosted brightness.
|
||||
*/
|
||||
fun applyBrightness(original: Color, factor: Float): Color {
|
||||
val r = (original.red * factor).coerceIn(0.0f, 255.0f).toInt()
|
||||
val g = (original.green * factor).coerceIn(0.0f, 255.0f).toInt()
|
||||
val b = (original.blue * factor).coerceIn(0.0f, 255.0f).toInt()
|
||||
return Color(r, g, b, original.alpha)
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Converts a color to grayscale.
|
||||
* Converts a color to grayscale and applies a brightness boost.
|
||||
*
|
||||
* @param original The original color.
|
||||
* @return The grayscale version of the color.
|
||||
* @param brightnessBoost A multiplier to boost the brightness.
|
||||
* @return The grayscale version of the color with boosted brightness.
|
||||
*/
|
||||
fun applyGrayscale(original: Color): Color {
|
||||
fun applyGrayscale(original: Color, brightnessBoost: Float): Color {
|
||||
// Calculate the grayscale value using the luminosity method
|
||||
val grayValue = (0.3 * original.red + 0.59 * original.green + 0.11 * original.blue).toInt()
|
||||
return Color(grayValue, grayValue, grayValue, original.alpha)
|
||||
val boostedGray = (grayValue * brightnessBoost).coerceIn(0.0f, 255.0f).toInt()
|
||||
return Color(boostedGray, boostedGray, boostedGray, original.alpha)
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -161,14 +179,20 @@ object SpriteToBufferedImage {
|
|||
* @param sprite The sprite object to be converted.
|
||||
* @param tint An optional Color to tint the image.
|
||||
* @param grayscale If true, converts the image to grayscale.
|
||||
* @param brightnessBoost A multiplier to boost the brightness of the image.
|
||||
* @return The BufferedImage created from the sprite or a default image if unsupported.
|
||||
*/
|
||||
fun getBufferedImageFromSprite(sprite: Any?, tint: Color? = null, grayscale: Boolean = false): BufferedImage {
|
||||
fun getBufferedImageFromSprite(
|
||||
sprite: Any?,
|
||||
tint: Color? = null,
|
||||
grayscale: Boolean = false,
|
||||
brightnessBoost: Float = 1.0f
|
||||
): BufferedImage {
|
||||
return when (sprite) {
|
||||
is SoftwareSprite -> convertToBufferedImage(adaptSoftwareSprite(sprite), tint, grayscale)
|
||||
is SoftwareIndexedSprite -> convertToBufferedImage(adaptSoftwareIndexedSprite(sprite), tint, grayscale)
|
||||
is GlSprite -> convertToBufferedImage(adaptGlSprite(sprite), tint, grayscale)
|
||||
is GlIndexedSprite -> convertToBufferedImage(adaptGlIndexedSprite(sprite), tint, grayscale)
|
||||
is SoftwareSprite -> convertToBufferedImage(adaptSoftwareSprite(sprite), tint, grayscale, brightnessBoost)
|
||||
is SoftwareIndexedSprite -> convertToBufferedImage(adaptSoftwareIndexedSprite(sprite), tint, grayscale, brightnessBoost)
|
||||
is GlSprite -> convertToBufferedImage(adaptGlSprite(sprite), tint, grayscale, brightnessBoost)
|
||||
is GlIndexedSprite -> convertToBufferedImage(adaptGlIndexedSprite(sprite), tint, grayscale, brightnessBoost)
|
||||
else -> BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB) // Default empty image for unsupported types
|
||||
}
|
||||
}
|
||||
|
|
|
|||
94
plugin-playground/src/main/kotlin/KondoKit/Themes.kt
Normal file
94
plugin-playground/src/main/kotlin/KondoKit/Themes.kt
Normal file
|
|
@ -0,0 +1,94 @@
|
|||
package KondoKit
|
||||
|
||||
import java.awt.Color
|
||||
|
||||
object Themes {
|
||||
enum class ThemeType {
|
||||
RUNELITE,
|
||||
DARKER_RUNELITE,
|
||||
SARADOMIN,
|
||||
ORION,
|
||||
}
|
||||
|
||||
fun getTheme(themeType: ThemeType): Theme {
|
||||
return when (themeType) {
|
||||
ThemeType.RUNELITE -> Theme(
|
||||
widgetColor = Color(30, 30, 30),
|
||||
titleBarColor = Color(21, 21, 21),
|
||||
viewBackgroundColor = Color(40, 40, 40),
|
||||
primaryColor = Color(165, 165, 165),
|
||||
secondaryColor = Color(255, 255, 255),
|
||||
popupBackground = Color(45, 45, 45),
|
||||
popupForeground = Color(220, 220, 220),
|
||||
tooltipBackground = Color(50, 50, 50),
|
||||
scrollBarColor = Color(64, 64, 64),
|
||||
progressBarFill = Color(61, 56, 49),
|
||||
navTint = null,
|
||||
navGreyScale = false,
|
||||
boost = 1f
|
||||
)
|
||||
ThemeType.DARKER_RUNELITE -> Theme(
|
||||
widgetColor = Color(15, 15, 15),
|
||||
titleBarColor = Color(10, 10, 10),
|
||||
viewBackgroundColor = Color(20, 20, 20),
|
||||
primaryColor = Color(140, 140, 140),
|
||||
secondaryColor = Color(210, 210, 210),
|
||||
popupBackground = Color(25, 25, 25),
|
||||
popupForeground = Color(200, 200, 200),
|
||||
tooltipBackground = Color(30, 30, 30),
|
||||
scrollBarColor = Color(40, 40, 40),
|
||||
progressBarFill = Color(45, 40, 35),
|
||||
navTint = null,
|
||||
navGreyScale = false,
|
||||
boost = 0.8f
|
||||
)
|
||||
ThemeType.ORION -> Theme(
|
||||
widgetColor = Color(50, 50, 50),
|
||||
titleBarColor = Color(35, 35, 35),
|
||||
viewBackgroundColor = Color(60, 60, 60),
|
||||
primaryColor = Color(180, 180, 180),
|
||||
secondaryColor = Color(210, 210, 210),
|
||||
popupBackground = Color(45, 45, 45),
|
||||
popupForeground = Color(230, 230, 230),
|
||||
tooltipBackground = Color(55, 55, 55),
|
||||
scrollBarColor = Color(75, 75, 75),
|
||||
progressBarFill = Color(100, 100, 100),
|
||||
navTint = null,
|
||||
navGreyScale = true,
|
||||
boost = 1.3f
|
||||
)
|
||||
ThemeType.SARADOMIN -> Theme(
|
||||
widgetColor = Color(62, 53, 41),
|
||||
titleBarColor = Color(111, 93, 69).darker(),
|
||||
viewBackgroundColor = Color(111, 93, 69),
|
||||
primaryColor = Color(180, 150, 120),
|
||||
secondaryColor = Color(230, 210, 190),
|
||||
popupBackground = Color(70, 56, 42),
|
||||
popupForeground = Color(220, 200, 180),
|
||||
tooltipBackground = Color(80, 65, 50),
|
||||
scrollBarColor = Color(100, 85, 70),
|
||||
progressBarFill = Color(130, 110, 90),
|
||||
navTint = null,
|
||||
navGreyScale = false,
|
||||
boost = 1f
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
data class Theme(
|
||||
val widgetColor: Color,
|
||||
val titleBarColor: Color,
|
||||
val viewBackgroundColor: Color,
|
||||
val primaryColor: Color,
|
||||
val secondaryColor: Color,
|
||||
val popupBackground: Color,
|
||||
val popupForeground: Color,
|
||||
val tooltipBackground: Color,
|
||||
val scrollBarColor: Color,
|
||||
val progressBarFill: Color,
|
||||
val navTint: Color?,
|
||||
val navGreyScale: Boolean,
|
||||
val boost: Float
|
||||
)
|
||||
}
|
||||
|
|
@ -5,7 +5,6 @@ import KondoKit.Helpers.formatHtmlLabelText
|
|||
import KondoKit.Helpers.formatNumber
|
||||
import KondoKit.Helpers.getSpriteId
|
||||
import KondoKit.Helpers.showAlert
|
||||
import KondoKit.Helpers.showToast
|
||||
import KondoKit.HiscoresView.createHiscoreSearchView
|
||||
import KondoKit.HiscoresView.hiScoreView
|
||||
import KondoKit.LootTrackerView.BAG_ICON
|
||||
|
|
@ -18,6 +17,9 @@ import KondoKit.ReflectiveEditorView.addPlugins
|
|||
import KondoKit.ReflectiveEditorView.createReflectiveEditorView
|
||||
import KondoKit.ReflectiveEditorView.reflectiveEditorView
|
||||
import KondoKit.SpriteToBufferedImage.getBufferedImageFromSprite
|
||||
import KondoKit.Themes.Theme
|
||||
import KondoKit.Themes.ThemeType
|
||||
import KondoKit.Themes.getTheme
|
||||
import KondoKit.XPTrackerView.createXPTrackerView
|
||||
import KondoKit.XPTrackerView.createXPWidget
|
||||
import KondoKit.XPTrackerView.initialXP
|
||||
|
|
@ -28,7 +30,6 @@ import KondoKit.XPTrackerView.wrappedWidget
|
|||
import KondoKit.XPTrackerView.xpTrackerView
|
||||
import KondoKit.XPTrackerView.xpWidgets
|
||||
import KondoKit.plugin.StateManager.focusedView
|
||||
import com.sun.org.apache.xpath.internal.operations.Bool
|
||||
import plugin.Plugin
|
||||
import plugin.api.*
|
||||
import plugin.api.API.*
|
||||
|
|
@ -70,6 +71,7 @@ class plugin : Plugin() {
|
|||
var PROGRESS_BAR_FILL = Color(61, 56, 49)
|
||||
var NAV_TINT: Color? = null
|
||||
var NAV_GREYSCALE = false
|
||||
var BOOST = 1f
|
||||
|
||||
var appliedTheme = ThemeType.RUNELITE
|
||||
|
||||
|
|
@ -105,10 +107,10 @@ class plugin : Plugin() {
|
|||
private var pluginsReloaded = false
|
||||
private var loginScreen = 160
|
||||
private var lastLogin = ""
|
||||
private var initialized = false;
|
||||
private var initialized = false
|
||||
private var lastClickTime = 0L
|
||||
private var lastUIOffset = 0
|
||||
private const val HIDDEN_VIEW = "HIDDEN";
|
||||
private const val HIDDEN_VIEW = "HIDDEN"
|
||||
private val drawActions = mutableListOf<() -> Unit>()
|
||||
|
||||
fun registerDrawAction(action: () -> Unit) {
|
||||
|
|
@ -123,19 +125,19 @@ class plugin : Plugin() {
|
|||
try{
|
||||
for (i in 0 until 24) {
|
||||
if(!js5Archive8.isFileReady(getSpriteId(i))){
|
||||
return false;
|
||||
return false
|
||||
}
|
||||
}
|
||||
val otherIcons = arrayOf(LVL_ICON, MAG_SPRITE, LOOT_ICON, WRENCH_ICON, COMBAT_LVL_SPRITE, BAG_ICON);
|
||||
val otherIcons = arrayOf(LVL_ICON, MAG_SPRITE, LOOT_ICON, WRENCH_ICON, COMBAT_LVL_SPRITE, BAG_ICON)
|
||||
for (icon in otherIcons) {
|
||||
if(!js5Archive8.isFileReady(icon)){
|
||||
return false;
|
||||
return false
|
||||
}
|
||||
}
|
||||
} catch (e : Exception){
|
||||
return false;
|
||||
return false
|
||||
}
|
||||
return true;
|
||||
return true
|
||||
}
|
||||
|
||||
override fun OnLogin() {
|
||||
|
|
@ -149,9 +151,9 @@ class plugin : Plugin() {
|
|||
|
||||
override fun Init() {
|
||||
// Disable Font AA
|
||||
System.setProperty("sun.java2d.opengl", "false");
|
||||
System.setProperty("awt.useSystemAAFontSettings", "off");
|
||||
System.setProperty("swing.aatext", "false");
|
||||
System.setProperty("sun.java2d.opengl", "false")
|
||||
System.setProperty("awt.useSystemAAFontSettings", "off")
|
||||
System.setProperty("swing.aatext", "false")
|
||||
}
|
||||
|
||||
private fun UpdateDisplaySettings() {
|
||||
|
|
@ -465,7 +467,7 @@ class plugin : Plugin() {
|
|||
}
|
||||
|
||||
private fun createNavButton(spriteId: Int, viewName: String): JPanel {
|
||||
val bufferedImageSprite = getBufferedImageFromSprite(GetSprite(spriteId), NAV_TINT, NAV_GREYSCALE)
|
||||
val bufferedImageSprite = getBufferedImageFromSprite(GetSprite(spriteId), NAV_TINT, NAV_GREYSCALE, BOOST)
|
||||
val buttonSize = Dimension(NAVBAR_WIDTH, 32)
|
||||
val imageSize = Dimension((bufferedImageSprite.width / 1.2f).toInt(), (bufferedImageSprite.height / 1.2f).toInt())
|
||||
val cooldownDuration = 100L
|
||||
|
|
@ -581,89 +583,6 @@ class plugin : Plugin() {
|
|||
PROGRESS_BAR_FILL = theme.progressBarFill
|
||||
NAV_TINT = theme.navTint
|
||||
NAV_GREYSCALE = theme.navGreyScale
|
||||
BOOST = theme.boost
|
||||
}
|
||||
|
||||
enum class ThemeType {
|
||||
RUNELITE,
|
||||
DARKER_RUNELITE,
|
||||
SARADOMIN,
|
||||
ORION,
|
||||
}
|
||||
|
||||
fun getTheme(themeType: ThemeType): Theme {
|
||||
return when (themeType) {
|
||||
ThemeType.RUNELITE -> Theme(
|
||||
widgetColor = Color(30, 30, 30),
|
||||
titleBarColor = Color(21, 21, 21),
|
||||
viewBackgroundColor = Color(40, 40, 40),
|
||||
primaryColor = Color(165, 165, 165),
|
||||
secondaryColor = Color(255, 255, 255),
|
||||
popupBackground = Color(45, 45, 45),
|
||||
popupForeground = Color(220, 220, 220),
|
||||
tooltipBackground = Color(50, 50, 50),
|
||||
scrollBarColor = Color(64, 64, 64),
|
||||
progressBarFill = Color(61, 56, 49),
|
||||
navTint = null,
|
||||
navGreyScale = false
|
||||
)
|
||||
ThemeType.DARKER_RUNELITE -> Theme(
|
||||
widgetColor = Color(15, 15, 15), // Darker widget backgrounds
|
||||
titleBarColor = Color(10, 10, 10), // Even darker title bar
|
||||
viewBackgroundColor = Color(20, 20, 20), // Very dark background for the view
|
||||
primaryColor = Color(140, 140, 140), // Darker shade for primary text
|
||||
secondaryColor = Color(210, 210, 210), // Slightly muted white for secondary text
|
||||
popupBackground = Color(25, 25, 25), // Very dark popup backgrounds
|
||||
popupForeground = Color(200, 200, 200), // Slightly muted light gray for popup text
|
||||
tooltipBackground = Color(30, 30, 30), // Darker tooltips background
|
||||
scrollBarColor = Color(40, 40, 40), // Darker scroll bar
|
||||
progressBarFill = Color(45, 40, 35), // Darker progress bar fill
|
||||
navTint = null, //Color(20, 20, 20, 60), // No specific tint applied
|
||||
navGreyScale = false // Navigation retains color (if applicable)
|
||||
)
|
||||
ThemeType.ORION -> Theme(
|
||||
widgetColor = Color(50, 50, 50), // Darker gray for widget backgrounds
|
||||
titleBarColor = Color(35, 35, 35), // Very dark gray for the title bar
|
||||
viewBackgroundColor = Color(60, 60, 60), // Medium-dark gray for view background
|
||||
primaryColor = Color(180, 180, 180), // Lighter gray for primary text or highlights
|
||||
secondaryColor = Color(210, 210, 210), // Light gray for secondary text
|
||||
popupBackground = Color(45, 45, 45), // Dark gray for popup backgrounds
|
||||
popupForeground = Color(230, 230, 230), // Light gray for popup text
|
||||
tooltipBackground = Color(55, 55, 55), // Slightly darker gray for tooltips
|
||||
scrollBarColor = Color(75, 75, 75), // Dark gray for scroll bars
|
||||
progressBarFill = Color(100, 100, 100), // Medium gray for progress bar fill
|
||||
navTint = null,
|
||||
navGreyScale = true
|
||||
)
|
||||
ThemeType.SARADOMIN -> Theme(
|
||||
widgetColor = Color(75, 60, 45),
|
||||
titleBarColor = Color(60, 48, 36),
|
||||
viewBackgroundColor = Color(95, 76, 58),
|
||||
primaryColor = Color(180, 150, 120),
|
||||
secondaryColor = Color(230, 210, 190),
|
||||
popupBackground = Color(70, 56, 42),
|
||||
popupForeground = Color(220, 200, 180),
|
||||
tooltipBackground = Color(80, 65, 50),
|
||||
scrollBarColor = Color(100, 85, 70),
|
||||
progressBarFill = Color(130, 110, 90),
|
||||
navTint = null,
|
||||
navGreyScale = false
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
data class Theme(
|
||||
val widgetColor: Color,
|
||||
val titleBarColor: Color,
|
||||
val viewBackgroundColor: Color,
|
||||
val primaryColor: Color,
|
||||
val secondaryColor: Color,
|
||||
val popupBackground: Color,
|
||||
val popupForeground: Color,
|
||||
val tooltipBackground: Color,
|
||||
val scrollBarColor: Color,
|
||||
val progressBarFill: Color,
|
||||
val navTint: Color?,
|
||||
val navGreyScale: Boolean
|
||||
)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue