Introduce new TDE widget style that scales with font DPI.

Style is based on the 'phase' style which according to its author
David Johnson, is "abandonware" (per 2020-09-24 email to Author).

This initial commit is based on code developed <= 2020-07-20 and has
been tested and actively used on Author's systems to date.

Signed-off-by: Vincent Reher <tde@4reher.org>
feature/Phase2_style
Vincent Reher 3 years ago
parent f39f559fbf
commit 714ac1f0c4

@ -11,3 +11,4 @@
add_subdirectory( dotnet )
add_subdirectory( phase )
add_subdirectory( phase2 )

@ -1 +1 @@
SUBDIRS = dotnet phase
SUBDIRS = dotnet phase phase2

@ -0,0 +1,3 @@
##### create translation templates ##############
tde_l10n_auto_add_subdirectories( )

@ -0,0 +1,49 @@
#################################################
#
# (C) 2021 Vincent Reher
# tde (AT) 4reher.org
#
# Improvements and feedback are welcome
#
# This file is released under GPL >= 2
#
#################################################
add_definitions(
-DQT_PLUGIN
)
include_directories(
${TQT_INCLUDE_DIRS}
${TDE_INCLUDE_DIR}
${CMAKE_CURRENT_BINARY_DIR}
)
link_directories(
${TQT_LIBRARY_DIRS}
)
add_subdirectory( config )
##### other data ################################
tde_create_translated_desktop(
SOURCE phase2.themerc
DESTINATION ${DATA_INSTALL_DIR}/tdestyle/themes
PO_DIR style-themes
)
##### phase2style #################################
set( target phase2style )
set( ${target}_SRCS
phase2style.cpp phase2style.h shapes.h scaling.h
)
tde_add_kpart( ${target} AUTOMOC
SOURCES ${${target}_SRCS}
LINK tdefx-shared
DESTINATION ${PLUGIN_INSTALL_DIR}/plugins/styles
)

@ -0,0 +1,22 @@
AUTOMAKE_OPTIONS = foreign
SUBDIRS = config
KDE_CXXFLAGS = -DQT_PLUGIN
INCLUDES = $(all_includes)
styledir = $(kde_datadir)/tdestyle/themes
style_DATA = phase2.themerc
EXTRA_DIST = $(style_DATA)
noinst_HEADERS = phase2style.h bitmaps.h shapes.h arrows.h
kde_style_LTLIBRARIES = phase2style.la
phase2style_la_SOURCES = phase2style.cpp
phase2style_la_LDFLAGS = $(all_libraries) $(KDE_PLUGIN) -module $(LIB_QT) $(LIB_TDECORE) $(LIB_TDEUI) -ltdefx
phase2style_la_LIBADD = -ltdefx -ltdecore
phase2style_la_METASOURCES = AUTO
DISTCLEANFILES = $(phase2style_la_METASOURCES)

@ -0,0 +1,67 @@
//////////////////////////////////////////////////////////////////////////////
// bitmaps.h
// -------------------
// Bitmaps for Phase style
// -------------------
// Copyright (c) 2004 David Johnson
// Please see the phasestyle.h file for copyright and license information.
//////////////////////////////////////////////////////////////////////////////
// Note: the "light" bits are drawn with midlight color
// Arrows (6x6)
static TQBitmap uarrow;
static const unsigned char uarrow_bits[] = {
0x00, 0x0c, 0x1e, 0x3f, 0x3f, 0x00};
static TQBitmap darrow;
static const unsigned char darrow_bits[] = {
0x00, 0x3f, 0x3f, 0x1e, 0x0c, 0x00};
static TQBitmap larrow;
static const unsigned char larrow_bits[] = {
0x18, 0x1c, 0x1e, 0x1e, 0x1c, 0x18};
static TQBitmap rarrow;
static const unsigned char rarrow_bits[] = {
0x06, 0x0e, 0x1e, 0x1e, 0x0e, 0x06};
// plus/minus "arrows"
static TQBitmap bplus;
static const unsigned char bplus_bits[] = {
0x0c, 0x0c, 0x3f, 0x3f, 0x0c, 0x0c};
static TQBitmap bminus;
static const unsigned char bminus_bits[] = {
0x00, 0x00, 0x3f, 0x3f, 0x00, 0x00};
// checkmark (9x9)
static TQBitmap bcheck;
static const unsigned char bcheck_bits[] = {
0x00, 0x00, 0x80, 0x01, 0xc0, 0x01, 0xe0, 0x00, 0x73, 0x00, 0x3f, 0x00,
0x1e, 0x00, 0x0c, 0x00, 0x00, 0x00};
// expander arrows (9x9)
static TQBitmap dexpand;
static const unsigned char dexpand_bits[] = {
0x00, 0x00, 0x00, 0x00, 0xff, 0x01, 0xfe, 0x00, 0x7c, 0x00, 0x38, 0x00,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00};
static TQBitmap rexpand;
static const unsigned char rexpand_bits[] = {
0x04, 0x00, 0x0c, 0x00, 0x1c, 0x00, 0x3c, 0x00, 0x7c, 0x00, 0x3c, 0x00,
0x1c, 0x00, 0x0c, 0x00, 0x04, 0x00};
// scrollbar doodads (4x4)
static TQBitmap doodad_mid;
static const unsigned char doodad_mid_bits[] = {
0x07, 0x01, 0x01, 0x00};
static TQBitmap doodad_light;
static const unsigned char doodad_light_bits[] = {
0x00, 0x08, 0x08, 0x0e};

@ -0,0 +1,3 @@
##### create translation templates ##############
tde_l10n_create_template( "tdestyle_phase_config" )

@ -0,0 +1,36 @@
#################################################
#
# (C) 2021 Vincent Reher
# tde (AT) 4reher.org
#
# Improvements and feedback are welcome
#
# This file is released under GPL >= 2
#
#################################################
include_directories(
${TQT_INCLUDE_DIRS}
${TDE_INCLUDE_DIR}
${CMAKE_CURRENT_BINARY_DIR}
)
link_directories(
${TQT_LIBRARY_DIRS}
)
##### tdestyle_phase_config ########################
set( target tdestyle_phase2_config )
set( ${target}_SRCS
phase2styleconfig.h
phase2styleconfig.cpp
styledialog.ui
)
tde_add_kpart( ${target} AUTOMOC
SOURCES ${${target}_SRCS}
LINK tdeui-shared
DESTINATION ${PLUGIN_INSTALL_DIR}
)

@ -0,0 +1,12 @@
INCLUDES = $(all_includes)
noinst_HEADERS = phase2styleconfig.h
kde_module_LTLIBRARIES = tdestyle_phase2_config.la
tdestyle_phase_config_la_LDFLAGS = $(all_libraries) $(KDE_PLUGIN) -module $(LIB_QT) $(LIB_TDECORE) $(LIB_TDEUI) -ltdefx
tdestyle_phase_config_la_LIBADD = $(LIB_TDEUI)
tdestyle_phase_config_la_SOURCES = phases2tyleconfig.cpp styledialog.ui
tdestyle_phase_config_la_METASOURCES = AUTO
messages: rc.cpp
$(XGETTEXT) *.cpp *.h -o $(podir)/tdestyle_phase2_config.pot

@ -0,0 +1,111 @@
//////////////////////////////////////////////////////////////////////////////
// phasestyleconfig.cpp
// -------------------
// Config dialog for Phase widget style
// -------------------
// Copyright (c) 2004 David Johnson <david@usermode.org>
// Please see the header file for copyright and license information.
//////////////////////////////////////////////////////////////////////////////
#include <tqsettings.h>
#include <tqcheckbox.h>
#include <tqgroupbox.h>
#include <tqwhatsthis.h>
#include <tdelocale.h>
#include <tdeglobal.h>
#include "phase2styleconfig.h"
#include "styledialog.h"
//////////////////////////////////////////////////////////////////////////////
// PhaseStyleConfig Class //
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// PhaseStyleConfig()
// ----------------
// Constructor
PhaseStyleConfig::PhaseStyleConfig(TQWidget* parent) : StyleDialog(parent)
{
TDEGlobal::locale()->insertCatalogue("tdestyle_phase_config");
TQSettings settings;
oldgradients =
settings.readBoolEntry("/phasestyle/Settings/gradients", true);
gradients->setChecked(oldgradients);
oldhighlights =
settings.readBoolEntry("/phasestyle/Settings/highlights", true);
highlights->setChecked(oldhighlights);
// connections
connect(gradients, TQT_SIGNAL(toggled(bool)),
this, TQT_SLOT(updateChanged()));
connect(highlights, TQT_SIGNAL(toggled(bool)),
this, TQT_SLOT(updateChanged()));
}
//////////////////////////////////////////////////////////////////////////////
// ~PhaseStyleConfig()
// -----------------
// Destructor
PhaseStyleConfig::~PhaseStyleConfig()
{
TDEGlobal::locale()->removeCatalogue("tdestyle_phase_config");
}
//////////////////////////////////////////////////////////////////////////////
// selectionChanged()
// ------------------
// Selection has changed
void PhaseStyleConfig::updateChanged()
{
bool update = false;
if ((gradients->isChecked() != oldgradients) ||
(highlights->isChecked() != oldhighlights)) {
update = true;
}
emit changed(update);
}
//////////////////////////////////////////////////////////////////////////////
// save()
// ------
// Save the settings
void PhaseStyleConfig::save()
{
TQSettings settings;
settings.writeEntry("/phasestyle/Settings/gradients",
gradients->isChecked());
settings.writeEntry("/phasestyle/Settings/highlights",
highlights->isChecked());
}
//////////////////////////////////////////////////////////////////////////////
// defaults()
// ----------
// Set to the defaults
void PhaseStyleConfig::defaults()
{
gradients->setChecked(true);
highlights->setChecked(true);
}
//////////////////////////////////////////////////////////////////////////////
// Plugin Stuff //
//////////////////////////////////////////////////////////////////////////////
extern "C"
{
KDE_EXPORT TQObject* allocate_tdestyle_config(TQWidget* parent) {
return(TQT_TQOBJECT(new PhaseStyleConfig(parent)));
}
}
#include "phase2styleconfig.moc"

@ -0,0 +1,57 @@
//////////////////////////////////////////////////////////////////////////////
// phasestyleconfig.h
// -------------------
// Config dialog for Phase widget style
// -------------------
// Copyright (c) 2004 David Johnson <david@usermode.org>
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//////////////////////////////////////////////////////////////////////////////
#ifndef PHASESTYLECONFIG_H
#define PHASESTYLECONFIG_H
#include "styledialog.h"
class TDEConfig;
class PhaseStyleConfig : public StyleDialog
{
Q_OBJECT
public:
PhaseStyleConfig(TQWidget* parent);
~PhaseStyleConfig();
signals:
void changed(bool);
public slots:
void save();
void defaults();
protected slots:
void updateChanged();
private:
bool oldgradients;
bool oldhighlights;
};
#endif // PHASESTYLECONFIG_H

@ -0,0 +1,70 @@
<!DOCTYPE UI><UI version="3.2" stdsetdef="1">
<class>StyleDialog</class>
<widget class="TQWidget">
<property name="name">
<cstring>StyleDialog</cstring>
</property>
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>217</width>
<height>103</height>
</rect>
</property>
<property name="caption">
<string>Style Dialog</string>
</property>
<hbox>
<property name="name">
<cstring>unnamed</cstring>
</property>
<widget class="TQGroupBox">
<property name="name">
<cstring>stylebox</cstring>
</property>
<property name="frameShape">
<enum>GroupBoxPanel</enum>
</property>
<property name="frameShadow">
<enum>Sunken</enum>
</property>
<property name="title">
<string>Style Settings</string>
</property>
<vbox>
<property name="name">
<cstring>unnamed</cstring>
</property>
<widget class="TQCheckBox">
<property name="name">
<cstring>gradients</cstring>
</property>
<property name="text">
<string>Use &amp;gradients</string>
</property>
<property name="whatsThis" stdset="0">
<string>This option will draw buttons and several other widgets using a gradient texture</string>
</property>
</widget>
<widget class="TQCheckBox">
<property name="name">
<cstring>highlights</cstring>
</property>
<property name="text">
<string>Highlight on &amp;mouse hover</string>
</property>
<property name="whatsThis" stdset="0">
<string>This option will highlight buttons and several other widgets when the mouse cursor is over them</string>
</property>
</widget>
</vbox>
</widget>
</hbox>
</widget>
<tabstops>
<tabstop>gradients</tabstop>
<tabstop>highlights</tabstop>
</tabstops>
<layoutdefaults spacing="6" margin="11"/>
</UI>

@ -0,0 +1,86 @@
[Misc]
Name=Phase2
Name[br]=Prantadoù
Name[ca]=Fase
Name[el]=Φάση
Name[eo]=Fazo
Name[es]=Fase
Name[et]=Faas
Name[eu]=Fasea
Name[fa]=گام
Name[fi]=Vaihe
Name[fy]=Faze
Name[ga]=Pas
Name[he]=קרני לייזר
Name[hi]=फेज़
Name[is]=Fasi
Name[it]=Fase
Name[ja]=位相
Name[ka]=ფაზა
Name[mk]=Фаза
Name[ms]=Fasa
Name[nb]=Fase
Name[nds]=Phaas
Name[ne]=चरण
Name[nn]=Fase
Name[pa]=ਪੜਾਅ
Name[pl]=Faza
Name[ru]=Фаза
Name[sl]=Faza
Name[sr]=Фаза
Name[sr@Latn]=Faza
Name[sv]=Fas
Name[ta]=பகுதி
Name[tr]=Faz
Name[uk]=Фаза
Name[vi]=Pha
Name[zh_TW]=相
ConfigPage=tdestyle_phase2_config
Comment=Clean classical look that scales with current widget font
Comment[bg]=Семпъл и изчистен стил
Comment[bs]=Jednostavan klasični stil
Comment[ca]=Un estil clàssic i net
Comment[cs]=Klasický čistý vzhled
Comment[da]=Rent klassisk udseende
Comment[de]=Ein einfaches und klares Aussehen
Comment[el]=Ένα απλό και κλασσικό στυλ
Comment[es]=Un estilo clásico y claro
Comment[et]=Lihtne klassikaline välimus
Comment[eu]=Itxura garbi klasikoa
Comment[fa]=ظاهر کلاسیک واضح
Comment[fi]=Puhdas perinteinen tyyli
Comment[fr]=Un style simple et propre
Comment[fy]=In klassyk en moai uterlik
Comment[gl]=Apariencia sinxela e clásica
Comment[he]=סגנון פשוט ונקי
Comment[hi]=साफ शास्त्रीय रूप
Comment[hu]=Tiszta, egyszerű stílus
Comment[is]=Einfaldur og hreinlegur stíll
Comment[it]=Orologio classico
Comment[ja]=単純で清潔なスタイル
Comment[ka]=სადა და კლასიკური სტილი
Comment[mk]=Чист класичен изглед
Comment[ms]=Rupa klasik bersih
Comment[nb]=Enkelt klassisk utseende
Comment[nds]=Oprüümt klass'sch Utsehn
Comment[ne]=सफा उत्कृष्ट ढाँचा
Comment[nl]=Een klassiek en schoon uiterlijk
Comment[nn]=Enkel og klassisk utsjånad
Comment[pa]=ਸਾਫ਼ ਟਕਸਾਲੀ ਦਿੱਖ
Comment[pl]=Czysty, klasyczny wygląd
Comment[pt]=Um estilo clássico limpo
Comment[pt_BR]=Uma aprência clássica limpa
Comment[ru]=Простой классический стиль
Comment[sk]=Jednoduchý klasický vzhľad
Comment[sl]=Čist klasičen izgled
Comment[sr]=Чист класичан изглед
Comment[sr@Latn]=Čist klasičan izgled
Comment[sv]=Ren och klassisk stil
Comment[ta]=விசேஷ பார்வையைத் துடை
Comment[tr]=Temiz ve klasik bir görünüm
Comment[uk]=Акуратний, класичний стиль
Comment[vi]=Sạch, kiểu dáng truyền thống
Comment[zh_CN]=简洁经典的外观
Comment[zh_TW]=乾淨的傳統外觀
[KDE]
WidgetStyle=Phase2

File diff suppressed because it is too large Load Diff

@ -0,0 +1,280 @@
//////////////////////////////////////////////////////////////////////////////
// phase2style.h
// -------------------
// TQt/TDE widget style
// -------------------
// Copyright (c) 2004 David Johnson <david@usermode.org>
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//////////////////////////////////////////////////////////////////////////////
#ifndef PHASE2STYLE_H
#define PHASE2STYLE_H
#include <tdestyle.h>
#include <tqcolor.h>
#include <tqintcache.h>
class KPixmap;
class GradientSet
{
public:
enum GradientType {
Horizontal,
Vertical,
HorizontalReverse,
VerticalReverse,
GradientTypeCount
};
GradientSet(const TQColor &color, int size);
~GradientSet();
KPixmap* gradient(bool horizontal, bool reverse);
private:
KPixmap *set[GradientTypeCount];
TQColor color_;
int size_;
};
class Phase2Style : public TDEStyle
{
Q_OBJECT
public:
Phase2Style();
virtual ~Phase2Style();
void applicationPolish(const TQStyleControlElementData &ceData, ControlElementFlags elementFlags, void *);
void polish(const TQStyleControlElementData &ceData, ControlElementFlags elementFlags, void *);
void polish(TQPalette &pal);
void unPolish(const TQStyleControlElementData &ceData, ControlElementFlags elementFlags, void *);
void drawPrimitive(TQ_PrimitiveElement element,
TQPainter *painter,
const TQStyleControlElementData &ceData,
ControlElementFlags elementFlags,
const TQRect &rect,
const TQColorGroup &group,
SFlags flags = Style_Default,
const TQStyleOption &option = TQStyleOption::Default) const;
void drawTDEStylePrimitive(TDEStylePrimitive element,
TQPainter *painter,
const TQStyleControlElementData &ceData,
ControlElementFlags elementFlags,
const TQRect &rect,
const TQColorGroup &group,
SFlags flags = Style_Default,
const TQStyleOption &option = TQStyleOption::Default,
const TQWidget *widget = 0) const;
void drawControl(TQ_ControlElement element,
TQPainter *painter,
const TQStyleControlElementData &ceData,
ControlElementFlags elementFlags,
const TQRect &rect,
const TQColorGroup &group,
SFlags flags = Style_Default,
const TQStyleOption &option = TQStyleOption::Default,
const TQWidget *widget = 0) const;
void drawControlMask(TQ_ControlElement element,
TQPainter *painter,
const TQStyleControlElementData &ceData,
ControlElementFlags elementFlags,
const TQRect &rect,
const TQStyleOption &option = TQStyleOption::Default,
const TQWidget *widget = 0) const;
void drawComplexControl(TQ_ComplexControl control,
TQPainter *painter,
const TQStyleControlElementData &ceData,
ControlElementFlags elementFlags,
const TQRect &rect,
const TQColorGroup &group,
SFlags flags = Style_Default,
SCFlags controls = SC_All,
SCFlags active = SC_None,
const TQStyleOption &option = TQStyleOption::Default,
const TQWidget *widget = 0) const;
void drawComplexControlMask(TQ_ComplexControl control,
TQPainter *painter,
const TQStyleControlElementData &ceData,
const ControlElementFlags elementFlags,
const TQRect &rect,
const TQStyleOption &option = TQStyleOption::Default,
const TQWidget *widget = 0) const;
int pixelMetric(PixelMetric metric, const TQStyleControlElementData &ceData, ControlElementFlags elementFlags,
const TQWidget *widget = 0) const;
TQRect subRect(SubRect rect, const TQStyleControlElementData &ceData, const ControlElementFlags elementFlags, const TQWidget *widget = 0) const;
TQRect querySubControlMetrics(TQ_ComplexControl control,
const TQStyleControlElementData &ceData,
ControlElementFlags elementFlags,
SubControl subcontrol,
const TQStyleOption &option = TQStyleOption::Default,
const TQWidget *widget = 0) const;
TQSize sizeFromContents(ContentsType contents,
const TQStyleControlElementData &ceData,
ControlElementFlags elementFlags,
const TQSize &contentsize,
const TQStyleOption& option = TQStyleOption::Default,
const TQWidget *widget = 0) const;
int styleHint(TQ_StyleHint, const TQStyleControlElementData &ceData, ControlElementFlags elementFlags,
const TQStyleOption & = TQStyleOption::Default,
TQStyleHintReturn * = 0, const TQWidget * = 0 ) const;
//#include "plastik-excerpt.h"
private:
//Phase2Style(const Phase2Style &);
//Phase2Style& operator=(const Phase2Style &);
void drawPhaseBevel(TQPainter *painter,
int x, int y, int w, int h,
const TQColorGroup &group,
const TQColor &fill,
bool sunken=false,
bool horizontal=true,
bool reverse=false) const;
void drawPhaseButton(TQPainter *painter,
int x, int y, int w, int h,
const TQColorGroup &group,
const TQColor &fill,
bool sunken=false) const;
void drawPhasePanel(TQPainter *painter,
int x, int y, int w, int h,
const TQColorGroup &group,
bool sunken=false,
const TQBrush *fill=NULL) const;
void drawPhaseTab(TQPainter *painter,
int x, int y, int w, int h,
const TQColorGroup &group,
const TQStyleControlElementData &ceData,
ControlElementFlags elementFlags,
const TQStyleOption &option,
const SFlags flags) const;
void drawPhaseGradient(TQPainter *painter,
const TQRect &rect,
TQColor color,
bool horizontal,
int px=0, int py=0,
int pw=-1, int ph=-1,
bool reverse=false) const;
bool flatToolbar(
const TQStyleControlElementData &ceData,
const ControlElementFlags elementFlags,
const TQToolBar* toolbar
) const;
bool objectEventHandler(
const TQStyleControlElementData &ceData,
ControlElementFlags elementFlags,
void* source,
TQEvent* e
);
//--------------------------------------------------------------------------
// Low-level image drawing functions
//--------------------------------------------------------------------------
//--- Taken from Highcontrast style:
void drawRect(
TQPainter* painter,
TQRect rect,
int offset = 0,
bool filled = true
) const;
void drawRoundRect(
TQPainter* painter,
TQRect rect,
int offset = 0,
bool filled = true
) const;
void drawEllipse(
TQPainter* painter,
TQRect rect,
int offset = 0,
bool filled = true
) const;
void drawArrow(
TQPainter* painter,
TQRect rect,
TQ_PrimitiveElement arrow,
int offset = 0
) const;
//--- Taken from legacy code:
void drawArrowBitmap(
TQPainter* painter,
TQRect rect,
TQ_PrimitiveElement arrow
) const;
//--- New code:
void drawCheckmark(
TQPainter* painter,
TQRect rect,
int offset = 0
) const;
//--------------------------------------------------------------------------
// Image generation functions
//--------------------------------------------------------------------------
TQPixmap * Create_Arrow_Pix(
TQ_PrimitiveElement shape,
int size,
int scaling
) const ;
TQImage * Create_Arrow_Image(
TQ_PrimitiveElement shape,
int size,
int scaling
) const ;
private:
TQMap<unsigned int, TQIntDict<GradientSet> > * gradients;
bool gradients_;
bool highlights_;
bool reverse_;
bool kicker_;
};
#endif // PHASE2STYLE_H

@ -0,0 +1,139 @@
#ifndef __SCALING_H__
#define __SCALING_H__
#include <stdlib.h>
#include <math.h>
static int QT3SCALE_MAX = 3 ;
static int QT3SCALE = 1 ;
#define QT3SCALE_TAG_BUFFSIZE 3
static char QT3SCALE_TAG[QT3SCALE_TAG_BUFFSIZE] = { '1', 0, 0 } ;
//--- Information about current application font
const static TQFont CurrentFont = TQApplication::font() ;
const static TQFontInfo CurrentFontInfo(CurrentFont) ;
const static TQFontMetrics CurrentFontMetrics(CurrentFont) ;
static int FONT_Size = 16 ; // Sans 12 pixel size
static double FONT_Scale = 1.00 ; // 96 DPI
//------------------------------------------------------------------------------
// Functions called during style initialization
//------------------------------------------------------------------------------
static void
Generate_Scaling_Metrics(const QWidget * w = 0)
{
//--- FONT_Size is an important metric for scaling widget elements
FONT_Size = CurrentFontMetrics.ascent() + CurrentFontMetrics.descent() ;
/* Alternative methods for initial computing FONT_Size
with exmplary values displayed for Sans 10/12 fonts:
CurrentFontMetrics.strikeOutPos() * 3 ; // 12/15
CurrentFontInfo.pixelSize() ; // 13/16
CurrentFontMetrics.overlinePos() ; // 13/16
CurrentFontMetrics.ascent() + CurrentFontMetrics.descent() ; // 14/18
CurrentFontMetrics.height() ; // 15/19
*/
if (FONT_Size % 2 != 0) FONT_Size++ ;
//--- FONT_scale is also an important metric for scaling widget elements
double Pixels_96dpi = 4 * CurrentFontInfo.pointSize() / 3 ;
// Calculate font size relative to 96dpi
FONT_Scale = (double)(int)((double)( FONT_Size / Pixels_96dpi )*4)/4 ;
// Calculate font scaling relative to 96dpi in increments of 0.25
//fprintf(stderr,
// "At the current %.2f scaling, a %d-point font is %d (%d) pixels high\n",
// FONT_scale, FONT_points, FONT_size, FONT_height
//) ;
}
//------------------------------------------------------------------------------
void Set_QT3SCALE()
{
QT3SCALE = 1 ;
const char *QT3SCALE_env = getenv("QT3SCALE");
if ( QT3SCALE_env != NULL ) {
int QT3SCALE_int = atoi(QT3SCALE_env) ;
if ( QT3SCALE_int > 1 && QT3SCALE_int <= QT3SCALE_MAX )
QT3SCALE = QT3SCALE_int ;
}
snprintf(QT3SCALE_TAG, QT3SCALE_TAG_BUFFSIZE, "%d", QT3SCALE) ;
}
//------------------------------------------------------------------------------
/*
QStyle::PE_ButtonCommand - button used to initiate an action, for example, a QPushButton.
QStyle::PE_ButtonDefault - this button is the default button, e.g. in a dialog.
QStyle::PE_ButtonBevel - generic button bevel.
QStyle::PE_ButtonTool - tool button, for example, a QToolButton.
QStyle::PE_ButtonDropDown - drop down button, for example, a tool button that displays a popup menu, for example, QPopupMenu.
QStyle::PE_FocusRect - generic focus indicator.
QStyle::PE_ArrowUp - up arrow.
QStyle::PE_ArrowDown - down arrow.
QStyle::PE_ArrowRight - right arrow.
QStyle::PE_ArrowLeft - left arrow.
QStyle::PE_SpinWidgetUp - up symbol for a spin widget, for example a QSpinBox.
QStyle::PE_SpinWidgetDown - down symbol for a spin widget.
QStyle::PE_SpinWidgetPlus - increase symbol for a spin widget.
QStyle::PE_SpinWidgetMinus - decrease symbol for a spin widget.
QStyle::PE_Indicator - on/off indicator, for example, a QCheckBox.
QStyle::PE_IndicatorMask - bitmap mask for an indicator.
QStyle::PE_ExclusiveIndicator - exclusive on/off indicator, for example, a QRadioButton.
QStyle::PE_ExclusiveIndicatorMask - bitmap mask for an exclusive indicator.
QStyle::PE_DockWindowHandle - tear off handle for dock windows and toolbars, for example QDockWindows and QToolBars.
QStyle::PE_DockWindowSeparator - item separator for dock window and toolbar contents.
QStyle::PE_DockWindowResizeHandle - resize handle for dock windows.
QStyle::PE_Splitter - splitter handle; see also QSplitter.
QStyle::PE_Panel - generic panel frame; see also QFrame.
QStyle::PE_PanelPopup - panel frame for popup windows/menus; see also QPopupMenu.
QStyle::PE_PanelMenuBar - panel frame for menu bars.
QStyle::PE_PanelDockWindow - panel frame for dock windows and toolbars.
QStyle::PE_PanelTabWidget - panel frame for tab widgets.
QStyle::PE_PanelLineEdit - panel frame for line edits.
QStyle::PE_PanelGroupBox - panel frame for group boxes.
QStyle::PE_TabBarBase - area below tabs in a tab widget, for example, QTab.
QStyle::PE_HeaderSection - section of a list or table header; see also QHeader.
QStyle::PE_HeaderArrow - arrow used to indicate sorting on a list or table header
QStyle::PE_StatusBarSection - section of a status bar; see also QStatusBar.
QStyle::PE_GroupBoxFrame - frame around a group box; see also QGroupBox.
QStyle::PE_WindowFrame - frame around a MDI window or a docking window
QStyle::PE_Separator - generic separator.
QStyle::PE_SizeGrip - window resize handle; see also QSizeGrip.
QStyle::PE_CheckMark - generic check mark; see also QCheckBox.
QStyle::PE_ScrollBarAddLine - scrollbar line increase indicator (i.e. scroll down); see also QScrollBar.
QStyle::PE_ScrollBarSubLine - scrollbar line decrease indicator (i.e. scroll up).
QStyle::PE_ScrollBarAddPage - scolllbar page increase indicator (i.e. page down).
QStyle::PE_ScrollBarSubPage - scrollbar page decrease indicator (i.e. page up).
QStyle::PE_ScrollBarSlider - scrollbar slider
QStyle::PE_ScrollBarFirst - scrollbar first line indicator (i.e. home).
QStyle::PE_ScrollBarLast - scrollbar last line indicator (i.e. end).
QStyle::PE_ProgressBarChunk - section of a progress bar indicator; see also QProgressBar.
QStyle::PE_CheckListController - controller part of a listview item
QStyle::PE_CheckListIndicator - checkbox part of a listview item
QStyle::PE_CheckListExclusiveIndicator - radiobutton part of a listview item
QStyle::PE_RubberBand - rubber band used in such things as iconview
QStyle::PE_CustomBase - base value for custom PrimitiveElements. All values above this are reserved for custom use. Custom values must be greater than this value.
*/
#endif

@ -0,0 +1,400 @@
#ifndef __SHAPES_H__
#define __SHAPES_H__
#include <tdestyle.h>
#include <tqcolor.h>
#include <tqimage.h>
#include "bitmaps.h"
/*
Symbols supported by Liberation Sans:
0x2713 - Unicode checkmark - regular
0x2714 - Unicode checkmark = bold
0x2206 - Unicode math operator triangle "up"
0x2207 - Unicode math operator triangle "down"
0x25B2 - Unicode geometric shape triangle solid "up"
0x25BA - Unicode geometric shape triangle solid "right"
0x25BC - Unicode geometric shape triangle solid "down"
Symbols NOT supported by Liberation Sans:
0x22B2 - Unicode mathematical operator triangle "left"
0x22B3 - Unicode mathematical operator triangle "right"
0x25C2 - Unicode geometric shape solid "left" triangle
*/
//--- Checkmark unicode characters
#define UNICODE_CHECKMARK_REGULAR 0x2713
#define UNICODE_CHECKMARK_BOLD 0x2714
#define UNICODE_CHECKMARK_BALLOT_BOX 0x2611
static TQChar Checkmark = 0 ;
//--- Arrow unicode characters
#define UNICODE_TRIANGLE_OTHER 0x25BC
//--- Arrow sizes (drawn)
static int ARROW_Size1 = 16 ; // FONT_size / 2
static int ARROW_Size2 = 8 ; // FONT_size / 2
static int ARROW_Size3 = 6 ; // FONT_size / 3, made even
static int ARROW_Size4 = 4 ; // FONT_size / 4
static int ARROW_Size4x3 = 12 ; // FONT_size * (3/4)
//--- Arrow images (pre-drawn)
static TQPixmap * KPE_ListViewExpander_ArrowLeft = 0 ;
static TQPixmap * KPE_ListViewExpander_ArrowRight = 0 ;
static TQImage * iKPE_ListViewExpander_ArrowLeft = 0 ;
static TQImage * iKPE_ListViewExpander_ArrowRight = 0 ;
//------------------------------------------------------------------------------
// Initialization
//------------------------------------------------------------------------------
void
Initialize_Shapes()
{
//--- Determine checkmark
TQChar checkmark = UNICODE_CHECKMARK_BOLD ;
if (! CurrentFontMetrics.inFont( checkmark ) )
checkmark = 'x' ;
Checkmark = checkmark ;
//--- Determine drawn arrow sizes, in terms of fractions of FONT_size
ARROW_Size1 = FONT_Size ; if (ARROW_Size1 % 2 != 0) ARROW_Size1++ ;
ARROW_Size1 = FONT_Size + FONT_Size % 2 ;
ARROW_Size2 = ARROW_Size1 / 2 ;
ARROW_Size3 = ARROW_Size1 / 3 + ARROW_Size1 % 3 ;
ARROW_Size4 = ARROW_Size1 / 4 + ARROW_Size1 % 4 ;
ARROW_Size4x3 = ARROW_Size4 * 3 ;
//--- Create bitmaps used in legacy code:
uarrow = TQBitmap(6, 6, uarrow_bits, true);
uarrow.setMask(uarrow);
darrow = TQBitmap(6, 6, darrow_bits, true);
darrow.setMask(darrow);
larrow = TQBitmap(6, 6, larrow_bits, true);
larrow.setMask(larrow);
rarrow = TQBitmap(6, 6, rarrow_bits, true);
rarrow.setMask(rarrow);
bplus = TQBitmap(6, 6, bplus_bits, true);
bplus.setMask(bplus);
bminus = TQBitmap(6, 6, bminus_bits, true);
bminus.setMask(bminus);
bcheck = TQBitmap(9, 9, bcheck_bits, true);
bcheck.setMask(bcheck);
dexpand = TQBitmap(9, 9, dexpand_bits, true);
dexpand.setMask(dexpand);
rexpand = TQBitmap(9, 9, rexpand_bits, true);
rexpand.setMask(rexpand);
doodad_mid = TQBitmap(4, 4, doodad_mid_bits, true);
doodad_light = TQBitmap(4, 4, doodad_light_bits, true);
}
//------------------------------------------------------------------------------
// Low-level image drawing functions
//------------------------------------------------------------------------------
//--- Taken from Highcontrast style:
void
addOffset(
TQRect* r,
int offset,
int lineWidth = 0
)
{
int offset1 = offset;
int offset2 = offset;
*r = r->normalize();
if (lineWidth > 0)
{
offset1 += lineWidth/2;
offset2 += lineWidth - lineWidth/2 - 1;
}
if (offset1 + offset2 > r->width())
r->addCoords (r->width()/2, 0, - (r->width() - r->width()/2), 0);
else
r->addCoords (offset1, 0, -offset2, 0);
if (offset1 + offset2 > r->height())
r->addCoords (0, r->height()/2, 0, - (r->height() - r->height()/2));
else
r->addCoords (0, offset1, 0, -offset2);
}
//------------------------------------------------------------------------------
void
Phase2Style::drawRect(
TQPainter* p,
TQRect r,
int offset,
bool filled
) const
{
addOffset (&r, offset, p->pen().width());
if (filled)
p->fillRect (r, p->backgroundColor());
p->drawRect (r);
}
void
Phase2Style::drawRoundRect(
TQPainter* p,
TQRect r,
int offset,
bool filled
) const
{
int lineWidth = p->pen().width();
if ((r.width() >= 5*lineWidth + 2*offset) && (r.height() >= 5*lineWidth + 2*offset))
{
TQRect r2 (r);
addOffset (&r2, offset, lineWidth);
addOffset (&r, offset);
TQRect r3 (r);
addOffset (&r3, lineWidth);
p->save();
p->setPen (Qt::NoPen);
if (filled)
p->fillRect (r3, p->backgroundColor());
p->drawRect (r3);
p->restore();
p->drawLine (r.left()+lineWidth, r2.top(), r.right()+1-lineWidth, r2.top());
p->fillRect (r.left()+1, r.top()+1, lineWidth, lineWidth, p->pen().color());
p->drawLine (r2.left(), r.top()+lineWidth, r2.left(), r.bottom()+1-lineWidth);
p->fillRect (r.left()+1, r.bottom()-lineWidth, lineWidth, lineWidth, p->pen().color());
p->drawLine (r.left()+lineWidth, r2.bottom(), r.right()+1-lineWidth, r2.bottom());
p->fillRect (r.right()-lineWidth, r.bottom()-lineWidth, lineWidth, lineWidth, p->pen().color());
p->drawLine (r2.right(), r.top()+lineWidth, r2.right(), r.bottom()+1-lineWidth);
p->fillRect (r.right()-lineWidth, r.top()+1, lineWidth, lineWidth, p->pen().color());
}
else
drawRect (p, r, offset, filled);
}
void
Phase2Style::drawEllipse(
TQPainter* p,
TQRect r,
int offset,
bool filled
) const
{
addOffset (&r, offset, p->pen().width());
if (filled) {
p->save();
p->setBrush (p->backgroundColor());
p->drawRoundRect (r, 99, 99);
p->restore();
}
p->drawRoundRect (r, 99, 99);
}
//------------------------------------------------------------------------------
void
Phase2Style::drawArrow(
TQPainter* p,
TQRect r,
TQ_PrimitiveElement arrow,
int offset
) const
{
p->save();
addOffset (&r, offset);
TQPoint center = r.center();
if (r.height() < r.width())
r.setWidth (r.height());
if (r.width() % 2 != 0)
r.setWidth (r.width() - 1);
r.setHeight (r.width());
r.moveCenter (center);
TQPointArray points (3);
switch (arrow) {
case PE_ArrowUp:
case PE_SpinWidgetUp:
case PE_SpinWidgetPlus: {
points.setPoint (0, r.bottomLeft());
points.setPoint (1, r.bottomRight());
points.setPoint (2, r.center().x(), r.top() + r.height()/7);
break;
}
case PE_ArrowDown:
case PE_SpinWidgetDown:
case PE_SpinWidgetMinus: {
points.setPoint (0, r.topLeft());
points.setPoint (1, r.topRight());
points.setPoint (2, r.center().x(), r.bottom() - r.height()/7);
break;
}
case PE_ArrowLeft: {
points.setPoint (0, r.topRight());
points.setPoint (1, r.bottomRight());
points.setPoint (2, r.left() + r.width()/7, r.center().y());
break;
}
default: {
points.setPoint (0, r.topLeft());
points.setPoint (1, r.bottomLeft());
points.setPoint (2, r.right() - r.width()/7, r.center().y());
}
}
p->setPen (p->pen().color());
p->setBrush (p->pen().color());
p->drawPolygon (points);
p->restore();
}
/*
* Called from phasestyle.cpp:
* drawPrimitive()
* PE_HeaderArrow ARROW_Size2 (scaling = 0)
* PE_ScrollBar(Add,Sub)Line ARROW_Size2 (scaling = 0)
* PE_SpinWidget(Up,Down) ARROW_Size2 (scaling = 1)
* PE_Arrow(Up,Down,Left,Right) ARROW_Size4 (scaling = -1)
* drawTDEStylePrimitive()
* KPE_ListViewExpander ARROW_Size2 (scaling = 1)
* drawControl()
* CE_PopupMenuItem ARROW_Size2 (offset=0)
* CE_PushButtonLabel drawArrow called directly, offset 3 # FIXME
*
*/
//------------------------------------------------------------------------------
//--- Taken from legacy code:
void
Phase2Style::drawArrowBitmap(
TQPainter* painter,
TQRect rect,
TQ_PrimitiveElement arrow
) const
{
int x, y, w, h, x2, y2 ;
rect.rect(&x, &y, &w, &h) ;
TQBitmap arrowBitmap ;
switch (arrow) {
case PE_ArrowUp: { arrowBitmap = uarrow ; break ; }
case PE_ArrowDown: { arrowBitmap = darrow ; break ; }
case PE_ArrowLeft: { arrowBitmap = larrow ; break ; }
case PE_ArrowRight: { arrowBitmap = rarrow ; break ; }
}
painter->drawPixmap(x+w/2-3, y+h/2-3, arrowBitmap);
}
//--- New code:
void
Phase2Style::drawCheckmark(
TQPainter* p,
TQRect r,
int offset
) const
{
p->save();
p->setPen( p->pen().black );
if ( ! Checkmark.isNull() )
//--- "Draw" the unicode checkmark character
p->drawText( r, TQt::AlignCenter, Checkmark );
else {
//--- Draw a crude-looking checkmark
p->setPen( p->pen().SolidLine );
TQPen pen = p->pen();
pen.setWidth( 2 );
p->setPen( pen );
addOffset (&r, 2);
TQPoint center = r.center();
if (r.height() < r.width())
r.setWidth (r.height());
if (r.width() % 2 != 0)
r.setWidth (r.width() - 1);
r.setHeight (r.width());
TQPointArray points (3);
points.setPoint (0, r.topRight());
points.setPoint (1, r.center().x(), r.bottom() - r.height()/7);
points.setPoint (2, r.left() + r.width()/7, r.center().y());
p->drawPolyline (points);
}
p->restore();
}
//------------------------------------------------------------------------------
// Image generation functions
//------------------------------------------------------------------------------
TQPixmap *
Phase2Style::Create_Arrow_Pix(
TQ_PrimitiveElement shape,
int size,
int scaling
) const
{
TQRect frame = TQRect(0, 0, size, size) ;
TQPainter canvas ;
TQPixmap * picture = new TQPixmap(size, size, 1) ;
canvas.begin(picture) ;
canvas.fillRect(frame, color0) ;
drawArrow( &canvas, frame, shape, scaling ) ;
canvas.end() ;
// TQImage image = picture->convertToImage() ;
// TQImage * image = new TQImage() ;
// *image = picture->convertToImage() ;
return picture;
}
TQImage *
Phase2Style::Create_Arrow_Image(
TQ_PrimitiveElement shape,
int size,
int scaling
) const
{
TQPixmap * pixmap = Create_Arrow_Pix( shape, size, scaling) ;
if (! pixmap ) return NULL ;
TQImage * image = new TQImage() ;
*image = pixmap->convertToImage() ;
return image ;
}
#endif
Loading…
Cancel
Save