Printing FStyle object to change attributes
This commit is contained in:
parent
43bda37f71
commit
a33a9e1b6b
|
@ -1,3 +1,6 @@
|
||||||
|
2020-02-16 Markus Gans <guru.mail@muenster.de>
|
||||||
|
* Printing a FStyle object allows you to change video attributes
|
||||||
|
|
||||||
2020-02-13 Markus Gans <guru.mail@muenster.de>
|
2020-02-13 Markus Gans <guru.mail@muenster.de>
|
||||||
* Rename setTransShadow() to setColorOverlay()
|
* Rename setTransShadow() to setColorOverlay()
|
||||||
|
|
||||||
|
|
|
@ -23,8 +23,10 @@
|
||||||
#include <final/final.h>
|
#include <final/final.h>
|
||||||
|
|
||||||
namespace fc = finalcut::fc;
|
namespace fc = finalcut::fc;
|
||||||
|
using finalcut::FColorPair;
|
||||||
using finalcut::FPoint;
|
using finalcut::FPoint;
|
||||||
using finalcut::FSize;
|
using finalcut::FSize;
|
||||||
|
using finalcut::FStyle;
|
||||||
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
@ -90,37 +92,31 @@ void Transparent::draw()
|
||||||
if ( type == shadow )
|
if ( type == shadow )
|
||||||
{
|
{
|
||||||
const auto& wc = getFWidgetColors();
|
const auto& wc = getFWidgetColors();
|
||||||
setColor(wc.shadow_bg, wc.shadow_fg);
|
print() << FColorPair (wc.shadow_bg, wc.shadow_fg)
|
||||||
setColorOverlay();
|
<< FStyle (fc::ColorOverlay);
|
||||||
}
|
}
|
||||||
else if ( type == inherit_background )
|
else if ( type == inherit_background )
|
||||||
{
|
{
|
||||||
if ( getMaxColor() > 8 )
|
if ( getMaxColor() > 8 )
|
||||||
setColor(fc::Blue, fc::Black);
|
print() << FColorPair (fc::Blue, fc::Black);
|
||||||
else
|
else
|
||||||
setColor(fc::Green, fc::Black);
|
print() << FColorPair (fc::Green, fc::Black);
|
||||||
|
|
||||||
setInheritBackground();
|
print() << FStyle (fc::InheritBackground);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
setTransparent();
|
print() << FStyle (fc::Transparent);
|
||||||
|
|
||||||
const finalcut::FString line(getClientWidth(), '.');
|
const finalcut::FString line(getClientWidth(), '.');
|
||||||
|
|
||||||
|
// Fill window area
|
||||||
for (int n{1}; n <= int(getClientHeight()); n++)
|
for (int n{1}; n <= int(getClientHeight()); n++)
|
||||||
{
|
{
|
||||||
print() << FPoint(2, 2 + n) << line;
|
print() << FPoint(2, 2 + n)
|
||||||
|
<< line;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( type == shadow )
|
print() << FStyle (fc::Reset);
|
||||||
unsetColorOverlay();
|
|
||||||
else if ( type == inherit_background )
|
|
||||||
unsetInheritBackground();
|
|
||||||
else
|
|
||||||
unsetTransparent();
|
|
||||||
|
|
||||||
if ( isMonochron() )
|
|
||||||
setReverse(false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
|
|
@ -83,6 +83,7 @@ finalcutinclude_HEADERS = \
|
||||||
include/final/fbuttongroup.h \
|
include/final/fbuttongroup.h \
|
||||||
include/final/fcheckbox.h \
|
include/final/fcheckbox.h \
|
||||||
include/final/fcolorpair.h \
|
include/final/fcolorpair.h \
|
||||||
|
include/final/fstyle.h \
|
||||||
include/final/fconfig.h \
|
include/final/fconfig.h \
|
||||||
include/final/fswitch.h \
|
include/final/fswitch.h \
|
||||||
include/final/fdialog.h \
|
include/final/fdialog.h \
|
||||||
|
|
|
@ -13,6 +13,7 @@ INCLUDE_HEADERS = \
|
||||||
fbuttongroup.h \
|
fbuttongroup.h \
|
||||||
fbutton.h \
|
fbutton.h \
|
||||||
fcolorpair.h \
|
fcolorpair.h \
|
||||||
|
fstyle.h \
|
||||||
ftogglebutton.h \
|
ftogglebutton.h \
|
||||||
fcheckbox.h \
|
fcheckbox.h \
|
||||||
fswitch.h \
|
fswitch.h \
|
||||||
|
|
|
@ -13,6 +13,7 @@ INCLUDE_HEADERS = \
|
||||||
fbuttongroup.h \
|
fbuttongroup.h \
|
||||||
fbutton.h \
|
fbutton.h \
|
||||||
fcolorpair.h \
|
fcolorpair.h \
|
||||||
|
fstyle.h \
|
||||||
ftogglebutton.h \
|
ftogglebutton.h \
|
||||||
fcheckbox.h \
|
fcheckbox.h \
|
||||||
fswitch.h \
|
fswitch.h \
|
||||||
|
|
|
@ -38,11 +38,11 @@ namespace finalcut
|
||||||
FOptiAttr::FOptiAttr()
|
FOptiAttr::FOptiAttr()
|
||||||
{
|
{
|
||||||
// Set bits that must not be reset
|
// Set bits that must not be reset
|
||||||
reset_byte_mask.attr.bit.transparent = true;
|
reset_byte_mask.attr.bit.transparent = true;
|
||||||
reset_byte_mask.attr.bit.color_overlay = true;
|
reset_byte_mask.attr.bit.color_overlay = true;
|
||||||
reset_byte_mask.attr.bit.inherit_bg = true;
|
reset_byte_mask.attr.bit.inherit_background = true;
|
||||||
reset_byte_mask.attr.bit.no_changes = true;
|
reset_byte_mask.attr.bit.no_changes = true;
|
||||||
reset_byte_mask.attr.bit.printed = true;
|
reset_byte_mask.attr.bit.printed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
#include "final/fc.h"
|
#include "final/fc.h"
|
||||||
#include "final/fcolorpair.h"
|
#include "final/fcolorpair.h"
|
||||||
#include "final/fstring.h"
|
#include "final/fstring.h"
|
||||||
|
#include "final/fstyle.h"
|
||||||
#include "final/ftermbuffer.h"
|
#include "final/ftermbuffer.h"
|
||||||
#include "final/fvterm.h"
|
#include "final/fvterm.h"
|
||||||
#include "final/ftypes.h"
|
#include "final/ftypes.h"
|
||||||
|
@ -85,6 +86,43 @@ int FTermBuffer::write (wchar_t ch)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
void FTermBuffer::write (const FStyle& style)
|
||||||
|
{
|
||||||
|
FAttribute attr = style.getStyle();
|
||||||
|
|
||||||
|
if ( attr == 0 )
|
||||||
|
FVTerm::setNormal();
|
||||||
|
else if ( (attr & fc::Bold) != 0 )
|
||||||
|
FVTerm::setBold();
|
||||||
|
else if ( (attr & fc::Dim) != 0 )
|
||||||
|
FVTerm::setDim();
|
||||||
|
else if ( (attr & fc::Italic) != 0 )
|
||||||
|
FVTerm::setItalic();
|
||||||
|
else if ( (attr & fc::Underline) != 0 )
|
||||||
|
FVTerm::setUnderline();
|
||||||
|
else if ( (attr & fc::Blink) != 0 )
|
||||||
|
FVTerm::setBlink();
|
||||||
|
else if ( (attr & fc::Reverse) != 0 )
|
||||||
|
FVTerm::setReverse();
|
||||||
|
else if ( (attr & fc::Standout) != 0 )
|
||||||
|
FVTerm::setStandout();
|
||||||
|
else if ( (attr & fc::Invisible) != 0 )
|
||||||
|
FVTerm::setInvisible();
|
||||||
|
else if ( (attr & fc::Protected) != 0 )
|
||||||
|
FVTerm::setProtected();
|
||||||
|
else if ( (attr & fc::CrossedOut) != 0 )
|
||||||
|
FVTerm::setCrossedOut();
|
||||||
|
else if ( (attr & fc::DoubleUnderline) != 0 )
|
||||||
|
FVTerm::setDoubleUnderline();
|
||||||
|
else if ( (attr & fc::Transparent) != 0 )
|
||||||
|
FVTerm::setTransparent();
|
||||||
|
else if ( (attr & fc::ColorOverlay) != 0 )
|
||||||
|
FVTerm::setColorOverlay();
|
||||||
|
else if ( (attr & fc::InheritBackground) != 0 )
|
||||||
|
FVTerm::setInheritBackground();
|
||||||
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FTermBuffer::write (const FColorPair& pair)
|
void FTermBuffer::write (const FColorPair& pair)
|
||||||
{
|
{
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
* *
|
* *
|
||||||
* This file is part of the Final Cut widget toolkit *
|
* This file is part of the Final Cut widget toolkit *
|
||||||
* *
|
* *
|
||||||
* Copyright 2019 Markus Gans *
|
* Copyright 2019-2020 Markus Gans *
|
||||||
* *
|
* *
|
||||||
* The Final Cut is free software; you can redistribute it and/or *
|
* The Final Cut is free software; you can redistribute it and/or *
|
||||||
* modify it under the terms of the GNU Lesser General Public License *
|
* modify it under the terms of the GNU Lesser General Public License *
|
||||||
|
@ -35,10 +35,10 @@ FTermData* FTermDebugData::data {nullptr};
|
||||||
FTermDetection* FTermDebugData::term_detection {nullptr};
|
FTermDetection* FTermDebugData::term_detection {nullptr};
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
// class FClassName
|
// class FTermDebugData
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
|
||||||
// public methods of FClassName
|
// public methods of FTermDebugData
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FTermDebugData::init()
|
void FTermDebugData::init()
|
||||||
{
|
{
|
||||||
|
|
|
@ -31,6 +31,7 @@
|
||||||
#include "final/fkeyboard.h"
|
#include "final/fkeyboard.h"
|
||||||
#include "final/foptiattr.h"
|
#include "final/foptiattr.h"
|
||||||
#include "final/foptimove.h"
|
#include "final/foptimove.h"
|
||||||
|
#include "final/fstyle.h"
|
||||||
#include "final/fsystem.h"
|
#include "final/fsystem.h"
|
||||||
#include "final/fterm.h"
|
#include "final/fterm.h"
|
||||||
#include "final/ftermdata.h"
|
#include "final/ftermdata.h"
|
||||||
|
@ -530,7 +531,7 @@ int FVTerm::print (FTermArea* area, FChar& term_char)
|
||||||
{
|
{
|
||||||
if ( ( ! ac->attr.bit.transparent && nc.attr.bit.transparent )
|
if ( ( ! ac->attr.bit.transparent && nc.attr.bit.transparent )
|
||||||
|| ( ! ac->attr.bit.color_overlay && nc.attr.bit.color_overlay )
|
|| ( ! ac->attr.bit.color_overlay && nc.attr.bit.color_overlay )
|
||||||
|| ( ! ac->attr.bit.inherit_bg && nc.attr.bit.inherit_bg ) )
|
|| ( ! ac->attr.bit.inherit_background && nc.attr.bit.inherit_background ) )
|
||||||
{
|
{
|
||||||
// add one transparent character form line
|
// add one transparent character form line
|
||||||
area->changes[ay].trans_count++;
|
area->changes[ay].trans_count++;
|
||||||
|
@ -538,7 +539,7 @@ int FVTerm::print (FTermArea* area, FChar& term_char)
|
||||||
|
|
||||||
if ( ( ac->attr.bit.transparent && ! nc.attr.bit.transparent )
|
if ( ( ac->attr.bit.transparent && ! nc.attr.bit.transparent )
|
||||||
|| ( ac->attr.bit.color_overlay && ! nc.attr.bit.color_overlay )
|
|| ( ac->attr.bit.color_overlay && ! nc.attr.bit.color_overlay )
|
||||||
|| ( ac->attr.bit.inherit_bg && ! nc.attr.bit.inherit_bg ) )
|
|| ( ac->attr.bit.inherit_background && ! nc.attr.bit.inherit_background ) )
|
||||||
{
|
{
|
||||||
// remove one transparent character from line
|
// remove one transparent character from line
|
||||||
area->changes[ay].trans_count--;
|
area->changes[ay].trans_count--;
|
||||||
|
@ -583,6 +584,43 @@ void FVTerm::print (const FPoint& p)
|
||||||
setPrintCursor (p);
|
setPrintCursor (p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
void FVTerm::print (const FStyle& style)
|
||||||
|
{
|
||||||
|
FAttribute attr = style.getStyle();
|
||||||
|
|
||||||
|
if ( attr == 0 )
|
||||||
|
setNormal();
|
||||||
|
else if ( (attr & fc::Bold) != 0 )
|
||||||
|
setBold();
|
||||||
|
else if ( (attr & fc::Dim) != 0 )
|
||||||
|
setDim();
|
||||||
|
else if ( (attr & fc::Italic) != 0 )
|
||||||
|
setItalic();
|
||||||
|
else if ( (attr & fc::Underline) != 0 )
|
||||||
|
setUnderline();
|
||||||
|
else if ( (attr & fc::Blink) != 0 )
|
||||||
|
setBlink();
|
||||||
|
else if ( (attr & fc::Reverse) != 0 )
|
||||||
|
setReverse();
|
||||||
|
else if ( (attr & fc::Standout) != 0 )
|
||||||
|
setStandout();
|
||||||
|
else if ( (attr & fc::Invisible) != 0 )
|
||||||
|
setInvisible();
|
||||||
|
else if ( (attr & fc::Protected) != 0 )
|
||||||
|
setProtected();
|
||||||
|
else if ( (attr & fc::CrossedOut) != 0 )
|
||||||
|
setCrossedOut();
|
||||||
|
else if ( (attr & fc::DoubleUnderline) != 0 )
|
||||||
|
setDoubleUnderline();
|
||||||
|
else if ( (attr & fc::Transparent) != 0 )
|
||||||
|
setTransparent();
|
||||||
|
else if ( (attr & fc::ColorOverlay) != 0 )
|
||||||
|
setColorOverlay();
|
||||||
|
else if ( (attr & fc::InheritBackground) != 0 )
|
||||||
|
setInheritBackground();
|
||||||
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FVTerm::print (const FColorPair& pair)
|
void FVTerm::print (const FColorPair& pair)
|
||||||
{
|
{
|
||||||
|
@ -1232,7 +1270,7 @@ void FVTerm::clearArea (FTermArea* area, int fillchar)
|
||||||
|
|
||||||
if ( nc.attr.bit.transparent
|
if ( nc.attr.bit.transparent
|
||||||
|| nc.attr.bit.color_overlay
|
|| nc.attr.bit.color_overlay
|
||||||
|| nc.attr.bit.inherit_bg )
|
|| nc.attr.bit.inherit_background )
|
||||||
area->changes[i].trans_count = w;
|
area->changes[i].trans_count = w;
|
||||||
else if ( area->right_shadow != 0 )
|
else if ( area->right_shadow != 0 )
|
||||||
area->changes[i].trans_count = uInt(area->right_shadow);
|
area->changes[i].trans_count = uInt(area->right_shadow);
|
||||||
|
@ -1593,7 +1631,7 @@ bool FVTerm::updateVTermCharacter ( FTermArea* area
|
||||||
{
|
{
|
||||||
updateShadedCharacter (area, area_pos, terminal_pos);
|
updateShadedCharacter (area, area_pos, terminal_pos);
|
||||||
}
|
}
|
||||||
else if ( ac->attr.bit.inherit_bg )
|
else if ( ac->attr.bit.inherit_background )
|
||||||
{
|
{
|
||||||
updateInheritBackground (area, area_pos, terminal_pos);
|
updateInheritBackground (area, area_pos, terminal_pos);
|
||||||
}
|
}
|
||||||
|
@ -1758,7 +1796,7 @@ FChar FVTerm::generateCharacter (const FPoint& pos)
|
||||||
|
|
||||||
sc = &s_ch;
|
sc = &s_ch;
|
||||||
}
|
}
|
||||||
else if ( tmp->attr.bit.inherit_bg )
|
else if ( tmp->attr.bit.inherit_background )
|
||||||
{
|
{
|
||||||
// Add the covered background to this character
|
// Add the covered background to this character
|
||||||
std::memcpy (&i_ch, tmp, sizeof(i_ch));
|
std::memcpy (&i_ch, tmp, sizeof(i_ch));
|
||||||
|
@ -1988,7 +2026,7 @@ void FVTerm::putAreaCharacter ( const FPoint& pos, FVTerm* obj
|
||||||
|
|
||||||
std::memcpy (tc, &ch, sizeof(*tc));
|
std::memcpy (tc, &ch, sizeof(*tc));
|
||||||
}
|
}
|
||||||
else if ( ac->attr.bit.inherit_bg )
|
else if ( ac->attr.bit.inherit_background )
|
||||||
{
|
{
|
||||||
// Add the covered background to this character
|
// Add the covered background to this character
|
||||||
FChar ch{};
|
FChar ch{};
|
||||||
|
@ -2026,7 +2064,7 @@ void FVTerm::getAreaCharacter ( const FPoint& pos, FTermArea* area
|
||||||
s_ch.attr.bit.standout = false;
|
s_ch.attr.bit.standout = false;
|
||||||
cc = &s_ch;
|
cc = &s_ch;
|
||||||
}
|
}
|
||||||
else if ( tmp->attr.bit.inherit_bg )
|
else if ( tmp->attr.bit.inherit_background )
|
||||||
{
|
{
|
||||||
// Add the covered background to this character
|
// Add the covered background to this character
|
||||||
std::memcpy (&i_ch, tmp, sizeof(i_ch));
|
std::memcpy (&i_ch, tmp, sizeof(i_ch));
|
||||||
|
|
|
@ -20,6 +20,8 @@
|
||||||
* <http://www.gnu.org/licenses/>. *
|
* <http://www.gnu.org/licenses/>. *
|
||||||
***********************************************************************/
|
***********************************************************************/
|
||||||
|
|
||||||
|
#include "final/fcolorpair.h"
|
||||||
|
#include "final/fstyle.h"
|
||||||
#include "final/fwidget.h"
|
#include "final/fwidget.h"
|
||||||
#include "final/fwidgetcolors.h"
|
#include "final/fwidgetcolors.h"
|
||||||
|
|
||||||
|
@ -152,26 +154,26 @@ void drawTransparentShadow (FWidget* w)
|
||||||
|
|
||||||
const std::size_t width = w->getWidth();
|
const std::size_t width = w->getWidth();
|
||||||
const std::size_t height = w->getHeight();
|
const std::size_t height = w->getHeight();
|
||||||
w->setTransparent();
|
w->print() << FStyle (fc::Transparent)
|
||||||
w->print() << FPoint(int(width) + 1, 1) << " ";
|
<< FPoint (int(width) + 1, 1)
|
||||||
w->unsetTransparent();
|
<< " "
|
||||||
w->setColor (w->wcolors.shadow_bg, w->wcolors.shadow_fg);
|
<< FStyle (fc::Reset)
|
||||||
w->setColorOverlay();
|
<< FColorPair (w->wcolors.shadow_bg, w->wcolors.shadow_fg)
|
||||||
|
<< FStyle (fc::ColorOverlay);
|
||||||
|
|
||||||
for (std::size_t y{1}; y < height; y++)
|
for (std::size_t y{1}; y < height; y++)
|
||||||
{
|
{
|
||||||
w->print() << FPoint(int(width) + 1, int(y) + 1) << " ";
|
w->print() << FPoint(int(width) + 1, int(y) + 1) << " ";
|
||||||
}
|
}
|
||||||
|
|
||||||
w->unsetColorOverlay();
|
w->print() << FStyle (fc::Transparent)
|
||||||
w->setTransparent();
|
<< FPoint (1, int(height) + 1)
|
||||||
w->print() << FPoint(1, int(height) + 1) << " ";
|
<< " "
|
||||||
w->unsetTransparent();
|
<< FStyle (fc::Reset)
|
||||||
w->setColor (w->wcolors.shadow_bg, w->wcolors.shadow_fg);
|
<< FColorPair (w->wcolors.shadow_bg, w->wcolors.shadow_fg)
|
||||||
w->setColorOverlay();
|
<< FStyle (fc::ColorOverlay)
|
||||||
w->print() << FString(width, L' ');
|
<< FString (width, L' ')
|
||||||
|
<< FStyle (fc::Reset);
|
||||||
w->unsetColorOverlay();
|
|
||||||
|
|
||||||
if ( w->isMonochron() )
|
if ( w->isMonochron() )
|
||||||
w->setReverse(false);
|
w->setReverse(false);
|
||||||
|
@ -191,31 +193,32 @@ void drawBlockShadow (FWidget* w)
|
||||||
|
|
||||||
if ( w->isWindowWidget() )
|
if ( w->isWindowWidget() )
|
||||||
{
|
{
|
||||||
w->setColor (w->wcolors.shadow_fg, w->wcolors.shadow_bg);
|
w->print() << FColorPair (w->wcolors.shadow_fg, w->wcolors.shadow_bg)
|
||||||
w->setInheritBackground(); // current background color will be ignored
|
<< FStyle (fc::InheritBackground); // current background color will be ignored
|
||||||
}
|
}
|
||||||
else if ( auto p = w->getParentWidget() )
|
else if ( auto p = w->getParentWidget() )
|
||||||
w->setColor (w->wcolors.shadow_fg, p->getBackgroundColor());
|
w->print() << FColorPair (w->wcolors.shadow_fg, p->getBackgroundColor());
|
||||||
|
|
||||||
w->print (fc::LowerHalfBlock); // ▄
|
w->print (fc::LowerHalfBlock); // ▄
|
||||||
|
|
||||||
if ( w->isWindowWidget() )
|
if ( w->isWindowWidget() )
|
||||||
w->unsetInheritBackground();
|
w->print() << FStyle (fc::InheritBackground);
|
||||||
|
|
||||||
for (std::size_t y{1}; y < height; y++)
|
for (std::size_t y{1}; y < height; y++)
|
||||||
{
|
{
|
||||||
w->print() << FPoint(int(width) + 1, int(y) + 1) << fc::FullBlock; // █
|
w->print() << FPoint(int(width) + 1, int(y) + 1)
|
||||||
|
<< fc::FullBlock; // █
|
||||||
}
|
}
|
||||||
|
|
||||||
w->print() << FPoint(2, int(height) + 1);
|
w->print() << FPoint(2, int(height) + 1);
|
||||||
|
|
||||||
if ( w->isWindowWidget() )
|
if ( w->isWindowWidget() )
|
||||||
w->setInheritBackground();
|
w->print() << FStyle (fc::InheritBackground);
|
||||||
|
|
||||||
w->print() << FString(width, fc::UpperHalfBlock); // ▀
|
w->print() << FString(width, fc::UpperHalfBlock); // ▀
|
||||||
|
|
||||||
if ( w->isWindowWidget() )
|
if ( w->isWindowWidget() )
|
||||||
w->unsetInheritBackground();
|
w->print() << FStyle (fc::Reset);
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
@ -229,17 +232,18 @@ void clearShadow (FWidget* w)
|
||||||
|
|
||||||
if ( w->isWindowWidget() )
|
if ( w->isWindowWidget() )
|
||||||
{
|
{
|
||||||
w->setColor (w->wcolors.shadow_fg, w->wcolors.shadow_bg);
|
w->print() << FColorPair (w->wcolors.shadow_fg, w->wcolors.shadow_bg)
|
||||||
w->setInheritBackground(); // current background color will be ignored
|
<< FStyle (fc::InheritBackground); // current background color will be ignored
|
||||||
}
|
}
|
||||||
else if ( auto p = w->getParentWidget() )
|
else if ( auto p = w->getParentWidget() )
|
||||||
w->setColor (w->wcolors.shadow_fg, p->getBackgroundColor());
|
w->print() << FColorPair (w->wcolors.shadow_fg, p->getBackgroundColor());
|
||||||
|
|
||||||
if ( int(width) <= w->woffset.getX2() )
|
if ( int(width) <= w->woffset.getX2() )
|
||||||
{
|
{
|
||||||
for (std::size_t y{1}; y <= height; y++)
|
for (std::size_t y{1}; y <= height; y++)
|
||||||
{
|
{
|
||||||
w->print() << FPoint(int(width) + 1, int(y)) << ' '; // clear █
|
w->print() << FPoint(int(width) + 1, int(y))
|
||||||
|
<< ' '; // clear █
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -250,7 +254,7 @@ void clearShadow (FWidget* w)
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( w->isWindowWidget() )
|
if ( w->isWindowWidget() )
|
||||||
w->unsetInheritBackground();
|
w->print() << FStyle (fc::Reset);
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
* *
|
* *
|
||||||
* This file is part of the Final Cut widget toolkit *
|
* This file is part of the Final Cut widget toolkit *
|
||||||
* *
|
* *
|
||||||
* Copyright 2015-2019 Markus Gans *
|
* Copyright 2015-2020 Markus Gans *
|
||||||
* *
|
* *
|
||||||
* The Final Cut is free software; you can redistribute it and/or *
|
* The Final Cut is free software; you can redistribute it and/or *
|
||||||
* modify it under the terms of the GNU Lesser General Public License *
|
* modify it under the terms of the GNU Lesser General Public License *
|
||||||
|
@ -936,6 +936,26 @@ enum colornames : FColor
|
||||||
Default = static_cast<FColor>(-1)
|
Default = static_cast<FColor>(-1)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Console style names
|
||||||
|
enum stylenames : FAttribute
|
||||||
|
{
|
||||||
|
Reset = 0,
|
||||||
|
Bold = 1,
|
||||||
|
Dim = 2,
|
||||||
|
Italic = 4,
|
||||||
|
Underline = 8,
|
||||||
|
Blink = 16,
|
||||||
|
Reverse = 32,
|
||||||
|
Standout = 64,
|
||||||
|
Invisible = 128,
|
||||||
|
Protected = 256,
|
||||||
|
CrossedOut = 512,
|
||||||
|
DoubleUnderline = 1024,
|
||||||
|
Transparent = 2048,
|
||||||
|
ColorOverlay = 4096,
|
||||||
|
InheritBackground = 8192
|
||||||
|
};
|
||||||
|
|
||||||
// Mouse/keyboard state values
|
// Mouse/keyboard state values
|
||||||
enum ButtonState
|
enum ButtonState
|
||||||
{
|
{
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
* *
|
* *
|
||||||
* This file is part of the Final Cut widget toolkit *
|
* This file is part of the Final Cut widget toolkit *
|
||||||
* *
|
* *
|
||||||
* Copyright 2019 Markus Gans *
|
* Copyright 2019-2020 Markus Gans *
|
||||||
* *
|
* *
|
||||||
* The Final Cut is free software; you can redistribute it and/or *
|
* The Final Cut is free software; you can redistribute it and/or *
|
||||||
* modify it under the terms of the GNU Lesser General Public License *
|
* modify it under the terms of the GNU Lesser General Public License *
|
||||||
|
@ -24,7 +24,7 @@
|
||||||
* ════════════════
|
* ════════════════
|
||||||
*
|
*
|
||||||
* ▕▔▔▔▔▔▔▔▔▔▔▔▔▏
|
* ▕▔▔▔▔▔▔▔▔▔▔▔▔▏
|
||||||
* ▕ FClassName ▏
|
* ▕ FColorPair ▏
|
||||||
* ▕▁▁▁▁▁▁▁▁▁▁▁▁▏
|
* ▕▁▁▁▁▁▁▁▁▁▁▁▁▏
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -116,5 +116,3 @@ class FColorPair
|
||||||
} // namespace finalcut
|
} // namespace finalcut
|
||||||
|
|
||||||
#endif // FCOLORPAIR_H
|
#endif // FCOLORPAIR_H
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
* *
|
* *
|
||||||
* This file is part of the Final Cut widget toolkit *
|
* This file is part of the Final Cut widget toolkit *
|
||||||
* *
|
* *
|
||||||
* Copyright 2014-2019 Markus Gans *
|
* Copyright 2014-2020 Markus Gans *
|
||||||
* *
|
* *
|
||||||
* The Final Cut is free software; you can redistribute it and/or *
|
* The Final Cut is free software; you can redistribute it and/or *
|
||||||
* modify it under the terms of the GNU Lesser General Public License *
|
* modify it under the terms of the GNU Lesser General Public License *
|
||||||
|
@ -68,6 +68,7 @@
|
||||||
#include <final/fstartoptions.h>
|
#include <final/fstartoptions.h>
|
||||||
#include <final/fstatusbar.h>
|
#include <final/fstatusbar.h>
|
||||||
#include <final/fstring.h>
|
#include <final/fstring.h>
|
||||||
|
#include <final/fstyle.h>
|
||||||
#include <final/fswitch.h>
|
#include <final/fswitch.h>
|
||||||
#include <final/fsystem.h>
|
#include <final/fsystem.h>
|
||||||
#include <final/fterm.h>
|
#include <final/fterm.h>
|
||||||
|
|
|
@ -0,0 +1,93 @@
|
||||||
|
/***********************************************************************
|
||||||
|
* fstyle.h - Style attribute of a character *
|
||||||
|
* *
|
||||||
|
* This file is part of the Final Cut widget toolkit *
|
||||||
|
* *
|
||||||
|
* Copyright 2020 Markus Gans *
|
||||||
|
* *
|
||||||
|
* The Final Cut is free software; you can redistribute it and/or *
|
||||||
|
* modify it under the terms of the GNU Lesser General Public License *
|
||||||
|
* as published by the Free Software Foundation; either version 3 of *
|
||||||
|
* the License, or (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* The Final Cut is distributed in the hope that it will be useful, *
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||||
|
* GNU Lesser General Public License for more details. *
|
||||||
|
* *
|
||||||
|
* You should have received a copy of the GNU Lesser General Public *
|
||||||
|
* License along with this program. If not, see *
|
||||||
|
* <http://www.gnu.org/licenses/>. *
|
||||||
|
***********************************************************************/
|
||||||
|
|
||||||
|
/* Standalone class
|
||||||
|
* ════════════════
|
||||||
|
*
|
||||||
|
* ▕▔▔▔▔▔▔▔▔▏
|
||||||
|
* ▕ FStyle ▏
|
||||||
|
* ▕▁▁▁▁▁▁▁▁▏
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef FSTYLE_H
|
||||||
|
#define FSTYLE_H
|
||||||
|
|
||||||
|
#if !defined (USE_FINAL_H) && !defined (COMPILE_FINAL_CUT)
|
||||||
|
#error "Only <final/final.h> can be included directly."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "final/fc.h"
|
||||||
|
#include "final/fstring.h"
|
||||||
|
#include "final/ftypes.h"
|
||||||
|
|
||||||
|
namespace finalcut
|
||||||
|
{
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// class FStyle
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
|
||||||
|
class FStyle
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// Constructors
|
||||||
|
explicit FStyle (FAttribute attr = fc::Reset)
|
||||||
|
: attribute{attr}
|
||||||
|
{ }
|
||||||
|
|
||||||
|
// Copy constructor
|
||||||
|
FStyle (const FStyle& style)
|
||||||
|
: attribute{style.attribute}
|
||||||
|
{ }
|
||||||
|
|
||||||
|
// Destructor
|
||||||
|
~FStyle() = default;
|
||||||
|
|
||||||
|
// Assignment operator (=)
|
||||||
|
FStyle& operator = (const FStyle& style)
|
||||||
|
{
|
||||||
|
attribute = style.attribute;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Accessor
|
||||||
|
const FString getClassName() const
|
||||||
|
{ return "FStyle"; }
|
||||||
|
|
||||||
|
FColor getStyle() const
|
||||||
|
{ return attribute; }
|
||||||
|
|
||||||
|
// Mutators
|
||||||
|
void setStyle (const FStyle& style)
|
||||||
|
{ attribute = style.attribute; }
|
||||||
|
|
||||||
|
void setStyle (FAttribute attr)
|
||||||
|
{ attribute = attr; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
// Data members
|
||||||
|
FAttribute attribute; // Save character attributes
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace finalcut
|
||||||
|
|
||||||
|
#endif // FSTYLE_H
|
|
@ -3,7 +3,7 @@
|
||||||
* *
|
* *
|
||||||
* This file is part of the Final Cut widget toolkit *
|
* This file is part of the Final Cut widget toolkit *
|
||||||
* *
|
* *
|
||||||
* Copyright 2017-2019 Markus Gans *
|
* Copyright 2017-2020 Markus Gans *
|
||||||
* *
|
* *
|
||||||
* The Final Cut is free software; you can redistribute it and/or *
|
* The Final Cut is free software; you can redistribute it and/or *
|
||||||
* modify it under the terms of the GNU Lesser General Public License *
|
* modify it under the terms of the GNU Lesser General Public License *
|
||||||
|
@ -44,6 +44,7 @@ namespace finalcut
|
||||||
{
|
{
|
||||||
|
|
||||||
// class forward declaration
|
// class forward declaration
|
||||||
|
class FStyle;
|
||||||
class FColorPair;
|
class FColorPair;
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
@ -72,6 +73,7 @@ class FTermBuffer
|
||||||
FTermBuffer& operator << (const FCharVector&);
|
FTermBuffer& operator << (const FCharVector&);
|
||||||
FTermBuffer& operator << (const std::string&);
|
FTermBuffer& operator << (const std::string&);
|
||||||
FTermBuffer& operator << (const std::wstring&);
|
FTermBuffer& operator << (const std::wstring&);
|
||||||
|
FTermBuffer& operator << (const FStyle&);
|
||||||
FTermBuffer& operator << (const FColorPair&);
|
FTermBuffer& operator << (const FColorPair&);
|
||||||
|
|
||||||
// Accessors
|
// Accessors
|
||||||
|
@ -95,6 +97,7 @@ class FTermBuffer
|
||||||
int writef (const FString&, Args&&...);
|
int writef (const FString&, Args&&...);
|
||||||
int write (const FString&);
|
int write (const FString&);
|
||||||
int write (wchar_t);
|
int write (wchar_t);
|
||||||
|
void write (const FStyle&);
|
||||||
void write (const FColorPair&);
|
void write (const FColorPair&);
|
||||||
FTermBuffer& write ();
|
FTermBuffer& write ();
|
||||||
|
|
||||||
|
@ -149,6 +152,13 @@ inline FTermBuffer& FTermBuffer::operator << (const std::wstring& wstring)
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
inline FTermBuffer& FTermBuffer::operator << (const FStyle& style)
|
||||||
|
{
|
||||||
|
write (style);
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
inline FTermBuffer& FTermBuffer::operator << (const FColorPair& pair)
|
inline FTermBuffer& FTermBuffer::operator << (const FColorPair& pair)
|
||||||
{
|
{
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
* *
|
* *
|
||||||
* This file is part of the Final Cut widget toolkit *
|
* This file is part of the Final Cut widget toolkit *
|
||||||
* *
|
* *
|
||||||
* Copyright 2017-2019 Markus Gans *
|
* Copyright 2017-2020 Markus Gans *
|
||||||
* *
|
* *
|
||||||
* The Final Cut is free software; you can redistribute it and/or *
|
* The Final Cut is free software; you can redistribute it and/or *
|
||||||
* modify it under the terms of the GNU Lesser General Public License *
|
* modify it under the terms of the GNU Lesser General Public License *
|
||||||
|
@ -59,6 +59,7 @@ typedef std::int64_t sInt64;
|
||||||
typedef long double lDouble;
|
typedef long double lDouble;
|
||||||
|
|
||||||
typedef uInt16 FColor;
|
typedef uInt16 FColor;
|
||||||
|
typedef uInt16 FAttribute;
|
||||||
typedef uInt32 FKey;
|
typedef uInt32 FKey;
|
||||||
typedef void* FDataPtr;
|
typedef void* FDataPtr;
|
||||||
|
|
||||||
|
@ -118,31 +119,31 @@ typedef struct
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
// Attribute byte #0
|
// Attribute byte #0
|
||||||
uInt8 bold : 1; // bold
|
uInt8 bold : 1; // bold
|
||||||
uInt8 dim : 1; // dim
|
uInt8 dim : 1; // dim
|
||||||
uInt8 italic : 1; // italic
|
uInt8 italic : 1; // italic
|
||||||
uInt8 underline : 1; // underline
|
uInt8 underline : 1; // underline
|
||||||
uInt8 blink : 1; // blink
|
uInt8 blink : 1; // blink
|
||||||
uInt8 reverse : 1; // reverse
|
uInt8 reverse : 1; // reverse
|
||||||
uInt8 standout : 1; // standout
|
uInt8 standout : 1; // standout
|
||||||
uInt8 invisible : 1; // invisible
|
uInt8 invisible : 1; // invisible
|
||||||
// Attribute byte #1
|
// Attribute byte #1
|
||||||
uInt8 protect : 1; // protect mode
|
uInt8 protect : 1; // protect mode
|
||||||
uInt8 crossed_out : 1; // crossed out
|
uInt8 crossed_out : 1; // crossed out
|
||||||
uInt8 dbl_underline : 1; // double underline
|
uInt8 dbl_underline : 1; // double underline
|
||||||
uInt8 alt_charset : 1; // alternate character set (vt100)
|
uInt8 alt_charset : 1; // alternate character set (vt100)
|
||||||
uInt8 pc_charset : 1; // pc character set (CP437)
|
uInt8 pc_charset : 1; // pc character set (CP437)
|
||||||
uInt8 transparent : 1; // transparent
|
uInt8 transparent : 1; // transparent
|
||||||
uInt8 color_overlay : 1; // color overlay
|
uInt8 color_overlay : 1; // color overlay
|
||||||
uInt8 inherit_bg : 1; // inherit background
|
uInt8 inherit_background : 1; // inherit background
|
||||||
// Attribute byte #2
|
// Attribute byte #2
|
||||||
uInt8 no_changes : 1; // no changes required
|
uInt8 no_changes : 1; // no changes required
|
||||||
uInt8 printed : 1; // is printed to VTerm
|
uInt8 printed : 1; // is printed to VTerm
|
||||||
uInt8 fullwidth_padding : 1; // padding char (after a full-width char)
|
uInt8 fullwidth_padding : 1; // padding char (after a full-width char)
|
||||||
uInt8 char_width : 2; // number of character cells on screen
|
uInt8 char_width : 2; // number of character cells on screen
|
||||||
uInt8 : 3; // padding bits
|
uInt8 : 3; // padding bits
|
||||||
// Attribute byte #3
|
// Attribute byte #3
|
||||||
uInt8 : 8; // padding byte
|
uInt8 : 8; // padding byte
|
||||||
} bit;
|
} bit;
|
||||||
|
|
||||||
uInt8 byte[4];
|
uInt8 byte[4];
|
||||||
|
|
|
@ -77,6 +77,7 @@ class FSystem;
|
||||||
class FTerm;
|
class FTerm;
|
||||||
class FTermBuffer;
|
class FTermBuffer;
|
||||||
class FTermDebugData;
|
class FTermDebugData;
|
||||||
|
class FStyle;
|
||||||
class FWidget;
|
class FWidget;
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
@ -141,6 +142,7 @@ class FVTerm
|
||||||
FVTerm& operator << (const FTermBuffer&);
|
FVTerm& operator << (const FTermBuffer&);
|
||||||
FVTerm& operator << (const std::vector<FChar>&);
|
FVTerm& operator << (const std::vector<FChar>&);
|
||||||
FVTerm& operator << (const FPoint&);
|
FVTerm& operator << (const FPoint&);
|
||||||
|
FVTerm& operator << (const FStyle&);
|
||||||
FVTerm& operator << (const FColorPair&);
|
FVTerm& operator << (const FColorPair&);
|
||||||
|
|
||||||
// Accessors
|
// Accessors
|
||||||
|
@ -305,6 +307,7 @@ class FVTerm
|
||||||
int print (FChar&);
|
int print (FChar&);
|
||||||
int print (FTermArea*, FChar&);
|
int print (FTermArea*, FChar&);
|
||||||
virtual void print (const FPoint&);
|
virtual void print (const FPoint&);
|
||||||
|
virtual void print (const FStyle&);
|
||||||
virtual void print (const FColorPair&);
|
virtual void print (const FColorPair&);
|
||||||
virtual FVTerm& print();
|
virtual FVTerm& print();
|
||||||
static void flush();
|
static void flush();
|
||||||
|
@ -579,6 +582,13 @@ inline FVTerm& FVTerm::operator << (const FPoint& pos)
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
inline FVTerm& FVTerm::operator << (const FStyle& t_style)
|
||||||
|
{
|
||||||
|
print (t_style);
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
inline FVTerm& FVTerm::operator << (const FColorPair& pair)
|
inline FVTerm& FVTerm::operator << (const FColorPair& pair)
|
||||||
{
|
{
|
||||||
|
@ -851,7 +861,7 @@ inline bool FVTerm::unsetColorOverlay()
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
inline bool FVTerm::setInheritBackground (bool enable)
|
inline bool FVTerm::setInheritBackground (bool enable)
|
||||||
{ return (next_attribute.attr.bit.inherit_bg = enable); }
|
{ return (next_attribute.attr.bit.inherit_background = enable); }
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
inline bool FVTerm::setInheritBackground()
|
inline bool FVTerm::setInheritBackground()
|
||||||
|
@ -943,7 +953,7 @@ inline bool FVTerm::isTransShadow()
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
inline bool FVTerm::isInheritBackground()
|
inline bool FVTerm::isInheritBackground()
|
||||||
{ return next_attribute.attr.bit.inherit_bg; }
|
{ return next_attribute.attr.bit.inherit_background; }
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
inline bool FVTerm::isMonochron()
|
inline bool FVTerm::isMonochron()
|
||||||
|
|
|
@ -19,6 +19,7 @@ noinst_PROGRAMS = \
|
||||||
foptimove_test \
|
foptimove_test \
|
||||||
foptiattr_test \
|
foptiattr_test \
|
||||||
fcolorpair_test \
|
fcolorpair_test \
|
||||||
|
fstyle_test \
|
||||||
fstring_test \
|
fstring_test \
|
||||||
fsize_test \
|
fsize_test \
|
||||||
fpoint_test \
|
fpoint_test \
|
||||||
|
@ -36,6 +37,7 @@ ftermfreebsd_test_SOURCES = ftermfreebsd-test.cpp
|
||||||
foptimove_test_SOURCES = foptimove-test.cpp
|
foptimove_test_SOURCES = foptimove-test.cpp
|
||||||
foptiattr_test_SOURCES = foptiattr-test.cpp
|
foptiattr_test_SOURCES = foptiattr-test.cpp
|
||||||
fcolorpair_test_SOURCES = fcolorpair-test.cpp
|
fcolorpair_test_SOURCES = fcolorpair-test.cpp
|
||||||
|
fstyle_test_SOURCES = fstyle-test.cpp
|
||||||
fstring_test_SOURCES = fstring-test.cpp
|
fstring_test_SOURCES = fstring-test.cpp
|
||||||
fsize_test_SOURCES = fsize-test.cpp
|
fsize_test_SOURCES = fsize-test.cpp
|
||||||
fpoint_test_SOURCES = fpoint-test.cpp
|
fpoint_test_SOURCES = fpoint-test.cpp
|
||||||
|
@ -53,6 +55,7 @@ TESTS = fobject_test \
|
||||||
foptimove_test \
|
foptimove_test \
|
||||||
foptiattr_test \
|
foptiattr_test \
|
||||||
fcolorpair_test \
|
fcolorpair_test \
|
||||||
|
fstyle_test \
|
||||||
fstring_test \
|
fstring_test \
|
||||||
fsize_test \
|
fsize_test \
|
||||||
fpoint_test \
|
fpoint_test \
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
* *
|
* *
|
||||||
* This file is part of the Final Cut widget toolkit *
|
* This file is part of the Final Cut widget toolkit *
|
||||||
* *
|
* *
|
||||||
* Copyright 2019 Markus Gans *
|
* Copyright 2019-2020 Markus Gans *
|
||||||
* *
|
* *
|
||||||
* The Final Cut is free software; you can redistribute it and/or *
|
* The Final Cut is free software; you can redistribute it and/or *
|
||||||
* modify it under the terms of the GNU Lesser General Public License *
|
* modify it under the terms of the GNU Lesser General Public License *
|
||||||
|
|
|
@ -0,0 +1,156 @@
|
||||||
|
/***********************************************************************
|
||||||
|
* fstyle-test.cpp - FStyle unit tests *
|
||||||
|
* *
|
||||||
|
* This file is part of the Final Cut widget toolkit *
|
||||||
|
* *
|
||||||
|
* Copyright 2019 Markus Gans *
|
||||||
|
* *
|
||||||
|
* The Final Cut is free software; you can redistribute it and/or *
|
||||||
|
* modify it under the terms of the GNU Lesser General Public License *
|
||||||
|
* as published by the Free Software Foundation; either version 3 of *
|
||||||
|
* the License, or (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* The Final Cut is distributed in the hope that it will be useful, *
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||||
|
* GNU Lesser General Public License for more details. *
|
||||||
|
* *
|
||||||
|
* You should have received a copy of the GNU Lesser General Public *
|
||||||
|
* License along with this program. If not, see *
|
||||||
|
* <http://www.gnu.org/licenses/>. *
|
||||||
|
***********************************************************************/
|
||||||
|
|
||||||
|
#include <limits>
|
||||||
|
|
||||||
|
#include <cppunit/BriefTestProgressListener.h>
|
||||||
|
#include <cppunit/CompilerOutputter.h>
|
||||||
|
#include <cppunit/extensions/HelperMacros.h>
|
||||||
|
#include <cppunit/TestFixture.h>
|
||||||
|
#include <cppunit/TestResult.h>
|
||||||
|
#include <cppunit/TestResultCollector.h>
|
||||||
|
#include <cppunit/TestRunner.h>
|
||||||
|
|
||||||
|
#include <final/final.h>
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// class FStyleTest
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
|
||||||
|
class FStyleTest : public CPPUNIT_NS::TestFixture
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
FStyleTest()
|
||||||
|
{ }
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void classNameTest();
|
||||||
|
void noArgumentTest();
|
||||||
|
void copyConstructorTest();
|
||||||
|
void assignmentTest();
|
||||||
|
void setColorTest();
|
||||||
|
void swapTest();
|
||||||
|
|
||||||
|
private:
|
||||||
|
// Adds code needed to register the test suite
|
||||||
|
CPPUNIT_TEST_SUITE (FStyleTest);
|
||||||
|
|
||||||
|
// Add a methods to the test suite
|
||||||
|
CPPUNIT_TEST (classNameTest);
|
||||||
|
CPPUNIT_TEST (noArgumentTest);
|
||||||
|
CPPUNIT_TEST (copyConstructorTest);
|
||||||
|
CPPUNIT_TEST (assignmentTest);
|
||||||
|
CPPUNIT_TEST (setColorTest);
|
||||||
|
|
||||||
|
// End of test suite definition
|
||||||
|
CPPUNIT_TEST_SUITE_END();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
void FStyleTest::classNameTest()
|
||||||
|
{
|
||||||
|
const finalcut::FStyle s;
|
||||||
|
const finalcut::FString& classname = s.getClassName();
|
||||||
|
CPPUNIT_ASSERT ( classname == "FStyle" );
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
void FStyleTest::noArgumentTest()
|
||||||
|
{
|
||||||
|
const finalcut::FStyle style{};
|
||||||
|
CPPUNIT_ASSERT ( style.getStyle() == finalcut::fc::Reset );
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
void FStyleTest::copyConstructorTest()
|
||||||
|
{
|
||||||
|
const finalcut::FStyle style1a;
|
||||||
|
CPPUNIT_ASSERT ( style1a.getStyle() == finalcut::fc::Reset );
|
||||||
|
finalcut::FStyle style1b (style1a);
|
||||||
|
CPPUNIT_ASSERT ( style1b.getStyle() == finalcut::fc::Reset );
|
||||||
|
|
||||||
|
const finalcut::FStyle style2a (finalcut::fc::Bold );
|
||||||
|
CPPUNIT_ASSERT ( style2a.getStyle() == finalcut::fc::Bold );
|
||||||
|
const finalcut::FStyle style2b (style2a);
|
||||||
|
CPPUNIT_ASSERT ( style2b.getStyle() == finalcut::fc::Bold );
|
||||||
|
|
||||||
|
const finalcut::FStyle style3a (finalcut::fc::Bold + finalcut::fc::Dim);
|
||||||
|
CPPUNIT_ASSERT ( style3a.getStyle() == (finalcut::fc::Bold | finalcut::fc::Dim) );
|
||||||
|
const finalcut::FStyle style3b (style3a);
|
||||||
|
CPPUNIT_ASSERT ( style3b.getStyle() == (finalcut::fc::Bold | finalcut::fc::Dim) );
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
void FStyleTest::assignmentTest()
|
||||||
|
{
|
||||||
|
const finalcut::FStyle style1a;
|
||||||
|
const finalcut::FStyle style1b = style1a;
|
||||||
|
CPPUNIT_ASSERT ( style1b.getStyle() == finalcut::fc::Reset );
|
||||||
|
|
||||||
|
const finalcut::FStyle style2a (finalcut::fc::Italic );
|
||||||
|
const finalcut::FStyle style2b = style2a;
|
||||||
|
CPPUNIT_ASSERT ( style2b.getStyle() == finalcut::fc::Italic );
|
||||||
|
|
||||||
|
const finalcut::FStyle style3a (finalcut::fc::Underline | finalcut::fc::Blink);
|
||||||
|
const finalcut::FStyle style3b = style3a;
|
||||||
|
CPPUNIT_ASSERT ( style3b.getStyle() == (finalcut::fc::Underline + finalcut::fc::Blink) );
|
||||||
|
|
||||||
|
finalcut::FStyle style4 = finalcut::FStyle();
|
||||||
|
CPPUNIT_ASSERT ( style4.getStyle() == finalcut::fc::Reset );
|
||||||
|
style4 = finalcut::FStyle(finalcut::fc::Bold | finalcut::fc::Dim);
|
||||||
|
CPPUNIT_ASSERT ( style4.getStyle() == (finalcut::fc::Bold | finalcut::fc::Dim) );
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
void FStyleTest::setColorTest()
|
||||||
|
{
|
||||||
|
finalcut::FStyle style1;
|
||||||
|
style1.setStyle (finalcut::fc::Reverse);
|
||||||
|
CPPUNIT_ASSERT ( style1.getStyle() == finalcut::fc::Reverse );
|
||||||
|
|
||||||
|
finalcut::FStyle style2 (finalcut::fc::Reverse);
|
||||||
|
style2.setStyle (finalcut::fc::Standout);
|
||||||
|
CPPUNIT_ASSERT ( style2.getStyle() == finalcut::fc::Standout );
|
||||||
|
|
||||||
|
finalcut::FStyle style3 (finalcut::fc::Protected | finalcut::fc::CrossedOut);
|
||||||
|
style3.setStyle (finalcut::fc::Invisible);
|
||||||
|
CPPUNIT_ASSERT ( style3.getStyle() == finalcut::fc::Invisible );
|
||||||
|
finalcut::FStyle style4 (finalcut::fc::DoubleUnderline);
|
||||||
|
style3.setStyle (style4);
|
||||||
|
CPPUNIT_ASSERT ( style3.getStyle() == finalcut::fc::DoubleUnderline );
|
||||||
|
|
||||||
|
finalcut::FStyle style5 (finalcut::fc::Transparent);
|
||||||
|
CPPUNIT_ASSERT ( style5.getStyle() == finalcut::fc::Transparent );
|
||||||
|
style5.setStyle (finalcut::fc::Reset);
|
||||||
|
CPPUNIT_ASSERT ( style5.getStyle() == finalcut::fc::Reset );
|
||||||
|
style5.setStyle (finalcut::fc::ColorOverlay);
|
||||||
|
CPPUNIT_ASSERT ( style5.getStyle() == finalcut::fc::ColorOverlay );
|
||||||
|
style5.setStyle (finalcut::fc::InheritBackground);
|
||||||
|
CPPUNIT_ASSERT ( style5.getStyle() == finalcut::fc::InheritBackground );
|
||||||
|
}
|
||||||
|
|
||||||
|
// Put the test suite in the registry
|
||||||
|
CPPUNIT_TEST_SUITE_REGISTRATION (FStyleTest);
|
||||||
|
|
||||||
|
// The general unit test main part
|
||||||
|
#include <main-test.inc>
|
Loading…
Reference in New Issue