2004-09-19 14:24:53 -06:00
|
|
|
/* Copyright (C) 2004 Bart
|
2010-05-25 16:25:21 -06:00
|
|
|
* Copyright (C) 2010 Curtis Gedak
|
2004-09-19 14:24:53 -06:00
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
|
|
* (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
2014-01-23 03:59:48 -07:00
|
|
|
* GNU General Public License for more details.
|
2004-09-19 14:24:53 -06:00
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
2014-01-23 03:59:48 -07:00
|
|
|
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
2004-09-19 14:24:53 -06:00
|
|
|
*/
|
2016-10-18 16:45:28 -06:00
|
|
|
|
|
|
|
#include "Frame_Resizer_Base.h"
|
2004-09-19 14:24:53 -06:00
|
|
|
|
2018-08-02 10:10:11 -06:00
|
|
|
#include <gdkmm/general.h>
|
|
|
|
|
|
|
|
|
2018-11-22 12:44:42 -07:00
|
|
|
namespace GParted
|
|
|
|
{
|
|
|
|
|
|
|
|
|
2006-03-01 12:16:13 -07:00
|
|
|
Frame_Resizer_Base::Frame_Resizer_Base()
|
2004-09-19 14:24:53 -06:00
|
|
|
{
|
2006-03-01 12:16:13 -07:00
|
|
|
BORDER = 8 ;
|
|
|
|
GRIPPER = 10 ;
|
2010-05-25 16:25:21 -06:00
|
|
|
X_MIN_SPACE_BEFORE = 0 ;
|
2006-03-01 12:16:13 -07:00
|
|
|
|
|
|
|
fixed_start = false ;
|
|
|
|
init() ;
|
2004-09-19 14:24:53 -06:00
|
|
|
}
|
|
|
|
|
2006-03-01 12:16:13 -07:00
|
|
|
void Frame_Resizer_Base::init()
|
2004-09-19 14:24:53 -06:00
|
|
|
{
|
2006-03-01 12:16:13 -07:00
|
|
|
drawingarea .set_size_request( 500 + GRIPPER * 2 + BORDER *2, 50 );
|
2004-12-12 07:57:04 -07:00
|
|
|
|
2006-03-01 12:16:13 -07:00
|
|
|
drawingarea .signal_realize() .connect(
|
|
|
|
sigc::mem_fun(*this, &Frame_Resizer_Base::drawingarea_on_realize) ) ;
|
|
|
|
drawingarea .signal_expose_event() .connect(
|
|
|
|
sigc::mem_fun(*this, &Frame_Resizer_Base::drawingarea_on_expose) ) ;
|
|
|
|
drawingarea .signal_motion_notify_event() .connect(
|
|
|
|
sigc::mem_fun(*this, &Frame_Resizer_Base::drawingarea_on_mouse_motion) ) ;
|
|
|
|
drawingarea .signal_button_press_event() .connect(
|
|
|
|
sigc::mem_fun(*this, &Frame_Resizer_Base::drawingarea_on_button_press_event) ) ;
|
|
|
|
drawingarea .signal_button_release_event() .connect(
|
|
|
|
sigc::mem_fun(*this, &Frame_Resizer_Base::drawingarea_on_button_release_event) ) ;
|
|
|
|
drawingarea .signal_leave_notify_event() .connect(
|
|
|
|
sigc::mem_fun(*this, &Frame_Resizer_Base::drawingarea_on_leave_notify) ) ;
|
2004-09-19 14:24:53 -06:00
|
|
|
|
|
|
|
this ->add( drawingarea ) ;
|
2018-08-02 10:10:11 -06:00
|
|
|
|
|
|
|
color_used.set("#F8F8BA");
|
|
|
|
color_unused.set("white");
|
|
|
|
color_arrow.set("black");
|
|
|
|
color_background.set("darkgrey");
|
|
|
|
color_arrow_rectangle.set("lightgrey");
|
|
|
|
|
2018-08-03 10:50:40 -06:00
|
|
|
cursor_resize = Gdk::Cursor::create(Gdk::SB_H_DOUBLE_ARROW);
|
|
|
|
cursor_move = Gdk::Cursor::create(Gdk::FLEUR);
|
2004-09-19 14:24:53 -06:00
|
|
|
|
2004-10-01 15:09:19 -06:00
|
|
|
GRIP_MOVE = GRIP_LEFT = GRIP_RIGHT = false;
|
|
|
|
X_END = 0;
|
2004-12-12 07:57:04 -07:00
|
|
|
set_size_limits( 0, 500 ) ;
|
|
|
|
|
2004-09-19 14:24:53 -06:00
|
|
|
Gdk::Point p;
|
2004-12-12 07:57:04 -07:00
|
|
|
p .set_y( 15 ); arrow_points .push_back( p ) ;
|
|
|
|
p .set_y( 25 ); arrow_points .push_back( p ) ;
|
|
|
|
p .set_y( 35 ); arrow_points .push_back( p ) ;
|
2004-09-19 14:24:53 -06:00
|
|
|
|
2006-03-01 12:16:13 -07:00
|
|
|
this ->show_all_children();
|
2004-09-19 14:24:53 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
void Frame_Resizer_Base::set_rgb_partition_color( const Gdk::Color & color )
|
|
|
|
{
|
2004-10-08 13:53:35 -06:00
|
|
|
this ->color_partition = color ;
|
2004-09-19 14:24:53 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
void Frame_Resizer_Base::override_default_rgb_unused_color( const Gdk::Color & color )
|
|
|
|
{
|
2004-10-08 13:53:35 -06:00
|
|
|
this ->color_unused = color ;
|
2004-09-19 14:24:53 -06:00
|
|
|
}
|
|
|
|
|
2005-01-25 07:26:54 -07:00
|
|
|
void Frame_Resizer_Base::set_x_start( int x_start )
|
2004-09-19 14:24:53 -06:00
|
|
|
{
|
2006-03-01 12:16:13 -07:00
|
|
|
this ->X_START = x_start + GRIPPER ;
|
2004-09-19 14:24:53 -06:00
|
|
|
}
|
|
|
|
|
2010-05-25 16:25:21 -06:00
|
|
|
void Frame_Resizer_Base::set_x_min_space_before( int x_min_space_before )
|
|
|
|
{
|
|
|
|
this ->X_MIN_SPACE_BEFORE = x_min_space_before ;
|
|
|
|
}
|
|
|
|
|
2004-09-19 14:24:53 -06:00
|
|
|
void Frame_Resizer_Base::set_x_end( int x_end )
|
|
|
|
{
|
2006-03-01 12:16:13 -07:00
|
|
|
this ->X_END = x_end + GRIPPER + BORDER * 2 ;
|
2004-09-19 14:24:53 -06:00
|
|
|
}
|
|
|
|
|
2005-01-25 07:26:54 -07:00
|
|
|
void Frame_Resizer_Base::set_used( int used )
|
2004-09-19 14:24:53 -06:00
|
|
|
{
|
2006-03-01 12:16:13 -07:00
|
|
|
this ->USED = used ;
|
2004-09-19 14:24:53 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
void Frame_Resizer_Base::set_fixed_start( bool fixed_start )
|
|
|
|
{
|
|
|
|
this ->fixed_start = fixed_start ;
|
|
|
|
}
|
|
|
|
|
2004-12-12 07:57:04 -07:00
|
|
|
void Frame_Resizer_Base::set_size_limits( int min_size, int max_size )
|
|
|
|
{
|
2006-03-01 12:16:13 -07:00
|
|
|
this ->MIN_SIZE = min_size + BORDER * 2 ;
|
|
|
|
this ->MAX_SIZE = max_size + BORDER * 2 ;
|
2004-12-12 07:57:04 -07:00
|
|
|
}
|
|
|
|
|
2006-03-01 12:16:13 -07:00
|
|
|
int Frame_Resizer_Base::get_used()
|
2004-09-19 14:24:53 -06:00
|
|
|
{
|
|
|
|
return USED ;
|
|
|
|
}
|
|
|
|
|
2006-03-01 12:16:13 -07:00
|
|
|
int Frame_Resizer_Base::get_x_start()
|
2004-09-19 14:24:53 -06:00
|
|
|
{
|
2006-03-01 12:16:13 -07:00
|
|
|
return X_START - GRIPPER ;
|
2004-09-19 14:24:53 -06:00
|
|
|
}
|
|
|
|
|
2006-03-01 12:16:13 -07:00
|
|
|
int Frame_Resizer_Base::get_x_end()
|
2004-09-19 14:24:53 -06:00
|
|
|
{
|
2006-03-01 12:16:13 -07:00
|
|
|
return X_END - GRIPPER - BORDER * 2 ;
|
2004-09-19 14:24:53 -06:00
|
|
|
}
|
|
|
|
|
2006-03-01 12:16:13 -07:00
|
|
|
void Frame_Resizer_Base::drawingarea_on_realize()
|
2004-09-19 14:24:53 -06:00
|
|
|
{
|
2005-01-19 13:01:39 -07:00
|
|
|
drawingarea .add_events( Gdk::POINTER_MOTION_MASK );
|
|
|
|
drawingarea .add_events( Gdk::BUTTON_PRESS_MASK );
|
|
|
|
drawingarea .add_events( Gdk::BUTTON_RELEASE_MASK );
|
|
|
|
drawingarea .add_events( Gdk::LEAVE_NOTIFY_MASK );
|
2004-09-19 14:24:53 -06:00
|
|
|
}
|
|
|
|
|
2005-01-19 13:01:39 -07:00
|
|
|
bool Frame_Resizer_Base::drawingarea_on_expose( GdkEventExpose * ev )
|
2018-08-02 10:10:11 -06:00
|
|
|
{
|
|
|
|
Glib::RefPtr<Gdk::Window> window = drawingarea.get_window();
|
|
|
|
if (!window)
|
|
|
|
return true;
|
|
|
|
|
|
|
|
Cairo::RefPtr<Cairo::Context> cr = window->create_cairo_context();
|
|
|
|
|
|
|
|
// Clip to the area indicated by the expose event so that we only redraw
|
|
|
|
// the portion of the window that needs to be redrawn.
|
|
|
|
cr->rectangle(ev->area.x, ev->area.y,
|
|
|
|
ev->area.width, ev->area.height);
|
|
|
|
cr->clip();
|
|
|
|
|
|
|
|
cr->set_line_cap(Cairo::LINE_CAP_SQUARE);
|
|
|
|
cr->set_line_width(1.0);
|
|
|
|
|
|
|
|
draw_partition(cr);
|
|
|
|
|
2004-09-19 14:24:53 -06:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2006-03-01 12:16:13 -07:00
|
|
|
bool Frame_Resizer_Base::drawingarea_on_mouse_motion( GdkEventMotion * ev )
|
2004-09-19 14:24:53 -06:00
|
|
|
{
|
2005-01-19 13:01:39 -07:00
|
|
|
if ( GRIP_LEFT || GRIP_RIGHT || GRIP_MOVE )
|
2006-03-01 12:16:13 -07:00
|
|
|
{
|
|
|
|
if ( GRIP_LEFT )
|
2004-09-19 14:24:53 -06:00
|
|
|
{
|
2010-05-25 16:25:21 -06:00
|
|
|
if ( ev ->x > (GRIPPER + X_MIN_SPACE_BEFORE) &&
|
2006-03-01 12:16:13 -07:00
|
|
|
(X_END - ev ->x) < MAX_SIZE &&
|
|
|
|
(X_END - ev ->x) > MIN_SIZE )
|
|
|
|
{
|
|
|
|
X_START = static_cast<int>( ev ->x ) ;
|
|
|
|
|
|
|
|
signal_resize .emit( X_START - GRIPPER, X_END - GRIPPER - 2 * BORDER, ARROW_LEFT ) ;
|
|
|
|
}
|
|
|
|
else if ( X_END - ev ->x >= MAX_SIZE )
|
|
|
|
{
|
|
|
|
if ( X_END - X_START < MAX_SIZE )
|
|
|
|
{
|
|
|
|
X_START = X_END - MAX_SIZE ;
|
|
|
|
|
2010-05-25 16:25:21 -06:00
|
|
|
if ( X_START < (GRIPPER + X_MIN_SPACE_BEFORE) )
|
|
|
|
X_START = GRIPPER + X_MIN_SPACE_BEFORE ;
|
2006-03-01 12:16:13 -07:00
|
|
|
|
|
|
|
//-1 to force the spinbutton to its max.
|
|
|
|
signal_resize .emit( X_START - GRIPPER -1,
|
|
|
|
X_END - GRIPPER - BORDER * 2,
|
|
|
|
ARROW_LEFT ) ;
|
|
|
|
}
|
|
|
|
}
|
2010-05-25 16:25:21 -06:00
|
|
|
else if ( ev ->x <= (GRIPPER + X_MIN_SPACE_BEFORE) )
|
2006-03-01 12:16:13 -07:00
|
|
|
{
|
2010-05-25 16:25:21 -06:00
|
|
|
if ( X_START > (GRIPPER + X_MIN_SPACE_BEFORE) && X_END - X_START < MAX_SIZE )
|
2006-03-01 12:16:13 -07:00
|
|
|
{
|
2010-05-25 16:25:21 -06:00
|
|
|
X_START = GRIPPER + X_MIN_SPACE_BEFORE ;
|
2006-03-01 12:16:13 -07:00
|
|
|
|
|
|
|
signal_resize .emit( X_START - GRIPPER,
|
|
|
|
X_END - GRIPPER - BORDER * 2,
|
|
|
|
ARROW_LEFT ) ;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if ( X_END - ev ->x <= MIN_SIZE )
|
|
|
|
{
|
|
|
|
if ( X_END - X_START > MIN_SIZE )
|
|
|
|
{
|
|
|
|
X_START = X_END - MIN_SIZE ;
|
|
|
|
|
|
|
|
//+1 to force the spinbutton to its min.
|
|
|
|
signal_resize .emit( X_START - GRIPPER +1,
|
|
|
|
X_END - GRIPPER - BORDER * 2,
|
|
|
|
ARROW_LEFT ) ;
|
|
|
|
}
|
|
|
|
}
|
2004-09-19 14:24:53 -06:00
|
|
|
}
|
2006-03-01 12:16:13 -07:00
|
|
|
|
|
|
|
else if ( GRIP_RIGHT )
|
2004-09-19 14:24:53 -06:00
|
|
|
{
|
2006-03-01 12:16:13 -07:00
|
|
|
if ( ev ->x < 500 + GRIPPER + BORDER * 2 &&
|
|
|
|
(ev ->x - X_START) < MAX_SIZE &&
|
|
|
|
(ev ->x - X_START) > MIN_SIZE )
|
|
|
|
{
|
|
|
|
X_END = static_cast<int>( ev ->x ) ;
|
|
|
|
|
|
|
|
signal_resize .emit( X_START - GRIPPER, X_END - GRIPPER - BORDER * 2, ARROW_RIGHT ) ;
|
|
|
|
}
|
|
|
|
else if ( ev ->x - X_START >= MAX_SIZE )
|
|
|
|
{
|
|
|
|
if ( X_END - X_START < MAX_SIZE )
|
|
|
|
{
|
|
|
|
X_END = X_START + MAX_SIZE ;
|
|
|
|
|
|
|
|
if ( X_END > 500 + GRIPPER + BORDER * 2 )
|
|
|
|
X_END = 500 + GRIPPER + BORDER * 2 ;
|
|
|
|
|
|
|
|
//+1 to force the spinbutton to its min.
|
|
|
|
signal_resize .emit( X_START - GRIPPER,
|
|
|
|
X_END - GRIPPER - BORDER * 2 +1,
|
|
|
|
ARROW_RIGHT ) ;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if ( ev ->x >= 500 + GRIPPER + BORDER * 2 )
|
|
|
|
{
|
|
|
|
if ( X_END < 500 + GRIPPER + BORDER * 2 && X_END - X_START < MAX_SIZE )
|
|
|
|
{
|
|
|
|
X_END = 500 + GRIPPER + BORDER * 2 ;
|
|
|
|
|
|
|
|
signal_resize .emit( X_START -GRIPPER,
|
|
|
|
X_END - GRIPPER - BORDER * 2,
|
|
|
|
ARROW_RIGHT ) ;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if ( ev ->x - X_START <= MIN_SIZE )
|
|
|
|
{
|
|
|
|
if ( X_END - X_START > MIN_SIZE )
|
|
|
|
{
|
|
|
|
X_END = X_START + MIN_SIZE ;
|
|
|
|
|
|
|
|
//-1 to force the spinbutton to its min.
|
|
|
|
signal_resize .emit( X_START - GRIPPER,
|
|
|
|
X_END - GRIPPER - BORDER * 2 -1,
|
|
|
|
ARROW_RIGHT ) ;
|
|
|
|
}
|
|
|
|
}
|
2004-09-19 14:24:53 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
else if ( GRIP_MOVE )
|
|
|
|
{
|
2006-03-01 12:16:13 -07:00
|
|
|
temp_x = X_START + static_cast<int>( ev ->x - X_START_MOVE );
|
|
|
|
temp_y = X_END - X_START ;
|
2010-05-25 16:25:21 -06:00
|
|
|
|
|
|
|
if ( temp_x > (GRIPPER + X_MIN_SPACE_BEFORE) && temp_x + temp_y < 500 + GRIPPER + BORDER * 2 )
|
2004-09-19 14:24:53 -06:00
|
|
|
{
|
|
|
|
X_START = temp_x ;
|
2006-03-01 12:16:13 -07:00
|
|
|
X_END = X_START + temp_y ;
|
|
|
|
}
|
2010-05-25 16:25:21 -06:00
|
|
|
else if ( temp_x <= (GRIPPER + X_MIN_SPACE_BEFORE) )
|
2006-03-01 12:16:13 -07:00
|
|
|
{
|
2010-05-25 16:25:21 -06:00
|
|
|
if ( X_START > (GRIPPER + X_MIN_SPACE_BEFORE) )
|
2006-03-01 12:16:13 -07:00
|
|
|
{
|
2010-05-25 16:25:21 -06:00
|
|
|
X_START = GRIPPER + X_MIN_SPACE_BEFORE;
|
2006-03-01 12:16:13 -07:00
|
|
|
X_END = X_START + temp_y ;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if ( temp_x + temp_y >= 500 + GRIPPER + BORDER * 2 )
|
|
|
|
{
|
|
|
|
if ( X_END < 500 + GRIPPER + BORDER * 2 )
|
|
|
|
{
|
|
|
|
X_END = 500 + GRIPPER + BORDER * 2 ;
|
|
|
|
X_START = X_END - temp_y ;
|
|
|
|
}
|
2004-09-19 14:24:53 -06:00
|
|
|
}
|
2010-05-25 16:25:21 -06:00
|
|
|
|
|
|
|
X_START_MOVE = static_cast<int>( ev ->x ) ;
|
2006-03-01 12:16:13 -07:00
|
|
|
signal_move .emit( X_START - GRIPPER, X_END - GRIPPER - BORDER * 2 ) ;
|
2004-09-19 14:24:53 -06:00
|
|
|
}
|
2018-08-02 10:10:11 -06:00
|
|
|
|
|
|
|
redraw();
|
2004-09-19 14:24:53 -06:00
|
|
|
}
|
2005-01-25 07:45:15 -07:00
|
|
|
else
|
|
|
|
{
|
|
|
|
//check if pointer is over a gripper
|
2006-03-01 12:16:13 -07:00
|
|
|
//left grip
|
|
|
|
if ( ! fixed_start &&
|
|
|
|
ev ->x >= X_START - GRIPPER &&
|
|
|
|
ev ->x <= X_START &&
|
|
|
|
ev ->y >= 5 &&
|
|
|
|
ev ->y <= 45 )
|
2018-08-03 10:50:40 -06:00
|
|
|
drawingarea.get_parent_window()->set_cursor(cursor_resize);
|
2006-03-01 12:16:13 -07:00
|
|
|
//right grip
|
|
|
|
else if ( ev ->x >= X_END &&
|
|
|
|
ev ->x <= X_END + GRIPPER &&
|
|
|
|
ev ->y >= 5 &&
|
|
|
|
ev ->y <= 45 )
|
2018-08-03 10:50:40 -06:00
|
|
|
drawingarea.get_parent_window()->set_cursor(cursor_resize);
|
2006-03-01 12:16:13 -07:00
|
|
|
//move grip
|
|
|
|
else if ( ! fixed_start &&
|
|
|
|
ev ->x >= X_START &&
|
|
|
|
ev ->x <= X_END )
|
2018-08-03 10:50:40 -06:00
|
|
|
drawingarea.get_parent_window()->set_cursor(cursor_move);
|
2006-03-01 12:16:13 -07:00
|
|
|
//normal pointer
|
|
|
|
else
|
2006-09-09 01:09:13 -06:00
|
|
|
drawingarea .get_parent_window() ->set_cursor() ;
|
2005-01-25 07:45:15 -07:00
|
|
|
}
|
2004-09-19 14:24:53 -06:00
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool Frame_Resizer_Base::drawingarea_on_button_press_event( GdkEventButton *ev )
|
|
|
|
{
|
2006-03-01 12:16:13 -07:00
|
|
|
GRIP_LEFT = GRIP_RIGHT = GRIP_MOVE = false;
|
2004-09-19 14:24:53 -06:00
|
|
|
|
2006-03-01 12:16:13 -07:00
|
|
|
//left grip
|
|
|
|
if ( ! fixed_start &&
|
|
|
|
ev ->x >= X_START - GRIPPER &&
|
|
|
|
ev ->x <= X_START &&
|
|
|
|
ev ->y >= 5 &&
|
|
|
|
ev ->y <= 45 )
|
2004-09-19 14:24:53 -06:00
|
|
|
GRIP_LEFT = true ;
|
2006-03-01 12:16:13 -07:00
|
|
|
//right grip
|
|
|
|
else if ( ev ->x >= X_END &&
|
|
|
|
ev ->x <= X_END + GRIPPER &&
|
|
|
|
ev ->y >= 5 &&
|
|
|
|
ev ->y <= 45 )
|
2004-09-19 14:24:53 -06:00
|
|
|
GRIP_RIGHT = true ;
|
2006-03-01 12:16:13 -07:00
|
|
|
//move grip
|
|
|
|
else if ( ! fixed_start &&
|
|
|
|
ev ->x >= X_START &&
|
|
|
|
ev ->x <= X_END )
|
|
|
|
{
|
|
|
|
GRIP_MOVE = true ;
|
|
|
|
X_START_MOVE = static_cast<int>( ev ->x );
|
|
|
|
}
|
2004-09-19 14:24:53 -06:00
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool Frame_Resizer_Base::drawingarea_on_button_release_event( GdkEventButton *ev )
|
|
|
|
{
|
2005-01-25 07:26:54 -07:00
|
|
|
GRIP_LEFT = GRIP_RIGHT = GRIP_MOVE = false;
|
2004-09-19 14:24:53 -06:00
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool Frame_Resizer_Base::drawingarea_on_leave_notify( GdkEventCrossing *ev )
|
|
|
|
{
|
2004-11-07 06:13:11 -07:00
|
|
|
if ( ev ->mode != GDK_CROSSING_GRAB && ! GRIP_LEFT && ! GRIP_RIGHT && ! GRIP_MOVE )
|
2006-09-09 01:09:13 -06:00
|
|
|
drawingarea .get_parent_window() ->set_cursor() ;
|
2004-09-19 14:24:53 -06:00
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2018-08-02 10:10:11 -06:00
|
|
|
|
|
|
|
void Frame_Resizer_Base::draw_partition(const Cairo::RefPtr<Cairo::Context>& cr)
|
2004-09-19 14:24:53 -06:00
|
|
|
{
|
|
|
|
UNUSED = X_END - X_START - BORDER * 2 - USED ;
|
|
|
|
if ( UNUSED < 0 )
|
|
|
|
UNUSED = 0 ;
|
2018-08-02 10:10:11 -06:00
|
|
|
|
|
|
|
// Background color
|
|
|
|
Gdk::Cairo::set_source_color(cr, color_background);
|
|
|
|
cr->rectangle(0, 0, 536, 50);
|
|
|
|
cr->fill();
|
|
|
|
|
|
|
|
// The two rectangles on each side of the partition
|
|
|
|
Gdk::Cairo::set_source_color(cr, color_arrow_rectangle);
|
|
|
|
cr->rectangle(0, 0, 10, 50);
|
|
|
|
cr->fill();
|
|
|
|
cr->rectangle(526, 0, 10, 50);
|
|
|
|
cr->fill();
|
|
|
|
|
|
|
|
// Partition
|
|
|
|
Gdk::Cairo::set_source_color(cr, color_partition);
|
|
|
|
cr->rectangle(X_START, 0, X_END - X_START, 50);
|
|
|
|
cr->fill();
|
|
|
|
|
|
|
|
// Used
|
|
|
|
Gdk::Cairo::set_source_color(cr, color_used);
|
|
|
|
cr->rectangle(X_START + BORDER, BORDER, USED, 34);
|
|
|
|
cr->fill();
|
|
|
|
|
|
|
|
// Unused
|
|
|
|
Gdk::Cairo::set_source_color(cr, color_unused);
|
|
|
|
cr->rectangle(X_START + BORDER + USED, BORDER, UNUSED, 34);
|
|
|
|
cr->fill();
|
|
|
|
|
|
|
|
// Resize grips
|
|
|
|
if (!fixed_start)
|
|
|
|
draw_resize_grip(cr, ARROW_LEFT);
|
|
|
|
|
|
|
|
draw_resize_grip(cr, ARROW_RIGHT);
|
2004-09-19 14:24:53 -06:00
|
|
|
}
|
|
|
|
|
2018-08-02 10:10:11 -06:00
|
|
|
|
|
|
|
void Frame_Resizer_Base::draw_resize_grip(const Cairo::RefPtr<Cairo::Context>& cr, ArrowType arrow_type)
|
2004-09-19 14:24:53 -06:00
|
|
|
{
|
|
|
|
if ( arrow_type == ARROW_LEFT )
|
|
|
|
{
|
2005-01-25 07:26:54 -07:00
|
|
|
arrow_points[ 0 ] .set_x( X_START ) ;
|
2006-03-01 12:16:13 -07:00
|
|
|
arrow_points[ 1 ] .set_x( X_START - GRIPPER ) ;
|
2005-01-25 07:26:54 -07:00
|
|
|
arrow_points[ 2 ] .set_x( X_START ) ;
|
2004-09-19 14:24:53 -06:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2005-01-25 07:26:54 -07:00
|
|
|
arrow_points[ 0 ] .set_x( X_END ) ;
|
2006-03-01 12:16:13 -07:00
|
|
|
arrow_points[ 1 ] .set_x( X_END + GRIPPER ) ;
|
2005-01-25 07:26:54 -07:00
|
|
|
arrow_points[ 2 ] .set_x( X_END ) ;
|
2004-09-19 14:24:53 -06:00
|
|
|
}
|
|
|
|
|
2018-08-02 10:10:11 -06:00
|
|
|
// Attach resize arrows to the partition
|
|
|
|
Gdk::Cairo::set_source_color(cr, color_arrow_rectangle);
|
|
|
|
cr->rectangle((arrow_type == ARROW_LEFT ? X_START - GRIPPER : X_END + 1) + 0.5,
|
|
|
|
5 + 0.5,
|
|
|
|
9,
|
|
|
|
40);
|
|
|
|
cr->stroke();
|
|
|
|
|
|
|
|
Gdk::Cairo::set_source_color(cr, color_arrow);
|
|
|
|
cr->move_to(arrow_points[0].get_x(), arrow_points[0].get_y());
|
|
|
|
cr->line_to(arrow_points[1].get_x(), arrow_points[1].get_y());
|
|
|
|
cr->line_to(arrow_points[2].get_x(), arrow_points[2].get_y());
|
|
|
|
cr->close_path();
|
|
|
|
cr->fill();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void Frame_Resizer_Base::redraw()
|
|
|
|
{
|
|
|
|
drawingarea.queue_draw();
|
2004-09-19 14:24:53 -06:00
|
|
|
}
|
|
|
|
|
2006-03-01 12:16:13 -07:00
|
|
|
Frame_Resizer_Base::~Frame_Resizer_Base()
|
2018-08-02 10:10:11 -06:00
|
|
|
{
|
2004-09-19 14:24:53 -06:00
|
|
|
}
|
2018-11-22 12:44:42 -07:00
|
|
|
|
|
|
|
|
|
|
|
} //GParted
|