forked from mia/Aegisub
Factor out the idea of a pen bound to options to a utility class
Originally committed to SVN as r5759.
This commit is contained in:
parent
62f37772a3
commit
d4e17dde2e
10 changed files with 149 additions and 48 deletions
|
@ -887,6 +887,14 @@
|
||||||
RelativePath="..\..\src\mythes.hxx"
|
RelativePath="..\..\src\mythes.hxx"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\src\pen.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\src\pen.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\src\persist_location.cpp"
|
RelativePath="..\..\src\persist_location.cpp"
|
||||||
>
|
>
|
||||||
|
|
|
@ -153,6 +153,7 @@
|
||||||
<ClInclude Include="$(SrcDir)mkv_wrap.h" />
|
<ClInclude Include="$(SrcDir)mkv_wrap.h" />
|
||||||
<ClInclude Include="$(SrcDir)mythes.hxx" />
|
<ClInclude Include="$(SrcDir)mythes.hxx" />
|
||||||
<ClInclude Include="$(SrcDir)persist_location.h" />
|
<ClInclude Include="$(SrcDir)persist_location.h" />
|
||||||
|
<ClInclude Include="$(SrcDir)pen.h" />
|
||||||
<ClInclude Include="$(SrcDir)plugin_manager.h" />
|
<ClInclude Include="$(SrcDir)plugin_manager.h" />
|
||||||
<ClInclude Include="$(SrcDir)preferences.h" />
|
<ClInclude Include="$(SrcDir)preferences.h" />
|
||||||
<ClInclude Include="$(SrcDir)preferences_base.h" />
|
<ClInclude Include="$(SrcDir)preferences_base.h" />
|
||||||
|
@ -344,6 +345,7 @@
|
||||||
<ClCompile Include="$(SrcDir)menu.cpp" />
|
<ClCompile Include="$(SrcDir)menu.cpp" />
|
||||||
<ClCompile Include="$(SrcDir)mkv_wrap.cpp" />
|
<ClCompile Include="$(SrcDir)mkv_wrap.cpp" />
|
||||||
<ClCompile Include="$(SrcDir)mythes.cxx" />
|
<ClCompile Include="$(SrcDir)mythes.cxx" />
|
||||||
|
<ClCompile Include="$(SrcDir)pen.cpp" />
|
||||||
<ClCompile Include="$(SrcDir)persist_location.cpp" />
|
<ClCompile Include="$(SrcDir)persist_location.cpp" />
|
||||||
<ClCompile Include="$(SrcDir)plugin_manager.cpp" />
|
<ClCompile Include="$(SrcDir)plugin_manager.cpp" />
|
||||||
<ClCompile Include="$(SrcDir)preferences.cpp" />
|
<ClCompile Include="$(SrcDir)preferences.cpp" />
|
||||||
|
|
|
@ -645,6 +645,9 @@
|
||||||
<ClInclude Include="$(SrcDir)preferences.h">
|
<ClInclude Include="$(SrcDir)preferences.h">
|
||||||
<Filter>Preferences</Filter>
|
<Filter>Preferences</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="$(SrcDir)pen.h">
|
||||||
|
<Filter>Utilities\UI utilities</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="$(SrcDir)ass_dialogue.cpp">
|
<ClCompile Include="$(SrcDir)ass_dialogue.cpp">
|
||||||
|
@ -1193,6 +1196,9 @@
|
||||||
<ClCompile Include="$(SrcDir)command\video.cpp">
|
<ClCompile Include="$(SrcDir)command\video.cpp">
|
||||||
<Filter>Commands</Filter>
|
<Filter>Commands</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="$(SrcDir)pen.cpp">
|
||||||
|
<Filter>Utilities\UI utilities</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ResourceCompile Include="$(SrcDir)res.rc">
|
<ResourceCompile Include="$(SrcDir)res.rc">
|
||||||
|
|
|
@ -198,6 +198,7 @@ SRC += \
|
||||||
md5.c \
|
md5.c \
|
||||||
mkv_wrap.cpp \
|
mkv_wrap.cpp \
|
||||||
mythes.cxx \
|
mythes.cxx \
|
||||||
|
pen.cpp \
|
||||||
persist_location.cpp \
|
persist_location.cpp \
|
||||||
plugin_manager.cpp \
|
plugin_manager.cpp \
|
||||||
preferences.cpp \
|
preferences.cpp \
|
||||||
|
|
|
@ -53,6 +53,7 @@
|
||||||
#include "include/aegisub/audio_player.h"
|
#include "include/aegisub/audio_player.h"
|
||||||
#include "include/aegisub/audio_provider.h"
|
#include "include/aegisub/audio_provider.h"
|
||||||
#include "include/aegisub/context.h"
|
#include "include/aegisub/context.h"
|
||||||
|
#include "pen.h"
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "selection_controller.h"
|
#include "selection_controller.h"
|
||||||
#include "standard_paths.h"
|
#include "standard_paths.h"
|
||||||
|
@ -60,25 +61,18 @@
|
||||||
|
|
||||||
class AudioMarkerKeyframe : public AudioMarker {
|
class AudioMarkerKeyframe : public AudioMarker {
|
||||||
int64_t position;
|
int64_t position;
|
||||||
static wxPen style;
|
Pen *style;
|
||||||
public:
|
public:
|
||||||
AudioMarkerKeyframe(int64_t position) : position(position) { }
|
AudioMarkerKeyframe(Pen *style, int64_t position) : style(style), position(position) { }
|
||||||
int64_t GetPosition() const { return position; }
|
int64_t GetPosition() const { return position; }
|
||||||
FeetStyle GetFeet() const { return Feet_None; }
|
FeetStyle GetFeet() const { return Feet_None; }
|
||||||
bool CanSnap() const { return true; }
|
bool CanSnap() const { return true; }
|
||||||
wxPen GetStyle() const
|
wxPen GetStyle() const { return *style; }
|
||||||
{
|
|
||||||
if (!style.IsOk())
|
|
||||||
/// @todo Make this colour configurable
|
|
||||||
style = wxPen(wxColour(255,0,255), 1);
|
|
||||||
return style;
|
|
||||||
}
|
|
||||||
bool operator < (const AudioMarkerKeyframe &other) const { return position < other.position; }
|
bool operator < (const AudioMarkerKeyframe &other) const { return position < other.position; }
|
||||||
operator int64_t() const { return position; }
|
operator int64_t() const { return position; }
|
||||||
};
|
};
|
||||||
bool operator < (int64_t a, const AudioMarkerKeyframe &b) { return a < b.GetPosition(); }
|
bool operator < (int64_t a, const AudioMarkerKeyframe &b) { return a < b.GetPosition(); }
|
||||||
bool operator < (const AudioMarkerKeyframe &a, int64_t b) { return a.GetPosition() < b; }
|
bool operator < (const AudioMarkerKeyframe &a, int64_t b) { return a.GetPosition() < b; }
|
||||||
wxPen AudioMarkerKeyframe::style;
|
|
||||||
|
|
||||||
class AudioMarkerProviderKeyframes : public AudioMarkerProvider {
|
class AudioMarkerProviderKeyframes : public AudioMarkerProvider {
|
||||||
VideoContext *vc;
|
VideoContext *vc;
|
||||||
|
@ -90,6 +84,8 @@ class AudioMarkerProviderKeyframes : public AudioMarkerProvider {
|
||||||
std::vector<AudioMarkerKeyframe> keyframe_samples;
|
std::vector<AudioMarkerKeyframe> keyframe_samples;
|
||||||
AudioController *controller;
|
AudioController *controller;
|
||||||
|
|
||||||
|
Pen style;
|
||||||
|
|
||||||
void Update()
|
void Update()
|
||||||
{
|
{
|
||||||
std::vector<int> const& keyframes = vc->GetKeyFrames();
|
std::vector<int> const& keyframes = vc->GetKeyFrames();
|
||||||
|
@ -110,7 +106,7 @@ class AudioMarkerProviderKeyframes : public AudioMarkerProvider {
|
||||||
keyframe_samples.reserve(keyframes.size());
|
keyframe_samples.reserve(keyframes.size());
|
||||||
for (size_t i = 0; i < keyframes.size(); ++i)
|
for (size_t i = 0; i < keyframes.size(); ++i)
|
||||||
{
|
{
|
||||||
keyframe_samples.push_back(AudioMarkerKeyframe(
|
keyframe_samples.push_back(AudioMarkerKeyframe(&style,
|
||||||
controller->SamplesFromMilliseconds(timecodes.TimeAtFrame(keyframes[i]))));
|
controller->SamplesFromMilliseconds(timecodes.TimeAtFrame(keyframes[i]))));
|
||||||
}
|
}
|
||||||
AnnounceMarkerMoved();
|
AnnounceMarkerMoved();
|
||||||
|
@ -118,11 +114,12 @@ class AudioMarkerProviderKeyframes : public AudioMarkerProvider {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
AudioMarkerProviderKeyframes(AudioController *controller, agi::Context *c)
|
AudioMarkerProviderKeyframes(AudioController *controller, agi::Context *c)
|
||||||
: vc(c->videoController)
|
: vc(c->videoController)
|
||||||
, keyframe_slot(vc->AddKeyframesListener(&AudioMarkerProviderKeyframes::Update, this))
|
, keyframe_slot(vc->AddKeyframesListener(&AudioMarkerProviderKeyframes::Update, this))
|
||||||
, audio_open_slot(controller->AddAudioOpenListener(&AudioMarkerProviderKeyframes::Update, this))
|
, audio_open_slot(controller->AddAudioOpenListener(&AudioMarkerProviderKeyframes::Update, this))
|
||||||
, timecode_slot(vc->AddTimecodesListener(&AudioMarkerProviderKeyframes::Update, this))
|
, timecode_slot(vc->AddTimecodesListener(&AudioMarkerProviderKeyframes::Update, this))
|
||||||
, controller(controller)
|
, controller(controller)
|
||||||
|
, style("Colour/Audio Display/Keyframe")
|
||||||
{
|
{
|
||||||
Update();
|
Update();
|
||||||
}
|
}
|
||||||
|
@ -142,21 +139,14 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
class VideoPositionMarker : public AudioMarker {
|
class VideoPositionMarker : public AudioMarker {
|
||||||
agi::signal::Connection colour_changed;
|
|
||||||
|
|
||||||
int64_t position;
|
int64_t position;
|
||||||
wxPen style;
|
Pen style;
|
||||||
|
|
||||||
void OnColourChanged(agi::OptionValue const& opt)
|
|
||||||
{
|
|
||||||
style = wxPen(lagi_wxColour(opt.GetColour()), 1);
|
|
||||||
}
|
|
||||||
public:
|
public:
|
||||||
VideoPositionMarker()
|
VideoPositionMarker()
|
||||||
: colour_changed(OPT_SUB("Colour/Audio Display/Play Cursor", &VideoPositionMarker::OnColourChanged, this))
|
: style("Colour/Audio Display/Play Cursor")
|
||||||
, position(-1)
|
, position(-1)
|
||||||
{
|
{
|
||||||
OnColourChanged(*OPT_GET("Colour/Audio Display/Play Cursor"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetPosition(int64_t new_pos)
|
void SetPosition(int64_t new_pos)
|
||||||
|
|
|
@ -46,6 +46,7 @@
|
||||||
#include "audio_timing.h"
|
#include "audio_timing.h"
|
||||||
#include "include/aegisub/context.h"
|
#include "include/aegisub/context.h"
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
#include "pen.h"
|
||||||
#include "selection_controller.h"
|
#include "selection_controller.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
|
||||||
|
@ -66,6 +67,12 @@ class AudioMarkerDialogueTiming : public AudioMarker {
|
||||||
/// Foot style for the marker
|
/// Foot style for the marker
|
||||||
FeetStyle feet;
|
FeetStyle feet;
|
||||||
|
|
||||||
|
/// Draw style for the left marker
|
||||||
|
Pen style_left;
|
||||||
|
/// Draw style for the right marker
|
||||||
|
Pen style_right;
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// AudioMarker interface
|
// AudioMarker interface
|
||||||
int64_t GetPosition() const { return position; }
|
int64_t GetPosition() const { return position; }
|
||||||
|
@ -198,9 +205,6 @@ void AudioMarkerDialogueTiming::SetPosition(int64_t new_position)
|
||||||
|
|
||||||
if (other)
|
if (other)
|
||||||
{
|
{
|
||||||
wxPen style_left(wxColour(OPT_GET("Colour/Audio Display/Line boundary Start")->GetColour()), 2);
|
|
||||||
wxPen style_right(wxColour(OPT_GET("Colour/Audio Display/Line boundary End")->GetColour()), 2);
|
|
||||||
|
|
||||||
if (position < other->position)
|
if (position < other->position)
|
||||||
{
|
{
|
||||||
feet = Feet_Right;
|
feet = Feet_Right;
|
||||||
|
@ -224,6 +228,8 @@ AudioMarkerDialogueTiming::AudioMarkerDialogueTiming()
|
||||||
, position(0)
|
, position(0)
|
||||||
, style(*wxTRANSPARENT_PEN)
|
, style(*wxTRANSPARENT_PEN)
|
||||||
, feet(Feet_None)
|
, feet(Feet_None)
|
||||||
|
, style_left("Colour/Audio Display/Line boundary Start", "Audio/Line Boundaries Thickness")
|
||||||
|
, style_right("Colour/Audio Display/Line boundary End", "Audio/Line Boundaries Thickness")
|
||||||
{
|
{
|
||||||
// Nothing more to do
|
// Nothing more to do
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,6 +31,7 @@
|
||||||
#include "audio_timing.h"
|
#include "audio_timing.h"
|
||||||
#include "include/aegisub/context.h"
|
#include "include/aegisub/context.h"
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
#include "pen.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
|
||||||
#ifndef AGI_PRE
|
#ifndef AGI_PRE
|
||||||
|
@ -41,7 +42,7 @@
|
||||||
/// @brief AudioMarker implementation for AudioTimingControllerKaraoke
|
/// @brief AudioMarker implementation for AudioTimingControllerKaraoke
|
||||||
class KaraokeMarker : public AudioMarker {
|
class KaraokeMarker : public AudioMarker {
|
||||||
int64_t position;
|
int64_t position;
|
||||||
wxPen *pen;
|
Pen *pen;
|
||||||
FeetStyle style;
|
FeetStyle style;
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
@ -52,7 +53,7 @@ public:
|
||||||
|
|
||||||
void Move(int64_t new_pos) { position = new_pos; }
|
void Move(int64_t new_pos) { position = new_pos; }
|
||||||
|
|
||||||
KaraokeMarker(int64_t position, wxPen *pen, FeetStyle style)
|
KaraokeMarker(int64_t position, Pen *pen, FeetStyle style)
|
||||||
: position(position)
|
: position(position)
|
||||||
, pen(pen)
|
, pen(pen)
|
||||||
, style(style)
|
, style(style)
|
||||||
|
@ -82,11 +83,11 @@ class AudioTimingControllerKaraoke : public AudioTimingController {
|
||||||
size_t cur_syl; ///< Index of currently selected syllable in the line
|
size_t cur_syl; ///< Index of currently selected syllable in the line
|
||||||
|
|
||||||
/// Pen used for the mid-syllable markers
|
/// Pen used for the mid-syllable markers
|
||||||
wxPen separator_pen;
|
Pen separator_pen;
|
||||||
/// Pen used for the start-of-line marker
|
/// Pen used for the start-of-line marker
|
||||||
wxPen start_pen;
|
Pen start_pen;
|
||||||
/// Pen used for the end-of-line marker
|
/// Pen used for the end-of-line marker
|
||||||
wxPen end_pen;
|
Pen end_pen;
|
||||||
|
|
||||||
/// Immobile marker for the beginning of the line
|
/// Immobile marker for the beginning of the line
|
||||||
KaraokeMarker start_marker;
|
KaraokeMarker start_marker;
|
||||||
|
@ -105,9 +106,6 @@ class AudioTimingControllerKaraoke : public AudioTimingController {
|
||||||
void OnAutoCommitChange(agi::OptionValue const& opt);
|
void OnAutoCommitChange(agi::OptionValue const& opt);
|
||||||
void OnAutoNextChange(agi::OptionValue const& opt);
|
void OnAutoNextChange(agi::OptionValue const& opt);
|
||||||
|
|
||||||
/// Reload all style options from the user preferences
|
|
||||||
void RegenStyles();
|
|
||||||
|
|
||||||
int64_t ToMS(int64_t samples) const { return c->audioController->MillisecondsFromSamples(samples); }
|
int64_t ToMS(int64_t samples) const { return c->audioController->MillisecondsFromSamples(samples); }
|
||||||
int64_t ToSamples(int64_t ms) const { return c->audioController->SamplesFromMilliseconds(ms); }
|
int64_t ToSamples(int64_t ms) const { return c->audioController->SamplesFromMilliseconds(ms); }
|
||||||
|
|
||||||
|
@ -144,6 +142,9 @@ AudioTimingControllerKaraoke::AudioTimingControllerKaraoke(agi::Context *c, AssK
|
||||||
, active_line(c->selectionController->GetActiveLine())
|
, active_line(c->selectionController->GetActiveLine())
|
||||||
, kara(kara)
|
, kara(kara)
|
||||||
, cur_syl(0)
|
, cur_syl(0)
|
||||||
|
, separator_pen("Colour/Audio Display/Syllable Boundaries", "Audio/Line Boundaries Thickness", wxPENSTYLE_DOT)
|
||||||
|
, start_pen("Colour/Audio Display/Line boundary Start", "Audio/Line Boundaries Thickness")
|
||||||
|
, end_pen("Colour/Audio Display/Line boundary End", "Audio/Line Boundaries Thickness")
|
||||||
, start_marker(ToSamples(active_line->Start.GetMS()), &start_pen, AudioMarker::Feet_Right)
|
, start_marker(ToSamples(active_line->Start.GetMS()), &start_pen, AudioMarker::Feet_Right)
|
||||||
, end_marker(ToSamples(active_line->End.GetMS()), &end_pen, AudioMarker::Feet_Left)
|
, end_marker(ToSamples(active_line->End.GetMS()), &end_pen, AudioMarker::Feet_Left)
|
||||||
, auto_commit(OPT_GET("Audio/Auto/Commit")->GetBool())
|
, auto_commit(OPT_GET("Audio/Auto/Commit")->GetBool())
|
||||||
|
@ -153,23 +154,11 @@ AudioTimingControllerKaraoke::AudioTimingControllerKaraoke(agi::Context *c, AssK
|
||||||
slots.push_back(kara->AddSyllablesChangedListener(&AudioTimingControllerKaraoke::Revert, this));
|
slots.push_back(kara->AddSyllablesChangedListener(&AudioTimingControllerKaraoke::Revert, this));
|
||||||
slots.push_back(OPT_SUB("Audio/Auto/Commit", &AudioTimingControllerKaraoke::OnAutoCommitChange, this));
|
slots.push_back(OPT_SUB("Audio/Auto/Commit", &AudioTimingControllerKaraoke::OnAutoCommitChange, this));
|
||||||
slots.push_back(OPT_SUB("Audio/Next Line on Commit", &AudioTimingControllerKaraoke::OnAutoNextChange, this));
|
slots.push_back(OPT_SUB("Audio/Next Line on Commit", &AudioTimingControllerKaraoke::OnAutoNextChange, this));
|
||||||
slots.push_back(OPT_SUB("Audio/Line Boundaries Thickness", &AudioTimingControllerKaraoke::RegenStyles, this));
|
|
||||||
slots.push_back(OPT_SUB("Colour/Audio Display/Syllable Boundaries", &AudioTimingControllerKaraoke::RegenStyles, this));
|
|
||||||
slots.push_back(OPT_SUB("Colour/Audio Display/Line boundary Start", &AudioTimingControllerKaraoke::RegenStyles, this));
|
|
||||||
slots.push_back(OPT_SUB("Colour/Audio Display/Line boundary End", &AudioTimingControllerKaraoke::RegenStyles, this));
|
|
||||||
|
|
||||||
RegenStyles();
|
|
||||||
Revert();
|
Revert();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudioTimingControllerKaraoke::RegenStyles() {
|
|
||||||
int width = OPT_GET("Audio/Line Boundaries Thickness")->GetInt();
|
|
||||||
separator_pen = wxPen(wxColour(OPT_GET("Colour/Audio Display/Syllable Boundaries")->GetColour()), 1, wxPENSTYLE_DOT);
|
|
||||||
start_pen = wxPen(wxColour(OPT_GET("Colour/Audio Display/Line boundary Start")->GetColour()), width);
|
|
||||||
end_pen = wxPen(wxColour(OPT_GET("Colour/Audio Display/Line boundary End")->GetColour()), width);
|
|
||||||
}
|
|
||||||
|
|
||||||
void AudioTimingControllerKaraoke::OnAutoCommitChange(agi::OptionValue const& opt) {
|
void AudioTimingControllerKaraoke::OnAutoCommitChange(agi::OptionValue const& opt) {
|
||||||
auto_commit = opt.GetBool();
|
auto_commit = opt.GetBool();
|
||||||
}
|
}
|
||||||
|
|
|
@ -98,6 +98,7 @@
|
||||||
"Selection" : "rgb(64, 64, 64)",
|
"Selection" : "rgb(64, 64, 64)",
|
||||||
"Selection Modified" : "rgb(92, 0, 0)"
|
"Selection Modified" : "rgb(92, 0, 0)"
|
||||||
},
|
},
|
||||||
|
"Keyframe" : "rgb(255,0,255)",
|
||||||
"Line Boundary Inactive Line" : "rgb(190,190,190)",
|
"Line Boundary Inactive Line" : "rgb(190,190,190)",
|
||||||
"Line boundary End" : "rgb(0, 0, 216)",
|
"Line boundary End" : "rgb(0, 0, 216)",
|
||||||
"Line boundary Start" : "rgb(216, 0, 0)",
|
"Line boundary Start" : "rgb(216, 0, 0)",
|
||||||
|
|
45
aegisub/src/pen.cpp
Normal file
45
aegisub/src/pen.cpp
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
// Copyright (c) 2011, Thomas Goyne <plorkyeran@aegisub.org>
|
||||||
|
//
|
||||||
|
// Permission to use, copy, modify, and distribute this software for any
|
||||||
|
// purpose with or without fee is hereby granted, provided that the above
|
||||||
|
// copyright notice and this permission notice appear in all copies.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
//
|
||||||
|
// Aegisub Project http://www.aegisub.org/
|
||||||
|
//
|
||||||
|
// $Id$
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
#include "pen.h"
|
||||||
|
|
||||||
|
#include "compat.h"
|
||||||
|
#include "main.h"
|
||||||
|
|
||||||
|
void Pen::OnColourChanged(agi::OptionValue const& opt) {
|
||||||
|
impl.SetColour(lagi_wxColour(opt.GetColour()));
|
||||||
|
}
|
||||||
|
|
||||||
|
void Pen::OnWidthChanged(agi::OptionValue const& opt) {
|
||||||
|
impl.SetWidth(opt.GetInt());
|
||||||
|
}
|
||||||
|
|
||||||
|
Pen::Pen(const char *colour_opt, const char *width_opt, wxPenStyle style)
|
||||||
|
: impl(lagi_wxColour(OPT_GET(colour_opt)->GetColour()), OPT_GET(width_opt)->GetInt(), style)
|
||||||
|
, colour_con(OPT_SUB(colour_opt, &Pen::OnColourChanged, this))
|
||||||
|
, width_con(OPT_SUB(width_opt, &Pen::OnWidthChanged, this))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
Pen::Pen(const char *colour_opt, int width, wxPenStyle style)
|
||||||
|
: impl(lagi_wxColour(OPT_GET(colour_opt)->GetColour()), width, style)
|
||||||
|
, colour_con(OPT_SUB(colour_opt, &Pen::OnColourChanged, this))
|
||||||
|
{
|
||||||
|
}
|
53
aegisub/src/pen.h
Normal file
53
aegisub/src/pen.h
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
// Copyright (c) 2011, Thomas Goyne <plorkyeran@aegisub.org>
|
||||||
|
//
|
||||||
|
// Permission to use, copy, modify, and distribute this software for any
|
||||||
|
// purpose with or without fee is hereby granted, provided that the above
|
||||||
|
// copyright notice and this permission notice appear in all copies.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
//
|
||||||
|
// Aegisub Project http://www.aegisub.org/
|
||||||
|
//
|
||||||
|
// $Id$
|
||||||
|
|
||||||
|
#ifndef AGI_PRE
|
||||||
|
#include <wx/pen.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <libaegisub/signal.h>
|
||||||
|
|
||||||
|
namespace agi { class OptionValue; }
|
||||||
|
|
||||||
|
/// @class Pen
|
||||||
|
/// @brief A simple wrapper around wxPen to bind the colour and width to the
|
||||||
|
/// value of an option
|
||||||
|
class Pen {
|
||||||
|
wxPen impl;
|
||||||
|
agi::signal::Connection colour_con;
|
||||||
|
agi::signal::Connection width_con;
|
||||||
|
|
||||||
|
void OnColourChanged(agi::OptionValue const& opt);
|
||||||
|
void OnWidthChanged(agi::OptionValue const& opt);
|
||||||
|
|
||||||
|
public:
|
||||||
|
/// Constructor
|
||||||
|
/// @param colour_opt Option name to get the colour from
|
||||||
|
/// @param width_opt Option name to get the width from
|
||||||
|
/// @param style Pen style
|
||||||
|
Pen(const char *colour_opt, const char *width_opt, wxPenStyle style = wxPENSTYLE_SOLID);
|
||||||
|
|
||||||
|
/// Constructor
|
||||||
|
/// @param colour_opt Option name to get the colour from
|
||||||
|
/// @param width Pen width
|
||||||
|
/// @param style Pen style
|
||||||
|
Pen(const char *colour_opt, int width = 1, wxPenStyle style = wxPENSTYLE_SOLID);
|
||||||
|
|
||||||
|
/// Implicit conversion to wxPen
|
||||||
|
operator wxPen const&() const { return impl; }
|
||||||
|
};
|
Loading…
Reference in a new issue