15 Commits
Author SHA1 Message Date
NotAlexNoyle c334cf8312 Update canonical Gitea link 2026-11-03 10:48:47 -05:00
NotAlexNoyle 9e42799b2f Rework for successful build on FreeBSD 2022-05-12 00:12:41 -04:00
RonnyDo 9c9ac86520 Fix travis build problem 2020-05-10 03:18:25 +02:00
RonnyDo a56546d42a Fix build error 2020-05-10 02:51:04 +02:00
RonnyDo 7bc46bd78f add editorconfig 2020-05-03 02:04:56 +02:00
RonnyDo 10bfe6637d Merge branch 'master' of https://github.com/RonnyDo/ColorPicker 2020-05-03 02:03:49 +02:00
RonnyDo 0c069a94b6 update changelog 2020-05-03 02:03:01 +02:00
RonnyDo c169c75744 Update README.md 2020-05-03 01:28:27 +02:00
RonnyDo c1cd137825 Merge pull request #76 from clappingmonkey/master
Add Bulgarian translation.
2020-05-03 01:25:02 +02:00
clappingmonkey 03a97c55cc add file for bulgarian; edit and add bg in LINGUAS. 2020-02-17 12:25:23 +02:00
RonnyDo ed24697961 code refactoring 2020-01-05 00:18:12 +01:00
RonnyDo 6ae6ec8825 correct copy icon 2020-01-04 23:15:52 +01:00
RonnyDo 9853a843d3 Merge pull request #74 from ryonakano/fix-deprecations
Fix deprecations
2020-01-04 22:53:22 +01:00
Ryo Nakano fefbcb7b04 Fix deprecations 2020-01-03 13:21:50 +09:00
RonnyDo c042a00abd add batches 2020-01-02 22:26:58 +01:00
12 changed files with 179 additions and 112 deletions

No files matched your search

+16
View File
@@ -0,0 +1,16 @@
# EditorConfig <https://EditorConfig.org>
root = true
# elementary defaults
[*]
charset = utf-8
end_of_line = lf
indent_size = tab
indent_style = space
insert_final_newline = true
max_line_length = 80
tab_width = 4
# Markup files
[{*.html,*.xml,*.xml.in,*.yml}]
tab_width = 2
+1 -1
View File
@@ -3,7 +3,7 @@
language: node_js
node_js:
- 10/*
- 10.17.0
sudo: required
+12 -7
View File
@@ -1,7 +1,11 @@
[![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)
# Color Picker
One Color Picker to rule them all! No overhelming menus or settings. An easy tool with the features you need.
This fork has been verified to build on FreeBSD 13.1.
Features:
* Pick a color with the zoomable Magnifier
* Choose between multiple Color Formats
@@ -19,7 +23,7 @@ On elementaryOS? Simply install Color Picker from AppCenter:
For other Debian-based systems, you can download and install the [latest .deb file](https://github.com/ronnydo/colorpicker/releases/latest).
For other systems, you will need to compile the package yourself. See the instructions below.
For FreeBSD (and other systems), you will need to compile the package yourself. See the instructions below.
## Build from source
If you like to build ColorPicker yourself, take a look at the [`dev-build.sh`](dev-build.sh) file.
@@ -27,18 +31,19 @@ If you like to build ColorPicker yourself, take a look at the [`dev-build.sh`](d
### Dependencies
You'll need the following dependencies to compile ColorPicker:
* granite
* libgtk-3-dev
* meson
* valac
* vala
* ninja
### Example
Here's a sample list of commands for building the package from source. These have been tested to work correctly on Ubuntu 18.04.
Here's a sample list of commands for building the package from source. These have been tested to work correctly on FreeBSD 13.1.
```sh
sudo apt install valac libgranite-dev
git clone https://github.com/RonnyDo/ColorPicker.git
```bash
sudo pkg install vala granite meson ninja
git clone https://git.trueog.net/NotAlexNoyle/ColorPicker
cd ColorPicker/
chmod +x dev-build.sh
./dev-build.sh
Enter your sudo password when prompted.
```
@@ -22,16 +22,31 @@
<category>Development</category>
</categories>
<releases>
​<release version="1.1.5" date="2020-05-10" urgency="low">
​ <description>
<ul>
<li>Fix travis build problem</li>
</ul>
</description>
​</release>
​<release version="1.1.4" date="2020-05-03" urgency="low">
​ <description>
<ul>
<li>Added Bulgarian translation (kudos to @clappingmonkey)</li>
</ul>
</description>
​</release>
​<release version="1.1.3" date="2020-01-02" urgency="medium">
​ <description>
<ul>
<li>Added Polish translation (kudos to @michalzkosmosu)</li>
<li>Added Dutch translation (kudos to @Vistaus)</li>
<li>Added Turkish translation (kudos to @ibrakap)</li>
<li>Added Turkish translation (kudos to @onderbakirtas )</li>
<li>Fix build integration (kudos to @meisenzahl)</li>
</ul>
</description>
​</release>
​<release version="1.1.2" date="2019-01-02" urgency="medium">
​ <description>
<ul>
+12 -1
View File
@@ -1,3 +1,15 @@
com.github.ronnydo.colorpicker (1.1.5) bionic; urgency=low
* Fix travis build problem
-- Ronny Dobra <ronnydobra@arcor.de> Thu, 10 May 2020 03:31:00 +0100
com.github.ronnydo.colorpicker (1.1.4) bionic; urgency=low
* Added Bulgarian translation (kudos to @clappingmonkey)
-- Ronny Dobra <ronnydobra@arcor.de> Thu, 03 May 2020 00:31:00 +0100
com.github.ronnydo.colorpicker (1.1.3) bionic; urgency=medium
* Added Polish translation (kudos to @michalzkosmosu)
@@ -7,7 +19,6 @@ com.github.ronnydo.colorpicker (1.1.3) bionic; urgency=medium
-- Ronny Dobra <ronnydobra@arcor.de> Thu, 02 Jan 2020 20:31:00 +0100
com.github.ronnydo.colorpicker (1.1.2) bionic; urgency=medium
* Juno Release!!1! (finally)
+7 -2
View File
@@ -1,11 +1,16 @@
#!/usr/local/bin/bash
sudo rm -r build
meson build
cd build
meson configure -Dprefix=/usr
ninja
sudo cp ../data/com.github.ronnydo.colorpicker.gschema.xml /usr/share/glib-2.0/schemas/
sudo glib-compile-schemas /usr/share/glib-2.0/schemas/
sudo cp ../data/com.github.ronnydo.colorpicker.gschema.xml /usr/local/share/glib-2.0/schemas/
sudo glib-compile-schemas /usr/local/share/glib-2.0/schemas/
G_MESSAGES_DEBUG=all ./com.github.ronnydo.colorpicker
echo "Enter your sudo password to elevate privilages for the installation..."
sudo meson install
cd ..
+5
View File
@@ -6,6 +6,11 @@ project('com.github.ronnydo.colorpicker', ['vala', 'c'],
gnome = import('gnome')
i18n = import('i18n')
add_project_arguments(
'-DGETTEXT_PACKAGE="@0@"'.format(meson.project_name()),
language: 'c'
)
conf = configuration_data()
conf.set_quoted('GETTEXT_PACKAGE', meson.project_name())
configure_file(output: 'config.h', configuration: conf)
+1
View File
@@ -1,3 +1,4 @@
bg
ca
de
es
+33
View File
@@ -0,0 +1,33 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the com.github.danrabbit.nimbus package.
# clappingmonkey <clappingmonkey33@gmail.com>, 2020.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: com.github.ronnydo.colorpicker\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-06-21 20:40-0700\n"
"PO-Revision-Date: 2020-02-17 13:00+0300\n"
"Last-Translator: clappingmonkey <clappingmonkey@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: Bulgarian\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
msgid "Color Picker"
msgstr "Color Picker"
msgid "Pick Color"
msgstr "Избери Цвят"
msgid "Format"
msgstr "Формат"
msgid "Color History"
msgstr "История"
+7 -8
View File
@@ -75,7 +75,7 @@ namespace ColorPicker {
var format_entry = new Gtk.Entry ();
format_entry.placeholder_text = ext_active_color.to_css_rgb_string ();
format_entry.set_editable (false);
format_entry.set_icon_from_icon_name (Gtk.EntryIconPosition.SECONDARY, "edit-copy");
format_entry.set_icon_from_icon_name (Gtk.EntryIconPosition.SECONDARY, "edit-copy-symbolic");
format_entry.margin_end = 6;
var color_format_combobox = new Gtk.ComboBoxText ();
@@ -170,8 +170,8 @@ namespace ColorPicker {
this.present ();
});
var win = mouse_position.get_window ();
//var win = mouse_position.get_window ();
mouse_position.picked.connect ((t, color) => {
ext_active_color = (ExtRGBA) color;
color_area.set_color (ext_active_color);
@@ -203,17 +203,16 @@ namespace ColorPicker {
Gtk.Clipboard.get_default (this.get_display ()).set_text (format_entry.get_text (), -1);
}
});
//color_format_combobox.changed.connect (color_format_changed);
color_format_combobox.changed.connect (() => {
int id = color_format_combobox.get_active ();
update_color_format_combobox_text (format_entry, id);
ColorPicker.settings.color_format_index = id;
});
// handle changed color in color history
color_history.color_clicked.connect ((t, color) => {
ext_active_color = (ExtRGBA) color;
+1 -1
View File
@@ -180,7 +180,7 @@ namespace ColorPicker.Widgets {
ctx.rel_line_to (triangle_width / 2, -1 * triangle_height);
ctx.rel_line_to (triangle_width / 2, triangle_height);
ctx.close_path ();
Gdk.cairo_set_source_rgba (ctx, style_context.get_background_color(Gtk.StateFlags.NORMAL));
Gdk.cairo_set_source_rgba (ctx, style_context.get_color (Gtk.StateFlags.NORMAL));
ctx.fill ();
+68 -91
View File
@@ -29,7 +29,7 @@ namespace ColorPicker.Widgets {
public signal void moved (Gdk.RGBA color);
const string dark_border_color_string = "#333333";
private Gdk.RGBA dark_border_color = Gdk.RGBA();
private Gdk.RGBA dark_border_color = Gdk.RGBA();
const string bright_border_color_string = "#FFFFFF";
private Gdk.RGBA bright_border_color = Gdk.RGBA();
@@ -44,16 +44,17 @@ namespace ColorPicker.Widgets {
// and https://github.com/RonnyDo/ColorPicker/issues/19
int snapsize = 31;
int min_zoomlevel = 2;
int max_zoomlevel = 7;
int max_zoomlevel = 14;
//int max_zoomlevel = 7;
int zoomlevel = 3;
int shadow_width = 15;
private Gdk.Cursor magnifier = null;
construct {
type = Gtk.WindowType.POPUP;
}
public Picker () {
stick ();
@@ -61,22 +62,24 @@ namespace ColorPicker.Widgets {
set_deletable (false);
set_skip_taskbar_hint (true);
set_skip_pager_hint (true);
set_keep_above (true);
dark_border_color.parse (dark_border_color_string);
set_keep_above (true);
dark_border_color.parse (dark_border_color_string);
bright_border_color.parse (bright_border_color_string);
// restore zoomlevel
if (settings.zoomlevel >= min_zoomlevel && settings.zoomlevel <= max_zoomlevel) {
zoomlevel = settings.zoomlevel;
}
var screen = get_screen ();
set_default_size (screen.get_width (), screen.get_height ());
}
var display = Gdk.Display.get_default ();
Gdk.Monitor monitor = display.get_primary_monitor ();
Gdk.Rectangle geom = monitor.get_geometry ();
set_default_size (geom.width, geom.height);
}
public override bool button_release_event (Gdk.EventButton e) {
// button_1 is left mouse button
if (e.button == 1) {
@@ -89,24 +92,24 @@ namespace ColorPicker.Widgets {
return true;
}
public override bool draw (Cairo.Context cr) {
public override bool draw (Cairo.Context cr) {
return false;
}
public override bool motion_notify_event (Gdk.EventMotion e) {
Gdk.RGBA color = get_color_at ((int) e.x_root, (int) e.y_root);
moved (color);
set_magnifier_cursor ();
return true;
return true;
}
public override bool scroll_event (Gdk.EventScroll e) {
switch (e.direction) {
case Gdk.ScrollDirection.UP:
@@ -130,25 +133,26 @@ namespace ColorPicker.Widgets {
public void set_magnifier_cursor () {
// draw cursor
var manager = Gdk.Display.get_default ().get_default_seat ();
// get cursor position
int px, py;
get_pointer (out px, out py);
get_window ().get_device_position (manager.get_pointer (), out px, out py, null);
var radius = snapsize * zoomlevel / 2;
// take screenshot
var latest_pb = snap (px - snapsize / 2, py - snapsize / 2, snapsize, snapsize);
// get a small area (snap) meant to be zoomed
var snapped_pixbuf = snap (px - snapsize / 2, py - snapsize / 2, snapsize, snapsize);
// Zoom that screenshot up, and grab a snapsize-sized piece from the middle
var scaled_pb = latest_pb.scale_simple (snapsize * zoomlevel + shadow_width * 2 , snapsize * zoomlevel + shadow_width * 2 , Gdk.InterpType.NEAREST);
var scaled_pb = snapped_pixbuf.scale_simple (snapsize * zoomlevel + shadow_width * 2 , snapsize * zoomlevel + shadow_width * 2 , Gdk.InterpType.NEAREST);
// Create the base surface for our cursor
var base_surface = new Cairo.ImageSurface (Cairo.Format.ARGB32, snapsize * zoomlevel + shadow_width * 2 , snapsize * zoomlevel + shadow_width * 2);
var base_context = new Cairo.Context (base_surface);
// Create the circular path on our base surface
base_context.arc (radius + shadow_width, radius + shadow_width, radius, 0, 2 * Math.PI);
@@ -158,10 +162,10 @@ namespace ColorPicker.Widgets {
// Clip to that circular path, keeping the path around for later, and paint the pasted screenshot
base_context.save ();
base_context.clip_preserve ();
base_context.paint ();
base_context.paint ();
base_context.restore ();
// Draw a shadow as outside magnifier border
double shadow_alpha = 0.6;
base_context.set_line_width (1);
@@ -202,33 +206,21 @@ namespace ColorPicker.Widgets {
base_context.stroke ();
// turn the base surface into a pixbuf and thence a cursor
var drawn_pb = Gdk.pixbuf_get_from_surface(base_surface, 0, 0, base_surface.get_width(), base_surface.get_height());
magnifier = new Gdk.Cursor.from_pixbuf(
magnifier = new Gdk.Cursor.from_surface(
get_screen ().get_display (),
drawn_pb,
drawn_pb.get_width () / 2,
drawn_pb.get_height () / 2);
/*
uint max_cursor_width, max_cursor_height, default_cursor_width, default_cursor_height;;
get_screen ().get_display ().get_maximal_cursor_size (out max_cursor_width, out max_cursor_height);
print ("\n\nCursor size is " + drawn_pb.get_width().to_string () + "x" + drawn_pb.get_height().to_string ());
print ("\nAllowed size is " + max_cursor_width.to_string () + "x" + max_cursor_height.to_string ());
print ("\nDefault size is " + get_screen ().get_display ().get_default_cursor_size ().to_string ());
*/
// Set the cursor
var manager = Gdk.Display.get_default ().get_device_manager ();
manager.get_client_pointer ().grab (
base_surface,
base_surface.get_width () / 2,
base_surface.get_height () / 2);
// Set the cursor
manager.grab (
get_window (),
Gdk.GrabOwnership.APPLICATION,
Gdk.SeatCapabilities.ALL,
true,
Gdk.EventMask.BUTTON_PRESS_MASK | Gdk.EventMask.POINTER_MOTION_MASK | Gdk.EventMask.SCROLL_MASK,
magnifier,
Gdk.CURRENT_TIME);
new Gdk.Event (Gdk.EventType.BUTTON_PRESS | Gdk.EventType.MOTION_NOTIFY | Gdk.EventType.SCROLL),
null);
}
@@ -241,10 +233,10 @@ namespace ColorPicker.Widgets {
public override bool key_press_event (Gdk.EventKey e) {
var manager = Gdk.Display.get_default ().get_default_seat ();
int px, py;
get_pointer (out px, out py);
var manager = Gdk.Display.get_default ().get_device_manager ();
get_window ().get_device_position (manager.get_pointer (), out px, out py, null);
switch (e.keyval) {
case Gdk.Key.Escape:
cancelled ();
@@ -254,16 +246,16 @@ namespace ColorPicker.Widgets {
picked (color);
break;
case Gdk.Key.Up:
manager.get_client_pointer ().warp (get_screen (), px, py - 1);
manager.get_pointer ().warp (get_screen (), px, py - 1);
break;
case Gdk.Key.Down:
manager.get_client_pointer ().warp (get_screen (), px, py + 1);
manager.get_pointer ().warp (get_screen (), px, py + 1);
break;
case Gdk.Key.Left:
manager.get_client_pointer ().warp (get_screen (), px - 1, py);
manager.get_pointer ().warp (get_screen (), px - 1, py);
break;
case Gdk.Key.Right:
manager.get_client_pointer ().warp (get_screen (), px + 1, py);
manager.get_pointer ().warp (get_screen (), px + 1, py);
break;
}
@@ -297,38 +289,23 @@ namespace ColorPicker.Widgets {
public override void show_all () {
base.show_all ();
var manager = Gdk.Display.get_default ().get_device_manager ();
var pointer = manager.get_client_pointer ();
var keyboard = pointer.get_associated_device ();
var manager = Gdk.Display.get_default ().get_default_seat ();
var window = get_window ();
var status = pointer.grab (window,
Gdk.GrabOwnership.NONE,
var status = manager.grab (window,
Gdk.SeatCapabilities.ALL,
false,
Gdk.EventMask.BUTTON_PRESS_MASK | Gdk.EventMask.BUTTON_RELEASE_MASK | Gdk.EventMask.POINTER_MOTION_MASK,
new Gdk.Cursor.for_display (window.get_display (), Gdk.CursorType.CROSSHAIR),
Gtk.get_current_event_time ());
new Gdk.Event (Gdk.EventType.BUTTON_PRESS | Gdk.EventType.BUTTON_RELEASE | Gdk.EventType.MOTION_NOTIFY),
null);
if (status != Gdk.GrabStatus.SUCCESS) {
pointer.ungrab (Gtk.get_current_event_time ());
manager.ungrab ();
}
// show magnifier
set_magnifier_cursor ();
if (keyboard != null) {
status = keyboard.grab (window,
Gdk.GrabOwnership.NONE,
false,
Gdk.EventMask.KEY_PRESS_MASK,
null,
Gtk.get_current_event_time ());
if (status != Gdk.GrabStatus.SUCCESS) {
keyboard.ungrab (Gtk.get_current_event_time ());
}
}
}
public new void close () {