ROOT logo
// @(#)root/qt:$Id: TQtBrush.cxx 28837 2009-06-05 16:16:58Z brun $
// Author: Valeri Fine   21/01/2002

/*************************************************************************
 * Copyright (C) 1995-2004, Rene Brun and Fons Rademakers.               *
 * Copyright (C) 2002 by Valeri Fine.                                    *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/


/////////////////////////////////////////////////////////////////////////////////
//
// TQtBrush creates the QBrush Qt object based on the ROOT "TAttFill" attributes 
//
/////////////////////////////////////////////////////////////////////////////////

#include <stdio.h>
#include <stdlib.h>

#include "TQtBrush.h"
#include "TGQt.h"
#include "qbitmap.h"
#include <QDebug>

//
//*-*- data to create fill area interior style
//

static uchar p1_bits[] = {
  (0xaa),(0xaa),(0x55),(0x55),(0xaa),(0xaa),(0x55),(0x55),(0xaa),(0xaa),(0x55),(0x55),
  (0xaa),(0xaa),(0x55),(0x55),(0xaa),(0xaa),(0x55),(0x55),(0xaa),(0xaa),(0x55),(0x55),
  (0xaa),(0xaa),(0x55),(0x55),(0xaa),(0xaa),(0x55),(0x55)};
static uchar p2_bits[] = {
  (0x44),(0x44),(0x11),(0x11),(0x44),(0x44),(0x11),(0x11),(0x44),(0x44),(0x11),(0x11),
  (0x44),(0x44),(0x11),(0x11),(0x44),(0x44),(0x11),(0x11),(0x44),(0x44),(0x11),(0x11),
  (0x44),(0x44),(0x11),(0x11),(0x44),(0x44),(0x11),(0x11)};
static uchar p3_bits[] = {
  (0x00),(0x00),(0x44),(0x44),(0x00),(0x00),(0x11),(0x11),(0x00),(0x00),(0x44),(0x44),
  (0x00),(0x00),(0x11),(0x11),(0x00),(0x00),(0x44),(0x44),(0x00),(0x00),(0x11),(0x11),
  (0x00),(0x00),(0x44),(0x44),(0x00),(0x00),(0x11),(0x11)};
static uchar p4_bits[] = {
  (0x80),(0x80),(0x40),(0x40),(0x20),(0x20),(0x10),(0x10),(0x08),(0x08),(0x04),(0x04),
  (0x02),(0x02),(0x01),(0x01),(0x80),(0x80),(0x40),(0x40),(0x20),(0x20),(0x10),(0x10),
  (0x08),(0x08),(0x04),(0x04),(0x02),(0x02),(0x01),(0x01)};
static uchar p5_bits[] = {
  (0x20),(0x20),(0x40),(0x40),(0x80),(0x80),(0x01),(0x01),(0x02),(0x02),(0x04),(0x04),
  (0x08),(0x08),(0x10),(0x10),(0x20),(0x20),(0x40),(0x40),(0x80),(0x80),(0x01),(0x01),
  (0x02),(0x02),(0x04),(0x04),(0x08),(0x08),(0x10),(0x10)};
static uchar p6_bits[] = {
  (0x44),(0x44),(0x44),(0x44),(0x44),(0x44),(0x44),(0x44),(0x44),(0x44),(0x44),(0x44),
  (0x44),(0x44),(0x44),(0x44),(0x44),(0x44),(0x44),(0x44),(0x44),(0x44),(0x44),(0x44),
  (0x44),(0x44),(0x44),(0x44),(0x44),(0x44),(0x44),(0x44)};
static uchar p7_bits[] = {
  (0x00),(0x00),(0x00),(0x00),(0x00),(0x00),(0xff),(0xff),(0x00),(0x00),(0x00),(0x00),
  (0x00),(0x00),(0xff),(0xff),(0x00),(0x00),(0x00),(0x00),(0x00),(0x00),(0xff),(0xff),
  (0x00),(0x00),(0x00),(0x00),(0x00),(0x00),(0xff),(0xff)};
static uchar p8_bits[] = {
  (0x11),(0x11),(0xb8),(0xb8),(0x7c),(0x7c),(0x3a),(0x3a),(0x11),(0x11),(0xa3),(0xa3),
  (0xc7),(0xc7),(0x8b),(0x8b),(0x11),(0x11),(0xb8),(0xb8),(0x7c),(0x7c),(0x3a),(0x3a),
  (0x11),(0x11),(0xa3),(0xa3),(0xc7),(0xc7),(0x8b),(0x8b)};
static uchar p9_bits[] = {
  (0x10),(0x10),(0x10),(0x10),(0x28),(0x28),(0xc7),(0xc7),(0x01),(0x01),(0x01),(0x01),
  (0x82),(0x82),(0x7c),(0x7c),(0x10),(0x10),(0x10),(0x10),(0x28),(0x28),(0xc7),(0xc7),
  (0x01),(0x01),(0x01),(0x01),(0x82),(0x82),(0x7c),(0x7c)};
static uchar p10_bits[] = {
  (0x10),(0x10),(0x10),(0x10),(0x10),(0x10),(0xff),(0xff),(0x01),(0x01),(0x01),(0x01),
  (0x01),(0x01),(0xff),(0xff),(0x10),(0x10),(0x10),(0x10),(0x10),(0x10),(0xff),(0xff),
  (0x01),(0x01),(0x01),(0x01),(0x01),(0x01),(0xff),(0xff)};
static uchar p11_bits[] = {
  (0x08),(0x08),(0x49),(0x49),(0x2a),(0x2a),(0x1c),(0x1c),(0x2a),(0x2a),(0x49),(0x49),
  (0x08),(0x08),(0x00),(0x00),(0x80),(0x80),(0x94),(0x94),(0xa2),(0xa2),(0xc1),(0xc1),
  (0xa2),(0xa2),(0x94),(0x94),(0x80),(0x80),(0x00),(0x00)};
static uchar p12_bits[] = {
  (0x1c),(0x1c),(0x22),(0x22),(0x41),(0x41),(0x41),(0x41),(0x41),(0x41),(0x22),(0x22),
  (0x1c),(0x1c),(0x00),(0x00),(0xc1),(0xc1),(0x22),(0x22),(0x14),(0x14),(0x14),(0x14),
  (0x14),(0x14),(0x22),(0x22),(0xc1),(0xc1),(0x00),(0x00)};
static uchar p13_bits[] = {
  (0x01),(0x01),(0x82),(0x82),(0x44),(0x44),(0x28),(0x28),(0x10),(0x10),(0x28),(0x28),
  (0x44),(0x44),(0x82),(0x82),(0x01),(0x01),(0x82),(0x82),(0x44),(0x44),(0x28),(0x28),
  (0x10),(0x10),(0x28),(0x28),(0x44),(0x44),(0x82),(0x82)};
static uchar p14_bits[] = {
  (0xff),(0xff),(0x11),(0x10),(0x11),(0x10),(0x11),(0x10),(0xf1),(0x1f),(0x11),(0x11),
  (0x11),(0x11),(0x11),(0x11),(0xff),(0x11),(0x01),(0x11),(0x01),(0x11),(0x01),(0x11),
  (0xff),(0xff),(0x01),(0x10),(0x01),(0x10),(0x01),(0x10)};
static uchar p15_bits[] = {
  (0x22),(0x22),(0x55),(0x55),(0x22),(0x22),(0x00),(0x00),(0x88),(0x88),(0x55),(0x55),
  (0x88),(0x88),(0x00),(0x00),(0x22),(0x22),(0x55),(0x55),(0x22),(0x22),(0x00),(0x00),
  (0x88),(0x88),(0x55),(0x55),(0x88),(0x88),(0x00),(0x00)};
static uchar p16_bits[] = {
  (0x0e),(0x0e),(0x11),(0x11),(0xe0),(0xe0),(0x00),(0x00),(0x0e),(0x0e),(0x11),(0x11),
  (0xe0),(0xe0),(0x00),(0x00),(0x0e),(0x0e),(0x11),(0x11),(0xe0),(0xe0),(0x00),(0x00),
  (0x0e),(0x0e),(0x11),(0x11),(0xe0),(0xe0),(0x00),(0x00)};
static uchar p17_bits[] = {
  (0x44),(0x44),(0x22),(0x22),(0x11),(0x11),(0x00),(0x00),(0x44),(0x44),(0x22),(0x22),
  (0x11),(0x11),(0x00),(0x00),(0x44),(0x44),(0x22),(0x22),(0x11),(0x11),(0x00),(0x00),
  (0x44),(0x44),(0x22),(0x22),(0x11),(0x11),(0x00),(0x00)};
static uchar p18_bits[] = {
  (0x11),(0x11),(0x22),(0x22),(0x44),(0x44),(0x00),(0x00),(0x11),(0x11),(0x22),(0x22),
  (0x44),(0x44),(0x00),(0x00),(0x11),(0x11),(0x22),(0x22),(0x44),(0x44),(0x00),(0x00),
  (0x11),(0x11),(0x22),(0x22),(0x44),(0x44),(0x00),(0x00)};
static uchar p19_bits[] = {
  (0xe0),(0x03),(0x98),(0x0c),(0x84),(0x10),(0x42),(0x21),(0x42),(0x21),(0x21),(0x42),
  (0x19),(0x4c),(0x07),(0xf0),(0x19),(0x4c),(0x21),(0x42),(0x42),(0x21),(0x42),(0x21),
  (0x84),(0x10),(0x98),(0x0c),(0xe0),(0x03),(0x80),(0x00)};
static uchar p20_bits[] = {
  (0x22),(0x22),(0x11),(0x11),(0x11),(0x11),(0x11),(0x11),(0x22),(0x22),(0x44),(0x44),
  (0x44),(0x44),(0x44),(0x44),(0x22),(0x22),(0x11),(0x11),(0x11),(0x11),(0x11),(0x11),
  (0x22),(0x22),(0x44),(0x44),(0x44),(0x44),(0x44),(0x44)};
static uchar p21_bits[] = {
  (0xf1),(0xf1),(0x10),(0x10),(0x10),(0x10),(0x10),(0x10),(0x1f),(0x1f),(0x01),(0x01),
  (0x01),(0x01),(0x01),(0x01),(0xf1),(0xf1),(0x10),(0x10),(0x10),(0x10),(0x10),(0x10),
  (0x1f),(0x1f),(0x01),(0x01),(0x01),(0x01),(0x01),(0x01)};
static uchar p22_bits[] = {
  (0x8f),(0x8f),(0x08),(0x08),(0x08),(0x08),(0x08),(0x08),(0xf8),(0xf8),(0x80),(0x80),
  (0x80),(0x80),(0x80),(0x80),(0x8f),(0x8f),(0x08),(0x08),(0x08),(0x08),(0x08),(0x08),
  (0xf8),(0xf8),(0x80),(0x80),(0x80),(0x80),(0x80),(0x80)};
static uchar p23_bits[] = {
  (0xAA),(0xAA),(0x55),(0x55),(0x6a),(0x6a),(0x74),(0x74),(0x78),(0x78),(0x74),(0x74),
  (0x6a),(0x6a),(0x55),(0x55),(0xAA),(0xAA),(0x55),(0x55),(0x6a),(0x6a),(0x74),(0x74),
  (0x78),(0x78),(0x74),(0x74),(0x6a),(0x6a),(0x55),(0x55)};
static uchar p24_bits[] = {
  (0x80),(0x00),(0xc0),(0x00),(0xea),(0xa8),(0xd5),(0x54),(0xea),(0xa8),(0xd5),(0x54),
  (0xeb),(0xe8),(0xd5),(0xd4),(0xe8),(0xe8),(0xd4),(0xd4),(0xa8),(0xe8),(0x54),(0xd5),
  (0xa8),(0xea),(0x54),(0xd5),(0xfc),(0xff),(0xfe),(0xff)};
static uchar p25_bits[] = {
  (0x80),(0x00),(0xc0),(0x00),(0xe0),(0x00),(0xf0),(0x00),(0xff),(0xf0),(0xff),(0xf0),
  (0xfb),(0xf0),(0xf9),(0xf0),(0xf8),(0xf0),(0xf8),(0x70),(0xf8),(0x30),(0xff),(0xf0),
  (0xff),(0xf8),(0xff),(0xfc),(0xff),(0xfe),(0xff),(0xff)};


static uchar *patter_bits[]= { p1_bits, p2_bits,   p3_bits,  p4_bits,  p5_bits,
                               p6_bits, p7_bits,   p8_bits,  p9_bits, p10_bits,
                              p11_bits, p12_bits, p13_bits, p14_bits, p15_bits,
                              p16_bits, p17_bits, p18_bits, p19_bits, p20_bits,
                              p21_bits, p22_bits, p23_bits, p24_bits, p25_bits};

ClassImp(TQtBrush)
//______________________________________________________________________________
TQtBrush::TQtBrush(): QBrush(),fStyle(0),fFasi(0),fAlpha(255)
{}

//______________________________________________________________________________
 void TQtBrush::SetColor(Color_t cindex)
 {
   // Set color index for to fill shapes
   //  cindex    : color index
    if (cindex >= 0)  SetColor(gQt->ColorIndex(gQt->UpdateColor(cindex)));
    else fAlpha = cindex;
 }
//______________________________________________________________________________
void TQtBrush::SetColor(const QColor &qtcolor)
{
   // remember the user's alpha value and set the  brush color
   fAlpha = qtcolor.alpha();
	fBackground = qtcolor;
   SetColorOwn();
}

//______________________________________________________________________________
void TQtBrush::SetColorOwn()
{
  // Set the brush color and adjust its alpha value from fStyle
  // Take in account the new transperency if needed

  static const int opaqAlpha = QColor(0,0,0).alpha(); // Qt   alpha range is  [0:255]
  static const float opaqFactor = opaqAlpha/100.;     // ROOT alpha range is  [0:100]
  if (fAlpha >=0 ) {
	  int alpha = ( fStyle == 4) ? int(opaqFactor*fFasi) : fAlpha;
	  if (fBackground.alpha() != alpha) fBackground.setAlpha(alpha);
	  setColor(fBackground);
  }
}

//______________________________________________________________________________
void TQtBrush::SetStyle(int sty, int fasi)
{
//*-*-*-*-*-*-*-*-*-*-*Set fill area style index*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
//*-*                  =========================
//*-*  style   : fill area interior style hollow or solid
//*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
  fStyle =  sty;
  fFasi  =  fasi;

  switch( fStyle ) {

  case 0:
    setStyle(Qt::NoBrush);                          // hollow
    fBackground = Qt::transparent;
	 fAlpha = 0;
    break;
  case 1:                                           // solid
    setStyle(Qt::SolidPattern);
    break;
  case 3:                                           // pattern
     {
        int pattern = 1;
        if (fasi > 0 && fasi < 26 ) pattern = fasi-1;
        QBitmap bm =  QBitmap::fromData(QSize(16,16),patter_bits[pattern]);
        setTexture(bm);
     }
    break;
  case 2:                                           // hatch
      switch (fasi)
        {
          case 1: setStyle(Qt::BDiagPattern);
                  break;
          case 2: setStyle(Qt::CrossPattern);
                  break;
          case 3: setStyle(Qt::DiagCrossPattern);
                  break;
          case 4: setStyle(Qt::FDiagPattern);
                  break;
          case 5: setStyle(Qt::HorPattern);
                  break;
          case 6: setStyle(Qt::VerPattern );
                  break;
         default: setStyle(Qt::FDiagPattern);
                  break;
        }
     break;
  case 4:                                      // transparent
     if (!fasi)    setStyle(Qt::NoBrush);      // the window is transparent
	  else          setStyle(Qt::SolidPattern);
     break;
  default:                                          // solid  - default
      setStyle(Qt::SolidPattern);
      break;
  }
  SetColorOwn();
}
 TQtBrush.cxx:1
 TQtBrush.cxx:2
 TQtBrush.cxx:3
 TQtBrush.cxx:4
 TQtBrush.cxx:5
 TQtBrush.cxx:6
 TQtBrush.cxx:7
 TQtBrush.cxx:8
 TQtBrush.cxx:9
 TQtBrush.cxx:10
 TQtBrush.cxx:11
 TQtBrush.cxx:12
 TQtBrush.cxx:13
 TQtBrush.cxx:14
 TQtBrush.cxx:15
 TQtBrush.cxx:16
 TQtBrush.cxx:17
 TQtBrush.cxx:18
 TQtBrush.cxx:19
 TQtBrush.cxx:20
 TQtBrush.cxx:21
 TQtBrush.cxx:22
 TQtBrush.cxx:23
 TQtBrush.cxx:24
 TQtBrush.cxx:25
 TQtBrush.cxx:26
 TQtBrush.cxx:27
 TQtBrush.cxx:28
 TQtBrush.cxx:29
 TQtBrush.cxx:30
 TQtBrush.cxx:31
 TQtBrush.cxx:32
 TQtBrush.cxx:33
 TQtBrush.cxx:34
 TQtBrush.cxx:35
 TQtBrush.cxx:36
 TQtBrush.cxx:37
 TQtBrush.cxx:38
 TQtBrush.cxx:39
 TQtBrush.cxx:40
 TQtBrush.cxx:41
 TQtBrush.cxx:42
 TQtBrush.cxx:43
 TQtBrush.cxx:44
 TQtBrush.cxx:45
 TQtBrush.cxx:46
 TQtBrush.cxx:47
 TQtBrush.cxx:48
 TQtBrush.cxx:49
 TQtBrush.cxx:50
 TQtBrush.cxx:51
 TQtBrush.cxx:52
 TQtBrush.cxx:53
 TQtBrush.cxx:54
 TQtBrush.cxx:55
 TQtBrush.cxx:56
 TQtBrush.cxx:57
 TQtBrush.cxx:58
 TQtBrush.cxx:59
 TQtBrush.cxx:60
 TQtBrush.cxx:61
 TQtBrush.cxx:62
 TQtBrush.cxx:63
 TQtBrush.cxx:64
 TQtBrush.cxx:65
 TQtBrush.cxx:66
 TQtBrush.cxx:67
 TQtBrush.cxx:68
 TQtBrush.cxx:69
 TQtBrush.cxx:70
 TQtBrush.cxx:71
 TQtBrush.cxx:72
 TQtBrush.cxx:73
 TQtBrush.cxx:74
 TQtBrush.cxx:75
 TQtBrush.cxx:76
 TQtBrush.cxx:77
 TQtBrush.cxx:78
 TQtBrush.cxx:79
 TQtBrush.cxx:80
 TQtBrush.cxx:81
 TQtBrush.cxx:82
 TQtBrush.cxx:83
 TQtBrush.cxx:84
 TQtBrush.cxx:85
 TQtBrush.cxx:86
 TQtBrush.cxx:87
 TQtBrush.cxx:88
 TQtBrush.cxx:89
 TQtBrush.cxx:90
 TQtBrush.cxx:91
 TQtBrush.cxx:92
 TQtBrush.cxx:93
 TQtBrush.cxx:94
 TQtBrush.cxx:95
 TQtBrush.cxx:96
 TQtBrush.cxx:97
 TQtBrush.cxx:98
 TQtBrush.cxx:99
 TQtBrush.cxx:100
 TQtBrush.cxx:101
 TQtBrush.cxx:102
 TQtBrush.cxx:103
 TQtBrush.cxx:104
 TQtBrush.cxx:105
 TQtBrush.cxx:106
 TQtBrush.cxx:107
 TQtBrush.cxx:108
 TQtBrush.cxx:109
 TQtBrush.cxx:110
 TQtBrush.cxx:111
 TQtBrush.cxx:112
 TQtBrush.cxx:113
 TQtBrush.cxx:114
 TQtBrush.cxx:115
 TQtBrush.cxx:116
 TQtBrush.cxx:117
 TQtBrush.cxx:118
 TQtBrush.cxx:119
 TQtBrush.cxx:120
 TQtBrush.cxx:121
 TQtBrush.cxx:122
 TQtBrush.cxx:123
 TQtBrush.cxx:124
 TQtBrush.cxx:125
 TQtBrush.cxx:126
 TQtBrush.cxx:127
 TQtBrush.cxx:128
 TQtBrush.cxx:129
 TQtBrush.cxx:130
 TQtBrush.cxx:131
 TQtBrush.cxx:132
 TQtBrush.cxx:133
 TQtBrush.cxx:134
 TQtBrush.cxx:135
 TQtBrush.cxx:136
 TQtBrush.cxx:137
 TQtBrush.cxx:138
 TQtBrush.cxx:139
 TQtBrush.cxx:140
 TQtBrush.cxx:141
 TQtBrush.cxx:142
 TQtBrush.cxx:143
 TQtBrush.cxx:144
 TQtBrush.cxx:145
 TQtBrush.cxx:146
 TQtBrush.cxx:147
 TQtBrush.cxx:148
 TQtBrush.cxx:149
 TQtBrush.cxx:150
 TQtBrush.cxx:151
 TQtBrush.cxx:152
 TQtBrush.cxx:153
 TQtBrush.cxx:154
 TQtBrush.cxx:155
 TQtBrush.cxx:156
 TQtBrush.cxx:157
 TQtBrush.cxx:158
 TQtBrush.cxx:159
 TQtBrush.cxx:160
 TQtBrush.cxx:161
 TQtBrush.cxx:162
 TQtBrush.cxx:163
 TQtBrush.cxx:164
 TQtBrush.cxx:165
 TQtBrush.cxx:166
 TQtBrush.cxx:167
 TQtBrush.cxx:168
 TQtBrush.cxx:169
 TQtBrush.cxx:170
 TQtBrush.cxx:171
 TQtBrush.cxx:172
 TQtBrush.cxx:173
 TQtBrush.cxx:174
 TQtBrush.cxx:175
 TQtBrush.cxx:176
 TQtBrush.cxx:177
 TQtBrush.cxx:178
 TQtBrush.cxx:179
 TQtBrush.cxx:180
 TQtBrush.cxx:181
 TQtBrush.cxx:182
 TQtBrush.cxx:183
 TQtBrush.cxx:184
 TQtBrush.cxx:185
 TQtBrush.cxx:186
 TQtBrush.cxx:187
 TQtBrush.cxx:188
 TQtBrush.cxx:189
 TQtBrush.cxx:190
 TQtBrush.cxx:191
 TQtBrush.cxx:192
 TQtBrush.cxx:193
 TQtBrush.cxx:194
 TQtBrush.cxx:195
 TQtBrush.cxx:196
 TQtBrush.cxx:197
 TQtBrush.cxx:198
 TQtBrush.cxx:199
 TQtBrush.cxx:200
 TQtBrush.cxx:201
 TQtBrush.cxx:202
 TQtBrush.cxx:203
 TQtBrush.cxx:204
 TQtBrush.cxx:205
 TQtBrush.cxx:206
 TQtBrush.cxx:207
 TQtBrush.cxx:208
 TQtBrush.cxx:209
 TQtBrush.cxx:210
 TQtBrush.cxx:211
 TQtBrush.cxx:212
 TQtBrush.cxx:213
 TQtBrush.cxx:214
 TQtBrush.cxx:215
 TQtBrush.cxx:216
 TQtBrush.cxx:217
 TQtBrush.cxx:218
 TQtBrush.cxx:219
 TQtBrush.cxx:220
 TQtBrush.cxx:221
 TQtBrush.cxx:222
 TQtBrush.cxx:223
 TQtBrush.cxx:224
 TQtBrush.cxx:225
 TQtBrush.cxx:226
 TQtBrush.cxx:227
 TQtBrush.cxx:228
 TQtBrush.cxx:229
 TQtBrush.cxx:230
 TQtBrush.cxx:231
 TQtBrush.cxx:232
 TQtBrush.cxx:233