diff --git a/Frame.C b/Frame.C index 6999bdd..fece24f 100644 --- a/Frame.C +++ b/Frame.C @@ -517,8 +517,6 @@ void Frame::getLabel(int del) { int clr_w = label_w; char* old = (char*)label(); char* nu = del ? 0 : (char*)getProperty(XA_WM_NAME); - //int clr_pix = max(fl_width(nu), fl_width(old)) + RgtSz; - //Fl::error("getLabel(): old title '%s'; new title '%s'; clr pix %d", old, nu, clr_pix); if (nu) { // since many window managers print a default label when none is // given, many programs send spaces to make a blank label. Detect @@ -553,7 +551,6 @@ void Frame::getLabel(int del) { } if (shown()) { // && label_h > 3 && left > 3) XClearArea(fl_display, fl_xid(this), LftSz, TopSz, clr_w, clr_h, 1); - //Fl::error("getLabel(): clearing w %d, h %d", clr_w, clr_h); } } @@ -1076,7 +1073,6 @@ void Frame::desktop(Desktop* d) { void Frame::set_size(int nx, int ny, int nw, int nh, int warp) { int dx = nx-x(); x(nx); int dy = ny-y(); y(ny); - //Fl::error("Frame::set_size(): wnd %X, nx %d, ny %d, nw %d, nh %d; dheight %d, dx %d, dy %d", window_, nw, nh, dheight, dx, dy); if (!dx && !dy && nw == w() && nh == h()) return; int unmap = 0; int remap = 0; @@ -1116,8 +1112,6 @@ void Frame::set_size(int nx, int ny, int nw, int nh, int warp) { h(nh); #if 1 //def SHOW_CLOCK #ifdef TOPSIDE - //int t = label_x + 3; // we have to clear the entire label area - //Fl::error("XClearArea(): id %X, x %d, y %d, w %d, h %d", fl_xid(this), label_x, BUTTON_TOP, label_x + label_w, BUTTON_H); XClearArea(fl_display,fl_xid(this), label_x, BUTTON_TOP, label_x + label_w, BUTTON_H, 1); // ML #else @@ -1133,38 +1127,31 @@ void Frame::set_size(int nx, int ny, int nw, int nh, int warp) { if (old_label_y+old_label_h < t) t = old_label_y+old_label_h; } #endif -//ML if (t < nh && left>LEFT) -//ML XClearArea(fl_display,fl_xid(this), 1, t, left-1, nh-t, 1); } show_hide_buttons(); - // for maximize button move the cursor first if window gets smaller + // for the maximize button, move the cursor first if window gets smaller if (warp == 1 && !DoNotWarp && (dx || dy)) XWarpPointer(fl_display, None,None,0,0,0,0, dx, dy); // for configure request, move the cursor first if (warp == 2 && active() && !Fl::pushed()) warp_pointer(); if (ny < 0) ny = 0; - if (nh < 8) nh = 8; // TitleSz; + if (nh < 8) nh = 8; - //Fl::error("XMoveResizeWindow(): id %X, x %d, y %d, w %d, h %d", fl_xid(this), nx, ny, nw, nh); XMoveResizeWindow(fl_display, fl_xid(this), nx, ny, nw, nh); #if FL_API_VERSION >= 10400 # if FLTK_USE_CAIRO make_current(); - //Fl::error("cairo_xlib_surface_set_size(): gc %X, w %d, h %d", fl_cairo_gc(), nw, nh); if (fl_cairo_gc()) cairo_xlib_surface_set_size(cairo_get_target(fl_cairo_gc()), nw, nh); # endif #endif if (nw <= dwidth || nh <= dheight) { if (unmap) { set_state_flag(IGNORE_UNMAP); - //Fl::error("XUnmapWindow(): wnd %X", window_); XUnmapWindow(fl_display, window_); } } else { - //Fl::error("XResizeWindow(): wnd %X, w %d, h %d", window_, nw-dwidth, nh-dheight); XResizeWindow(fl_display, window_, nw-dwidth, nh-dheight); if (remap) { - //Fl::error("XMapWindow(): wnd %X", window_); XMapWindow(fl_display, window_); #if CLICK_TO_TYPE if (active()) activate(); @@ -1189,12 +1176,10 @@ void Frame::sendConfigureNotify() const { ce.y = y()+top-app_border_width; ce.width = w()-dwidth; ce.height = h()-dheight; -// if (ce.height < TitleSz) ce.height = TitleSz; if (ce.height < 8) ce.height = 8; ce.border_width = app_border_width; ce.above = None; ce.override_redirect = 0; - //Fl::error("XSendEvent(): wnd %X, x %d, y %d, w %d, h %d", window_, ce.x, ce.y, ce.width, ce.height); XSendEvent(fl_display, window_, False, StructureNotifyMask, (XEvent*)&ce); } @@ -1282,7 +1267,7 @@ void Frame::show_hide_buttons() { // ML: OTHER BUTTONS ARE PLACED IN UPPER RIGHT bx = w() - RgtSz - ButtonSz; -// RS: FIRST PLACE CLOSE BUTTON FARTHEST INTO UPPER RIGHT +// RS: FIRST, PLACE CLOSE BUTTON FARTHEST INTO UPPER RIGHT #if CLOSE_BOX if (flag(NO_CLOSE)) { #endif @@ -1295,7 +1280,7 @@ void Frame::show_hide_buttons() { } #endif if (transient_for() || label_w > (w() - (2*ButtonSz + LftSz + 2*RgtSz))) { - // don't show resize and iconize buttons for "transient" (e.g. dialog box) windows + // don't show resize and minimize buttons for "transient" (e.g. dialog box) windows min_w_button.hide(); } else { min_w_button.position(bx, TopSz); @@ -1322,13 +1307,12 @@ void Frame::show_hide_buttons() { } if (label_x != bx && shown()) -//ML Buttons look garbled after expanding, so let's just clear the whole area + //ML Buttons look garbled after expanding, so let's just clear the whole area XClearArea(fl_display,fl_xid(this), LftSz, TopSz, w() - LftSz, TitleSz, 1); label_x = LftSz + ButtonSz + 2*RgtSz; if (label_w > (w() - (LftSz + 3*ButtonSz + 2*RgtSz))) { label_x = LftSz + RgtSz; // move to where iconize button would be } -// label_w = bx - label_x; } @@ -1390,8 +1374,7 @@ void Frame::show_hide_buttons() { by += ButtonSz; } if (label_y != by && shown()) -//ML XClearArea(fl_display,fl_xid(this), 1, by, left-1, label_h+label_y-by, 1); -//ML Buttons look garbled after expanding, so let's just clear the whole area + //ML Buttons look garbled after expanding, so let's just clear the whole area XClearArea(fl_display,fl_xid(this), 1, 1, left-1, h()-1, 1); label_y = by; @@ -1402,7 +1385,6 @@ void Frame::show_hide_buttons() { } else { iconize_button.show(); iconize_button.position(LftSz,h()-(BtmSz+ButtonSz+TopSz)); - //label_h = iconize_button.y()-by-TopSz; } // -- END ML @@ -1458,13 +1440,11 @@ void Frame::draw() { if (active()) { fl_rectf(2, 2, w() - 4, h()-4, fl_color_average(FL_BACKGROUND2_COLOR, FL_WHITE, 0.6) -// (ACTIVE_COLOR >> 16) & 0xFF, (ACTIVE_COLOR >> 8) & 0xFF, ACTIVE_COLOR & 0xFF ); } else { fl_rectf(2, 2, w() - 4, h()-4, FL_BACKGROUND2_COLOR - //FL_GRAY ); } // ------------------ML @@ -1482,7 +1462,7 @@ void Frame::draw() { #endif if (!flag(THIN_BORDER) && label_h > 3) { fl_color(labelcolor()); - fl_font(TITLE_FONT_SLOT, TitleFontSz); // TITLE_FONT_SIZE); + fl_font(TITLE_FONT_SLOT, TitleFontSz); fl_draw(label(), label_x, TopSz, label_w, ButtonSz, Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_CLIP), 0, 0); } @@ -1497,7 +1477,6 @@ void Frame::draw() { if (active()) { fl_rectf(2, 2, w() - 4, h()-4, fl_color_average(FL_BACKGROUND2_COLOR, FL_WHITE, 0.6) ); // ML - //(ACTIVE_COLOR >> 16) & 0xFF, (ACTIVE_COLOR >> 8) & 0xFF, ACTIVE_COLOR & 0xFF); } else { fl_rectf(2, 2, w() - 4, h()-4, FL_BACKGROUND2_COLOR); // ML @@ -1520,7 +1499,7 @@ void Frame::draw() { if (active()) { int clkw = int(fl_width(clock_buf)); if (clock_alarm_on) { - fl_font(TITLE_FONT_SLOT, TitleFontSz); //TITLE_FONT_SIZE); + fl_font(TITLE_FONT_SLOT, TitleFontSz); fl_rectf(LftSz-1, label_y + label_h - 3 - clkw, TitleSz, clkw, (ALARM_BG_COLOR>>16)&0xff, (ALARM_BG_COLOR>>8)&0xff, @@ -1529,7 +1508,7 @@ void Frame::draw() { (ALARM_FG_COLOR>>8)&0xff, ALARM_FG_COLOR&0xff); } else - fl_font(MENU_FONT_SLOT, TitleFontSz); //TITLE_FONT_SIZE); + fl_font(MENU_FONT_SLOT, TitleFontSz); #ifndef HAVE_XFT // This might overlay the label if the label is long enough @@ -1548,7 +1527,7 @@ void Frame::draw() { left-1, label_h-3, 0); #endif fl_color(labelcolor()); - fl_font(TITLE_FONT_SLOT, TitleFontSz); //TITLE_FONT_SIZE); + fl_font(TITLE_FONT_SLOT, TitleFontSz); if(label() && *label()) #ifndef HAVE_XFT draw_rotated90(label(), 1, label_y+3, left-1, label_h-3, @@ -1579,29 +1558,29 @@ void FrameButton::draw() { Fl_Widget::draw_box(value() ? FL_DOWN_FRAME : FL_UP_FRAME, value() ? fl_darker(FL_BACKGROUND2_COLOR) : fl_color_average(FL_BACKGROUND2_COLOR, FL_WHITE, 0.6)); // ML -// Fl_Widget::draw_box(value() ? FL_DOWN_FRAME : FL_UP_FRAME, FL_GRAY); - fl_line_style(FL_SOLID, (int)(sf + 0.7)); + fl_line_style(FL_SOLID, (2.0 * sf + 0.6)); fl_color(parent()->labelcolor()); + int m = (min(w(),h()) + 1) / 2; + int d = min(w(),h()) * 3 / 10; switch (label()[0]) { case 'W': #ifdef TOPSIDE - fl_line (x+3, y+5, x+w()-4, y+5); + fl_line (x+3, y+5, x+w()-5, y+5); #else fl_rect(x+(h()-7)/2,y+3,2,h()-6); #endif break; case 'w': - fl_rect(x+3,y+(h()-7)/2,w()-4,7); + fl_rect(x+3,y+(h()-7)/2,w()-5,7); break; case 'h': - fl_rect(x+(h()-7)/2,y+2,7,h()-4); + fl_rect(x+(h()-7)/2,y+3,7,h()-5); break; case 'X': #if CLOSE_X - fl_line(x+2,y+3,x+w()-5,y+h()-4); - fl_line(x+3,y+3,x+w()-4,y+h()-4); - fl_line(x+2,y+h()-4,x+w()-5,y+3); - fl_line(x+3,y+h()-4,x+w()-4,y+3); + fl_line(x+m-d-1,y+m-d-1,x+m+d,y+m+d-1); + fl_line(x+m-d-1,y+m+d-1,x+m+d,y+m-d-1); + #endif #if CLOSE_HITTITE_LIGHTNING fl_arc(x+3,y+3,w()-6,h()-6,0,360); @@ -1665,27 +1644,10 @@ void Frame::button_cb(Fl_Button* b) { show_hide_buttons(); break; case 'w': // max-width button -/* if (b->value()) { - if (!min_w_button.value()) {restore_x=x()+left; restore_w=w()-dwidth;} - int W = maximize_width()+dwidth; - int X = force_x_onscreen(x() + (w()-W)/2, W); - set_size(X, y(), W, h(), 3); - } else { - set_size(restore_x-left, y(), restore_w+dwidth, h(), 1); - } */ ToggleHorzMax(); show_hide_buttons(); break; case 'h': // max-height button -/* if (b->value()) { - restore_y = y()+top; - restore_h = h()-dwidth; - int H = maximize_height()+dheight; - int Y = force_y_onscreen(y() + (h()-H)/2, H); - set_size(x(), Y, w(), H, 3); - } else { - set_size(x(), restore_y-top, w(), restore_h+dwidth, 1); - }*/ ToggleVertMax(); show_hide_buttons(); break; @@ -1749,17 +1711,7 @@ void Frame::set_cursor(int r) { c = FL_CURSOR_NESW; break; } -//#if FL_MAJOR_VERSION>1 cursor(c); -//#else -// static Frame* previous_frame; -// static Fl_Cursor previous_cursor; -// if (this != previous_frame || c != previous_cursor) { -// previous_frame = this; -// previous_cursor = c; -// cursor(c, CURSOR_FG_SLOT, CURSOR_BG_SLOT); -// } -//#endif } #ifdef AUTO_RAISE @@ -2048,7 +2000,6 @@ int Frame::handle(const XEvent* ei) { const XPropertyEvent* e = &(ei->xproperty); Atom a = e->atom; - // case XA_WM_ICON_NAME: (do something similar to name) if (a == XA_WM_NAME) { getLabel(e->state == PropertyDelete); diff --git a/config.h b/config.h index c3e0136..7606753 100644 --- a/config.h +++ b/config.h @@ -153,7 +153,6 @@ extern float sf; //scale factor from Xft.dpi // how many pixels from edge for resize handle: #define RESIZE_EDGE 5 // set this to zero to disable resizing by grabbing left/top edge: -//#define RESIZE_LEFT 1 #define RESIZE_TITLE_EDGE 1 // ML // must drag window this far off screen to snap the border off the screen: diff --git a/main.C b/main.C index 731d1eb..2f7eef8 100644 --- a/main.C +++ b/main.C @@ -436,6 +436,7 @@ int main(int argc, char** argv) { sf = Fl::screen_scale(0); TitleFontSz = (int) ((float)TITLE_FONT_SIZE * sf); TitleSz = (int) ((float)(TITLE_FONT_SIZE + 4) * sf); + if ((TitleSz % 2) == 0) TitleSz++; // make odd! ButtonSz = TitleSz; LftSz = (int) ((float)LEFT * sf); RgtSz = (int) ((float)RIGHT * sf);