src/widget/widget_resizebox.cpp
author KUDr
Sat, 10 Mar 2007 02:39:51 +0000
branchcpp_gui
changeset 6293 59b7305f9a8b
parent 6290 8078f7a3c8a0
child 6295 a88d8c2cff6e
permissions -rw-r--r--
(svn r9087) [cpp_gui] -Codechange: Window is now clipping its widgets in OnPaint()
-Add: ClipDrawContext class to simplify draw clipping
-Fix: ResizeBox now can't resize window to negative width/height
6258
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
     1
/* $Id$ */
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
     2
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
     3
#include "../stdafx.h"
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
     4
#include <stdarg.h>
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
     5
#include "../openttd.h"
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
     6
#include "../debug.h"
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
     7
#include "../functions.h"
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
     8
#include "../map.h"
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
     9
#include "../player.h"
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    10
#include "../window.h"
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    11
#include "../gfx.h"
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    12
#include "../viewport.h"
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    13
#include "../console.h"
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    14
#include "../variables.h"
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    15
#include "../table/sprites.h"
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    16
#include "../genworld.h"
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    17
#include "../helpers.hpp"
6264
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6258
diff changeset
    18
#include "window_events.hpp"
6289
be3d8bd9fb02 (svn r9010) [cpp_gui] -Add: Sticky button widget
KUDr
parents: 6282
diff changeset
    19
#include "widget_types.h"
6258
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    20
6278
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    21
namespace gui {
6258
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    22
6278
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    23
/*virtual*/ void ResizeBox::DrawBackground(EvtPaint &ev)
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    24
{
6281
2ae707873e23 (svn r8993) [cpp_gui] -Fix: ResizeBox now draws itself in lowered state when resizing
KUDr
parents: 6278
diff changeset
    25
	bool sizing = m_ticket_sizing.IsActive();
6278
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    26
	DrawFrameRect(Left(), Top(), Right(), Bottom(), m_color, sizing ? FR_LOWERED : FR_NONE);
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    27
}
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    28
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    29
void ResizeBox::OnCaptureSizing(EvtMouseOver &e)
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    30
{
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    31
	if (!_left_button_down) {
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    32
		m_ticket_sizing.Release();
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    33
6282
c5b92f2d924f (svn r8996) [cpp_gui] -Add: CloseBox added into CaptionBar
KUDr
parents: 6281
diff changeset
    34
		EvtLeftClick ev(Point(0, 0));
6278
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    35
		ev.m_widget = this;
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    36
		CallHandlers(ev);
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    37
		return;
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    38
	}
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    39
	BaseWindow *w = GetWindow();
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    40
	w->SetDirty();
6293
59b7305f9a8b (svn r9087) [cpp_gui] -Codechange: Window is now clipping its widgets in OnPaint()
KUDr
parents: 6290
diff changeset
    41
	Point16 size = e.m_pt - w->TopLeft() + m_sizing_offset;
59b7305f9a8b (svn r9087) [cpp_gui] -Codechange: Window is now clipping its widgets in OnPaint()
KUDr
parents: 6290
diff changeset
    42
	size.x = max(size.x, DEFAULT_WIDTH);
59b7305f9a8b (svn r9087) [cpp_gui] -Codechange: Window is now clipping its widgets in OnPaint()
KUDr
parents: 6290
diff changeset
    43
	size.y = max(size.y, DEFAULT_HEIGHT);
59b7305f9a8b (svn r9087) [cpp_gui] -Codechange: Window is now clipping its widgets in OnPaint()
KUDr
parents: 6290
diff changeset
    44
	w->SetSize(size);
6278
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    45
	e.SetHandled();
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    46
	w->SetDirty();
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    47
}
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    48
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    49
/*virtual*/ void ResizeBox::OnCreate(EvtCreate &ev)
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    50
{
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    51
	Point16 size(DEFAULT_WIDTH, DEFAULT_HEIGHT);
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    52
	SetTopLeft(m_container->BottomRight() - size + Point16(1, 1));
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    53
	SetBottomRight(m_container->BottomRight());
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    54
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    55
	SetAnchors(PIN_RIGHT | PIN_BOTTOM);
6282
c5b92f2d924f (svn r8996) [cpp_gui] -Add: CloseBox added into CaptionBar
KUDr
parents: 6281
diff changeset
    56
	super::OnCreate(ev);
6278
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    57
}
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    58
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    59
/*virtual*/ void ResizeBox::OnPaint(EvtPaint &ev)
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    60
{
6282
c5b92f2d924f (svn r8996) [cpp_gui] -Add: CloseBox added into CaptionBar
KUDr
parents: 6281
diff changeset
    61
	assert(Size() == Point16(DEFAULT_WIDTH, DEFAULT_HEIGHT));
6278
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    62
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    63
	DrawBackground(ev);
6281
2ae707873e23 (svn r8993) [cpp_gui] -Fix: ResizeBox now draws itself in lowered state when resizing
KUDr
parents: 6278
diff changeset
    64
	bool sizing = m_ticket_sizing.IsActive();
6290
8078f7a3c8a0 (svn r9023) [cpp_gui] -Add: ImageButton and ImageButton2
KUDr
parents: 6289
diff changeset
    65
	DrawSprite(SPR_WINDOW_RESIZE, PAL_NONE, sizing ? Point16(4, 4) : Point16(3, 3));
6278
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    66
	ev.SetHandled();
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    67
}
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    68
6282
c5b92f2d924f (svn r8996) [cpp_gui] -Add: CloseBox added into CaptionBar
KUDr
parents: 6281
diff changeset
    69
/*virtual*/ void ResizeBox::OnLeftButtonDown(EvtLeftButtonDown &ev)
6278
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    70
{
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    71
	BaseWindow *w = GetWindow();
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    72
	m_sizing_offset = w->Size() - ev.m_pt;
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    73
	m_ticket_sizing = CaptureEventsT(this, &ResizeBox::OnCaptureSizing);
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    74
	Invalidate();
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    75
	ev.SetHandled();
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    76
}
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    77
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    78
/*virtual*/ void ResizeBox::OnResizeParent(EvtResizeParent &ev)
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    79
{
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    80
	//SetTopLeft(TopLeft() + ev.m_change);
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    81
	//ev.SetHandled();
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    82
	super::OnResizeParent(ev);
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    83
}
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    84
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    85
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6264
diff changeset
    86
}; // namespace gui