Saturday, September 20, 2014

Making a window draggable in Java

In Java generally a frame has a border which gives the window the drag functionality. So, in custom windows, if we remove the border, we will lose the drag function.

We can enable that drag functionality using the MouseListener and MouseMotionListener interfaces of Java API. Following is and example code depicting the usage where NewJFrame is the class of the Java Frame:


class MoveMouseListener implements MouseListener, MouseMotionListener {
 NewJFrame target;
 Point start_drag;
 Point start_loc;

 public MoveMouseListener(NewJFrame target) {
  this.target = target;
 }

 public static JFrame getFrame(Container target) {
  if (target instanceof JFrame) {
    return (JFrame) target;
  }
  return getFrame(target.getParent());
 }

 Point getScreenLocation(MouseEvent e) {
  Point cursor = e.getPoint();
  Point target_location = this.target.getLocationOnScreen();
  return new Point((int) (target_location.getX() + cursor.getX()),
   (int) (target_location.getY() + cursor.getY()));
 }

 public void mouseClicked(MouseEvent e) {
 }

 public void mouseEntered(MouseEvent e) {
 }

 public void mouseExited(MouseEvent e) {
 }

 public void mousePressed(MouseEvent e) {
  this.start_drag = this.getScreenLocation(e);
  this.start_loc = this.getFrame(this.target).getLocation();
 }

 public void mouseReleased(MouseEvent e) {
 }

 public void mouseDragged(MouseEvent e) {
  Point current = this.getScreenLocation(e);
  Point offset = new Point((int) current.getX() - (int) start_drag.getX(),
   (int) current.getY() - (int) start_drag.getY());
  JFrame frame = this.getFrame(target);
  Point new_location = new Point(
   (int) (this.start_loc.getX() + offset.getX()), (int) (this.start_loc
    .getY() + offset.getY()));
  frame.setLocation(new_location);
 }

 public void mouseMoved(MouseEvent e) {
 }
}

Sunday, June 8, 2014

Gtk3.0 for Windows : Learning to contribute

Contacted the community about how to start to contribute to GTK+ for windows and in the rply, I was asked to compile the GTK+ bundle. Probably upto Gtk+3.6.4, there were no important glitches so, I compiled that easily. Link to get the archive is : http://www.tarnyko.net/repo/gtk3_build_system/

There's a readme that tells how to do that. I got that easily and reported back about my work. 
One thing to note is that, its missed to mention in readme that we have to copy all the folders, except bin, of archive to our new folder, for my case: C:\gtk .

Then, I proceded to successing versions i.e 3.8 and 3.10. The 3.8 version compiled fine. But 3.10 has glitches. 

When I ran the first command i.e pkg-config, I got the following error: 


C:\gtk10>pkg-config --cflags gtk+-3.0
Package gtk+-3.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `gtk+-3.0.pc'
to the PKG_CONFIG_PATH environment variable
No package 'gtk+-3.0' found


It occurs when the bin folder is not added to the path (but, I had already added). So, there's a bug here (I think). 

Tried to find the source code, but was unable to find. So have asked community for help to get the source.