summaryrefslogtreecommitdiffstats
path: root/ml/dlib/dlib/gui_widgets/style.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ml/dlib/dlib/gui_widgets/style.cpp')
-rw-r--r--ml/dlib/dlib/gui_widgets/style.cpp998
1 files changed, 0 insertions, 998 deletions
diff --git a/ml/dlib/dlib/gui_widgets/style.cpp b/ml/dlib/dlib/gui_widgets/style.cpp
deleted file mode 100644
index a3d22d10f..000000000
--- a/ml/dlib/dlib/gui_widgets/style.cpp
+++ /dev/null
@@ -1,998 +0,0 @@
-// Copyright (C) 2008 Davis E. King (davis@dlib.net), and Nils Labugt
-// License: Boost Software License See LICENSE.txt for the full license.
-#ifndef DLIB_WIDGETs_STYLE_CPP_
-#define DLIB_WIDGETs_STYLE_CPP_
-
-#include "style.h"
-
-namespace dlib
-{
-
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
- // button style stuff
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
-
- void button_style_default::draw_button (
- const canvas& c,
- const rectangle& rect,
- const bool enabled,
- const font& mfont,
- const long ,
- const long ,
- const ustring& name,
- const bool is_depressed
- ) const
- {
- rectangle area = rect.intersect(c);
- if (area.is_empty())
- return;
-
- fill_rect(c,rect,rgb_pixel(212,208,200));
-
- unsigned char red, green, blue;
- if (enabled)
- {
- red = 0;
- green = 0;
- blue = 0;
- }
- else
- {
- red = 128;
- green = 128;
- blue = 128;
- }
-
- // compute the name length if it hasn't already been computed
- if (name_width == 0)
- {
- unsigned long height;
- mfont.compute_size(name,name_width,height);
- }
-
- // figure out where the name string should appear
- rectangle name_rect;
- const unsigned long width = name_width;
- const unsigned long height = mfont.height();
- name_rect.set_left((rect.right() + rect.left() - width)/2);
- name_rect.set_top((rect.bottom() + rect.top() - height)/2 + 1);
- name_rect.set_right(name_rect.left()+width-1);
- name_rect.set_bottom(name_rect.top()+height);
-
-
- if (is_depressed)
- {
- name_rect.set_left(name_rect.left()+1);
- name_rect.set_right(name_rect.right()+1);
- name_rect.set_top(name_rect.top()+1);
- name_rect.set_bottom(name_rect.bottom()+1);
-
- mfont.draw_string(c,name_rect,name,rgb_pixel(red,green,blue));
-
- draw_button_down(c,rect);
- }
- else
- {
- mfont.draw_string(c,name_rect,name,rgb_pixel(red,green,blue));
-
- // now draw the edge of the button
- draw_button_up(c,rect);
- }
- }
-
-// ----------------------------------------------------------------------------------------
-
- rectangle button_style_default::
- get_min_size (
- const ustring& name,
- const font& mfont
- ) const
- {
-
- unsigned long width;
- unsigned long height;
- mfont.compute_size(name,width,height);
- name_width = width;
-
- return rectangle(width+2*padding, height+2*padding);
- }
-
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
-
- void button_style_toolbar1::draw_button (
- const canvas& c,
- const rectangle& rect,
- const bool enabled,
- const font& mfont,
- const long lastx,
- const long lasty,
- const ustring& name,
- const bool is_depressed
- ) const
- {
- rectangle area = rect.intersect(c);
- if (area.is_empty())
- return;
-
- const long radius = 4;
-
- unsigned char red, green, blue;
- if (enabled)
- {
- red = 0;
- green = 0;
- blue = 0;
-
- long d = 0;
- if (rect.contains(lastx,lasty))
- d = -70;
-
- if (is_depressed)
- d = 20;
-
- if (d != 0)
- {
- rectangle temp(rect);
- temp.left()--; temp.top()--; temp.right()++; temp.bottom()++;
- draw_rounded_rectangle(c, temp, radius, rgb_alpha_pixel(255,255,0,120));
- temp.left()--; temp.top()--; temp.right()++; temp.bottom()++;
- draw_rounded_rectangle(c, temp, radius, rgb_alpha_pixel(255,255,0,40));
- }
-
- fill_gradient_rounded(c,rect,radius,rgb_alpha_pixel(255, 255, 255,120-d),
- rgb_alpha_pixel(255, 255, 255,0));
- draw_rounded_rectangle(c,rect,radius, rgb_alpha_pixel(30,30,30,200));
- }
- else
- {
- red = 128;
- green = 128;
- blue = 128;
- draw_rounded_rectangle(c,rect,radius, rgb_alpha_pixel(red,green,blue,210));
- }
-
-
- // compute the name length if it hasn't already been computed
- if (name_width == 0)
- {
- unsigned long height;
- mfont.compute_size(name,name_width,height);
- }
-
- // figure out where the name string should appear
- rectangle name_rect;
- const unsigned long width = name_width;
- const unsigned long height = mfont.height();
- name_rect.set_left((rect.right() + rect.left() - width)/2);
- name_rect.set_top((rect.bottom() + rect.top() - height)/2 + 1);
- name_rect.set_right(name_rect.left()+width-1);
- name_rect.set_bottom(name_rect.top()+height);
-
-
- if (is_depressed)
- {
- name_rect.set_left(name_rect.left()+1);
- name_rect.set_right(name_rect.right()+1);
- name_rect.set_top(name_rect.top()+1);
- name_rect.set_bottom(name_rect.bottom()+1);
-
- mfont.draw_string(c,name_rect,name,rgb_pixel(red,green,blue));
-
- }
- else
- {
- mfont.draw_string(c,name_rect,name,rgb_pixel(red,green,blue));
- }
- }
-
-// ----------------------------------------------------------------------------------------
-
- rectangle button_style_toolbar1::
- get_min_size (
- const ustring& name,
- const font& mfont
- ) const
- {
-
- unsigned long width;
- unsigned long height;
- mfont.compute_size(name,width,height);
- name_width = width;
-
- return rectangle(width+2*padding, height+2*padding);
- }
-
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
-
- void button_style_toolbar_icon1::draw_button (
- const canvas& c,
- const rectangle& rect,
- const bool enabled,
- const font& ,
- const long lastx,
- const long lasty,
- const ustring& ,
- const bool is_depressed
- ) const
- {
- rectangle area = rect.intersect(c);
- if (area.is_empty())
- return;
-
- const long radius = padding;
-
- if (enabled)
- {
- if (rect.contains(lastx,lasty))
- {
- if (is_depressed)
- {
- fill_gradient_rounded(c,rect,radius,rgb_alpha_pixel(100,100,200,150),
- rgb_alpha_pixel(50,50,100,100));
- draw_rounded_rectangle(c,rect,radius, rgb_alpha_pixel(150,150,30,200));
- }
- else
- {
- fill_gradient_rounded(c,rect,radius,rgb_alpha_pixel(150,150,250,130),
- rgb_alpha_pixel(100,100,150,90));
- draw_rounded_rectangle(c,rect,radius, rgb_alpha_pixel(150,150,30,200));
- }
- }
-
- if (is_depressed)
- {
- rectangle img_rect(translate_rect(centered_rect(rect,img_mouseover.nc(),img_mouseover.nr()),1,1));
- point p(img_rect.left(),img_rect.top());
- draw_image(c,p,img_mouseover);
- }
- else
- {
- rectangle img_rect(centered_rect(rect,img_normal.nc(),img_normal.nr()));
- point p(img_rect.left(),img_rect.top());
- if (rect.contains(lastx,lasty))
- draw_image(c,p,img_mouseover);
- else
- draw_image(c,p,img_normal);
- }
-
- }
- else
- {
- rectangle img_rect(centered_rect(rect,img_normal.nc(),img_normal.nr()));
- point p(img_rect.left(),img_rect.top());
- draw_image(c,p,img_disabled);
- }
- }
-
-// ----------------------------------------------------------------------------------------
-
- rectangle button_style_toolbar_icon1::
- get_min_size (
- const ustring& ,
- const font&
- ) const
- {
- return rectangle(img_normal.nc()+2*padding, img_normal.nr()+2*padding);
- }
-
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
-
- void button_style_arrow::
- draw_button (
- const canvas& c,
- const rectangle& rect,
- const bool enabled,
- const font& ,
- const long ,
- const long ,
- const ustring& ,
- const bool is_depressed
- ) const
- {
- rectangle area = rect.intersect(c);
- if (area.is_empty())
- return;
-
- fill_rect(c,rect,rgb_pixel(212,208,200));
-
- const long height = rect.height();
- const long width = rect.width();
-
- const long smallest = (width < height) ? width : height;
-
- const long rows = (smallest+3)/4;
- const long start = rows + rows/2-1;
- long dep;
-
- long tip_x = 0;
- long tip_y = 0;
- long wy = 0;
- long hy = 0;
- long wx = 0;
- long hx = 0;
-
- if (is_depressed)
- {
- dep = 0;
-
- // draw the button's border
- draw_button_down(c,rect);
- }
- else
- {
- dep = -1;
-
- // draw the button's border
- draw_button_up(c,rect);
- }
-
-
- switch (dir)
- {
- case UP:
- tip_x = width/2 + rect.left() + dep;
- tip_y = (height - start)/2 + rect.top() + dep + 1;
- wy = 0;
- hy = 1;
- wx = 1;
- hx = 0;
- break;
-
- case DOWN:
- tip_x = width/2 + rect.left() + dep;
- tip_y = rect.bottom() - (height - start)/2 + dep;
- wy = 0;
- hy = -1;
- wx = 1;
- hx = 0;
- break;
-
- case LEFT:
- tip_x = rect.left() + (width - start)/2 + dep + 1;
- tip_y = height/2 + rect.top() + dep;
- wy = 1;
- hy = 0;
- wx = 0;
- hx = 1;
- break;
-
- case RIGHT:
- tip_x = rect.right() - (width - start)/2 + dep;
- tip_y = height/2 + rect.top() + dep;
- wy = 1;
- hy = 0;
- wx = 0;
- hx = -1;
- break;
- }
-
-
- rgb_pixel color;
- if (enabled)
- {
- color.red = 0;
- color.green = 0;
- color.blue = 0;
- }
- else
- {
- color.red = 128;
- color.green = 128;
- color.blue = 128;
- }
-
-
-
- for (long i = 0; i < rows; ++i)
- {
- draw_line(c,point(tip_x + wx*i + hx*i, tip_y + wy*i + hy*i),
- point(tip_x + wx*i*-1 + hx*i, tip_y + wy*i*-1 + hy*i),
- color);
- }
-
- }
-
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
- // toggle button style stuff
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
-
- void toggle_button_style_default::draw_toggle_button (
- const canvas& c,
- const rectangle& rect,
- const bool enabled,
- const font& mfont,
- const long ,
- const long ,
- const ustring& name,
- const bool is_depressed,
- const bool is_checked
- ) const
- {
- rectangle area = rect.intersect(c);
- if (area.is_empty())
- return;
-
- fill_rect(c,rect,rgb_pixel(212,208,200));
-
- unsigned char red, green, blue;
- if (enabled)
- {
- red = 0;
- green = 0;
- blue = 0;
- }
- else
- {
- red = 128;
- green = 128;
- blue = 128;
- }
-
- // compute the name length if it hasn't already been computed
- if (name_width == 0)
- {
- unsigned long height;
- mfont.compute_size(name,name_width,height);
- }
-
- // figure out where the name string should appear
- rectangle name_rect;
- const unsigned long width = name_width;
- const unsigned long height = mfont.height();
- name_rect.set_left((rect.right() + rect.left() - width)/2);
- name_rect.set_top((rect.bottom() + rect.top() - height)/2 + 1);
- name_rect.set_right(name_rect.left()+width-1);
- name_rect.set_bottom(name_rect.top()+height);
-
- long d = 0;
- if (is_checked)
- d = 1;
-
- if (is_depressed)
- d = 2;
-
- name_rect.set_left(name_rect.left()+d);
- name_rect.set_right(name_rect.right()+d);
- name_rect.set_top(name_rect.top()+d);
- name_rect.set_bottom(name_rect.bottom()+d);
-
- mfont.draw_string(c,name_rect,name,rgb_pixel(red,green,blue));
-
- // now draw the edge of the button
- if (is_checked || is_depressed)
- draw_button_down(c,rect);
- else
- draw_button_up(c,rect);
- }
-
-// ----------------------------------------------------------------------------------------
-
- rectangle toggle_button_style_default::
- get_min_size (
- const ustring& name,
- const font& mfont
- ) const
- {
-
- unsigned long width;
- unsigned long height;
- mfont.compute_size(name,width,height);
- name_width = width;
-
- return rectangle(width+2*padding, height+2*padding);
- }
-
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
-
- void toggle_button_style_check_box::draw_toggle_button (
- const canvas& c,
- const rectangle& rect,
- const bool enabled,
- const font& mfont,
- const long ,
- const long ,
- const ustring& name,
- const bool is_depressed,
- const bool is_checked
- ) const
- {
- rectangle area = rect.intersect(c);
- if (area.is_empty())
- return;
-
-
- rgb_pixel color;
- if (enabled)
- {
- color.red = 0;
- color.green = 0;
- color.blue = 0;
- }
- else
- {
- color.red = 128;
- color.green = 128;
- color.blue = 128;
- }
-
-
- // figure out where the name string should appear
- rectangle name_rect, box_rect;
- unsigned long padding = 0;
- if (mfont.height() < 13)
- padding = (rect.height() - mfont.height())/2;
-
- name_rect = rect;
- name_rect.set_left(rect.left() + 17-1);
- name_rect.set_top(rect.top() + padding);
- name_rect.set_bottom(rect.bottom() - padding);
-
- box_rect = rect;
- box_rect.set_right(rect.left() + 12);
- box_rect.set_bottom(rect.top() + 12);
-
- mfont.draw_string(c,name_rect,name,color);
-
- if (enabled && is_depressed == false)
- fill_rect(c, box_rect,rgb_pixel(255,255,255));
- else
- fill_rect(c, box_rect,rgb_pixel(212,208,200));
-
- draw_sunken_rectangle(c, box_rect);
-
-
- if (is_checked)
- {
- const long x = box_rect.left();
- const long y = box_rect.top();
- draw_line(c,point(3+x,5+y),point(6+x,8+y),color);
- draw_line(c,point(3+x,6+y),point(5+x,8+y),color);
- draw_line(c,point(3+x,7+y),point(5+x,9+y),color);
- draw_line(c,point(6+x,6+y),point(9+x,3+y),color);
- draw_line(c,point(6+x,7+y),point(9+x,4+y),color);
- draw_line(c,point(6+x,8+y),point(9+x,5+y),color);
- }
- }
-
-// ----------------------------------------------------------------------------------------
-
- rectangle toggle_button_style_check_box::
- get_min_size (
- const ustring& name,
- const font& mfont
- ) const
- {
- unsigned long width;
- unsigned long height;
- mfont.compute_size(name,width,height);
-
- if (height < 13)
- height = 13;
-
- return rectangle(width + 17 -1, height -1);
- }
-
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
-
- void toggle_button_style_radio_button::draw_toggle_button (
- const canvas& c,
- const rectangle& rect,
- const bool enabled,
- const font& mfont,
- const long ,
- const long ,
- const ustring& name,
- const bool is_depressed,
- const bool is_checked
- ) const
- {
- rectangle area = rect.intersect(c);
- if (area.is_empty())
- return;
-
-
- rgb_pixel color;
-
- // figure out where the name string should appear
- rectangle name_rect, box_rect;
- unsigned long padding = 0;
- if (mfont.height() < 13)
- padding = (rect.height() - mfont.height())/2;
-
- name_rect = rect;
- name_rect.set_left(rect.left() + 17-1);
- name_rect.set_top(rect.top() + padding);
- name_rect.set_bottom(rect.bottom() - padding);
-
- box_rect = rect;
- box_rect.set_right(rect.left() + 12);
- box_rect.set_bottom(rect.top() + 12);
-
-
- const long x = box_rect.left();
- const long y = box_rect.top();
-
- if (enabled && is_depressed == false)
- draw_solid_circle(c,point(rect.left()+5,rect.top()+5),4.5,rgb_pixel(255,255,255));
- else
- draw_solid_circle(c,point(rect.left()+5,rect.top()+5),4.5,rgb_pixel(212,208,200));
-
-
- color = rgb_pixel(128,128,128);
- draw_line(c,point(0+x,4+y),point(0+x,7+y),color);
- draw_line(c,point(1+x,2+y),point(1+x,9+y),color);
- draw_line(c,point(2+x,1+y),point(9+x,1+y),color);
- draw_line(c,point(4+x,0+y),point(7+x,0+y),color);
-
- color = rgb_pixel(255,255,255);
- draw_line(c,point(4+x,11+y),point(7+x,11+y),color);
- draw_line(c,point(2+x,10+y),point(9+x,10+y),color);
- draw_line(c,point(10+x,2+y),point(10+x,9+y),color);
- draw_line(c,point(11+x,4+y),point(11+x,7+y),color);
-
- color = rgb_pixel(64,64,64);
- draw_line(c,point(1+x,4+y),point(1+x,7+y),color);
- draw_line(c,point(4+x,1+y),point(7+x,1+y),color);
- draw_pixel(c,point(2+x,3+y),color);
- draw_pixel(c,point(3+x,2+y),color);
- draw_pixel(c,point(2+x,2+y),color);
- draw_pixel(c,point(2+x,8+y),color);
- draw_pixel(c,point(8+x,2+y),color);
- draw_pixel(c,point(9+x,2+y),color);
-
- color = rgb_pixel(212,208,200);
- draw_line(c,point(4+x,10+y),point(7+x,10+y),color);
- draw_line(c,point(10+x,4+y),point(10+x,7+y),color);
- draw_pixel(c,point(3+x,9+y),color);
- draw_pixel(c,point(9+x,3+y),color);
-
- if (enabled)
- {
- color.red = 0;
- color.green = 0;
- color.blue = 0;
- }
- else
- {
- color.red = 128;
- color.green = 128;
- color.blue = 128;
- }
-
- mfont.draw_string(c,name_rect,name,color);
-
- if (is_checked)
- {
- draw_line(c,point(5+x,4+y),point(6+x,4+y),color);
- draw_line(c,point(4+x,5+y),point(7+x,5+y),color);
- draw_line(c,point(4+x,6+y),point(7+x,6+y),color);
- draw_line(c,point(5+x,7+y),point(6+x,7+y),color);
- }
-
- }
-
-// ----------------------------------------------------------------------------------------
-
- rectangle toggle_button_style_radio_button::
- get_min_size (
- const ustring& name,
- const font& mfont
- ) const
- {
- unsigned long width;
- unsigned long height;
- mfont.compute_size(name,width,height);
-
- if (height < 13)
- height = 13;
-
- return rectangle(width + 17 -1, height -1);
- }
-
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
- // scroll bar style stuff
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
-
- long scroll_bar_style_default::
- get_slider_length (
- long total_length,
- long max_pos
- ) const
- {
- // if the length is too small then we have to smash up the arrow buttons
- // and hide the slider.
- if (total_length <= get_width()*2)
- {
- return 0;
- }
- else
- {
- double range = total_length - get_button_length(total_length, max_pos)*2;
-
- double scale_factor = 30.0/(max_pos + 30.0);
-
- if (scale_factor < 0.1)
- scale_factor = 0.1;
-
-
- double fraction = range/(max_pos + range)*scale_factor;
- double result = fraction * range;
- long res = static_cast<long>(result);
- if (res < 8)
- res = 8;
- return res;
- }
- }
-
-// ----------------------------------------------------------------------------------------
-
- long scroll_bar_style_default::
- get_button_length (
- long total_length,
- long
- ) const
- {
- // if the length is too small then we have to smash up the arrow buttons
- // and hide the slider.
- if (total_length <= get_width()*2)
- {
- return total_length/2;
- }
- else
- {
- return get_width();
- }
- }
-
-// ----------------------------------------------------------------------------------------
-
- void scroll_bar_style_default::
- draw_scroll_bar_background (
- const canvas& c,
- const rectangle& rect,
- const bool ,
- const long ,
- const long ,
- const bool is_depressed
- ) const
- {
- if (is_depressed)
- draw_checkered(c, rect,rgb_pixel(0,0,0),rgb_pixel(43,47,55));
- else
- draw_checkered(c, rect,rgb_pixel(255,255,255),rgb_pixel(212,208,200));
- }
-
-// ----------------------------------------------------------------------------------------
-
- void scroll_bar_style_default::
- draw_scroll_bar_slider (
- const canvas& c,
- const rectangle& rect,
- const bool ,
- const long ,
- const long ,
- const bool
- ) const
- {
- fill_rect(c, rect, rgb_pixel(212,208,200));
- draw_button_up(c, rect);
- }
-
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
- // text_field styles
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
-
- unsigned long text_field_style_default::
- get_padding (
- const font& mfont
- ) const
- {
- return mfont.height()-mfont.ascender();
- }
-
-// ----------------------------------------------------------------------------------------
-
- void text_field_style_default::
- draw_text_field (
- const canvas& c,
- const rectangle& rect,
- const rectangle& text_rect,
- const bool enabled,
- const font& mfont,
- const ustring& text,
- const unsigned long cursor_x,
- const unsigned long text_pos,
- const rgb_pixel& text_color,
- const rgb_pixel& bg_color,
- const bool has_focus,
- const bool cursor_visible,
- const long highlight_start,
- const long highlight_end
- ) const
- {
- rectangle area = rect.intersect(c);
-
- if (enabled)
- {
- // first fill our area with the bg_color
- fill_rect(c, area,bg_color);
- }
- else
- {
- // first fill our area with gray
- fill_rect(c, area,rgb_pixel(212,208,200));
- }
-
-
- if (enabled)
- mfont.draw_string(c,text_rect,text,text_color,text_pos);
- else
- mfont.draw_string(c,text_rect,text,rgb_pixel(128,128,128),text_pos);
-
- // now draw the edge of the text_field
- draw_sunken_rectangle(c, rect);
-
- if (highlight_start <= highlight_end && enabled)
- {
- rectangle highlight_rect = text_rect;
- unsigned long left_pad = 0, right_pad = mfont.left_overflow();
-
- long i;
- for (i = text_pos; i <= highlight_end; ++i)
- {
- if (i == highlight_start)
- left_pad = right_pad;
-
- right_pad += mfont[text[i]].width();
- }
-
- highlight_rect.set_left(text_rect.left()+left_pad);
- highlight_rect.set_right(text_rect.left()+right_pad);
-
- // highlight the highlight_rect area
- highlight_rect = highlight_rect.intersect(c);
- for (long row = highlight_rect.top(); row <= highlight_rect.bottom(); ++row)
- {
- for (long col = highlight_rect.left(); col <= highlight_rect.right(); ++col)
- {
- canvas::pixel& pixel = c[row-c.top()][col-c.left()];
- if (pixel.red == 255 && pixel.green == 255 && pixel.blue == 255)
- {
- // this is a background (and white) pixel so set it to a dark
- // blueish color.
- pixel.red = 10;
- pixel.green = 36;
- pixel.blue = 106;
- }
- else
- {
- // this should be a pixel that is part of a letter so set it to white
- pixel.red = 255;
- pixel.green = 255;
- pixel.blue = 255;
- }
- }
- }
- }
-
- // now draw the cursor if we need to
- if (cursor_visible && has_focus && enabled)
- {
- const unsigned long top = rect.top()+3;
- const unsigned long bottom = rect.bottom()-3;
- draw_line(c, point(rect.left()+cursor_x,top),point(rect.left()+cursor_x,bottom));
- }
-
- }
-
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
- // text_box styles
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
-
- void text_box_style_default::
- draw_text_box (
- const canvas& c,
- const rectangle& display_rect,
- const rectangle& text_rect,
- const bool enabled,
- const font& mfont,
- const ustring& text,
- const rectangle& cursor_rect,
- const rgb_pixel& text_color,
- const rgb_pixel& bg_color,
- const bool has_focus,
- const bool cursor_visible,
- const long highlight_start,
- const long highlight_end
- ) const
- {
- rectangle area = display_rect.intersect(c);
-
- if (enabled)
- {
- // first fill our area with the bg_color
- fill_rect(c, area,bg_color);
- }
- else
- {
- // first fill our area with gray
- fill_rect(c, area,rgb_pixel(212,208,200));
- }
-
-
- if (enabled)
- mfont.draw_string(c,text_rect,text,text_color, 0, ustring::npos, area);
- else
- mfont.draw_string(c,text_rect,text,rgb_pixel(128,128,128), 0, ustring::npos, area);
-
-
- // now draw the highlight if there is any
- if (highlight_start <= highlight_end && enabled)
- {
- const rectangle first_pos = mfont.compute_cursor_rect(text_rect, text, highlight_start);
- const rectangle last_pos = mfont.compute_cursor_rect(text_rect, text, highlight_end+1);
-
- const rgb_alpha_pixel color(10, 30, 106, 90);
-
- // if the highlighted text is all on one line
- if (first_pos.top() == last_pos.top())
- {
- fill_rect(c, (first_pos + last_pos).intersect(display_rect), color);
- }
- else
- {
- const rectangle min_boundary(display_rect.left()+4, display_rect.top()+4,
- display_rect.right()-4, display_rect.bottom()-4);
- const rectangle boundary( display_rect.intersect(text_rect) + min_boundary);
-
- rectangle first_row, last_row, middle_rows;
- first_row += first_pos;
- first_row += point(boundary.right(), first_pos.top());
- last_row += last_pos;
- last_row += point(boundary.left(), last_pos.bottom());
-
- middle_rows.left() = boundary.left();
- middle_rows.right() = boundary.right();
- middle_rows.top() = first_row.bottom()+1;
- middle_rows.bottom() = last_row.top()-1;
-
- fill_rect(c, first_row.intersect(display_rect), color);
- fill_rect(c, middle_rows, color);
- fill_rect(c, last_row.intersect(display_rect), color);
- }
- }
-
- // now draw the cursor if we need to
- if (cursor_visible && has_focus && enabled)
- {
- draw_line(c, point(cursor_rect.left(), cursor_rect.top()),point(cursor_rect.left(), cursor_rect.bottom()), 0, area);
- }
-
- }
-
-// ----------------------------------------------------------------------------------------
-
-}
-
-#endif // DLIB_WIDGETs_STYLE_CPP_
-