forked from mia/Aegisub
Load the colors for the audio display scrollbar from the audio colorscheme
Originally committed to SVN as r5951.
This commit is contained in:
parent
fa15f0800e
commit
7bfdc78b72
2 changed files with 105 additions and 34 deletions
|
@ -54,6 +54,7 @@
|
||||||
#include "audio_renderer_waveform.h"
|
#include "audio_renderer_waveform.h"
|
||||||
#include "audio_timing.h"
|
#include "audio_timing.h"
|
||||||
#include "block_cache.h"
|
#include "block_cache.h"
|
||||||
|
#include "compat.h"
|
||||||
#include "include/aegisub/audio_provider.h"
|
#include "include/aegisub/audio_provider.h"
|
||||||
#include "include/aegisub/context.h"
|
#include "include/aegisub/context.h"
|
||||||
#include "include/aegisub/hotkey.h"
|
#include "include/aegisub/hotkey.h"
|
||||||
|
@ -62,6 +63,53 @@
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
#include "video_context.h"
|
#include "video_context.h"
|
||||||
|
|
||||||
|
/// @brief Colourscheme-based UI colour provider
|
||||||
|
///
|
||||||
|
/// This class provides UI colours corresponding to the supplied audio colour
|
||||||
|
/// scheme.
|
||||||
|
///
|
||||||
|
/// SetColourScheme must be called to set the active colour scheme before
|
||||||
|
/// colours can be retrieved
|
||||||
|
class UIColours {
|
||||||
|
wxColour light_colour; ///< Light unfocused colour from the colour scheme
|
||||||
|
wxColour dark_colour; ///< Dark unfocused colour from the colour scheme
|
||||||
|
wxColour sel_colour; ///< Selection unfocused colour from the colour scheme
|
||||||
|
wxColour light_focused_colour; ///< Light focused colour from the colour scheme
|
||||||
|
wxColour dark_focused_colour; ///< Dark focused colour from the colour scheme
|
||||||
|
wxColour sel_focused_colour; ///< Selection focused colour from the colour scheme
|
||||||
|
|
||||||
|
bool focused; ///< Use the focused colours?
|
||||||
|
public:
|
||||||
|
/// Constructor
|
||||||
|
UIColours() : focused(false) { }
|
||||||
|
|
||||||
|
/// Set the colour scheme to load colours from
|
||||||
|
/// @param name Name of the colour scheme
|
||||||
|
void SetColourScheme(std::string const& name)
|
||||||
|
{
|
||||||
|
std::string opt_prefix = "Colour/Schemes/" + name + "/UI/";
|
||||||
|
light_colour = lagi_wxColour(OPT_GET(opt_prefix + "Light")->GetColour());
|
||||||
|
dark_colour = lagi_wxColour(OPT_GET(opt_prefix + "Dark")->GetColour());
|
||||||
|
sel_colour = lagi_wxColour(OPT_GET(opt_prefix + "Selection")->GetColour());
|
||||||
|
|
||||||
|
opt_prefix = "Colour/Schemes/" + name + "/UI Focused/";
|
||||||
|
light_focused_colour = lagi_wxColour(OPT_GET(opt_prefix + "Light")->GetColour());
|
||||||
|
dark_focused_colour = lagi_wxColour(OPT_GET(opt_prefix + "Dark")->GetColour());
|
||||||
|
sel_focused_colour = lagi_wxColour(OPT_GET(opt_prefix + "Selection")->GetColour());
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Set whether to use the focused or unfocused colours
|
||||||
|
/// @param focused If true, focused colours will be returned
|
||||||
|
void SetFocused(bool focused) { this->focused = focused; }
|
||||||
|
|
||||||
|
/// Get the current Light colour
|
||||||
|
wxColour Light() const { return focused ? light_focused_colour : light_colour; }
|
||||||
|
/// Get the current Dark colour
|
||||||
|
wxColour Dark() const { return focused ? dark_focused_colour : dark_colour; }
|
||||||
|
/// Get the current Selection colour
|
||||||
|
wxColour Selection() const { return focused ? sel_focused_colour : sel_colour; }
|
||||||
|
};
|
||||||
|
|
||||||
class AudioDisplayScrollbar : public AudioDisplayInteractionObject {
|
class AudioDisplayScrollbar : public AudioDisplayInteractionObject {
|
||||||
static const int height = 10;
|
static const int height = 10;
|
||||||
static const int min_width = 10;
|
static const int min_width = 10;
|
||||||
|
@ -69,15 +117,18 @@ class AudioDisplayScrollbar : public AudioDisplayInteractionObject {
|
||||||
wxRect bounds;
|
wxRect bounds;
|
||||||
wxRect thumb;
|
wxRect thumb;
|
||||||
|
|
||||||
bool dragging; // user is dragging with the primary mouse button
|
bool dragging; ///< user is dragging with the primary mouse button
|
||||||
|
|
||||||
int data_length; // total amount of data in control
|
int data_length; ///< total amount of data in control
|
||||||
int page_length; // amount of data in one page
|
int page_length; ///< amount of data in one page
|
||||||
int position; // first item displayed
|
int position; ///< first item displayed
|
||||||
|
|
||||||
int sel_start; // first data item in selection
|
int sel_start; ///< first data item in selection
|
||||||
int sel_length; // number of data items in selection
|
int sel_length; ///< number of data items in selection
|
||||||
|
|
||||||
|
UIColours colours; ///< Colour provider
|
||||||
|
|
||||||
|
/// Containing display to send scroll events to
|
||||||
AudioDisplay *display;
|
AudioDisplay *display;
|
||||||
|
|
||||||
// Recalculate thumb bounds from position and length data
|
// Recalculate thumb bounds from position and length data
|
||||||
|
@ -90,19 +141,18 @@ class AudioDisplayScrollbar : public AudioDisplayInteractionObject {
|
||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
AudioDisplayScrollbar(AudioDisplay *display)
|
AudioDisplayScrollbar(AudioDisplay *display)
|
||||||
: dragging(false)
|
: dragging(false)
|
||||||
, data_length(1)
|
, data_length(1)
|
||||||
, page_length(1)
|
, page_length(1)
|
||||||
, position(0)
|
, position(0)
|
||||||
, sel_start(-1)
|
, sel_start(-1)
|
||||||
, sel_length(0)
|
, sel_length(0)
|
||||||
, display(display)
|
, display(display)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
// The audio display has changed size
|
/// The audio display has changed size
|
||||||
void SetDisplaySize(const wxSize &display_size)
|
void SetDisplaySize(const wxSize &display_size)
|
||||||
{
|
{
|
||||||
bounds.x = 0;
|
bounds.x = 0;
|
||||||
|
@ -114,9 +164,12 @@ public:
|
||||||
RecalculateThumb();
|
RecalculateThumb();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SetColourScheme(std::string const& name)
|
||||||
|
{
|
||||||
|
colours.SetColourScheme(name);
|
||||||
|
}
|
||||||
|
|
||||||
const wxRect & GetBounds() const { return bounds; }
|
const wxRect & GetBounds() const { return bounds; }
|
||||||
|
|
||||||
int GetPosition() const { return position; }
|
int GetPosition() const { return position; }
|
||||||
|
|
||||||
int SetPosition(int new_position)
|
int SetPosition(int new_position)
|
||||||
|
@ -170,18 +223,10 @@ public:
|
||||||
|
|
||||||
void Paint(wxDC &dc, bool has_focus)
|
void Paint(wxDC &dc, bool has_focus)
|
||||||
{
|
{
|
||||||
wxColour light(89, 145, 220);
|
colours.SetFocused(has_focus);
|
||||||
wxColour dark(8, 4, 13);
|
|
||||||
wxColour sel(65, 34, 103);
|
|
||||||
|
|
||||||
if (has_focus)
|
dc.SetPen(wxPen(colours.Light()));
|
||||||
{
|
dc.SetBrush(wxBrush(colours.Dark()));
|
||||||
light.Set(205, 240, 226);
|
|
||||||
sel.Set(82, 107, 213);
|
|
||||||
}
|
|
||||||
|
|
||||||
dc.SetPen(wxPen(light));
|
|
||||||
dc.SetBrush(wxBrush(dark));
|
|
||||||
dc.DrawRectangle(bounds);
|
dc.DrawRectangle(bounds);
|
||||||
|
|
||||||
if (sel_length > 0 && sel_start >= 0)
|
if (sel_length > 0 && sel_start >= 0)
|
||||||
|
@ -192,20 +237,21 @@ public:
|
||||||
r.width = sel_length * bounds.width / data_length;
|
r.width = sel_length * bounds.width / data_length;
|
||||||
r.height = bounds.height;
|
r.height = bounds.height;
|
||||||
|
|
||||||
dc.SetPen(wxPen(sel));
|
dc.SetPen(wxPen(colours.Selection()));
|
||||||
dc.SetBrush(wxBrush(sel));
|
dc.SetBrush(wxBrush(colours.Selection()));
|
||||||
dc.DrawRectangle(r);
|
dc.DrawRectangle(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
dc.SetPen(wxPen(light));
|
dc.SetPen(wxPen(colours.Light()));
|
||||||
dc.SetBrush(*wxTRANSPARENT_BRUSH);
|
dc.SetBrush(*wxTRANSPARENT_BRUSH);
|
||||||
dc.DrawRectangle(bounds);
|
dc.DrawRectangle(bounds);
|
||||||
|
|
||||||
dc.SetPen(wxPen(light));
|
dc.SetPen(wxPen(colours.Light()));
|
||||||
dc.SetBrush(wxBrush(light));
|
dc.SetBrush(wxBrush(colours.Light()));
|
||||||
dc.DrawRectangle(thumb);
|
dc.DrawRectangle(thumb);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const int AudioDisplayScrollbar::min_width;
|
const int AudioDisplayScrollbar::min_width;
|
||||||
|
|
||||||
|
|
||||||
|
@ -761,9 +807,12 @@ float AudioDisplay::GetAmplitudeScale() const
|
||||||
|
|
||||||
void AudioDisplay::ReloadRenderingSettings()
|
void AudioDisplay::ReloadRenderingSettings()
|
||||||
{
|
{
|
||||||
|
std::string colour_scheme_name;
|
||||||
|
|
||||||
if (OPT_GET("Audio/Spectrum")->GetBool())
|
if (OPT_GET("Audio/Spectrum")->GetBool())
|
||||||
{
|
{
|
||||||
AudioSpectrumRenderer *audio_spectrum_renderer = new AudioSpectrumRenderer(OPT_GET("Colour/Audio Display/Spectrum")->GetString());
|
colour_scheme_name = OPT_GET("Colour/Audio Display/Spectrum")->GetString();
|
||||||
|
AudioSpectrumRenderer *audio_spectrum_renderer = new AudioSpectrumRenderer(colour_scheme_name);
|
||||||
|
|
||||||
int64_t spectrum_quality = OPT_GET("Audio/Renderer/Spectrum/Quality")->GetInt();
|
int64_t spectrum_quality = OPT_GET("Audio/Renderer/Spectrum/Quality")->GetInt();
|
||||||
#ifdef WITH_FFTW
|
#ifdef WITH_FFTW
|
||||||
|
@ -784,10 +833,12 @@ void AudioDisplay::ReloadRenderingSettings()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
audio_renderer_provider.reset(new AudioWaveformRenderer(OPT_GET("Colour/Audio Display/Waveform")->GetString()));
|
colour_scheme_name = OPT_GET("Colour/Audio Display/Waveform")->GetString();
|
||||||
|
audio_renderer_provider.reset(new AudioWaveformRenderer(colour_scheme_name));
|
||||||
}
|
}
|
||||||
|
|
||||||
audio_renderer->SetRenderer(audio_renderer_provider.get());
|
audio_renderer->SetRenderer(audio_renderer_provider.get());
|
||||||
|
scrollbar->SetColourScheme(colour_scheme_name);
|
||||||
|
|
||||||
Refresh();
|
Refresh();
|
||||||
}
|
}
|
||||||
|
|
|
@ -139,6 +139,16 @@
|
||||||
"Saturation Scale" : 0.01,
|
"Saturation Scale" : 0.01,
|
||||||
"Lightness Offset" : 25.01,
|
"Lightness Offset" : 25.01,
|
||||||
"Lightness Scale" : 300.01
|
"Lightness Scale" : 300.01
|
||||||
|
},
|
||||||
|
"UI" : {
|
||||||
|
"Light" : "rgb(0, 200, 0)",
|
||||||
|
"Dark" : "rgb(0, 10, 0)",
|
||||||
|
"Selection" : "rgb(0, 80, 0)"
|
||||||
|
},
|
||||||
|
"UI Focused" : {
|
||||||
|
"Light" : "rgb(50, 255, 50)",
|
||||||
|
"Dark" : "rgb(0, 10, 0)",
|
||||||
|
"Selection" : "rgb(0, 80, 0)"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"Icy Blue" : {
|
"Icy Blue" : {
|
||||||
|
@ -173,6 +183,16 @@
|
||||||
"Saturation Scale" : 128.01,
|
"Saturation Scale" : 128.01,
|
||||||
"Lightness Offset" : 64.01,
|
"Lightness Offset" : 64.01,
|
||||||
"Lightness Scale" : 192.01
|
"Lightness Scale" : 192.01
|
||||||
|
},
|
||||||
|
"UI" : {
|
||||||
|
"Light" : "rgb(89, 145, 220)",
|
||||||
|
"Dark" : "rgb(8, 4, 13)",
|
||||||
|
"Selection" : "rgb(65, 34, 103)"
|
||||||
|
},
|
||||||
|
"UI Focused" : {
|
||||||
|
"Light" : "rgb(205, 240, 226)",
|
||||||
|
"Dark" : "rgb(8, 4, 13)",
|
||||||
|
"Selection" : "rgb(82, 107, 213)"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in a new issue