aboutsummaryrefslogtreecommitdiff
path: root/src/lib/FL/Fl_Image_Toggle_Button.cxx
blob: df006c89275b7cb4cef94a488e945a94fa018cbe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include <FL/Fl_Image_Toggle_Button.H>
#include <FL/Fl_Image.H>
#include <FL/fl_draw.H>
#ifndef NULL
#define NULL 0
#endif
void Fl_Image_Toggle_Button::up_image(Fl_Image* p_upimage)
{
	upimage=p_upimage;
}

void Fl_Image_Toggle_Button::down_image(Fl_Image* p_downimage)
{
	downimage=p_downimage;
}

Fl_Image* Fl_Image_Toggle_Button::up_image()
{
	return upimage;
}

Fl_Image* Fl_Image_Toggle_Button::down_image()
{
	return downimage;
}

Fl_Image_Toggle_Button::Fl_Image_Toggle_Button(int a,int b,int c,int d,const char* e):Fl_Toggle_Button(a,b,c,d,e)
{
	upimage=NULL;
	downimage=NULL;
	Fl_Toggle_Button::clear_visible_focus();
}

Fl_Image_Toggle_Button::Fl_Image_Toggle_Button(int a,int b,int c,int d):Fl_Toggle_Button(a,b,c,d)
{
	upimage=NULL;
	downimage=NULL;
	Fl_Toggle_Button::clear_visible_focus();
}


void Fl_Image_Toggle_Button::draw()
{
  // begin - Fl_Button::draw() (box section)
  if (type() == FL_HIDDEN_BUTTON) return;
  Fl_Color col = value() ? selection_color() : color();
  
  
  draw_box(value() ? (down_box()?down_box():fl_down(box())) : box(), col);
  // end - Fl_Button::draw() (box section)

  // begin - modification to render up/down image
  Fl_Boxtype box_;
  Fl_Image* pic_;

  if(value())
  {
    box_ = (down_box())? down_box() : fl_down(box());
    pic_ = downimage;
  }
  else
  {
    box_ = box();
    pic_ = upimage;
  }

  if(pic_)
  {
    int xx = x() + Fl::box_dx(box_);
    int yy = y() + Fl::box_dy(box_);
    int ww = w() - Fl::box_dw(box_);
    int hh = h() - Fl::box_dh(box_);
    int xpos = (ww - pic_->w()) / 2;
    int ypos = (hh - pic_->h()) / 2;

    fl_push_clip(xx, yy, ww, hh);
    pic_->draw(xx + xpos, yy + ypos);
    fl_pop_clip();
  }
  // end- modification to render up/down image

  // begin - Fl_Button::draw() (label section)
  if (labeltype() == FL_NORMAL_LABEL && value()) {
    Fl_Color c = Fl_Button::labelcolor();
    labelcolor(fl_contrast(c, col));
    draw_label();
    labelcolor(c);
  } else draw_label();
  if (Fl::focus() == this) draw_focus();
  // end - Fl_Button::draw() (label section)
}