I've rewritten almost the entire scrollbar. It mostly works, but it still has issues. I've put an #error directive in so that it won't compile; take it out if you *really* wanna try it. It's much more efficient than before. SVN revision: 1333eterm-0.10
parent
5894debb3a
commit
c58c7d411b
35 changed files with 1289 additions and 1257 deletions
@ -0,0 +1,102 @@ |
||||
/*
|
||||
* Copyright (C) 1999-1997, Michael Jennings |
||||
* |
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy |
||||
* of this software and associated documentation files (the "Software"), to |
||||
* deal in the Software without restriction, including without limitation the |
||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
||||
* sell copies of the Software, and to permit persons to whom the Software is |
||||
* furnished to do so, subject to the following conditions: |
||||
* |
||||
* The above copyright notice and this permission notice shall be included in |
||||
* all copies of the Software, its documentation and marketing & publicity |
||||
* materials, and acknowledgment shall be given in the documentation, materials |
||||
* and software packages that this Software was used. |
||||
* |
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL |
||||
* THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER |
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
||||
*/ |
||||
|
||||
static const char cvs_ident[] = "$Id$"; |
||||
|
||||
#include "config.h" |
||||
#include "feature.h" |
||||
|
||||
#include "../libmej/debug.h" |
||||
#include "../libmej/mem.h" |
||||
#include "../libmej/strings.h" |
||||
#include "debug.h" |
||||
#include "draw.h" |
||||
#include "misc.h" |
||||
#include "pixmap.h" |
||||
#include "startup.h" |
||||
|
||||
void |
||||
draw_shadow(Window win, GC gc_top, GC gc_bottom, int x, int y, int w, int h, int shadow) |
||||
{ |
||||
|
||||
ASSERT(w != 0); |
||||
ASSERT(h != 0); |
||||
LOWER_BOUND(shadow, 1); |
||||
|
||||
for (w += x - 1, h += y - 1; shadow > 0; shadow--, w--, h--) { |
||||
XDrawLine(Xdisplay, win, gc_top, x, y, w, y); |
||||
XDrawLine(Xdisplay, win, gc_top, x, y, x, h); |
||||
x++; y++; |
||||
XDrawLine(Xdisplay, win, gc_bottom, w, h, w, y); |
||||
XDrawLine(Xdisplay, win, gc_bottom, w, h, x, h); |
||||
} |
||||
} |
||||
|
||||
void |
||||
draw_arrow(Window win, GC gc_top, GC gc_bottom, int x, int y, int w, int shadow, unsigned char type) |
||||
{ |
||||
|
||||
BOUND(shadow, 1, 2); |
||||
|
||||
switch (type) { |
||||
case DRAW_ARROW_UP: |
||||
for (; shadow > 0; shadow--, x++, y++, w--) { |
||||
XDrawLine(Xdisplay, win, gc_top, x, y + w, x + w / 2, y); |
||||
XDrawLine(Xdisplay, win, gc_bottom, x + w, y + w, x + w / 2, y); |
||||
XDrawLine(Xdisplay, win, gc_bottom, x + w, y + w, x, y + w); |
||||
} |
||||
break; |
||||
case DRAW_ARROW_DOWN: |
||||
for (; shadow > 0; shadow--, x++, y++, w--) { |
||||
XDrawLine(Xdisplay, win, gc_top, x, y, x + w / 2, y + w); |
||||
XDrawLine(Xdisplay, win, gc_top, x, y, x + w, y); |
||||
XDrawLine(Xdisplay, win, gc_bottom, x + w, y, x + w / 2, y + w); |
||||
} |
||||
break; |
||||
case DRAW_ARROW_LEFT: |
||||
for (; shadow > 0; shadow--, x++, y++, w--) { |
||||
XDrawLine(Xdisplay, win, gc_bottom, x + w, y + w, x + w, y); |
||||
XDrawLine(Xdisplay, win, gc_bottom, x + w, y + w, x, y + w / 2); |
||||
XDrawLine(Xdisplay, win, gc_top, x, y + w / 2, x + w, y); |
||||
} |
||||
break; |
||||
case DRAW_ARROW_RIGHT: |
||||
for (; shadow > 0; shadow--, x++, y++, w--) { |
||||
XDrawLine(Xdisplay, win, gc_top, x, y, x, y + w); |
||||
XDrawLine(Xdisplay, win, gc_top, x, y, x + w, y + w / 2); |
||||
XDrawLine(Xdisplay, win, gc_bottom, x, y + w, x + w, y + w / 2); |
||||
} |
||||
break; |
||||
default: |
||||
break; |
||||
} |
||||
} |
||||
|
||||
void |
||||
draw_box(Window win, GC gc_top, GC gc_bottom, int x, int y, int w, int h) |
||||
{ |
||||
XDrawLine(Xdisplay, win, gc_top, x + w, y, x, y); |
||||
XDrawLine(Xdisplay, win, gc_top, x, y, x, y + h); |
||||
XDrawLine(Xdisplay, win, gc_bottom, x, y + h, x + w, y + h); |
||||
XDrawLine(Xdisplay, win, gc_bottom, x + w, y + h, x + w, y); |
||||
} |
@ -0,0 +1,54 @@ |
||||
/*
|
||||
* Copyright (C) 1999-1997, Michael Jennings |
||||
* |
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy |
||||
* of this software and associated documentation files (the "Software"), to |
||||
* deal in the Software without restriction, including without limitation the |
||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
||||
* sell copies of the Software, and to permit persons to whom the Software is |
||||
* furnished to do so, subject to the following conditions: |
||||
* |
||||
* The above copyright notice and this permission notice shall be included in |
||||
* all copies of the Software, its documentation and marketing & publicity |
||||
* materials, and acknowledgment shall be given in the documentation, materials |
||||
* and software packages that this Software was used. |
||||
* |
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL |
||||
* THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER |
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
||||
*/ |
||||
|
||||
#ifndef _DRAW_H_ |
||||
#define _DRAW_H_ |
||||
|
||||
#include <X11/Xfuncproto.h> |
||||
#include <X11/Intrinsic.h> /* Xlib, Xutil, Xresource, Xfuncproto */ |
||||
|
||||
/************ Macros and Definitions ************/ |
||||
#define DRAW_ARROW_UP (1UL << 0) |
||||
#define DRAW_ARROW_DOWN (1UL << 1) |
||||
#define DRAW_ARROW_LEFT (1UL << 2) |
||||
#define DRAW_ARROW_RIGHT (1UL << 3) |
||||
|
||||
#define draw_uparrow_raised(win, g1, g2, x, y, w, s) draw_arrow(win, g1, g2, x, y, w, s, DRAW_ARROW_UP) |
||||
#define draw_uparrow_clicked(win, g1, g2, x, y, w, s) draw_arrow(win, g2, g1, x, y, w, s, DRAW_ARROW_UP) |
||||
#define draw_downarrow_raised(win, g1, g2, x, y, w, s) draw_arrow(win, g1, g2, x, y, w, s, DRAW_ARROW_DOWN) |
||||
#define draw_downarrow_clicked(win, g1, g2, x, y, w, s) draw_arrow(win, g2, g1, x, y, w, s, DRAW_ARROW_DOWN) |
||||
|
||||
/************ Structures ************/ |
||||
|
||||
/************ Variables ************/ |
||||
|
||||
/************ Function Prototypes ************/ |
||||
_XFUNCPROTOBEGIN |
||||
|
||||
extern void draw_shadow(Window win, GC gc_top, GC gc_bottom, int x, int y, int w, int h, int shadow); |
||||
extern void draw_arrow(Window win, GC gc_top, GC gc_bottom, int x, int y, int w, int shadow, unsigned char type); |
||||
extern void draw_box(Window win, GC gc_top, GC gc_bottom, int x, int y, int w, int h); |
||||
|
||||
_XFUNCPROTOEND |
||||
|
||||
#endif /* _DRAW_H_ */ |