///////////////////////////////////////////////////////////////////////////////
-// Name: src/aui/dockart.cpp
+// Name: src/aui/auibar.cpp
// Purpose: wxaui: wx advanced user interface - docking window manager
// Author: Benjamin I. Williams
// Modified by:
wxBitmap wxAuiBitmapFromBits(const unsigned char bits[], int w, int h,
const wxColour& color);
-unsigned char wxAuiBlendColour(unsigned char fg, unsigned char bg, double alpha);
-wxColor wxAuiStepColour(const wxColor& c, int percent);
-
-static wxBitmap MakeDisabledBitmap(wxBitmap& bmp)
-{
- wxImage image = bmp.ConvertToImage();
-
- int mr, mg, mb;
- mr = image.GetMaskRed();
- mg = image.GetMaskGreen();
- mb = image.GetMaskBlue();
-
- unsigned char* data = image.GetData();
- int width = image.GetWidth();
- int height = image.GetHeight();
- bool has_mask = image.HasMask();
-
- for (int y = height-1; y >= 0; --y)
- {
- for (int x = width-1; x >= 0; --x)
- {
- data = image.GetData() + (y*(width*3))+(x*3);
- unsigned char* r = data;
- unsigned char* g = data+1;
- unsigned char* b = data+2;
-
- if (has_mask && *r == mr && *g == mg && *b == mb)
- continue;
-
- *r = wxAuiBlendColour(*r, 255, 0.4);
- *g = wxAuiBlendColour(*g, 255, 0.4);
- *b = wxAuiBlendColour(*b, 255, 0.4);
- }
- }
-
- return wxBitmap(image);
-}
-
static wxColor GetBaseColor()
{
(255-base_colour.Green()) +
(255-base_colour.Blue()) < 60)
{
- base_colour = wxAuiStepColour(base_colour, 92);
+ base_colour = base_colour.ChangeLightness(92);
}
return base_colour;
static const unsigned char
- DISABLED_TEXT_GREY_HUE = wxAuiBlendColour(0, 255, 0.4);
+ DISABLED_TEXT_GREY_HUE = wxColour::AlphaBlend(0, 255, 0.4);
const wxColour DISABLED_TEXT_COLOR(DISABLED_TEXT_GREY_HUE,
DISABLED_TEXT_GREY_HUE,
DISABLED_TEXT_GREY_HUE);
m_gripper_size = 7;
m_overflow_size = 16;
- wxColor darker1_colour = wxAuiStepColour(m_base_colour, 85);
- wxColor darker2_colour = wxAuiStepColour(m_base_colour, 75);
- wxColor darker3_colour = wxAuiStepColour(m_base_colour, 60);
- wxColor darker4_colour = wxAuiStepColour(m_base_colour, 50);
- wxColor darker5_colour = wxAuiStepColour(m_base_colour, 40);
+ wxColor darker1_colour = m_base_colour.ChangeLightness(85);
+ wxColor darker2_colour = m_base_colour.ChangeLightness(75);
+ wxColor darker3_colour = m_base_colour.ChangeLightness(60);
+ wxColor darker4_colour = m_base_colour.ChangeLightness(50);
+ wxColor darker5_colour = m_base_colour.ChangeLightness(40);
m_gripper_pen1 = wxPen(darker5_colour);
m_gripper_pen2 = wxPen(darker3_colour);
{
wxRect rect = _rect;
rect.height++;
- wxColour start_colour = wxAuiStepColour(m_base_colour, 150);
- wxColour end_colour = wxAuiStepColour(m_base_colour, 90);
+ wxColour start_colour = m_base_colour.ChangeLightness(150);
+ wxColour end_colour = m_base_colour.ChangeLightness(90);
dc.GradientFillLinear(rect, start_colour, end_colour, wxSOUTH);
}
if (item.GetState() & wxAUI_BUTTON_STATE_PRESSED)
{
dc.SetPen(wxPen(m_highlight_colour));
- dc.SetBrush(wxBrush(wxAuiStepColour(m_highlight_colour, 150)));
+ dc.SetBrush(wxBrush(m_highlight_colour.ChangeLightness(150)));
dc.DrawRectangle(rect);
}
else if ((item.GetState() & wxAUI_BUTTON_STATE_HOVER) || item.IsSticky())
{
dc.SetPen(wxPen(m_highlight_colour));
- dc.SetBrush(wxBrush(wxAuiStepColour(m_highlight_colour, 170)));
+ dc.SetBrush(wxBrush(m_highlight_colour.ChangeLightness(170)));
// draw an even lighter background for checked item hovers (since
// the hover background is the same color as the check background)
if (item.GetState() & wxAUI_BUTTON_STATE_CHECKED)
- dc.SetBrush(wxBrush(wxAuiStepColour(m_highlight_colour, 180)));
+ dc.SetBrush(wxBrush(m_highlight_colour.ChangeLightness(180)));
dc.DrawRectangle(rect);
}
// it's important to put this code in an else statment after the
// hover, otherwise hovers won't draw properly for checked items
dc.SetPen(wxPen(m_highlight_colour));
- dc.SetBrush(wxBrush(wxAuiStepColour(m_highlight_colour, 170)));
+ dc.SetBrush(wxBrush(m_highlight_colour.ChangeLightness(170)));
dc.DrawRectangle(rect);
}
}
else
bmp = item.GetBitmap();
- if (!bmp.IsOk())
- return;
-
- dc.DrawBitmap(bmp, bmp_x, bmp_y, true);
+ if ( bmp.IsOk() )
+ dc.DrawBitmap(bmp, bmp_x, bmp_y, true);
// set the item's text color based on if it is disabled
dc.SetTextForeground(*wxBLACK);
if (item.GetState() & wxAUI_BUTTON_STATE_PRESSED)
{
dc.SetPen(wxPen(m_highlight_colour));
- dc.SetBrush(wxBrush(wxAuiStepColour(m_highlight_colour, 140)));
+ dc.SetBrush(wxBrush(m_highlight_colour.ChangeLightness(140)));
dc.DrawRectangle(button_rect);
- dc.SetBrush(wxBrush(wxAuiStepColour(m_highlight_colour, 170)));
+ dc.SetBrush(wxBrush(m_highlight_colour.ChangeLightness(170)));
dc.DrawRectangle(dropdown_rect);
}
else if (item.GetState() & wxAUI_BUTTON_STATE_HOVER ||
item.IsSticky())
{
dc.SetPen(wxPen(m_highlight_colour));
- dc.SetBrush(wxBrush(wxAuiStepColour(m_highlight_colour, 170)));
+ dc.SetBrush(wxBrush(m_highlight_colour.ChangeLightness(170)));
+ dc.DrawRectangle(button_rect);
+ dc.DrawRectangle(dropdown_rect);
+ }
+ else if (item.GetState() & wxAUI_BUTTON_STATE_CHECKED)
+ {
+ // Notice that this branch must come after the hover one to ensure the
+ // correct appearance when the mouse hovers over a checked item.
+ dc.SetPen(wxPen(m_highlight_colour));
+ dc.SetBrush(wxBrush(m_highlight_colour.ChangeLightness(170)));
dc.DrawRectangle(button_rect);
dc.DrawRectangle(dropdown_rect);
}
rect.width = new_width;
}
- wxColour start_colour = wxAuiStepColour(m_base_colour, 80);
- wxColour end_colour = wxAuiStepColour(m_base_colour, 80);
+ wxColour start_colour = m_base_colour.ChangeLightness(80);
+ wxColour end_colour = m_base_colour.ChangeLightness(80);
dc.GradientFillLinear(rect, start_colour, end_colour, horizontal ? wxSOUTH : wxEAST);
}
state & wxAUI_BUTTON_STATE_PRESSED)
{
wxRect cli_rect = wnd->GetClientRect();
- wxColor light_gray_bg = wxAuiStepColour(m_highlight_colour, 170);
+ wxColor light_gray_bg = m_highlight_colour.ChangeLightness(170);
if (m_flags & wxAUI_TB_VERTICAL)
{
item.active = true;
item.dropdown = false;
item.spacer_pixels = 0;
- item.id = tool_id;
+ item.toolid = tool_id;
item.state = 0;
item.proportion = 0;
item.kind = kind;
item.user_data = 0;
item.sticky = false;
- if (item.id == wxID_ANY)
- item.id = wxNewId();
+ if (item.toolid == wxID_ANY)
+ item.toolid = wxNewId();
if (!item.disabled_bitmap.IsOk())
{
// no disabled bitmap specified, we need to make one
if (item.bitmap.IsOk())
{
- //wxImage img = item.bitmap.ConvertToImage();
- //wxImage grey_version = img.ConvertToGreyscale();
- //item.disabled_bitmap = wxBitmap(grey_version);
- item.disabled_bitmap = MakeDisabledBitmap(item.bitmap);
+ item.disabled_bitmap = item.bitmap.ConvertToDisabled();
}
}
m_items.Add(item);
item.active = true;
item.dropdown = false;
item.spacer_pixels = 0;
- item.id = control->GetId();
+ item.toolid = control->GetId();
item.state = 0;
item.proportion = 0;
item.kind = wxITEM_CONTROL;
item.active = true;
item.dropdown = false;
item.spacer_pixels = 0;
- item.id = tool_id;
+ item.toolid = tool_id;
item.state = 0;
item.proportion = 0;
item.kind = wxITEM_LABEL;
item.user_data = 0;
item.sticky = false;
- if (item.id == wxID_ANY)
- item.id = wxNewId();
+ if (item.toolid == wxID_ANY)
+ item.toolid = wxNewId();
m_items.Add(item);
return &m_items.Last();
item.disabled_bitmap = wxNullBitmap;
item.active = true;
item.dropdown = false;
- item.id = -1;
+ item.toolid = -1;
item.state = 0;
item.proportion = 0;
item.kind = wxITEM_SEPARATOR;
item.active = true;
item.dropdown = false;
item.spacer_pixels = pixels;
- item.id = -1;
+ item.toolid = -1;
item.state = 0;
item.proportion = 0;
item.kind = wxITEM_SPACER;
item.active = true;
item.dropdown = false;
item.spacer_pixels = 0;
- item.id = -1;
+ item.toolid = -1;
item.state = 0;
item.proportion = proportion;
item.kind = wxITEM_SPACER;
for (i = 0, count = m_items.GetCount(); i < count; ++i)
{
wxAuiToolBarItem& item = m_items.Item(i);
- if (item.id == tool_id)
+ if (item.toolid == tool_id)
return &item;
}
if (idx >= 0 && idx < count)
{
- for (i = idx; i < count; ++i)
+ for (i = idx + 1; i < count; ++i)
{
if (m_items[i].kind != wxITEM_RADIO)
break;
m_items[i].state &= ~wxAUI_BUTTON_STATE_CHECKED;
}
- for (i = idx; i > 0; i--)
+ for (i = idx - 1; i >= 0; i--)
{
if (m_items[i].kind != wxITEM_RADIO)
break;
for (i = 0; i < count; ++i)
{
wxAuiToolBarItem& item = m_items.Item(i);
- if (item.id == tool_id)
+ if (item.toolid == tool_id)
return i;
}
{
wxAuiToolBarItem& item = m_items.Item(i);
- if (item.id == -1)
+ if (item.toolid == -1)
continue;
- wxUpdateUIEvent evt(item.id);
+ wxUpdateUIEvent evt(item.toolid);
evt.SetEventObject(this);
if (handler->ProcessEvent(evt))
}
else if (item.kind == wxITEM_CHECK)
{
- // draw a toggle button
- m_art->DrawButton(dc, this, item, item_rect);
+ // draw either a regular or dropdown toggle button
+ if (!item.dropdown)
+ m_art->DrawButton(dc, this, item, item_rect);
+ else
+ m_art->DrawDropDownButton(dc, this, item, item_rect);
}
else if (item.kind == wxITEM_RADIO)
{
UnsetToolTip();
// fire the tool dropdown event
- wxAuiToolBarEvent e(wxEVT_COMMAND_AUITOOLBAR_TOOL_DROPDOWN, m_action_item->id);
+ wxAuiToolBarEvent e(wxEVT_COMMAND_AUITOOLBAR_TOOL_DROPDOWN, m_action_item->toolid);
e.SetEventObject(this);
- e.SetToolId(m_action_item->id);
+ e.SetToolId(m_action_item->toolid);
int mouse_x = evt.GetX();
wxRect rect = m_action_item->sizer_item->GetRect();
{
UnsetToolTip();
- wxCommandEvent e(wxEVT_COMMAND_MENU_SELECTED, m_action_item->id);
+ wxCommandEvent e(wxEVT_COMMAND_MENU_SELECTED, m_action_item->toolid);
e.SetEventObject(this);
if (hit_item->kind == wxITEM_CHECK || hit_item->kind == wxITEM_RADIO)
{
const bool toggle = !(m_action_item->state & wxAUI_BUTTON_STATE_CHECKED);
- ToggleTool(m_action_item->id, toggle);
+ ToggleTool(m_action_item->toolid, toggle);
// repaint immediately
Refresh(false);
{
if (hit_item->kind == wxITEM_NORMAL)
{
- wxAuiToolBarEvent e(wxEVT_COMMAND_AUITOOLBAR_RIGHT_CLICK, m_action_item->id);
+ wxAuiToolBarEvent e(wxEVT_COMMAND_AUITOOLBAR_RIGHT_CLICK, m_action_item->toolid);
e.SetEventObject(this);
- e.SetToolId(m_action_item->id);
+ e.SetToolId(m_action_item->toolid);
e.SetClickPoint(m_action_pos);
GetEventHandler()->ProcessEvent(e);
DoIdleUpdate();
{
if (hit_item->kind == wxITEM_NORMAL)
{
- wxAuiToolBarEvent e(wxEVT_COMMAND_AUITOOLBAR_MIDDLE_CLICK, m_action_item->id);
+ wxAuiToolBarEvent e(wxEVT_COMMAND_AUITOOLBAR_MIDDLE_CLICK, m_action_item->toolid);
e.SetEventObject(this);
- e.SetToolId(m_action_item->id);
+ e.SetToolId(m_action_item->toolid);
e.SetClickPoint(m_action_pos);
GetEventHandler()->ProcessEvent(e);
DoIdleUpdate();
// event sent sometime in the future (see OnLeftUp())
wxAuiToolBarEvent e(wxEVT_COMMAND_AUITOOLBAR_BEGIN_DRAG, GetId());
e.SetEventObject(this);
- e.SetToolId(m_action_item->id);
+ e.SetToolId(m_action_item->toolid);
m_dragging = GetEventHandler()->ProcessEvent(e) && !e.GetSkipped();
DoIdleUpdate();