Makepad Code (editor layout, selection, sidebar, early yield), the EN/ZH Translator with voice, Weather with a generated offline forecast, Amp playing its offline library, and fixes across the other apps and examples. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
214 lines
11 KiB
Text
214 lines
11 KiB
Text
// Moulded Plastic — an 80s tape deck / boombox: a warm grey moulded ABS
|
|
// front with a fine spark-eroded texture, cream piano-key transport caps
|
|
// with bold dark glyphs, a charcoal moulded screen surround with a thin
|
|
// chrome trim, smoky display windows, red and green LEDs.
|
|
//
|
|
// Assignments only, over the base templates in `src/hw.rs`
|
|
// (see local/agent_state/skeuomorph/music/STYLE_GUIDE.md).
|
|
use mod.prelude.widgets_internal.*
|
|
|
|
// ---- palette: the lists, the spectrum, the bars ----
|
|
mod.widgets.hw_palette.screen_bg = #x171816
|
|
mod.widgets.hw_palette.screen_text = #xe9e6dc
|
|
mod.widgets.hw_palette.screen_muted = #x9a968a
|
|
mod.widgets.hw_palette.accent = #x46e07a
|
|
|
|
// ---- the front: warm grey ABS, spark-eroded texture ----
|
|
mod.widgets.HwChassis.draw_bg.ground = #xa7a193
|
|
mod.widgets.HwChassis.draw_bg.light_ink = vec4(1.0, 0.98, 0.94, 1.0)
|
|
mod.widgets.HwChassis.draw_bg.shadow_ink = vec4(0.22, 0.21, 0.19, 1.0)
|
|
mod.widgets.HwChassis.draw_bg.surface = fn(p: vec2, base: vec3) -> vec3 {
|
|
// Spark-eroded stipple plus fine moulded grip ribs.
|
|
let w = self.world.xy
|
|
let stip = self.hw_noise(w * 0.9) * 0.6 + self.hw_hash(floor(w * 2.0)) * 0.4
|
|
var col = base * (1.0 + (stip - 0.5) * 0.08)
|
|
let rib = 0.5 + 0.5 * sin(w.y * 2.0944)
|
|
col = col * (1.0 + (rib - 0.5) * 0.09)
|
|
// The era's printed stripe decal along the foot of the front.
|
|
let y = self.rect_size.y - p.y
|
|
let s1 = smoothstep(4.0, 4.6, y) * (1.0 - smoothstep(6.4, 7.0, y))
|
|
let s2 = smoothstep(7.6, 8.2, y) * (1.0 - smoothstep(10.0, 10.6, y))
|
|
let s3 = smoothstep(11.2, 11.8, y) * (1.0 - smoothstep(13.6, 14.2, y))
|
|
col = mix(col, vec3(0.80, 0.18, 0.11), s1)
|
|
col = mix(col, vec3(0.93, 0.50, 0.12), s2)
|
|
col = mix(col, vec3(0.95, 0.76, 0.22), s3)
|
|
return col
|
|
}
|
|
mod.widgets.HwChassis.draw_bg.glow_ink = vec4(0.30, 0.95, 0.50, 1.0)
|
|
mod.widgets.HwChassis.draw_bg.spill = vec2(2.0, 0.6)
|
|
mod.widgets.Window.pass.clear_color = #xa7a193
|
|
|
|
// Raised plates: cream moulded mouldings, soft round edges.
|
|
mod.widgets.HwPlate.draw_bg.ground = #xe2d9c2
|
|
mod.widgets.HwPlate.draw_bg.light_ink = vec4(1.0, 0.99, 0.95, 1.0)
|
|
mod.widgets.HwPlate.draw_bg.shadow_ink = vec4(0.25, 0.23, 0.20, 1.0)
|
|
mod.widgets.HwPlate.draw_bg.pattern = vec4(4.0, 0.30, 0.08, 0.0)
|
|
mod.widgets.HwPlate.draw_bg.relief = vec4(5.0, 1.0, 2.5, 0.25)
|
|
mod.widgets.HwPlate.draw_bg.finish = vec4(0.6, 0.3, 0.25, 0.8)
|
|
mod.widgets.HwPlate.draw_bg.shadow = vec4(0.55, 10.0, 1.0, 0.5)
|
|
mod.widgets.HwPlate.draw_bg.glow_ink = vec4(0.30, 0.95, 0.50, 1.0)
|
|
mod.widgets.HwPlate.draw_bg.spill = vec2(2.4, 0.55)
|
|
mod.widgets.HwPlate.radius = 16
|
|
|
|
// Recessed panels: a darker grey moulding stepped into the front.
|
|
mod.widgets.HwPanel.draw_bg.ground = #x5b5852
|
|
mod.widgets.HwPanel.draw_bg.light_ink = vec4(0.95, 0.93, 0.88, 1.0)
|
|
mod.widgets.HwPanel.draw_bg.shadow_ink = vec4(0.10, 0.10, 0.09, 1.0)
|
|
mod.widgets.HwPanel.draw_bg.pattern = vec4(4.0, 0.30, 0.10, 0.0)
|
|
mod.widgets.HwPanel.draw_bg.relief = vec4(4.0, 1.0, 2.0, 0.2)
|
|
mod.widgets.HwPanel.draw_bg.inner = vec4(0.75, 10.0, 0.0, 0.55)
|
|
mod.widgets.HwPanel.draw_bg.glow_ink = vec4(0.30, 0.95, 0.50, 1.0)
|
|
mod.widgets.HwPanel.draw_bg.spill = vec2(1.6, 0.5)
|
|
mod.widgets.HwPanel.radius = 14
|
|
|
|
// The screen's surround: charcoal plastic, a chrome trim on the lip.
|
|
mod.widgets.HwBezel.draw_bg.ground = #x2a2927
|
|
mod.widgets.HwBezel.draw_bg.light_ink = vec4(0.92, 0.93, 0.95, 1.0)
|
|
mod.widgets.HwBezel.draw_bg.shadow_ink = vec4(0.0, 0.0, 0.0, 1.0)
|
|
mod.widgets.HwBezel.draw_bg.surface = fn(p: vec2, base: vec3) -> vec3 {
|
|
// Charcoal stipple, a bright chrome trim band round the lip.
|
|
let w = self.world.xy
|
|
let stip = self.hw_noise(w * 0.9) * 0.6 + self.hw_hash(floor(w * 2.0)) * 0.4
|
|
var col = base * (1.0 + (stip - 0.5) * 0.12)
|
|
let e = min(min(p.x, p.y), min(self.rect_size.x - p.x, self.rect_size.y - p.y)) - self.inset
|
|
let band = smoothstep(0.0, 0.8, e) * (1.0 - smoothstep(4.2, 5.2, e))
|
|
let v = p.y / max(self.rect_size.y, 1.0)
|
|
let chrome = mix(vec3(0.93, 0.94, 0.95), vec3(0.52, 0.53, 0.55), v) + vec3(0.25, 0.25, 0.25) * (1.0 - smoothstep(0.0, 1.8, abs(e - 1.6)))
|
|
col = mix(col, chrome, band)
|
|
return col
|
|
}
|
|
mod.widgets.HwBezel.draw_bg.relief = vec4(3.0, 1.0, 2.0, 0.9)
|
|
mod.widgets.HwBezel.draw_bg.inner = vec4(0.95, 12.0, 0.0, 0.55)
|
|
mod.widgets.HwBezel.draw_bg.spill = vec2(1.3, 0.4)
|
|
|
|
// The glass: smoked acrylic, a broad soft reflection.
|
|
mod.widgets.HwGlass.draw_bg.glass = vec4(0.0, 0.10, 0.35, 0.0)
|
|
mod.widgets.HwGlass.draw_bg.tint = vec4(1.0, 0.97, 0.92, 0.0)
|
|
|
|
// ---- keys: chunky cream piano keys, bold dark glyphs ----
|
|
mod.widgets.HwKey.draw_bg.ground = #xefe9da
|
|
mod.widgets.HwKey.draw_bg.light_ink = vec4(1.0, 1.0, 0.97, 1.0)
|
|
mod.widgets.HwKey.draw_bg.shadow_ink = vec4(0.28, 0.25, 0.21, 1.0)
|
|
mod.widgets.HwKey.draw_bg.pattern = vec4(5.0, 0.6, 0.05, 0.0)
|
|
mod.widgets.HwKey.draw_bg.sheen = vec4(0.06, 0.45, 0.25, 0.0)
|
|
mod.widgets.HwKey.draw_bg.relief = vec4(4.5, 1.0, 3.0, 0.35)
|
|
mod.widgets.HwKey.draw_bg.shadow = vec4(0.65, 7.0, 1.0, 0.65)
|
|
mod.widgets.HwKey.draw_bg.spill = vec2(2.8, 0.5)
|
|
mod.widgets.HwKey.radius = 5
|
|
mod.widgets.HwKey.depth = 4.5
|
|
mod.widgets.HwKey.press = -4.5
|
|
mod.widgets.HwKeyButton.draw_text.color = #x2b2824
|
|
mod.widgets.HwKeyButton.draw_text.color_hover = #x000000
|
|
mod.widgets.HwKeyButton.draw_text.color_down = #x000000
|
|
mod.widgets.HwKeyText.draw_text.color = #x2b2824
|
|
mod.widgets.HwKeyText.draw_text.color_hover = #x000000
|
|
mod.widgets.HwKeyText.draw_text.color_down = #x000000
|
|
|
|
// ---- lights: red LEDs under the keys ----
|
|
mod.widgets.HwDash.emissive = vec4(1.0, 0.16, 0.10, 8.0)
|
|
mod.widgets.HwDash.draw_bg.glow_ink = vec4(1.0, 0.18, 0.12, 1.0)
|
|
mod.widgets.HwDash.draw_bg.ground = #x4a1c17
|
|
mod.widgets.HwLed.emissive = vec4(1.0, 0.16, 0.10, 3.5)
|
|
mod.widgets.HwLed.draw_bg.glow_ink = vec4(1.0, 0.18, 0.12, 1.0)
|
|
|
|
// ---- knob: a black ribbed plastic skirt, a chrome cap ----
|
|
mod.widgets.HwKnobFace.draw_bg.ground = #x2a2927
|
|
mod.widgets.HwKnobFace.draw_bg.light_ink = vec4(0.95, 0.95, 0.95, 1.0)
|
|
mod.widgets.HwKnobFace.draw_bg.shadow_ink = vec4(0.05, 0.05, 0.05, 1.0)
|
|
mod.widgets.HwKnobFace.draw_bg.knob = vec4(1.0, 0.62, 28.0, 0.55)
|
|
mod.widgets.HwKnobFace.draw_bg.cap_ink = vec4(0.80, 0.81, 0.83, 1.0)
|
|
mod.widgets.HwKnobFace.draw_bg.ptr_ink = vec4(1.0, 0.25, 0.15, 1.0)
|
|
mod.widgets.HwKnobFace.draw_bg.ring = vec4(11.0, 1.30, 2.6, 2.35619)
|
|
mod.widgets.HwKnobFace.draw_bg.led_off = vec4(0.22, 0.20, 0.17, 1.0)
|
|
mod.widgets.HwKnobFace.draw_bg.glow_ink = vec4(0.30, 1.0, 0.45, 1.0)
|
|
mod.widgets.HwKnobFace.draw_bg.shadow = vec4(0.7, 9.0, 1.0, 0.65)
|
|
mod.widgets.HwKnobFace.emissive = vec4(0.30, 1.0, 0.45, 0.6)
|
|
mod.widgets.HwKnobFace.draw_bg.spill = vec2(0.35, 0.5)
|
|
|
|
// ---- meter: green LEDs going red at the top ----
|
|
mod.widgets.HwMeterFace.draw_bg.ground = #x141513
|
|
mod.widgets.HwMeterFace.draw_bg.meter = vec4(0.0, 14.0, 1.0, 0.8)
|
|
mod.widgets.HwMeterFace.draw_bg.glow_ink = vec4(0.30, 1.0, 0.42, 1.0)
|
|
mod.widgets.HwMeterFace.draw_bg.hot_ink = vec4(1.0, 0.18, 0.10, 1.0)
|
|
mod.widgets.HwMeterFace.draw_bg.led_off = vec4(0.10, 0.12, 0.09, 1.0)
|
|
mod.widgets.HwMeterFace.emissive = vec4(0.30, 1.0, 0.42, 0.5)
|
|
|
|
// ---- type printed on the front: bold, dark ----
|
|
mod.widgets.HwCaption.draw_text.color = #x2e2b26
|
|
mod.widgets.HwTitle.draw_text.color = #x1e1c19
|
|
mod.widgets.HwText.draw_text.color = #x3a3731
|
|
mod.widgets.HwPanelTitle.draw_text.color = #xf1ece0
|
|
mod.widgets.HwPanelText.draw_text.color = #xd0cabb
|
|
mod.widgets.HwNavButton.draw_text.color = #xefeadf
|
|
mod.widgets.HwDisplayText.draw_text.color = #x7cf29e
|
|
mod.widgets.HwDisplay.draw_bg.ground = #x161715
|
|
mod.widgets.HwDisplay.draw_bg.light_ink = vec4(0.85, 0.85, 0.85, 1.0)
|
|
mod.widgets.HwDisplay.draw_bg.shadow_ink = vec4(0.0, 0.0, 0.0, 1.0)
|
|
mod.widgets.HwDisplay.draw_bg.inner = vec4(0.95, 9.0, 0.0, 0.55)
|
|
mod.widgets.HwSplitter.draw_bg.groove = vec4(0.0, 0.0, 0.0, 0.35)
|
|
mod.widgets.HwSplitter.draw_bg.glint = vec4(1.0, 0.98, 0.92, 0.25)
|
|
// Bold printed type.
|
|
mod.widgets.HwCaption.draw_text.text_style = theme.font_bold{font_size: 8.5}
|
|
mod.widgets.HwKeyButton.draw_text.text_style = theme.font_icons{font_size: 16.0}
|
|
mod.widgets.HwKeyText.draw_text.text_style = theme.font_bold{font_size: 9.5}
|
|
|
|
// Plates: stipple and the era's printed stripe decal along the foot.
|
|
mod.widgets.HwPlate.draw_bg.surface = fn(p: vec2, base: vec3) -> vec3 {
|
|
let w = self.world.xy
|
|
let stip = self.hw_noise(w * 0.9) * 0.6 + self.hw_hash(floor(w * 2.0)) * 0.4
|
|
var col = base * (1.0 + (stip - 0.5) * 0.06)
|
|
// A thin chrome pinstripe moulded in just inside the rounded edge.
|
|
let e = min(min(p.x, p.y), min(self.rect_size.x - p.x, self.rect_size.y - p.y)) - self.inset
|
|
let pin = smoothstep(6.2, 6.8, e) * (1.0 - smoothstep(8.0, 8.6, e))
|
|
let v = p.y / max(self.rect_size.y, 1.0)
|
|
col = mix(col, mix(vec3(0.95, 0.96, 0.97), vec3(0.55, 0.56, 0.58), v), pin * 0.9)
|
|
return col
|
|
}
|
|
// Choosers and search: smoked acrylic wells with a warm rim.
|
|
mod.widgets.HwDropDown.draw_bg.well = vec4(0.10, 0.095, 0.085, 1.0)
|
|
mod.widgets.HwDropDown.draw_bg.rim = vec4(1.0, 0.95, 0.85, 0.22)
|
|
mod.widgets.HwDropDown.draw_bg.arrow = vec4(0.49, 0.95, 0.62, 1.0)
|
|
mod.widgets.HwDropDown.draw_text.color = #xefeadf
|
|
mod.widgets.HwTextInput.draw_bg.well = vec4(0.10, 0.095, 0.085, 1.0)
|
|
mod.widgets.HwTextInput.draw_bg.rim = vec4(1.0, 0.95, 0.85, 0.22)
|
|
mod.widgets.HwTextInput.draw_text.color_empty = #xa8a293
|
|
|
|
// The picture lights the mouldings round it.
|
|
mod.widgets.HwSpectrum.light = 3.6
|
|
mod.widgets.HwMilk.light = 1.6
|
|
mod.widgets.HwMilk.light_knee = 1.0
|
|
// White flashes ease under a ceiling instead of washing the chrome lips.
|
|
mod.widgets.hw_palette.spill_knee = 1.1
|
|
// ---- transport: chunky 80s deck piano keys that drop and latch ----
|
|
mod.widgets.HwTransportKey.latch = 1.0
|
|
mod.widgets.HwTransportKey.press_secs = 0.07
|
|
mod.widgets.HwTransportKey.draw_bg.spill = vec2(0.9, 0.45)
|
|
mod.widgets.HwTransportKey.travel = 5.0
|
|
mod.widgets.HwTransportKey.inset = 3.0
|
|
mod.widgets.HwTransportKey.draw_bg.mech = vec4(1.0, 0.64, 0.0, 0.0)
|
|
mod.widgets.HwTransportKey.draw_bg.dimple = vec4(0.0, 3.0, 0.3, 0.1)
|
|
mod.widgets.HwTransportKey.draw_bg.housing_ink = vec4(0.10, 0.09, 0.08, 1.0)
|
|
mod.widgets.HwTransportKey.draw_bg.front_ink = vec4(0.80, 0.76, 0.67, 1.0)
|
|
|
|
// ---- the picture in this style's colours (THEME COLOURS key; on by default) ----
|
|
mod.widgets.hw_palette.map0 = #x1a1714
|
|
mod.widgets.hw_palette.map1 = #x7a6e60
|
|
mod.widgets.hw_palette.map2 = #xd9c9a8
|
|
mod.widgets.hw_palette.map3 = #xfff8e8
|
|
mod.widgets.hw_palette.map_strength = 0.55
|
|
mod.widgets.hw_palette.map_default = 1.0
|
|
// The screen filter with the THEME COLOURS key: CRT: a bulging tube, scanlines, an RGB mask, bloom.
|
|
mod.widgets.hw_palette.screen_filter = 1.0
|
|
mod.widgets.hw_palette.screen_filter_strength = 0.8
|
|
mod.widgets.hw_palette.screen_cell = 3.0
|
|
mod.widgets.hw_palette.screen_curve = 0.08
|
|
true
|
|
|
|
// ---- EQ (HwEqGraph: the graphic equalizer's era look, STYLE_GUIDE "Graphic EQ") ----
|
|
mod.widgets.HwEqGraph.draw_fader.fader = vec4(2.0, 0.56, 15.0, 5.0)
|
|
mod.widgets.HwEqGraph.draw_fader.cap_ink = vec4(0.58, 0.59, 0.56, 1.0)
|
|
mod.widgets.HwEqGraph.draw_fader.track_ink = vec4(0.02, 0.02, 0.02, 1.0)
|
|
mod.widgets.HwEqGraph.draw_curve.curve = vec4(0.0, 2.0, 7.0, 0.10)
|
|
mod.widgets.HwEqGraph.draw_grid.grid = vec4(0.0, 0.08, 0.28, 0.0)
|
|
mod.widgets.HwEqGraph.draw_spectrum.spectrum = vec4(0.20, 0.0, 0.3, 0.0)
|
|
true
|