mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-05-15 06:05:58 -06:00
Merge branch 'master' of https://github.com/ultimatepp/ultimatepp
This commit is contained in:
commit
91b7c7e709
12 changed files with 149 additions and 94 deletions
16
reference/Slider/Slider.h
Normal file
16
reference/Slider/Slider.h
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
#ifndef _Slider_Slider_h
|
||||
#define _Slider_Slider_h
|
||||
|
||||
#include <CtrlLib/CtrlLib.h>
|
||||
|
||||
using namespace Upp;
|
||||
|
||||
#define LAYOUTFILE <Slider/Slider.lay>
|
||||
#include <CtrlCore/lay.h>
|
||||
|
||||
class Slider : public WithSliderLayout<TopWindow> {
|
||||
public:
|
||||
Slider();
|
||||
};
|
||||
|
||||
#endif
|
||||
11
reference/Slider/Slider.lay
Normal file
11
reference/Slider/Slider.lay
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
LAYOUT(SliderLayout, 204, 252)
|
||||
ITEM(Upp::SliderCtrl, hslider, LeftPosZ(4, 148).TopPosZ(8, 24))
|
||||
ITEM(Upp::SliderCtrl, vslider, LeftPosZ(4, 20).VCenterPosZ(160, 18))
|
||||
ITEM(Upp::Label, vslider_val, LeftPosZ(4, 40).TopPosZ(228, 19))
|
||||
ITEM(Upp::SliderCtrl, vslider2, LeftPosZ(56, 20).VCenterPosZ(160, 18))
|
||||
ITEM(Upp::Label, vslider_val2, LeftPosZ(56, 40).VCenterPosZ(19, 112))
|
||||
ITEM(Upp::Label, hslider_val, LeftPosZ(156, 40).TopPosZ(8, 19))
|
||||
ITEM(Upp::SliderCtrl, hslider2, LeftPosZ(4, 148).TopPosZ(36, 24))
|
||||
ITEM(Upp::Label, hslider_val2, LeftPosZ(156, 40).TopPosZ(36, 19))
|
||||
END_LAYOUT
|
||||
|
||||
|
|
@ -1,11 +1,11 @@
|
|||
description "SliderCtrl example\377";
|
||||
|
||||
uses
|
||||
CtrlLib;
|
||||
|
||||
file
|
||||
main.cpp;
|
||||
|
||||
mainconfig
|
||||
"" = "GUI";
|
||||
|
||||
uses
|
||||
CtrlLib;
|
||||
|
||||
file
|
||||
Slider.h,
|
||||
main.cpp,
|
||||
Slider.lay;
|
||||
|
||||
mainconfig
|
||||
"" = "GUI";
|
||||
|
||||
|
|
|
|||
|
|
@ -1,37 +1,36 @@
|
|||
#include <CtrlLib/CtrlLib.h>
|
||||
|
||||
using namespace Upp;
|
||||
|
||||
struct App : TopWindow {
|
||||
StaticRect dynarect;
|
||||
SliderCtrl slider;
|
||||
Label text;
|
||||
|
||||
typedef App CLASSNAME;
|
||||
|
||||
App() {
|
||||
Sizeable().Zoomable();
|
||||
|
||||
slider << [=] {
|
||||
dynarect.SetRectX(50, ~slider);
|
||||
text = "\1[C6*/@b " + AsString(~slider);
|
||||
};
|
||||
|
||||
slider.Range(700);
|
||||
slider <<= 250;
|
||||
|
||||
Add(slider.BottomPosZ(5, 30).HSizePos(10, 10));
|
||||
|
||||
dynarect.Color(SRed);
|
||||
Add(dynarect.VSizePosZ(40, 40));
|
||||
|
||||
Add(text.LeftPosZ(0, 200).TopPosZ(0, 40));
|
||||
|
||||
slider.WhenAction();
|
||||
}
|
||||
};
|
||||
|
||||
GUI_APP_MAIN
|
||||
{
|
||||
App().Run();
|
||||
}
|
||||
#include "Slider.h"
|
||||
|
||||
Slider::Slider()
|
||||
{
|
||||
CtrlLayout(*this, "Slider example");
|
||||
|
||||
auto Show = [=] {
|
||||
vslider_val = ~~vslider;
|
||||
vslider_val2 = ~~vslider2;
|
||||
hslider_val = ~~hslider;
|
||||
hslider_val2 = ~~hslider2;
|
||||
};
|
||||
|
||||
vslider.Range(100);
|
||||
vslider << [=] { Show(); };
|
||||
vslider <<= 0;
|
||||
|
||||
vslider2.MinMax(100, 0);
|
||||
vslider2 << [=] { Show(); };
|
||||
vslider2 <<= 0;
|
||||
|
||||
hslider.Range(100);
|
||||
hslider << [=] { Show(); };
|
||||
hslider <<= 0;
|
||||
|
||||
hslider2.MinMax(100, 0);
|
||||
hslider2 << [=] { Show(); };
|
||||
hslider2 <<= 0;
|
||||
|
||||
Show();
|
||||
}
|
||||
|
||||
GUI_APP_MAIN
|
||||
{
|
||||
Slider().Run();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -326,7 +326,7 @@ int Grayscale(const Color& c)
|
|||
|
||||
double Difference(Color c1, Color c2)
|
||||
{
|
||||
return 2.75 * abs(c2.GetR() - c1.GetR()) + 5.4 * (c2.GetG() - c1.GetG()) + abs(c2.GetB() - c1.GetB());
|
||||
return 2.75 * abs(c2.GetR() - c1.GetR()) + 5.4 * abs(c2.GetG() - c1.GetG()) + abs(c2.GetB() - c1.GetB());
|
||||
}
|
||||
|
||||
bool IsDark(Color c)
|
||||
|
|
|
|||
|
|
@ -301,7 +301,7 @@ dword ParseKeyDesc(CParser& p)
|
|||
ONCELOCK {
|
||||
extern Tuple<dword, const char *> KeyNames__[];
|
||||
for(int i = 0; KeyNames__[i].a; i++) {
|
||||
String n = KeyNames__[i].b;
|
||||
String n = Filter(KeyNames__[i].b, CharFilterNoSpace);
|
||||
int q = n.Find('\v');
|
||||
if(q)
|
||||
n = n.Mid(q + 1);
|
||||
|
|
|
|||
|
|
@ -687,7 +687,7 @@ public:
|
|||
ArrayCtrl& NoGrid() { return Grid(false); }
|
||||
ArrayCtrl& GridColor(Color c) { gridcolor = c; return *this; }
|
||||
ArrayCtrl& EvenRowColor(Color paper = SColorEvenRow(), Color ink = SColorText);
|
||||
ArrayCtrl& OddRowColor(Color paper = SColorInfo(), Color ink = SColorText);
|
||||
ArrayCtrl& OddRowColor(Color paper = SLtYellow(), Color ink = SColorText);
|
||||
ArrayCtrl& NoCursor(bool b = true) { nocursor = b; return *this; }
|
||||
ArrayCtrl& MouseMoveCursor(bool b = true) { mousemove = b; return *this; }
|
||||
ArrayCtrl& NoMouseMoveCursor() { return MouseMoveCursor(false); }
|
||||
|
|
|
|||
|
|
@ -644,7 +644,7 @@ int ChSynthetic(Image *button100x100, Color *text, bool macos, int dpi)
|
|||
.Close();
|
||||
});
|
||||
CtrlImg::Set(CtrlImg::I_hthumb + i, sm);
|
||||
// CtrlImg::Set(i == CTRL_PRESSED ? CtrlImg::I_vthumb1 : CtrlImg::I_vthumb, RotateClockwise(sm));
|
||||
CtrlImg::Set(CtrlImg::I_vthumb + i, RotateClockwise(sm));
|
||||
{
|
||||
SyntheticTab(i, roundness, ink);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,14 +19,32 @@ bool SliderCtrl::IsVert() const
|
|||
return GetSize().cx < GetSize().cy;
|
||||
}
|
||||
|
||||
int SliderCtrl::HoVe(int x, int y) const
|
||||
int SliderCtrl::HoVe(int x, int y) const
|
||||
{
|
||||
return IsVert() ? y : x;
|
||||
}
|
||||
|
||||
int& SliderCtrl::HoVeR(int& x, int& y) const
|
||||
int SliderCtrl::ThumbSz() const
|
||||
{
|
||||
return IsVert() ? y : x;
|
||||
return HoVe(CtrlImg::hthumb().GetSize().cx, CtrlImg::vthumb().GetSize().cy);
|
||||
}
|
||||
|
||||
int SliderCtrl::SliderSz() const
|
||||
{
|
||||
Size sz = GetSize();
|
||||
return HoVe(sz.cx, sz.cy) - ThumbSz();
|
||||
}
|
||||
|
||||
int SliderCtrl::SliderToClient(int v) const
|
||||
{
|
||||
if(IsNull(v))
|
||||
return Null;
|
||||
|
||||
int sz = SliderSz();
|
||||
|
||||
v = iscale(clamp(v, Min(), Max()) - min, sz, max - min);
|
||||
|
||||
return HoVe(v, sz - v) + ThumbSz() / 2;
|
||||
}
|
||||
|
||||
void SliderCtrl::Paint(Draw& w)
|
||||
|
|
@ -37,31 +55,43 @@ void SliderCtrl::Paint(Draw& w)
|
|||
: CTRL_NORMAL
|
||||
: CTRL_DISABLED;
|
||||
int l = SliderToClient(min);
|
||||
int t = Nvl(SliderToClient(value));
|
||||
int h = SliderToClient(max) - l;
|
||||
Color hl = SColorHighlight();
|
||||
if(Difference(hl, Gray()) < 16)
|
||||
hl = SBlack();
|
||||
int t = Nvl(SliderToClient(value), l);
|
||||
int h = SliderToClient(max);
|
||||
Color c1 = SColorHighlight();
|
||||
if(Difference(c1, Gray()) < 16)
|
||||
c1 = SBlack();
|
||||
Color c2 = Gray();
|
||||
if(max < min)
|
||||
Swap(c1, c2);
|
||||
if(IsVert()) {
|
||||
int half = size.cx >> 1;
|
||||
w.DrawRect(half - DPI(1), l, DPI(2), t - l, hl);
|
||||
w.DrawRect(half - DPI(1), t, DPI(2), h - t, Gray());
|
||||
w.DrawRect(half - DPI(1), l, DPI(2), t - l, c1);
|
||||
w.DrawRect(half - DPI(1), t, DPI(2), h - t, c2);
|
||||
if(!IsNull(value))
|
||||
w.DrawImage((size.cx - CtrlImg::vthumb().GetSize().cx) >> 1, t,
|
||||
w.DrawImage((size.cx - CtrlImg::vthumb().GetSize().cx) >> 1, t - ThumbSz() / 2,
|
||||
CtrlImg::Get(CtrlImg::I_vthumb + ii));
|
||||
}
|
||||
else {
|
||||
int half = size.cy >> 1;
|
||||
w.DrawRect(l, half - DPI(1), t - l, DPI(2), hl);
|
||||
w.DrawRect(t, half - DPI(1), h - t, DPI(2), Gray());
|
||||
w.DrawRect(l, half - DPI(1), t - l, DPI(2), c1);
|
||||
w.DrawRect(t, half - DPI(1), h - t, DPI(2), c2);
|
||||
if(!IsNull(value))
|
||||
w.DrawImage(t, (size.cy - CtrlImg::hthumb().GetSize().cy) >> 1,
|
||||
w.DrawImage(t - ThumbSz() / 2, (size.cy - CtrlImg::hthumb().GetSize().cy) >> 1,
|
||||
CtrlImg::Get(CtrlImg::I_hthumb + ii));
|
||||
}
|
||||
if(HasFocus())
|
||||
DrawFocus(w, size);
|
||||
}
|
||||
|
||||
int SliderCtrl::ClientToSlider(int p) const
|
||||
{
|
||||
int sz = SliderSz();
|
||||
p -= ThumbSz() / 2;
|
||||
if(IsVert())
|
||||
p = sz - p;
|
||||
return clamp(min + iscale(p, max - min, sz), Min(), Max());
|
||||
}
|
||||
|
||||
bool SliderCtrl::Key(dword key, int repcnt)
|
||||
{
|
||||
if(IsEditable())
|
||||
|
|
@ -91,7 +121,7 @@ void SliderCtrl::LeftDown(Point pos, dword keyflags)
|
|||
UpdateActionRefresh();
|
||||
}
|
||||
else
|
||||
if(p >= thumb && p < thumb + HoVe(CtrlImg::hthumb().GetSize().cx, CtrlImg::vthumb().GetSize().cy))
|
||||
if(abs(p - thumb) <= ThumbSz() / 2)
|
||||
SetCapture();
|
||||
else
|
||||
if(jump) {
|
||||
|
|
@ -100,7 +130,7 @@ void SliderCtrl::LeftDown(Point pos, dword keyflags)
|
|||
UpdateActionRefresh();
|
||||
}
|
||||
else {
|
||||
if( ( ( p < thumb) && (min == Min() ) ) || ( (p > thumb) && ( min == Max() ) ) )
|
||||
if((min < max) != IsVert() ? p < thumb : p > thumb)
|
||||
Dec();
|
||||
else
|
||||
Inc();
|
||||
|
|
@ -178,26 +208,6 @@ SliderCtrl& SliderCtrl::MinMax(int _min, int _max)
|
|||
return *this;
|
||||
}
|
||||
|
||||
int SliderCtrl::SliderToClient(int v) const
|
||||
{
|
||||
if(IsNull(v))
|
||||
return Null;
|
||||
v = minmax(v, Min(), Max());
|
||||
|
||||
v = iscale(v - min, HoVe(GetSize().cx - CtrlImg::hthumb().GetSize().cx,
|
||||
GetSize().cy - CtrlImg::vthumb().GetSize().cy), max - min);
|
||||
return v;
|
||||
}
|
||||
|
||||
int SliderCtrl::ClientToSlider(int p) const
|
||||
{
|
||||
Size hsz = CtrlImg::hthumb().GetSize();
|
||||
Size vsz = CtrlImg::vthumb().GetSize();
|
||||
p -= HoVe(hsz.cx / 2, vsz.cy / 2);
|
||||
return minmax(min + iscale(p, max - min,
|
||||
HoVe(GetSize().cx - hsz.cx, GetSize().cy - vsz.cy)), Min(), Max());
|
||||
}
|
||||
|
||||
void SliderCtrl::Dec()
|
||||
{
|
||||
int n = value;
|
||||
|
|
|
|||
|
|
@ -8,10 +8,11 @@ class SliderCtrl : public Ctrl {
|
|||
int ClientToSlider(int x) const;
|
||||
|
||||
int HoVe(int x, int y) const;
|
||||
int& HoVeR(int& x, int& y) const;
|
||||
|
||||
int Min() const { return Upp::min(min, max); };
|
||||
int Max() const { return Upp::max(min, max); };
|
||||
int ThumbSz() const;
|
||||
int SliderSz() const;
|
||||
|
||||
public:
|
||||
typedef SliderCtrl CLASSNAME;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
LAYOUT(TestChStyleLayout, 972, 532)
|
||||
ITEM(Upp::OptionBox, dv___0, SetLabel(t_("OptionBox")).LeftPosZ(12, 140).TopPosZ(324, 128))
|
||||
ITEM(Upp::OptionBox, dv___0, SetLabel(t_("OptionBox")).LeftPosZ(16, 140).TopPosZ(304, 32))
|
||||
ITEM(Upp::EditString, readonly, SetEditable(false).LeftPosZ(20, 80).TopPosZ(52, 19))
|
||||
ITEM(Upp::DropList, dl_readonly, SetEditable(false).LeftPosZ(108, 96).TopPosZ(52, 19))
|
||||
ITEM(Upp::WithDropChoice<Upp::EditString>, dc_readonly, SetEditable(false).LeftPosZ(212, 96).TopPosZ(52, 19))
|
||||
|
|
@ -27,7 +27,7 @@ LAYOUT(TestChStyleLayout, 972, 532)
|
|||
ITEM(Upp::TabCtrl, tab, LeftPosZ(316, 150).TopPosZ(136, 100))
|
||||
ITEM(Upp::Label, dv___26, SetLabel(t_("This is label")).SetInk(Upp::Cyan).LeftPosZ(16, 168).TopPosZ(240, 19))
|
||||
ITEM(Upp::DropTime, dv___27, LeftPosZ(316, 120).TopPosZ(244, 19))
|
||||
ITEM(Upp::SliderCtrl, dv___28, LeftPosZ(16, 64).TopPosZ(272, 24))
|
||||
ITEM(Upp::SliderCtrl, hslider, SetFrame(Upp::BlackFrame()).LeftPosZ(16, 72).TopPosZ(344, 24))
|
||||
ITEM(Upp::Button, dis, SetLabel(t_("disabled")).LeftPosZ(88, 56).TopPosZ(272, 24))
|
||||
ITEM(Upp::ArrayCtrl, dv___30, LeftPosZ(260, 52).TopPosZ(188, 100))
|
||||
ITEM(Upp::ProgressIndicator, pi1, LeftPosZ(180, 192).TopPosZ(296, 12))
|
||||
|
|
@ -35,8 +35,8 @@ LAYOUT(TestChStyleLayout, 972, 532)
|
|||
ITEM(Upp::ProgressIndicator, pi5, LeftPosZ(180, 192).TopPosZ(328, 24))
|
||||
ITEM(Upp::ProgressIndicator, pi3, LeftPosZ(380, 24).TopPosZ(296, 148))
|
||||
ITEM(Upp::ProgressIndicator, pi4, LeftPosZ(412, 24).TopPosZ(296, 148))
|
||||
ITEM(Upp::SliderCtrl, dv___36, LeftPosZ(180, 20).VCenterPosZ(80, 138))
|
||||
UNTYPED(sample, LeftPosZ(212, 160).TopPosZ(364, 80))
|
||||
ITEM(Upp::SliderCtrl, vslider, SetFrame(Upp::BlackFrame()).LeftPosZ(16, 20).VCenterPosZ(80, 186))
|
||||
UNTYPED(sample, LeftPosZ(216, 156).TopPosZ(364, 80))
|
||||
ITEM(Upp::DropList, dl_empty, LeftPosZ(480, 96).TopPosZ(4, 19))
|
||||
ITEM(Upp::WithDropChoice<Upp::EditString>, dc_empty, LeftPosZ(480, 96).TopPosZ(28, 19))
|
||||
ITEM(Upp::DataPusher, dv___40, LeftPosZ(480, 152).TopPosZ(52, 24))
|
||||
|
|
@ -57,6 +57,12 @@ LAYOUT(TestChStyleLayout, 972, 532)
|
|||
ITEM(Upp::TreeCtrl, dv___55, LeftPosZ(696, 152).TopPosZ(12, 196))
|
||||
ITEM(Upp::RichTextView, dv___56, LeftPosZ(696, 152).TopPosZ(348, 136))
|
||||
ITEM(Upp::ColumnList, dv___57, LeftPosZ(696, 152).TopPosZ(212, 132))
|
||||
ITEM(Upp::DropList, skin, LeftPosZ(12, 164).TopPosZ(464, 19))
|
||||
ITEM(Upp::DropList, skin, LeftPosZ(8, 140).TopPosZ(504, 19))
|
||||
ITEM(Upp::Label, vslider_val, LeftPosZ(40, 40).TopPosZ(472, 19))
|
||||
ITEM(Upp::SliderCtrl, vslider2, SetFrame(Upp::BlackFrame()).LeftPosZ(92, 20).VCenterPosZ(80, 186))
|
||||
ITEM(Upp::Label, vslider_val2, LeftPosZ(116, 40).TopPosZ(472, 19))
|
||||
ITEM(Upp::Label, hslider_val, LeftPosZ(92, 40).TopPosZ(344, 19))
|
||||
ITEM(Upp::SliderCtrl, hslider2, SetFrame(Upp::BlackFrame()).LeftPosZ(16, 72).TopPosZ(372, 24))
|
||||
ITEM(Upp::Label, hslider_val2, LeftPosZ(92, 40).TopPosZ(372, 19))
|
||||
END_LAYOUT
|
||||
|
||||
|
|
|
|||
|
|
@ -176,6 +176,18 @@ TestChStyle::TestChStyle()
|
|||
|
||||
FillTree(droptree.TreeObject());
|
||||
|
||||
vslider.Range(100);
|
||||
vslider << [=] { vslider_val = ~~vslider; };
|
||||
|
||||
vslider2.MinMax(100, 0);
|
||||
vslider2 << [=] { vslider_val2 = ~~vslider2; };
|
||||
|
||||
hslider.Range(100);
|
||||
hslider << [=] { hslider_val = ~~hslider; };
|
||||
|
||||
hslider2.MinMax(100, 0);
|
||||
hslider2 << [=] { hslider_val2 = ~~hslider2; };
|
||||
|
||||
Sizeable();
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue