summaryrefslogtreecommitdiff
path: root/test/resize-example5b.cxx
blob: 62680b6dc78c53983b2881878aa0ad5618d5efc6 (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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
//
// Resize example for use in the Fast Light Tool Kit (FLTK) documentation.
//
//     See Article #415: How does resizing work?
//     https://www.fltk.org/articles.php?L415
//
// Copyright 1998-2020 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file.  If this
// file is missing or damaged, see the license at:
//
//     https://www.fltk.org/COPYING.php
//
// Please see the following page on how to report bugs and issues:
//
//     https://www.fltk.org/bugs.php
//

#include "resize-arrows.h"
#include <FL/Fl_Double_Window.H>

// window, simplex and arrow dimensions
int TLx = 35, TRx = 320, TLw = 260, Ww = 620;
int TLy = 35, LGy = 125, TLh = 90, LGh = 70, LAh = 35, Wh = 200;

Fl_Double_Window *window = 0;

class Simplex : public Fl_Group {
public:
  Simplex(int X, int Y, int W, int H, const char *T = 0);
  Fl_Box *m_boxA, *m_boxB, *m_boxC, *m_boxI;
  Fl_Group *m_group, *m_groupL, *m_groupR;
};

Simplex::Simplex(int X, int Y, int W, int H, const char *T)
  : Fl_Group(X, Y, W, H, T) {
  this->box(FL_UP_BOX);
  m_group = new Fl_Group(X + 10, Y + 10, 240, 70);
  m_group->box(FL_UP_BOX);

  m_groupL = new Fl_Group(X + 10, Y + 15, 145, 35, "AB group");
  m_groupL->align(FL_ALIGN_BOTTOM_LEFT);
  m_groupL->box(FL_UP_BOX);
  m_groupL->color(FL_RED);
  m_groupL->labelcolor(FL_RED);
  m_boxA = new Fl_Box(X + 20, Y + 20, 80, 25, "A");
  m_boxA->box(FL_UP_BOX);
  m_boxA->color(FL_YELLOW);
  m_boxB = new Fl_Box(X + 110, Y + 20, 40, 25, "B");
  m_boxB->box(FL_UP_BOX);
  m_groupL->resizable(m_boxA);
  m_groupL->end();

  m_groupR = new Fl_Group(X + 155, Y + 15, 95, 35, "C group");
  m_groupR->align(FL_ALIGN_BOTTOM_RIGHT);
  m_groupR->box(FL_UP_BOX);
  m_groupR->color(FL_BLUE);
  m_groupR->labelcolor(FL_BLUE);
  m_boxC = new Fl_Box(X + 160, Y + 20, 80, 25, "C");
  m_boxC->box(FL_UP_BOX);
  m_boxC->color(FL_YELLOW);
  m_groupR->resizable(m_boxC);
  m_groupR->end();

  int d = 20;
  m_boxI = new Fl_Box(X + 155 - d, Y + 55, 2 * d, 10);
  m_boxI->box(FL_UP_BOX);
  m_boxI->color(FL_YELLOW);

  m_group->resizable(m_boxI);
  m_group->end();

  this->resizable(m_group);
  this->end();
}

class Resizables : public Fl_Group {
public:
  Resizables(int X, int Y, int W, int H, const char *T = 0);
  Simplex *TL, *TR; // top left, top right
  Harrow *LA, *RA;  // left arrow, right arrow
};

Resizables::Resizables(int X, int Y, int W, int H, const char *T)
  : Fl_Group(X, Y, W, H, T) {
  TL = new Simplex(X + TLx, Y + TLy, TLw, TLh, "Original");
  TL->align(FL_ALIGN_TOP_LEFT);

  TR = new Simplex(X + TRx, Y + TLy, TLw, TLh, "Horizontally Resized");
  TR->align(FL_ALIGN_TOP_LEFT);

  Fl_Group *LG = new Fl_Group(X + TLx, Y + LGy, TLw, LGh);
  LG->box(FL_NO_BOX);
  LG->color(FL_WHITE);
  LA = new Harrow(TL->m_boxI->x(), LG->y(), TL->m_boxI->w(), LAh, "Initial\nwidth");
  LG->resizable(LA);
  LG->end();

  Fl_Group *RG = new Fl_Group(X + TRx, Y + LGy, TLw, LGh);
  RG->box(FL_NO_BOX);
  RG->color(FL_WHITE);
  RA = new Harrow(TR->m_boxI->x(), RG->y(), TR->m_boxI->w(), LAh, "Resized\nwidth");
  RG->resizable(RA);
  RG->end();

  this->resizable(TR);
  this->end();
}


int main(int argc, char **argv) {
  window = new Fl_Double_Window(Ww, Wh, "resize-example5b");
  window->color(FL_WHITE);
  Resizables *resizables = new Resizables(0, 0, Ww, Wh);
  window->end();
  window->resizable(resizables);
  window->size_range(Ww, Wh);
  window->show(argc, argv);
  window->size(Ww + 90, Wh);
  return Fl::run();
}